From: Spider Boardman Date: Sun, 29 Aug 1999 03:02:11 +0000 (-0400) Subject: sub : attrlist X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=09bef84370e90d727656ea11ba5ee8be80e361d3;p=p5sagit%2Fp5-mst-13.2.git sub : attrlist To: Mailing list Perl5 Message-Id: <199908290702.DAA32191@Orb.Nashua.NH.US> p4raw-id: //depot/cfgperl@4043 --- diff --git a/MANIFEST b/MANIFEST index 746c4a2..f5ea95c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -640,6 +640,7 @@ lib/User/grent.pm By-name interface to Perl's builtin getgr* lib/User/pwent.pm By-name interface to Perl's builtin getpw* lib/abbrev.pl An abbreviation table builder lib/assert.pl assertion and panic with stack trace +lib/attributes.pm For "sub foo : attrlist" lib/autouse.pm Load and call a function only when it's used lib/base.pm Establish IS-A relationship at compile time lib/bigfloat.pl An arbitrary precision floating point package @@ -1117,6 +1118,7 @@ t/io/read.t See if read works t/io/tell.t See if file seeking works t/lib/abbrev.t See if Text::Abbrev works t/lib/anydbm.t See if AnyDBM_File works +t/lib/attrs.t See if attrs works with C t/lib/autoloader.t See if AutoLoader works t/lib/basename.t See if File::Basename works t/lib/bigfloat.t See if bigfloat.pl works @@ -1218,6 +1220,7 @@ t/op/append.t See if . works t/op/arith.t See if arithmetic works t/op/array.t See if array operations work t/op/assignwarn.t See if OP= operators warn correctly for undef targets +t/op/attrs.t See if attributes on declarations work t/op/auto.t See if autoincrement et all work t/op/avhv.t See if pseudo-hashes work t/op/bop.t See if bitops work @@ -1496,3 +1499,4 @@ x2p/str.h Public declarations for the above x2p/util.c Utility routines x2p/util.h Public declarations for the above x2p/walk.c Parse tree walker +xsutils.c Additional bundled package methods not in UNIVERSAL:: diff --git a/Makefile.SH b/Makefile.SH index 73a9b6f..e7fb039 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -231,13 +231,14 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5) c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c -c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c globals.c perlio.c +c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c +c4 = globals.c perlio.c -c = $(c1) $(c2) $(c3) miniperlmain.c perlmain.c +c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) -obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) +obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) diff --git a/embed.h b/embed.h index a8b80ec..1d33518 100644 --- a/embed.h +++ b/embed.h @@ -749,6 +749,11 @@ #define tmps_grow Perl_tmps_grow #define sv_rvweaken Perl_sv_rvweaken #define magic_killbackrefs Perl_magic_killbackrefs +#define newANONATTRSUB Perl_newANONATTRSUB +#define newATTRSUB Perl_newATTRSUB +#define newMYSUB Perl_newMYSUB +#define my_attrs Perl_my_attrs +#define boot_core_xsutils Perl_boot_core_xsutils #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -803,6 +808,9 @@ #define gv_ename S_gv_ename #define cv_clone2 S_cv_clone2 #define scalar_mod_type S_scalar_mod_type +#define my_kid S_my_kid +#define dup_attrlist S_dup_attrlist +#define apply_attrs S_apply_attrs # if defined(PL_OP_SLAB_ALLOC) #define Slab_Alloc S_Slab_Alloc # endif @@ -991,6 +999,9 @@ #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup S_isa_lookup #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#define modify_SV_attributes S_modify_SV_attributes +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define mess_alloc S_mess_alloc # if defined(LEAKTEST) @@ -2065,6 +2076,11 @@ #define tmps_grow(a) Perl_tmps_grow(aTHX_ a) #define sv_rvweaken(a) Perl_sv_rvweaken(aTHX_ a) #define magic_killbackrefs(a,b) Perl_magic_killbackrefs(aTHX_ a,b) +#define newANONATTRSUB(a,b,c,d) Perl_newANONATTRSUB(aTHX_ a,b,c,d) +#define newATTRSUB(a,b,c,d,e) Perl_newATTRSUB(aTHX_ a,b,c,d,e) +#define newMYSUB(a,b,c,d,e) Perl_newMYSUB(aTHX_ a,b,c,d,e) +#define my_attrs(a,b) Perl_my_attrs(aTHX_ a,b) +#define boot_core_xsutils() Perl_boot_core_xsutils(aTHX) #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -2119,6 +2135,9 @@ #define gv_ename(a) S_gv_ename(aTHX_ a) #define cv_clone2(a,b) S_cv_clone2(aTHX_ a,b) #define scalar_mod_type(a,b) S_scalar_mod_type(aTHX_ a,b) +#define my_kid(a,b) S_my_kid(aTHX_ a,b) +#define dup_attrlist(a) S_dup_attrlist(aTHX_ a) +#define apply_attrs(a,b,c) S_apply_attrs(aTHX_ a,b,c) # if defined(PL_OP_SLAB_ALLOC) #define Slab_Alloc(a,b) S_Slab_Alloc(aTHX_ a,b) # endif @@ -2272,7 +2291,7 @@ #define scan_ident(a,b,c,d,e) S_scan_ident(aTHX_ a,b,c,d,e) #define scan_inputsymbol(a) S_scan_inputsymbol(aTHX_ a) #define scan_pat(a,b) S_scan_pat(aTHX_ a,b) -#define scan_str(a) S_scan_str(aTHX_ a) +#define scan_str(a,b,c) S_scan_str(aTHX_ a,b,c) #define scan_subst(a) S_scan_subst(aTHX_ a) #define scan_trans(a) S_scan_trans(aTHX_ a) #define scan_word(a,b,c,d,e) S_scan_word(aTHX_ a,b,c,d,e) @@ -2306,6 +2325,9 @@ #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d) #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#define modify_SV_attributes(a,b,c,d) S_modify_SV_attributes(aTHX_ a,b,c,d) +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define mess_alloc() S_mess_alloc(aTHX) # if defined(LEAKTEST) @@ -4072,6 +4094,16 @@ #define sv_rvweaken Perl_sv_rvweaken #define Perl_magic_killbackrefs CPerlObj::Perl_magic_killbackrefs #define magic_killbackrefs Perl_magic_killbackrefs +#define Perl_newANONATTRSUB CPerlObj::Perl_newANONATTRSUB +#define newANONATTRSUB Perl_newANONATTRSUB +#define Perl_newATTRSUB CPerlObj::Perl_newATTRSUB +#define newATTRSUB Perl_newATTRSUB +#define Perl_newMYSUB CPerlObj::Perl_newMYSUB +#define newMYSUB Perl_newMYSUB +#define Perl_my_attrs CPerlObj::Perl_my_attrs +#define my_attrs Perl_my_attrs +#define Perl_boot_core_xsutils CPerlObj::Perl_boot_core_xsutils +#define boot_core_xsutils Perl_boot_core_xsutils #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -4167,6 +4199,12 @@ #define cv_clone2 S_cv_clone2 #define S_scalar_mod_type CPerlObj::S_scalar_mod_type #define scalar_mod_type S_scalar_mod_type +#define S_my_kid CPerlObj::S_my_kid +#define my_kid S_my_kid +#define S_dup_attrlist CPerlObj::S_dup_attrlist +#define dup_attrlist S_dup_attrlist +#define S_apply_attrs CPerlObj::S_apply_attrs +#define apply_attrs S_apply_attrs # if defined(PL_OP_SLAB_ALLOC) #define S_Slab_Alloc CPerlObj::S_Slab_Alloc #define Slab_Alloc S_Slab_Alloc @@ -4501,6 +4539,10 @@ #define S_isa_lookup CPerlObj::S_isa_lookup #define isa_lookup S_isa_lookup #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#define S_modify_SV_attributes CPerlObj::S_modify_SV_attributes +#define modify_SV_attributes S_modify_SV_attributes +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define S_mess_alloc CPerlObj::S_mess_alloc #define mess_alloc S_mess_alloc diff --git a/embed.pl b/embed.pl index ef8fc80..0543c0f 100755 --- a/embed.pl +++ b/embed.pl @@ -1753,6 +1753,11 @@ p |void |sv_force_normal|SV *sv p |void |tmps_grow |I32 n p |SV* |sv_rvweaken |SV *sv p |int |magic_killbackrefs|SV *sv|MAGIC *mg +p |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block +p |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |OP * |my_attrs |OP *o|OP *attrs +p |void |boot_core_xsutils #if defined(PERL_OBJECT) protected: @@ -1816,6 +1821,9 @@ s |bool |is_handle_constructor |OP *o|I32 argnum s |char* |gv_ename |GV *gv s |CV* |cv_clone2 |CV *proto|CV *outside s |bool |scalar_mod_type|OP *o|I32 type +s |OP * |my_kid |OP *o|OP *attrs +s |OP * |dup_attrlist |OP *o +s |void |apply_attrs |HV *stash|SV *target|OP *attrs # if defined(PL_OP_SLAB_ALLOC) s |void* |Slab_Alloc |int m|size_t sz # endif @@ -1986,7 +1994,7 @@ s |char* |scan_ident |char *s|char *send|char *dest \ |STRLEN destlen|I32 ck_uni s |char* |scan_inputsymbol|char *start s |char* |scan_pat |char *start|I32 type -s |char* |scan_str |char *start +s |char* |scan_str |char *start|int keep_quoted|int keep_delims s |char* |scan_subst |char *start s |char* |scan_trans |char *start s |char* |scan_word |char *s|char *dest|STRLEN destlen \ @@ -2024,6 +2032,10 @@ s |I32 |win32_textfilter |int idx|SV *sv|int maxlen s |SV*|isa_lookup |HV *stash|const char *name|int len|int level #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +s |int|modify_SV_attributes|SV *sv|SV **retlist|SV **attrlist|int numattrs +#endif + #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) s |SV* |mess_alloc # if defined(LEAKTEST) diff --git a/global.sym b/global.sym index 7379173..5ee74d7 100644 --- a/global.sym +++ b/global.sym @@ -666,3 +666,8 @@ Perl_sv_force_normal Perl_tmps_grow Perl_sv_rvweaken Perl_magic_killbackrefs +Perl_newANONATTRSUB +Perl_newATTRSUB +Perl_newMYSUB +Perl_my_attrs +Perl_boot_core_xsutils diff --git a/gv.c b/gv.c index 41a66b5..ae76f82 100644 --- a/gv.c +++ b/gv.c @@ -677,6 +677,10 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) } } break; + case 'V': + if (strEQ(name, "VERSION")) + GvMULTI_on(gv); + break; case '&': if (len > 1) diff --git a/lib/AutoSplit.pm b/lib/AutoSplit.pm index 33c0b9a..feecd58 100644 --- a/lib/AutoSplit.pm +++ b/lib/AutoSplit.pm @@ -11,7 +11,7 @@ use vars qw( $Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime ); -$VERSION = "1.0303"; +$VERSION = "1.0304"; @ISA = qw(Exporter); @EXPORT = qw(&autosplit &autosplit_lib_modules); @EXPORT_OK = qw($Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime); @@ -147,6 +147,13 @@ if (defined (&Dos::UseLFN)) { } my $Is_VMS = ($^O eq 'VMS'); +# allow checking for valid ': attrlist' attachments +my $nested; +$nested = qr{ \( (?: (?> [^()]+ ) | (?p{ $nested }) )* \) }x; +my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) [\s,]* }x; +my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x; + + sub autosplit{ my($file, $autodir, $keep, $ckal, $ckmt) = @_; @@ -289,7 +296,7 @@ sub autosplit_file { if (/^package\s+([\w:]+)\s*;/) { $this_package = $def_package = $1; } - if (/^sub\s+([\w:]+)(\s*\(.*?\))?/) { + if (/^sub\s+([\w:]+)(\s*(?:\(.*?\))?(?:$attr_list)?)/) { print OUT "# end of $last_package\::$subname\n1;\n" if $last_package; $subname = $1; @@ -459,3 +466,6 @@ sub test6 { return join ":", __FILE__,__LINE__; } package Yet::Another::AutoSplit; sub testtesttesttest4_1 ($) { "another test 4\n"; } sub testtesttesttest4_2 ($$) { "another duplicate test 4\n"; } +package Yet::More::Attributes; +sub test_a1 ($) : locked { 1; } +sub test_a2 : locked { 1; } diff --git a/lib/SelfLoader.pm b/lib/SelfLoader.pm index c4e9175..4672ac4 100644 --- a/lib/SelfLoader.pm +++ b/lib/SelfLoader.pm @@ -3,12 +3,18 @@ package SelfLoader; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(AUTOLOAD); -$VERSION = "1.08"; +$VERSION = "1.09"; sub Version {$VERSION} $DEBUG = 0; my %Cache; # private cache for all SelfLoader's client packages +# allow checking for valid ': attrlist' attachments +my $nested; +$nested = qr{ \( (?: (?> [^()]+ ) | (?p{ $nested }) )* \) }x; +my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) [\s,]* }x; +my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x; + sub croak { require Carp; goto &Carp::croak } AUTOLOAD { @@ -50,7 +56,7 @@ sub _load_stubs { local($/) = "\n"; while(defined($line = <$fh>) and $line !~ m/^__END__/) { - if ($line =~ m/^sub\s+([\w:]+)\s*(\([\\\$\@\%\&\*\;]*\))?/) { + if ($line =~ m/^sub\s+([\w:]+)\s*((?:\([\\\$\@\%\&\*\;]*\))?(?:$attr_list)?)/) { push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype)); $protoype = $2; @lines = ($line); diff --git a/lib/attributes.pm b/lib/attributes.pm new file mode 100644 index 0000000..e49204f --- /dev/null +++ b/lib/attributes.pm @@ -0,0 +1,379 @@ +package attributes; + +$VERSION = 0.01; + +#@EXPORT_OK = qw(get reftype); +#@EXPORT = (); + +use strict; + +sub croak { + require Carp; + goto &Carp::croak; +} + +sub carp { + require Carp; + goto &Carp::carp; +} + +## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{} +#sub reftype ($) ; +#sub _fetch_attrs ($) ; +#sub _guess_stash ($) ; +#sub _modify_attrs ; +#sub _warn_reserved () ; +# +# The extra trips through newATTRSUB in the interpreter wipe out any savings +# from avoiding the BEGIN block. Just do the bootstrap now. +BEGIN { bootstrap } + +sub import { + @_ > 2 && ref $_[2] or + croak 'Usage: use '.__PACKAGE__.' $home_stash, $ref, @attrlist'; + my (undef,$home_stash,$svref,@attrs) = @_; + + my $svtype = uc reftype($svref); + my $pkgmeth; + $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES") + if defined $home_stash && $home_stash ne ''; + my @badattrs; + if ($pkgmeth) { + my @pkgattrs = _modify_attrs($svref, @attrs); + @badattrs = $pkgmeth->($home_stash, $svref, @attrs); + if (!@badattrs && @pkgattrs) { + return unless _warn_reserved; + @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs; + if (@pkgattrs) { + for my $attr (@pkgattrs) { + $attr =~ s/\(.+\z//s; + } + my $s = ((@pkgattrs == 1) ? '' : 's'); + carp "$svtype package attribute$s " . + "may clash with future reserved word$s: " . + join(' , ' , @pkgattrs); + } + } + } + else { + @badattrs = _modify_attrs($svref, @attrs); + } + if (@badattrs) { + croak "Invalid $svtype attribute" . + (( @badattrs == 1 ) ? '' : 's') . + ": " . + join(' , ', @badattrs); + } +} + +sub get ($) { + @_ == 1 && ref $_[0] or + croak 'Usage: '.__PACKAGE__.'::get $ref'; + my $svref = shift; + my $svtype = uc reftype $svref; + my $stash = _guess_stash $svref; + $stash = caller unless defined $stash; + my $pkgmeth; + $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES") + if defined $stash && $stash ne ''; + return $pkgmeth ? + (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) : + (_fetch_attrs($svref)) + ; +} + +#sub export { +# require Exporter; +# goto &Exporter::import; +#} +# +#sub require_version { goto &UNIVERSAL::VERSION } + +1; +__END__ +#The POD goes here + +=head1 NAME + +attributes - get/set subroutine or variable attributes + +=head1 SYNOPSIS + + sub foo : method ; + my ($x,@y,%z) : Bent ; + my $s = sub : method { ... }; + + use attributes (); # optional, to get subroutine declarations + my @attrlist = attributes::get(\&foo); + +=head1 DESCRIPTION + +Subroutine declarations and definitions may optionally have attribute lists +associated with them. (Variable C declarations also may, but see the +warning below.) Perl handles these declarations by passing some information +about the call site and the thing being declared along with the attribute +list to this module. In particular, first example above is equivalent to +the following: + + use attributes __PACKAGE__, \&foo, 'method'; + +The second example in the synopsis does something equivalent to this: + + use attributes __PACKAGE__, \$x, 'Bent'; + use attributes __PACKAGE__, \@y, 'Bent'; + use attributes __PACKAGE__, \%z, 'Bent'; + +Yes, that's three invocations. + +B: attribute declarations for variables are an I +feature. The semantics of such declarations could change or be removed +in future versions. They are present for purposes of experimentation +with what the semantics ought to be. Do not rely on the current +implementation of this feature. + +There are only a few attributes currently handled by Perl itself (or +directly by this module, depending on how you look at it.) However, +package-specific attributes are allowed by an extension mechanism. +(See L<"Package-specific Attribute Handling"> below.) + +The setting of attributes happens at compile time. An attempt to set +an unrecognized attribute is a fatal error. (The error is trappable, but +it still stops the compilation within that C.) Setting an attribute +with a name that's all lowercase letters that's not a built-in attribute +(such as "foo") +will result in a warning with B<-w> or C. + +=head2 Built-in Attributes + +The following are the built-in attributes for subroutines: + +=over 4 + +=item locked + +Setting this attribute is only meaningful when the subroutine or +method is to be called by multiple threads. When set on a method +subroutine (i.e., one marked with the B attribute below), +Perl ensures that any invocation of it implicitly locks its first +argument before execution. When set on a non-method subroutine, +Perl ensures that a lock is taken on the subroutine itself before +execution. The semantics of the lock are exactly those of one +explicitly taken with the C operator immediately after the +subroutine is entered. + +=item method + +Indicates that the referenced subroutine is a method. +This has a meaning when taken together with the B attribute, +as described there. It also means that a subroutine so marked +will not trigger the "Ambiguous call resolved as CORE::%s" warning. + +=back + +There are no built-in attributes for anything other than subroutines. + +=head2 Available Subroutines + +The following subroutines are available for general use once this module +has been loaded: + +=over 4 + +=item get + +This routine expects a single parameter--a reference to a +subroutine or variable. It returns a list of attributes, which may be +empty. If passed invalid arguments, it uses die() (via L) +to raise a fatal exception. If it can find an appropriate package name +for a class method lookup, it will include the results from a +C_ATTRIBUTES> call in its return list, as described in +L"Package-specific Attribute Handling"> below. +Otherwise, only L will be returned. + +=item reftype + +This routine expects a single parameter--a reference to a subroutine or +variable. It returns the built-in type of the referenced variable, +ignoring any package into which it might have been blessed. +This can be useful for determining the I value which forms part of +the method names described in L"Package-specific Attribute Handling"> below. + +=back + +Note that these routines are I exported. This is primarily because +the C mechanism which would normally import them is already in use +by Perl itself to implement the C syntax. + +=head2 Package-specific Attribute Handling + +B: the mechanisms described here are still experimental. Do not +rely on the current implementation. In particular, there is no provision +for applying package attributes to 'cloned' copies of subroutines used as +closures. (See L for information on closures.) +Package-specific attribute handling may change incompatibly in a future +release. + +When an attribute list is present in a declaration, a check is made to see +whether an attribute 'modify' handler is present in the appropriate package +(or its @ISA inheritance tree). Similarly, when C is +called on a valid reference, a check is made for an appropriate attribute +'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package" +determination works. + +The handler names are based on the underlying type of the variable being +declared or of the reference passed. Because these attributes are +associated with subroutine or variable declarations, this deliberately +ignores any possibility of being blessed into some package. Thus, a +subroutine declaration uses "CODE" as its I, and even a blessed +hash reference uses "HASH" as its I. + +The class methods invoked for modifying and fetching are these: + +=over 4 + +=item FETCH_I_ATTRIBUTES + +This method receives a single argument, which is a reference to the +variable or subroutine for which package-defined attributes are desired. +The expected return value is a list of associated attributes. +This list may be empty. + +=item MODIFY_I_ATTRIBUTES + +This method is called with two fixed arguments, followed by the list of +attributes from the relevant declaration. The two fixed arguments are +the relevant package name and a reference to the declared subroutine or +variable. The expected return value as a list of attributes which were +not recognized by this handler. Note that this allows for a derived class +to delegate a call to its base class, and then only examine the attributes +which the base class didn't already handle for it. + +The call to this method is currently made I the processing of the +declaration. In particular, this means that a subroutine reference will +probably be for an undefined subroutine, even if this declaration is +actually part of the definition. + +=back + +Calling C from within the scope of a null package +declaration C for an unblessed variable reference will +not provide any starting package name for the 'fetch' method lookup. +Thus, this circumstance will not result in a method call for package-defined +attributes. A named subroutine knows to which symbol table entry it belongs +(or originally belonged), and it will use the corresponding package. +An anonymous subroutine knows the package name into which it was compiled +(unless it was also compiled with a null package declaration), and so it +will use that package name. + +=head2 Syntax of Attribute Lists + +An attribute list is a sequence of attribute specifications, separated by +whitespace, commas, or both. Each attribute specification is a simple +name, optionally followed by a parenthesised parameter list. +If such a parameter list is present, it is scanned past as for the rules +for the C operator. (See L.) +The parameter list is passed as it was found, however, and not as per C. + +Some examples of syntactically valid attribute lists: + + switch(10,foo(7,3)) , , expensive + Ugly('\(") , Bad + _5x5 + locked method + +Some examples of syntactically invalid attribute lists (with annotation): + + switch(10,foo() # ()-string not balanced + Ugly('(') # ()-string not balanced + 5x5 # "5x5" not a valid identifier + Y2::north # "Y2::north" not a simple identifier + foo + bar # "+" neither a comma nor whitespace + +=head1 EXAMPLES + +Here are some samples of syntactically valid declarations, with annotation +as to how they resolve internally into C invocations by +perl. These examples are primarily useful to see how the "appropriate +package" is found for the possible method lookups for package-defined +attributes. + +=over 4 + +=item 1. + +Code: + + package Canine; + package Dog; + my Canine $spot : Watchful ; + +Effect: + + use attributes Canine => \$spot, "Watchful"; + +=item 2. + +Code: + + package Felis; + my $cat : Nervous; + +Effect: + + use attributes Felis => \$cat, "Nervous"; + +=item 3. + +Code: + + package X; + sub foo : locked ; + +Effect: + + use attributes X => \&foo, "locked"; + +=item 4. + +Code: + + package X; + sub Y::x : locked { 1 } + +Effect: + + use attributes Y => \&Y::x, "locked"; + +=item 5. + +Code: + + package X; + sub foo { 1 } + + package Y; + BEGIN { *bar = \&X::foo; } + + package Z; + sub Y::bar : locked ; + +Effect: + + use attributes X => \&X::foo, "locked"; + +=back + +This last example is purely for purposes of completeness. You should not +be trying to mess with the attributes of something in a package that's +not your own. + +=head1 SEE ALSO + +L and +L for details on the basic declarations; +L for the obsolescent form of subroutine attribute specification +which this module replaces; +L for details on the normal invocation mechanism. + +=cut + diff --git a/objXSUB.h b/objXSUB.h index 2423f58..e7b34b1 100644 --- a/objXSUB.h +++ b/objXSUB.h @@ -3509,6 +3509,26 @@ #define Perl_magic_killbackrefs pPerl->Perl_magic_killbackrefs #undef magic_killbackrefs #define magic_killbackrefs Perl_magic_killbackrefs +#undef Perl_newANONATTRSUB +#define Perl_newANONATTRSUB pPerl->Perl_newANONATTRSUB +#undef newANONATTRSUB +#define newANONATTRSUB Perl_newANONATTRSUB +#undef Perl_newATTRSUB +#define Perl_newATTRSUB pPerl->Perl_newATTRSUB +#undef newATTRSUB +#define newATTRSUB Perl_newATTRSUB +#undef Perl_newMYSUB +#define Perl_newMYSUB pPerl->Perl_newMYSUB +#undef newMYSUB +#define newMYSUB Perl_newMYSUB +#undef Perl_my_attrs +#define Perl_my_attrs pPerl->Perl_my_attrs +#undef my_attrs +#define my_attrs Perl_my_attrs +#undef Perl_boot_core_xsutils +#define Perl_boot_core_xsutils pPerl->Perl_boot_core_xsutils +#undef boot_core_xsutils +#define boot_core_xsutils Perl_boot_core_xsutils #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -3564,6 +3584,8 @@ #endif #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) # if defined(LEAKTEST) # endif diff --git a/op.c b/op.c index e99ef60..42ed8b2 100644 --- a/op.c +++ b/op.c @@ -1576,8 +1576,60 @@ Perl_ref(pTHX_ OP *o, I32 type) } -OP * -Perl_my(pTHX_ OP *o) +STATIC OP * +S_dup_attrlist(pTHX_ OP *o) +{ + OP *rop = Nullop; + + /* An attrlist is either a simple OP_CONST or an OP_LIST with kids, + * where the first kid is OP_PUSHMARK and the remaining ones + * are OP_CONST. We need to push the OP_CONST values. + */ + if (o->op_type == OP_CONST) + rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv)); + else { + assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS)); + for (o = cLISTOPo->op_first; o; o=o->op_sibling) { + if (o->op_type == OP_CONST) + rop = append_elem(OP_LIST, rop, + newSVOP(OP_CONST, o->op_flags, + SvREFCNT_inc(cSVOPo->op_sv))); + } + } + return rop; +} + +STATIC void +S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs) +{ + OP *modname; /* for 'use' */ + SV *stashsv; + + /* fake up C */ + ENTER; /* need to protect against side-effects of 'use' */ + SAVEINT(PL_expect); + if (stash && HvNAME(stash)) + stashsv = newSVpv(HvNAME(stash), 0); + else + stashsv = &PL_sv_no; +#define ATTRSMODULE "attributes" + modname = newSVOP(OP_CONST, 0, + newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1)); + modname->op_private |= OPpCONST_BARE; + /* that flag is required to make 'use' work right */ + utilize(1, start_subparse(FALSE, 0), + Nullop, /* version */ + modname, + prepend_elem(OP_LIST, + newSVOP(OP_CONST, 0, stashsv), + prepend_elem(OP_LIST, + newSVOP(OP_CONST, 0, newRV(target)), + dup_attrlist(attrs)))); + LEAVE; +} + +STATIC OP * +S_my_kid(pTHX_ OP *o, OP *attrs) { OP *kid; I32 type; @@ -1588,7 +1640,7 @@ Perl_my(pTHX_ OP *o) type = o->op_type; if (type == OP_LIST) { for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) - my(kid); + my_kid(kid, attrs); } else if (type == OP_UNDEF) { return o; } else if (type != OP_PADSV && @@ -1599,12 +1651,44 @@ Perl_my(pTHX_ OP *o) yyerror(Perl_form(aTHX_ "Can't declare %s in my", PL_op_desc[o->op_type])); return o; } + else if (attrs && type != OP_PUSHMARK) { + HV *stash; + SV *padsv; + SV **namesvp; + + /* check for C when deciding package */ + namesvp = av_fetch(PL_comppad_name, o->op_targ, FALSE); + if (namesvp && *namesvp && SvOBJECT(*namesvp) && HvNAME(SvSTASH(*namesvp))) + stash = SvSTASH(*namesvp); + else + stash = PL_curstash; + padsv = PAD_SV(o->op_targ); + apply_attrs(stash, padsv, attrs); + } o->op_flags |= OPf_MOD; o->op_private |= OPpLVAL_INTRO; return o; } OP * +Perl_my_attrs(pTHX_ OP *o, OP *attrs) +{ + if (o->op_flags & OPf_PARENS) + list(o); + PL_in_my = FALSE; + PL_in_my_stash = Nullhv; + if (attrs) + SAVEFREEOP(attrs); + return my_kid(o, attrs); +} + +OP * +Perl_my(pTHX_ OP *o) +{ + return my_kid(o, Nullop); +} + +OP * Perl_sawparens(pTHX_ OP *o) { if (o) @@ -2807,9 +2891,10 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg) } /* Fake up the BEGIN {}, which does its thing immediately. */ - newSUB(floor, + newATTRSUB(floor, newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)), Nullop, + Nullop, append_elem(OP_LINESEQ, append_elem(OP_LINESEQ, newSTATEOP(0, Nullch, rqop), @@ -3896,14 +3981,35 @@ Perl_op_const_sv(pTHX_ OP *o, CV *cv) return sv; } +void +Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ + if (o) + SAVEFREEOP(o); + if (proto) + SAVEFREEOP(proto); + if (attrs) + SAVEFREEOP(attrs); + if (block) + SAVEFREEOP(block); + Perl_croak(aTHX_ "\"my sub\" not yet implemented"); +} + CV * Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) { + return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block); +} + +CV * +Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ dTHR; STRLEN n_a; char *name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch; GV *gv = gv_fetchpv(name ? name : "__ANON__", - GV_ADDMULTI | (block ? 0 : GV_NOINIT), SVt_PVCV); + GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT), + SVt_PVCV); char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch; register CV *cv=0; I32 ix; @@ -3912,8 +4018,10 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) SAVEFREEOP(o); if (proto) SAVEFREEOP(proto); + if (attrs) + SAVEFREEOP(attrs); - if (SvTYPE(gv) != SVt_PVGV) { /* Prototype now, and had + if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at maximum a prototype before. */ if (SvTYPE(gv) > SVt_NULL) { if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1) @@ -3941,7 +4049,7 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) { SV* const_sv; bool const_changed = TRUE; - if (!block) { + if (!block && !attrs) { /* just a "sub foo;" when &foo is already defined */ SAVEFREESV(PL_compcv); goto done; @@ -3949,6 +4057,8 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) /* ahem, death to those who redefine active sort subs */ if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv)) Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name); + if (!block) + goto withattrs; if(const_sv = cv_const_sv(cv)) const_changed = sv_cmp(const_sv, op_const_sv(block, Nullcv)); if ((const_sv && const_changed) || ckWARN(WARN_REDEFINE) @@ -3960,14 +4070,46 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) PL_curcop->cop_line = PL_copline; Perl_warner(aTHX_ WARN_REDEFINE, const_sv ? "Constant subroutine %s redefined" - : "Subroutine %s redefined", name); + : "Subroutine %s redefined", name); PL_curcop->cop_line = oldline; } SvREFCNT_dec(cv); cv = Nullcv; } } + withattrs: + if (attrs) { + HV *stash; + SV *rcv; + + /* Need to do a C + * before we clobber PL_compcv. + */ + if (cv && !block) { + rcv = (SV*)cv; + if (CvGV(cv) && GvSTASH(CvGV(cv)) && HvNAME(GvSTASH(CvGV(cv)))) + stash = GvSTASH(CvGV(cv)); + else if (CvSTASH(cv) && HvNAME(CvSTASH(cv))) + stash = CvSTASH(cv); + else + stash = PL_curstash; + } + else { + /* possibly about to re-define existing subr -- ignore old cv */ + rcv = (SV*)PL_compcv; + if (name && GvSTASH(gv) && HvNAME(GvSTASH(gv))) + stash = GvSTASH(gv); + else + stash = PL_curstash; + } + apply_attrs(stash, rcv, attrs); + } if (cv) { /* must reuse cv if autoloaded */ + if (!block) { + /* got here with just attrs -- work done, so bug out */ + SAVEFREESV(PL_compcv); + goto done; + } cv_undef(cv); CvFLAGS(cv) = CvFLAGS(PL_compcv); CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv); @@ -4155,10 +4297,11 @@ Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv) if(stash) PL_curstash = PL_curcop->cop_stash = stash; - newSUB( + newATTRSUB( start_subparse(FALSE, 0), newSVOP(OP_CONST, 0, newSVpv(name,0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + Nullop, newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); @@ -4311,8 +4454,15 @@ Perl_newANONHASH(pTHX_ OP *o) OP * Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block) { + return newANONATTRSUB(floor, proto, Nullop, block); +} + +OP * +Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block) +{ return newUNOP(OP_REFGEN, 0, - newSVOP(OP_ANONCODE, 0, (SV*)newSUB(floor, 0, proto, block))); + newSVOP(OP_ANONCODE, 0, + (SV*)newATTRSUB(floor, 0, proto, attrs, block))); } OP * diff --git a/perl.c b/perl.c index a5816a9..3c3a629 100644 --- a/perl.c +++ b/perl.c @@ -926,6 +926,7 @@ print \" \\@INC:\\n @INC\\n\";"); CvPADLIST(PL_compcv) = comppadlist; boot_core_UNIVERSAL(); + boot_core_xsutils(); if (xsinit) (*xsinit)(aTHXo); /* in case linked C routines want magical variables */ diff --git a/perl.h b/perl.h index 678cef5..5d84aec 100644 --- a/perl.h +++ b/perl.h @@ -2429,6 +2429,8 @@ typedef enum { XREF, XSTATE, XBLOCK, + XATTRBLOCK, + XATTRTERM, XTERMBLOCK } expectation; diff --git a/perlapi.c b/perlapi.c index f409754..1945146 100755 --- a/perlapi.c +++ b/perlapi.c @@ -4779,6 +4779,41 @@ Perl_magic_killbackrefs(pTHXo_ SV *sv, MAGIC *mg) { return ((CPerlObj*)pPerl)->Perl_magic_killbackrefs(sv, mg); } + +#undef Perl_newANONATTRSUB +OP* +Perl_newANONATTRSUB(pTHXo_ I32 floor, OP *proto, OP *attrs, OP *block) +{ + return ((CPerlObj*)pPerl)->Perl_newANONATTRSUB(floor, proto, attrs, block); +} + +#undef Perl_newATTRSUB +CV* +Perl_newATTRSUB(pTHXo_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ + return ((CPerlObj*)pPerl)->Perl_newATTRSUB(floor, o, proto, attrs, block); +} + +#undef Perl_newMYSUB +void +Perl_newMYSUB(pTHXo_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ + ((CPerlObj*)pPerl)->Perl_newMYSUB(floor, o, proto, attrs, block); +} + +#undef Perl_my_attrs +OP * +Perl_my_attrs(pTHXo_ OP *o, OP *attrs) +{ + return ((CPerlObj*)pPerl)->Perl_my_attrs(o, attrs); +} + +#undef Perl_boot_core_xsutils +void +Perl_boot_core_xsutils(pTHXo) +{ + ((CPerlObj*)pPerl)->Perl_boot_core_xsutils(); +} #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -4834,6 +4869,8 @@ Perl_magic_killbackrefs(pTHXo_ SV *sv, MAGIC *mg) #endif #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) # if defined(LEAKTEST) # endif diff --git a/perly.c b/perly.c index 37af6da..e1458d8 100644 --- a/perly.c +++ b/perly.c @@ -7,6 +7,10 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define PERL_IN_PERLY_C #include "perl.h" +#define dep() deprecate("\"do\" to call subroutines") + +/* stuff included here to make perly_c.diff apply better */ + #define yydebug PL_yydebug #define yynerrs PL_yynerrs #define yyerrflag PL_yyerrflag @@ -14,1117 +18,1116 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define yyval PL_yyval #define yylval PL_yylval -#define dep() deprecate("\"do\" to call subroutines") +struct ysv { + short* yyss; + YYSTYPE* yyvs; + int oldyydebug; + int oldyynerrs; + int oldyyerrflag; + int oldyychar; + YYSTYPE oldyyval; + YYSTYPE oldyylval; +}; static void yydestruct(pTHXo_ void *ptr); -#line 27 "perly.y" +#line 49 "perly.y" +#if 0 /* get this from perly.h instead */ +#line 52 "perly.y" +typedef union { + I32 ival; + char *pval; + OP *opval; + GV *gvval; +} YYSTYPE; +#line 60 "perly.y" +#endif /* 0 */ + +#ifdef USE_PURE_BISON +#define YYLEX_PARAM (&yychar) +#endif + +#line 51 "perly.c" #define YYERRCODE 256 -static short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, - 13, 13, 13, 13, 27, 27, 28, 28, 29, 30, - 31, 32, 33, 45, 45, 1, 1, 1, 1, 3, - 39, 39, 47, 4, 5, 6, 40, 41, 41, 42, - 42, 48, 48, 50, 49, 16, 16, 16, 26, 26, - 26, 37, 37, 37, 37, 37, 37, 37, 37, 51, - 37, 38, 38, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, +static short yylhs[] = { -1, + 50, 0, 8, 6, 9, 7, 10, 10, 10, 11, + 11, 11, 11, 24, 24, 24, 24, 24, 24, 24, + 14, 14, 14, 13, 13, 42, 42, 12, 12, 12, + 12, 12, 12, 12, 26, 26, 27, 27, 28, 29, + 30, 31, 32, 49, 49, 1, 1, 1, 1, 1, + 2, 38, 38, 46, 51, 3, 4, 5, 39, 40, + 40, 44, 44, 44, 45, 45, 41, 41, 52, 52, + 54, 53, 15, 15, 15, 25, 25, 25, 36, 36, + 36, 36, 36, 36, 36, 36, 55, 36, 37, 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 34, 34, 35, 35, 35, 2, 2, 44, - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, + 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 47, 47, 48, 48, 48, 48, 48, 33, 33, 34, + 34, 34, 43, 23, 18, 19, 20, 21, 22, 35, + 35, 35, 35, }; -static short yylen[] = { 2, +static short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, 9, 8, 11, 3, 0, 1, 0, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, - 1, 0, 5, 0, 0, 0, 1, 0, 1, 1, - 1, 3, 2, 0, 7, 3, 3, 1, 2, 3, - 1, 3, 5, 6, 3, 3, 5, 2, 4, 0, - 5, 1, 1, 5, 4, 5, 4, 5, 6, 5, - 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 3, 2, 4, 3, 4, 1, 1, 1, 1, 1, - 1, 6, 5, 4, 5, 1, 1, 3, 4, 3, - 2, 2, 4, 5, 4, 5, 1, 2, 2, 1, - 2, 2, 2, 1, 3, 1, 3, 4, 4, 6, - 1, 1, 0, 1, 0, 1, 2, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 4, 1, 0, 6, 6, 0, 0, 0, 1, 0, + 1, 0, 2, 1, 2, 1, 1, 1, 3, 2, + 0, 7, 3, 3, 1, 2, 3, 1, 3, 5, + 6, 3, 3, 5, 2, 4, 0, 5, 1, 1, + 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 3, 2, 3, 2, + 4, 3, 5, 1, 1, 1, 1, 1, 1, 6, + 5, 4, 5, 1, 1, 3, 4, 3, 2, 2, + 4, 5, 4, 5, 1, 2, 2, 1, 2, 2, + 2, 1, 3, 1, 3, 4, 4, 6, 1, 1, + 3, 2, 3, 2, 1, 1, 1, 0, 1, 0, + 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, }; -static short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, - 64, 14, 4, 161, 0, 0, 136, 0, 156, 0, - 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 128, 130, 0, 0, 0, 0, 162, - 51, 0, 57, 0, 62, 0, 7, 177, 180, 179, - 178, 0, 0, 0, 0, 0, 0, 4, 4, 4, - 4, 4, 4, 0, 0, 0, 0, 0, 151, 0, - 0, 0, 0, 78, 0, 175, 0, 142, 0, 0, - 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 0, 172, 173, 174, 176, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, +static short yydefred[] = { 1, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 4, 169, 0, 0, 144, + 0, 164, 0, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 50, 59, - 0, 0, 0, 76, 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 4, 155, 157, 0, 0, 0, - 0, 0, 0, 0, 124, 0, 140, 0, 0, 121, - 27, 0, 0, 19, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, - 94, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 61, 60, 53, 0, 3, 0, 0, 159, 0, - 125, 0, 42, 0, 43, 0, 0, 0, 0, 170, - 0, 0, 36, 41, 0, 0, 0, 158, 167, 79, - 0, 143, 0, 145, 0, 123, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 93, 87, 0, 85, 0, - 134, 0, 139, 0, 77, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 144, 146, 133, 0, - 0, 0, 92, 86, 0, 90, 88, 135, 84, 65, - 160, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 89, 74, 7, 28, 29, 0, 0, 24, 25, - 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, - 5, 0, 30, 0, 0, 33, 0, 23, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 136, 138, 0, 0, 0, + 0, 170, 125, 52, 0, 59, 0, 69, 0, 0, + 7, 190, 193, 192, 191, 0, 0, 0, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, + 0, 0, 159, 0, 0, 0, 0, 85, 0, 188, + 0, 150, 0, 0, 0, 0, 0, 0, 0, 175, + 177, 176, 0, 184, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 0, 185, 186, 187, 189, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 51, 61, 0, + 0, 0, 0, 83, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 4, 163, 165, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 148, 174, 0, 0, + 171, 0, 0, 129, 27, 0, 0, 19, 0, 0, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, + 0, 90, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 167, 0, 0, 0, 42, 0, 43, 0, + 0, 0, 0, 183, 0, 0, 36, 41, 0, 0, + 0, 166, 182, 86, 0, 151, 0, 153, 0, 131, + 173, 65, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 100, 94, 0, 92, 0, 142, 0, 147, 63, + 68, 67, 55, 0, 54, 84, 0, 88, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 152, 154, + 141, 0, 0, 0, 99, 93, 0, 97, 95, 143, + 91, 72, 168, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 140, 96, 81, 7, 28, 29, 0, 0, + 24, 25, 0, 32, 0, 0, 0, 22, 0, 0, + 0, 31, 5, 0, 30, 0, 0, 33, 0, 23, }; -static short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, - 74, 75, 76, 77, 273, 79, 274, 263, 265, 268, - 276, 264, 266, 114, 200, 92, 80, 239, 82, 84, - 181, 254, 143, 271, 13, 2, 14, 15, 16, 86, - 260, +static short yydgoto[] = { 1, + 10, 11, 20, 100, 19, 91, 366, 94, 355, 3, + 12, 13, 70, 371, 281, 72, 73, 74, 75, 76, + 77, 78, 79, 287, 81, 288, 277, 279, 282, 290, + 278, 280, 118, 210, 96, 82, 253, 85, 87, 190, + 323, 152, 285, 267, 221, 14, 83, 133, 15, 2, + 16, 17, 18, 89, 274, }; -static short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, - 0, 0, 0, 0, -24, -24, 0, -5, 0, 2126, - 0, 0, 6, 28, 44, 57, -32, 2126, 68, 69, - 72, 999, 943, -24, 1062, 1327, -198, 0, 0, -24, - 2126, 2126, 2126, 2126, 2126, 2126, 1233, 1383, 0, 2126, - 2126, -24, -24, -24, -24, 2126, -217, 0, 342, 827, - -20, -80, -70, 0, 0, -60, 73, 61, 75, 0, - 0, -1, 0, -137, 0, -130, 0, 0, 0, 0, - 0, 2126, 88, 2126, -189, -1, -137, 0, 0, 0, - 0, 0, 0, 89, 827, 99, 1444, 943, 0, -189, - 0, -80, 75, 0, 2126, 0, 90, 0, -189, -16, - 27, -58, 2126, 0, 75, 218, 218, 218, -169, -169, - 63, -22, 0, -63, 218, 218, 0, 0, 0, 0, - -189, -1, 0, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 0, 0, 74, 2126, 1535, 2126, - 2126, 2126, 2126, 2126, 2126, 1725, 0, 2126, 0, 0, - -44, -91, 256, 0, 2126, 428, 0, -1, 2126, 2126, - 2126, 2126, 131, 1800, 0, 0, 0, -12, 36, 130, - 2126, 75, 1861, 1936, 0, 48, 0, 2126, 87, 0, - 0, -272, -272, 0, -272, -272, -272, -119, 0, 1565, - -189, 1088, 375, 160, 827, 715, 389, 771, 684, 1026, - 1242, 218, 218, 2126, 0, 2006, 2126, 0, 143, -56, - 0, 1, 51, -49, 56, 43, 58, 45, 0, 7, - 827, 0, 0, 0, 2126, 0, 141, 2126, 0, 2126, - 0, -272, 0, 144, 0, 145, -272, 151, 158, 0, - 162, 342, 0, 0, 166, 150, 2126, 0, 0, 0, - 9, 0, 16, 0, 19, 0, 60, 2126, 2126, 47, - 0, 21, 94, 2126, 78, 0, 0, 91, 0, 95, - 0, 101, 0, 153, 0, 268, 0, 92, 92, 92, - 92, 2126, 92, 2126, 188, 0, 0, 0, 0, 96, - 1152, 109, 0, 0, 196, 0, 0, 0, 0, 0, - 0, 0, -217, -217, -204, -204, 198, -217, 185, 92, - 0, 0, 0, 0, 0, 0, 92, 211, 0, 0, - 92, 0, 1800, -217, 319, 0, 2126, -217, 216, 0, - 0, 228, 0, 92, 92, 0, -204, 0, +static short yysindex[] = { 0, + 0, 0, -199, 0, 0, 0, -53, 0, 0, 0, + 0, 0, 0, 0, 646, 0, 0, 0, -217, -207, + 44, 0, 0, -207, 0, 0, 0, -32, -32, 0, + 66, 0, 2177, 0, 0, 69, 83, 93, 110, -35, + 2177, 119, 121, 136, 1013, 973, -32, 1077, 1344, -146, + 2177, 68, -32, 2177, 2177, 2177, 2177, 2177, 2177, 1384, + 1424, 0, 2177, 2177, -32, -32, -32, -32, -152, 0, + 470, 845, -13, -65, -63, 0, 0, 55, 137, 122, + 138, 0, 0, 0, 60, 0, -70, 0, -66, -70, + 0, 0, 0, 0, 0, 2177, 146, 2177, 1085, 60, + -70, 0, 0, 0, 0, 0, 0, 152, 845, 153, + 1464, 973, 0, 1085, 0, -65, 138, 0, 2177, 0, + 160, 0, 1085, 2, 76, -52, 2177, 1085, 1524, 0, + 0, 0, -96, 0, 138, -181, -181, -181, -112, -112, + 123, -38, 0, -74, -181, -181, 0, 0, 0, 0, + 60, 0, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 0, 0, -16, 2177, 1731, 2177, 2177, + 2177, 2177, 2177, 2177, 1791, 0, 2177, 0, 0, -88, + -34, -88, 339, 0, 2177, 287, 0, -88, 2177, 2177, + 2177, 2177, 173, 1850, 0, 0, 0, -33, 46, 180, + 2177, 138, 1910, 2025, 0, 97, 0, 0, -31, -29, + 0, 2177, 133, 0, 0, -237, -237, 0, -237, -237, + -237, -69, 0, 1614, 1085, 684, 167, 107, 845, 3800, + 1125, 405, 1164, 778, -228, -181, -181, 2177, 0, 2117, + 2177, 0, 197, -48, 0, -9, -72, -45, -7, -42, + 56, -36, 0, -4, 845, -10, -47, 2177, -47, 0, + 216, 2177, 0, 2177, 60, -237, 0, 219, 0, 230, + -237, 233, 237, 0, 242, 470, 0, 0, 246, 225, + 2177, 0, 0, 0, 13, 0, 18, 0, 29, 0, + 0, 0, 61, 2177, 2177, 54, 0, 32, 63, 2177, + 165, 0, 0, 174, 0, 178, 0, 191, 0, 0, + 0, 0, 0, 261, 0, 0, 350, 0, 0, 182, + 182, 182, 182, 2177, 182, 2177, 281, 0, 0, 0, + 0, 102, 1237, 202, 0, 0, 294, 0, 0, 0, + 0, 0, 0, 0, -152, -152, -130, -130, 297, -152, + 290, 182, 0, 0, 0, 0, 0, 0, 182, 318, + 0, 0, 182, 0, 1850, -152, 407, 0, 2177, -152, + 324, 0, 0, 326, 0, 182, 182, 0, -130, 0, }; -static short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, +static short yyrindex[] = { 0, + 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 2214, 0, - 0, 2264, 2308, 0, 0, 0, 0, 0, 0, 0, + 36, 451, 0, 0, 2208, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 0, -18, 1030, - 2383, 2433, 2561, 0, 0, 2636, 2686, 0, 918, 0, - 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, - 0, 2308, 0, 0, 3879, 0, 165, 0, 0, 0, - 0, 0, 0, 0, 1356, 0, 0, 232, 0, 3936, - 502, 561, 3047, 0, 0, 0, 2730, 0, 3987, 2433, - 0, 0, 2308, 0, 3096, 3236, 3300, 3436, 1656, 3186, - 2780, 0, 0, 0, 3487, 3550, 0, 0, 0, 0, - 4025, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + -12, 939, 2325, 2385, 2463, 0, 0, 2510, 2561, 0, + 1220, 0, 0, 0, 0, 0, -44, 0, 0, -44, + 0, 0, 0, 0, 0, 2271, 0, 0, 3846, 0, + -105, 0, 0, 0, 0, 0, 0, 0, 2612, 0, + 0, 327, 0, 3883, 522, 583, 3032, 0, 0, 0, + 2621, 0, 3893, 2385, 0, 0, 2271, 3930, 0, 0, + 0, 0, 2667, 0, 3092, 3374, 3418, 3458, 3219, 3331, + 2746, 0, 0, 0, 3496, 3567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2828, 0, 0, - 0, 0, 887, 0, 232, 0, 0, 0, 242, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 249, 0, - 0, 3142, 0, 0, 0, 0, 0, 0, 2889, 0, - 0, -4, 10, 0, 11, 17, 24, 363, 0, -27, - 664, 3890, 3686, 3737, 1507, 0, 4291, 4188, 4155, 4035, - 3842, 3586, 3623, 0, 0, 0, 0, 0, 2983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1640, 0, 0, 0, 233, 0, 0, 0, 0, 2308, - 0, 37, 0, 0, 0, 0, 262, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2797, 0, 0, -23, + 0, -23, 913, 0, 327, 0, 0, 247, 336, 0, + 0, 0, 0, 333, 0, 0, 0, 0, 352, 0, + 0, 3138, 0, 0, 0, 0, 0, 0, 0, 2857, + 0, 0, 2903, 0, 0, -8, -2, 0, 7, 33, + 42, 2255, 0, -28, 3968, 1822, 3732, 3769, 3023, 0, + 4119, 4082, 4021, 4005, 1044, 3610, 3694, 0, 0, 0, + 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3657, -21, 0, 345, 0, 0, + 0, 0, 0, 2271, 0, 71, 0, 0, 0, 0, + 364, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, - -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105, 105, 168, 168, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 105, 887, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, + 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 115, 175, 175, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 374, 115, 913, 0, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, }; -static short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, - 0, 0, 0, 0, 340, -38, 0, 0, 215, -138, - 14, 97, 190, -85, -179, 583, 0, 0, 0, 0, - 286, 0, -140, 0, 0, 0, 0, 0, 0, 0, - 0, +static short yygindex[] = { 0, + 0, 0, 164, 383, 0, 14, 0, 37, 655, -89, + 0, 0, 0, -336, -15, 3415, 0, 2211, 368, 369, + 0, 0, 0, 410, 916, 0, 0, 273, -163, 62, + 94, 249, -71, -186, 634, 0, 0, 0, 428, -46, + 184, 118, 0, -149, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4610 -static short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, - 174, 107, 15, 204, 107, 149, 150, 83, 278, 210, - 104, 104, 122, 58, 94, 104, 18, 207, 107, 107, - 15, 296, 171, 132, 134, 98, 368, 303, 85, 316, - 39, 16, 173, 113, 18, 275, 317, 17, 123, 318, - 142, 323, 175, 147, 20, 104, 147, 99, 39, 16, - 170, 347, 348, 107, 172, 17, 202, 38, 23, 279, - 147, 147, 20, 100, 113, 147, 189, 190, 191, 192, - 193, 194, 40, 198, 199, 38, 101, 58, 23, 154, - 155, 300, 168, 302, 26, 322, 171, 106, 107, 62, - 15, 108, 176, 236, 325, 147, 162, 163, 178, 177, - 164, 23, 180, 165, 166, 167, 182, 185, 195, 203, - 212, 213, 215, 216, 217, 218, 219, 26, 315, 196, - 26, 26, 26, 297, 26, 167, 26, 26, 299, 26, - 301, 205, 319, 208, 240, 242, 243, 244, 245, 246, - 247, 248, 250, 26, 237, 255, 62, 21, 26, 304, - 280, 199, 286, 337, 307, 262, 213, 288, 213, 150, - 272, 305, 294, 277, 308, 309, 324, 281, 341, 283, - 285, 310, 345, 346, 287, 26, 234, 352, 311, 19, - 21, 312, 326, 21, 21, 21, 313, 21, 314, 21, - 21, 330, 21, 360, 332, 327, 113, 363, 362, 328, - 290, 113, 292, 293, 2, 329, 21, 26, 340, 26, - 26, 21, 88, 342, 149, 150, 343, 89, 351, 149, - 150, 149, 150, 353, 104, 104, 104, 104, 149, 150, - 357, 104, 107, 107, 107, 107, 364, 44, 21, 107, - 44, 44, 44, 102, 44, 355, 44, 44, 365, 44, - 104, 104, 165, 104, 320, 149, 150, 52, 107, 107, - 199, 107, 37, 44, 35, 149, 150, 58, 44, 166, - 21, 163, 21, 21, 147, 147, 147, 147, 149, 150, - 262, 147, 40, 147, 149, 150, 149, 150, 331, 147, - 147, 147, 147, 149, 150, 44, 149, 150, 149, 150, - 147, 147, 37, 147, 147, 147, 147, 147, 147, 147, - 157, 235, 147, 149, 150, 147, 147, 147, 35, 69, - 149, 150, 149, 150, 149, 150, 21, 44, 149, 150, - 44, 97, 78, 149, 150, 149, 150, 149, 150, 214, - 26, 26, 26, 26, 26, 26, 359, 26, 26, 26, +#define YYTABLESIZE 4423 +static short yytable[] = { 71, + 65, 193, 223, 65, 107, 22, 216, 292, 271, 301, + 311, 321, 111, 314, 60, 111, 316, 60, 224, 65, + 313, 372, 318, 250, 194, 181, 178, 183, 15, 111, + 111, 312, 18, 126, 111, 62, 319, 64, 39, 84, + 289, 214, 269, 192, 142, 144, 15, 16, 275, 86, + 18, 69, 390, 338, 198, 217, 39, 180, 339, 182, + 163, 164, 158, 159, 111, 16, 4, 5, 6, 340, + 7, 8, 345, 17, 251, 26, 155, 179, 60, 155, + 172, 113, 20, 173, 122, 315, 174, 175, 176, 293, + 26, 17, 181, 155, 155, 208, 209, 9, 155, 62, + 20, 64, 88, 65, 67, 98, 248, 129, 102, 177, + 127, 38, 344, 219, 26, 199, 200, 201, 202, 203, + 204, 188, 103, 347, 180, 151, 40, 337, 155, 38, + 173, 66, 104, 174, 175, 176, 197, 226, 227, 229, + 230, 231, 232, 233, 15, 369, 370, 26, 317, 105, + 26, 26, 26, 341, 26, 346, 26, 26, 110, 26, + 111, 254, 256, 257, 258, 259, 260, 261, 262, 264, + 359, 23, 24, 26, 21, 112, 185, 184, 26, 209, + 186, 187, 26, 276, 227, 195, 227, 225, 286, 189, + 191, 205, 60, 206, 363, 295, 324, 297, 299, 213, + 215, 220, 328, 21, 176, 26, 303, 21, 65, 266, + 21, 21, 21, 222, 21, 384, 21, 21, 291, 21, + 294, 300, 268, 304, 92, 158, 159, 158, 159, 93, + 302, 159, 306, 21, 308, 309, 310, 26, 21, 26, + 26, 249, 2, 111, 111, 111, 111, 158, 159, 320, + 111, 158, 159, 60, 158, 159, 326, 158, 159, 330, + 106, 158, 159, 158, 159, 21, 158, 159, 158, 159, + 331, 111, 111, 332, 111, 44, 377, 333, 44, 44, + 44, 334, 44, 336, 44, 44, 335, 44, 342, 348, + 158, 159, 158, 159, 209, 158, 159, 21, 349, 21, + 21, 44, 350, 322, 354, 322, 44, 155, 155, 155, + 155, 329, 158, 159, 155, 351, 155, 158, 159, 352, + 276, 362, 155, 155, 155, 155, 364, 273, 158, 159, + 272, 158, 159, 44, 365, 155, 155, 373, 155, 155, + 155, 155, 155, 155, 155, 158, 159, 155, 375, 166, + 155, 155, 155, 158, 159, 158, 159, 379, 53, 71, + 158, 159, 158, 159, 386, 44, 387, 180, 44, 62, + 26, 26, 26, 26, 26, 26, 37, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 256, 269, 188, 26, 26, 0, 26, 26, 26, 26, - 26, 149, 150, 149, 150, 26, 26, 26, 26, 26, - 26, 0, 0, 67, 26, 0, 67, 4, 5, 6, - 339, 7, 8, 26, 0, 26, 26, 0, 0, 0, - 0, 67, 0, 21, 21, 21, 21, 21, 21, 0, + 353, 35, 181, 26, 26, 163, 26, 26, 26, 26, + 26, 158, 159, 178, 40, 26, 26, 26, 26, 26, + 26, 26, 166, 37, 35, 172, 26, 101, 173, 131, + 132, 174, 175, 176, 80, 26, 228, 26, 26, 361, + 21, 21, 21, 21, 21, 21, 381, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 361, 0, 0, 21, 21, 154, 21, - 21, 21, 21, 21, 0, 67, 0, 0, 21, 21, - 21, 21, 21, 21, 0, 0, 163, 21, 259, 164, - 0, 258, 165, 166, 167, 0, 21, 0, 21, 21, - 44, 44, 44, 44, 44, 44, 0, 44, 44, 44, - 157, 0, 0, 44, 0, 0, 44, 44, 44, 44, - 0, 0, 0, 44, 44, 0, 44, 44, 44, 44, - 44, 0, 0, 0, 0, 44, 44, 44, 44, 44, - 44, 4, 5, 6, 44, 7, 8, 164, 0, 0, - 165, 166, 167, 44, 177, 44, 44, 177, 177, 177, - 0, 177, 161, 177, 177, 161, 177, 0, 151, 0, - 0, 0, 0, 0, 152, 153, 154, 155, 0, 161, - 161, 0, 0, 0, 161, 177, 0, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 4, 5, 6, 0, 7, 8, - 0, 0, 177, 178, 161, 0, 178, 178, 178, 0, - 178, 126, 178, 178, 126, 178, 0, 0, 93, 0, - 0, 0, 0, 144, 145, 146, 147, 0, 126, 126, - 148, 0, 0, 126, 178, 115, 116, 177, 0, 0, - 0, 0, 124, 0, 67, 67, 67, 67, 0, 149, - 150, 67, 0, 0, 137, 138, 139, 140, 0, 0, - 0, 0, 0, 126, 52, 0, 0, 62, 64, 50, - 67, 57, 0, 65, 61, 0, 60, 0, 334, 335, - 336, 0, 338, 0, 0, 152, 153, 154, 155, 0, - 59, 163, 0, 0, 164, 63, 178, 165, 166, 167, - 201, 159, 160, 161, 162, 163, 0, 0, 164, 354, - 0, 165, 166, 167, 100, 0, 356, 100, 151, 0, - 358, 0, 58, 0, 152, 153, 154, 155, 0, 0, - 0, 100, 100, 366, 367, 0, 100, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 23, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 177, 177, - 177, 177, 177, 0, 177, 177, 177, 0, 0, 0, - 177, 0, 289, 161, 161, 161, 161, 157, 0, 0, - 161, 177, 161, 177, 177, 177, 177, 177, 161, 161, - 161, 161, 177, 177, 177, 177, 177, 177, 0, 161, - 161, 177, 161, 161, 161, 161, 161, 161, 161, 0, - 177, 161, 177, 177, 161, 161, 161, 178, 178, 178, - 178, 178, 0, 178, 178, 178, 0, 0, 0, 178, - 0, 0, 126, 126, 126, 126, 0, 0, 0, 126, - 178, 126, 178, 178, 178, 178, 178, 126, 126, 126, - 126, 178, 178, 178, 178, 178, 178, 0, 126, 126, - 178, 126, 126, 126, 126, 126, 126, 126, 0, 178, - 126, 178, 178, 126, 126, 126, 0, 22, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 0, 0, 157, - 32, 0, 0, 33, 34, 35, 36, 0, 0, 0, - 37, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 0, 44, - 0, 51, 44, 44, 44, 67, 44, 0, 44, 44, - 54, 44, 55, 56, 0, 100, 100, 100, 100, 0, - 0, 0, 100, 0, 100, 44, 0, 0, 0, 0, - 44, 100, 0, 0, 109, 0, 0, 118, 68, 0, - 0, 100, 100, 0, 100, 100, 100, 100, 100, 0, - 152, 153, 154, 155, 0, 52, 68, 44, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 161, 162, - 163, 0, 0, 164, 179, 151, 165, 166, 167, 0, - 0, 152, 153, 154, 155, 0, 63, 0, 187, 44, - 68, 0, 44, 0, 0, 156, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 52, 0, 58, 62, 64, 50, 0, 57, 0, - 65, 61, 0, 60, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 211, 0, 0, 152, 153, 154, - 155, 0, 63, 0, 0, 23, 0, 0, 53, 0, - 71, 0, 0, 71, 160, 161, 162, 163, 0, 0, - 164, 0, 0, 165, 166, 167, 0, 71, 71, 58, - 0, 0, 0, 253, 52, 0, 0, 62, 64, 50, - 261, 57, 0, 65, 61, 0, 60, 151, 0, 0, - 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, - 0, 23, 71, 0, 53, 63, 0, 156, 158, 159, - 160, 161, 162, 163, 0, 0, 164, 0, 0, 165, - 166, 167, 44, 44, 44, 44, 44, 44, 0, 44, - 44, 44, 58, 0, 0, 44, 0, 0, 44, 44, - 44, 44, 0, 0, 0, 44, 44, 0, 44, 44, - 44, 44, 44, 0, 0, 0, 0, 44, 44, 44, - 44, 44, 44, 0, 23, 0, 44, 53, 0, 68, - 68, 68, 68, 0, 0, 44, 68, 44, 44, 111, - 25, 26, 27, 28, 89, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 157, 68, 68, 0, 0, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 0, 52, 0, 32, 62, 64, - 50, 0, 57, 131, 65, 61, 0, 60, 38, 0, - 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, - 45, 46, 47, 48, 49, 0, 63, 0, 51, 0, - 0, 71, 71, 71, 71, 0, 0, 54, 71, 55, - 56, 0, 152, 153, 154, 155, 0, 0, 117, 25, - 26, 27, 28, 58, 29, 30, 31, 71, 71, 0, - 32, 162, 163, 0, 0, 164, 0, 0, 165, 166, - 167, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 53, 52, - 0, 51, 62, 64, 50, 0, 57, 0, 65, 61, - 54, 60, 55, 56, 152, 0, 154, 155, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 63, 91, 91, 162, 163, 0, 148, 164, 0, 148, - 165, 166, 167, 104, 0, 0, 0, 0, 0, 112, - 91, 120, 0, 148, 148, 52, 91, 58, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 91, 91, - 91, 91, 151, 0, 0, 0, 0, 0, 152, 153, - 154, 155, 0, 0, 0, 0, 63, 0, 148, 0, - 0, 0, 53, 158, 159, 160, 161, 162, 163, 0, - 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 58, 112, 133, 52, 0, 0, 62, - 64, 50, 0, 57, 197, 65, 61, 0, 60, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 63, 53, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 154, 155, 51, 238, 58, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 0, 95, 163, 0, - 95, 164, 0, 0, 165, 166, 167, 0, 0, 270, - 0, 0, 0, 0, 95, 95, 0, 52, 0, 53, - 62, 64, 50, 0, 57, 241, 65, 61, 0, 60, - 0, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 0, 0, 0, 32, 0, 0, 63, 95, - 0, 0, 0, 0, 0, 0, 38, 0, 39, 40, - 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, - 47, 48, 49, 0, 0, 58, 51, 148, 148, 148, - 148, 0, 0, 0, 148, 54, 0, 55, 56, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 148, 148, 0, 0, 0, 0, 0, - 53, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 70, 0, 51, 70, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 116, 70, 70, 116, - 24, 25, 26, 27, 28, 0, 29, 30, 31, 0, - 0, 0, 32, 116, 116, 0, 0, 0, 116, 0, - 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, - 0, 0, 70, 0, 44, 45, 46, 47, 48, 49, - 0, 0, 0, 51, 0, 0, 0, 0, 116, 0, - 0, 0, 54, 0, 55, 56, 0, 52, 0, 0, - 62, 64, 50, 0, 57, 249, 65, 61, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 0, 0, 0, 95, 0, 0, 63, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 0, 0, 32, 95, 95, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 58, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 52, 0, 51, 62, 64, 50, 0, 57, - 0, 65, 61, 54, 60, 55, 56, 0, 0, 0, - 53, 152, 153, 154, 155, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 0, 0, 52, 0, 0, 62, 64, 50, 0, - 57, 282, 65, 61, 0, 60, 0, 0, 0, 0, - 0, 70, 70, 70, 70, 0, 0, 0, 70, 0, - 0, 0, 0, 0, 63, 53, 0, 116, 116, 116, - 116, 0, 0, 0, 116, 0, 116, 70, 70, 0, - 0, 0, 116, 116, 116, 116, 0, 0, 0, 0, - 0, 58, 0, 116, 116, 0, 116, 116, 116, 116, - 116, 116, 116, 0, 0, 116, 0, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 284, 65, 61, 0, - 60, 24, 25, 26, 27, 28, 53, 29, 30, 31, - 0, 0, 0, 32, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 0, 51, 0, 58, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 291, 65, 61, 0, - 60, 0, 0, 0, 0, 22, 24, 25, 26, 27, - 28, 53, 29, 30, 31, 0, 0, 0, 32, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 58, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 55, 56, 0, 0, 0, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, - 0, 44, 45, 46, 47, 48, 49, 0, 52, 0, - 51, 62, 64, 50, 0, 57, 0, 65, 61, 54, - 60, 55, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 58, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 53, 0, 0, 154, 0, 0, 154, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 154, 154, 0, 32, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 150, 51, 154, 150, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 150, 150, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, - 0, 163, 0, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 163, 163, 0, 0, 0, - 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 163, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 131, 0, 51, 131, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 131, 131, 0, 0, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 126, 0, 131, 126, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 154, 154, 154, 0, - 126, 126, 154, 0, 154, 126, 0, 0, 0, 0, - 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, - 0, 154, 154, 0, 154, 154, 154, 154, 154, 154, - 154, 0, 0, 154, 0, 126, 154, 154, 154, 0, - 0, 0, 0, 0, 0, 150, 150, 150, 150, 0, - 0, 0, 150, 0, 150, 0, 0, 0, 0, 0, - 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, - 0, 150, 150, 0, 150, 150, 150, 150, 150, 150, - 150, 0, 0, 150, 0, 0, 150, 150, 150, 163, - 163, 163, 163, 0, 0, 0, 163, 0, 163, 0, - 0, 0, 0, 0, 163, 163, 163, 163, 0, 0, - 0, 129, 0, 0, 129, 163, 163, 0, 163, 163, - 163, 163, 163, 163, 163, 0, 0, 163, 129, 129, - 163, 163, 163, 129, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 129, 131, 131, 131, 131, 0, 0, - 0, 131, 0, 131, 0, 0, 0, 0, 0, 131, - 131, 131, 131, 0, 0, 0, 127, 0, 0, 127, - 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, - 0, 0, 131, 127, 127, 131, 131, 131, 127, 0, - 0, 0, 0, 0, 126, 126, 126, 126, 0, 0, - 0, 126, 0, 126, 0, 0, 0, 0, 0, 126, - 126, 126, 126, 0, 0, 0, 137, 0, 127, 137, - 126, 126, 0, 126, 126, 126, 126, 126, 126, 126, - 0, 0, 126, 137, 137, 126, 126, 126, 137, 0, + 283, 90, 325, 21, 21, 0, 21, 21, 21, 21, + 21, 0, 0, 270, 0, 21, 21, 21, 21, 21, + 21, 21, 367, 368, 0, 172, 21, 374, 173, 0, + 0, 174, 175, 176, 0, 21, 0, 21, 21, 0, + 0, 162, 0, 382, 162, 0, 0, 385, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 162, 162, + 0, 44, 0, 162, 44, 44, 44, 44, 0, 0, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 0, + 0, 383, 0, 44, 44, 44, 44, 44, 44, 0, + 0, 0, 0, 162, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 190, 44, 44, 190, 190, 190, + 0, 190, 169, 190, 190, 169, 190, 160, 0, 0, + 0, 0, 0, 161, 162, 163, 164, 0, 0, 169, + 169, 0, 0, 0, 169, 190, 0, 0, 0, 165, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 0, + 0, 174, 175, 176, 4, 5, 6, 0, 7, 8, + 0, 0, 190, 0, 169, 191, 0, 0, 191, 191, + 191, 0, 191, 134, 191, 191, 134, 191, 0, 0, + 160, 0, 0, 0, 0, 9, 161, 162, 163, 164, + 134, 134, 0, 0, 0, 134, 191, 190, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 97, 0, 174, 175, 176, 0, 0, 0, + 0, 0, 4, 5, 6, 134, 7, 8, 55, 119, + 120, 65, 67, 53, 0, 60, 134, 68, 64, 0, + 63, 161, 162, 163, 164, 0, 0, 0, 147, 148, + 149, 150, 0, 9, 62, 0, 0, 0, 191, 66, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 162, 162, 162, 162, 0, 0, 0, 162, + 0, 162, 0, 0, 0, 0, 61, 162, 162, 162, + 162, 153, 154, 155, 156, 211, 0, 0, 157, 0, + 162, 162, 0, 162, 162, 162, 162, 162, 162, 162, + 0, 0, 162, 0, 0, 162, 162, 162, 26, 158, + 159, 56, 0, 0, 0, 0, 0, 0, 190, 190, + 190, 190, 190, 0, 190, 190, 190, 0, 0, 0, + 190, 0, 0, 169, 169, 169, 169, 0, 0, 0, + 169, 190, 169, 190, 190, 190, 190, 190, 169, 169, + 169, 169, 190, 190, 190, 190, 190, 190, 0, 0, + 0, 169, 169, 190, 169, 169, 169, 169, 169, 169, + 169, 0, 190, 169, 190, 190, 169, 169, 169, 191, + 191, 191, 191, 191, 0, 191, 191, 191, 0, 0, + 0, 191, 0, 0, 134, 134, 134, 134, 0, 0, + 0, 134, 191, 134, 191, 191, 191, 191, 191, 134, + 134, 134, 134, 191, 191, 191, 191, 191, 191, 0, + 0, 0, 134, 134, 191, 134, 134, 134, 134, 134, + 134, 134, 0, 191, 134, 191, 191, 134, 134, 134, + 0, 25, 27, 28, 29, 30, 31, 166, 32, 33, + 34, 0, 0, 0, 35, 0, 0, 36, 37, 38, + 39, 0, 0, 0, 40, 41, 0, 42, 43, 44, + 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, + 51, 52, 0, 0, 0, 44, 0, 54, 44, 44, + 44, 0, 44, 0, 44, 44, 57, 44, 58, 59, + 0, 117, 0, 0, 0, 0, 0, 0, 0, 135, + 161, 44, 163, 164, 0, 0, 44, 0, 0, 78, + 0, 0, 78, 0, 0, 356, 357, 358, 0, 360, + 0, 171, 172, 0, 0, 173, 78, 78, 174, 175, + 176, 0, 0, 44, 0, 55, 0, 0, 65, 67, + 53, 117, 60, 0, 68, 64, 376, 63, 0, 0, + 0, 0, 0, 378, 0, 0, 0, 380, 0, 0, + 0, 78, 0, 0, 212, 44, 66, 0, 44, 0, + 388, 389, 117, 0, 0, 55, 0, 0, 65, 67, + 53, 0, 60, 0, 68, 64, 0, 63, 0, 0, + 0, 0, 0, 61, 161, 162, 163, 164, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 106, 171, 172, 106, 0, 173, + 0, 0, 174, 175, 176, 26, 0, 0, 56, 0, + 0, 106, 106, 61, 0, 0, 106, 0, 0, 55, + 0, 0, 65, 67, 53, 0, 60, 0, 68, 64, + 0, 63, 0, 0, 0, 160, 0, 0, 0, 0, + 0, 161, 162, 163, 164, 26, 106, 0, 56, 0, + 66, 0, 0, 0, 0, 0, 0, 165, 167, 168, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 61, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 0, 0, + 0, 44, 0, 117, 44, 44, 44, 44, 0, 117, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 26, + 0, 0, 56, 44, 44, 44, 44, 44, 44, 0, + 78, 78, 78, 78, 44, 0, 0, 78, 0, 0, + 0, 0, 0, 44, 0, 44, 44, 0, 0, 115, + 28, 29, 30, 31, 93, 32, 33, 34, 78, 78, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, + 75, 0, 0, 47, 48, 49, 50, 51, 52, 27, + 28, 29, 30, 31, 54, 32, 33, 34, 75, 0, + 0, 35, 0, 57, 0, 58, 59, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 166, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 0, 0, 75, 0, 54, 106, 106, 106, 106, 0, + 0, 0, 106, 57, 106, 58, 59, 0, 0, 0, + 106, 106, 0, 121, 28, 29, 30, 31, 0, 32, + 33, 34, 0, 106, 106, 35, 106, 106, 106, 106, + 106, 106, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 163, 164, 0, 55, 0, 54, 65, + 67, 53, 0, 60, 0, 68, 64, 57, 63, 58, + 59, 0, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 125, 0, 0, 0, 0, 66, 0, 0, + 0, 161, 162, 163, 164, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 141, 68, 64, 0, 63, 168, + 169, 170, 171, 172, 61, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 66, 0, 0, + 161, 162, 163, 164, 0, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 0, 68, 64, 0, 63, 56, + 170, 171, 172, 0, 61, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 75, 75, 75, 75, 0, 55, 0, 75, 65, + 67, 53, 0, 60, 207, 68, 64, 0, 63, 56, + 0, 0, 0, 0, 61, 0, 143, 160, 0, 75, + 75, 0, 0, 161, 162, 163, 164, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 56, + 0, 174, 175, 176, 61, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 218, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 0, 161, 0, 0, 0, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 161, 0, - 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 56, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 0, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 255, 68, 64, 57, 63, 58, 59, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 61, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 263, 68, 64, 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 161, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 129, 129, 129, 0, 120, 120, 129, - 0, 129, 120, 0, 0, 0, 0, 129, 129, 129, - 129, 0, 0, 0, 0, 0, 0, 0, 129, 129, - 0, 129, 129, 129, 129, 129, 129, 129, 69, 0, - 129, 69, 120, 129, 129, 129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 0, 0, - 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, - 127, 0, 0, 0, 127, 0, 127, 0, 0, 0, - 69, 0, 127, 127, 127, 127, 0, 0, 0, 119, - 0, 0, 119, 127, 127, 0, 127, 127, 127, 127, - 127, 127, 127, 0, 0, 127, 119, 119, 127, 127, - 127, 119, 0, 0, 0, 0, 0, 137, 137, 137, - 137, 0, 0, 0, 137, 0, 137, 0, 0, 0, - 0, 0, 137, 137, 137, 137, 0, 0, 0, 0, - 0, 119, 0, 137, 137, 0, 137, 137, 137, 137, - 137, 137, 137, 0, 0, 137, 0, 0, 137, 137, - 137, 161, 161, 161, 161, 0, 0, 0, 161, 0, - 161, 0, 0, 0, 0, 0, 161, 161, 161, 161, - 0, 0, 0, 75, 0, 0, 75, 161, 161, 0, - 161, 161, 161, 161, 161, 161, 161, 0, 0, 161, - 75, 75, 161, 161, 161, 75, 0, 0, 0, 0, - 0, 120, 120, 120, 120, 0, 0, 0, 120, 0, - 120, 0, 0, 0, 0, 0, 120, 120, 120, 120, - 0, 0, 0, 0, 0, 75, 0, 120, 120, 0, - 120, 120, 120, 120, 120, 120, 120, 164, 0, 120, - 0, 0, 120, 120, 120, 0, 0, 0, 0, 69, - 69, 69, 69, 0, 164, 164, 69, 0, 69, 164, - 0, 0, 0, 0, 69, 69, 69, 69, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 69, 69, - 69, 69, 69, 69, 69, 0, 149, 69, 0, 164, - 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 149, 0, 0, 0, 149, 0, - 119, 119, 119, 119, 0, 0, 0, 119, 0, 119, - 0, 0, 0, 0, 0, 119, 119, 119, 119, 0, - 0, 0, 72, 0, 0, 0, 119, 119, 149, 119, - 119, 119, 119, 119, 119, 119, 0, 0, 119, 72, - 72, 119, 119, 119, 72, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, + 0, 0, 108, 0, 0, 108, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 108, 61, 55, 0, 108, 65, 67, 53, 0, 60, + 0, 68, 64, 0, 63, 0, 0, 0, 0, 0, + 161, 162, 163, 164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 108, 0, 56, 167, 168, 169, + 170, 171, 172, 0, 0, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 55, 0, 0, 65, 67, 53, 0, 60, + 296, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 0, 0, 117, - 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 117, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, - 0, 75, 0, 75, 0, 0, 0, 0, 0, 75, - 75, 75, 75, 0, 0, 0, 111, 0, 117, 111, - 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, - 0, 0, 75, 111, 111, 75, 75, 75, 111, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, - 164, 164, 0, 0, 0, 164, 0, 164, 111, 0, - 0, 0, 0, 164, 164, 164, 164, 0, 0, 0, - 112, 0, 0, 112, 164, 164, 0, 164, 164, 164, - 164, 164, 164, 164, 0, 0, 164, 112, 112, 164, - 164, 164, 112, 0, 0, 0, 0, 149, 149, 149, - 149, 0, 0, 0, 149, 0, 149, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 0, 0, 0, 0, - 0, 0, 112, 149, 149, 0, 149, 149, 149, 149, - 149, 149, 149, 0, 0, 149, 0, 0, 149, 149, - 149, 0, 0, 72, 72, 72, 72, 0, 0, 0, - 72, 0, 72, 0, 0, 0, 0, 0, 72, 72, - 72, 72, 0, 0, 0, 0, 0, 0, 0, 72, - 72, 0, 72, 72, 72, 72, 72, 72, 72, 0, - 0, 72, 0, 0, 72, 72, 72, 117, 117, 117, - 117, 0, 0, 0, 117, 0, 117, 0, 0, 0, - 0, 0, 117, 117, 117, 117, 113, 0, 0, 113, - 0, 0, 0, 117, 117, 0, 117, 117, 117, 117, - 117, 117, 117, 113, 113, 117, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 0, 0, 0, 111, 0, 111, 0, 0, 0, - 0, 0, 111, 111, 111, 111, 0, 109, 113, 0, - 109, 0, 0, 111, 111, 0, 111, 111, 111, 111, - 111, 111, 111, 0, 109, 109, 0, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112, 112, 112, 112, 0, 0, 0, 112, 109, - 112, 0, 0, 0, 0, 0, 112, 112, 112, 112, - 110, 0, 0, 110, 0, 0, 0, 112, 112, 0, - 112, 112, 112, 112, 112, 112, 112, 110, 110, 0, - 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 108, 108, 0, 0, 0, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 96, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 96, 96, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 113, 113, - 113, 0, 0, 0, 113, 96, 113, 0, 0, 0, - 0, 0, 113, 113, 113, 113, 97, 0, 0, 97, - 0, 0, 0, 113, 113, 0, 113, 113, 113, 113, - 113, 113, 113, 97, 97, 0, 0, 0, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, - 109, 109, 0, 0, 0, 109, 0, 109, 0, 0, - 0, 0, 0, 109, 109, 109, 109, 98, 97, 0, - 98, 0, 0, 0, 109, 109, 0, 109, 109, 109, - 109, 109, 109, 109, 98, 98, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 110, 110, 110, 0, 0, 0, 110, 98, - 110, 0, 0, 0, 0, 0, 110, 110, 110, 110, - 0, 0, 0, 0, 0, 0, 0, 110, 110, 0, - 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, - 108, 0, 0, 0, 108, 0, 108, 0, 0, 0, - 0, 0, 108, 108, 108, 108, 0, 0, 0, 0, - 0, 0, 99, 108, 108, 99, 108, 108, 108, 108, - 108, 108, 108, 0, 96, 96, 96, 96, 0, 99, - 99, 96, 0, 96, 99, 0, 0, 0, 0, 96, - 96, 96, 96, 0, 0, 0, 0, 0, 0, 153, - 96, 96, 153, 96, 96, 96, 96, 96, 96, 96, - 101, 0, 0, 101, 99, 0, 153, 153, 0, 0, - 0, 153, 0, 0, 0, 0, 0, 101, 101, 0, - 0, 0, 101, 0, 0, 0, 0, 97, 97, 97, - 97, 0, 0, 0, 97, 0, 97, 0, 0, 0, - 0, 153, 97, 97, 97, 97, 152, 0, 0, 152, - 0, 0, 101, 97, 97, 0, 97, 97, 97, 97, - 97, 97, 0, 152, 152, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 98, - 98, 98, 0, 0, 0, 98, 0, 98, 0, 0, - 0, 0, 0, 98, 98, 0, 98, 141, 152, 0, - 141, 0, 0, 0, 98, 98, 0, 98, 98, 98, - 98, 98, 98, 0, 141, 141, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 118, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 102, 0, 0, 102, 141, - 0, 0, 118, 118, 0, 0, 0, 118, 0, 0, - 0, 0, 102, 102, 0, 0, 0, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 99, 99, 99, 118, 0, 0, - 99, 0, 99, 0, 0, 0, 0, 102, 99, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 99, 0, 99, 99, 99, 99, 99, 99, 0, 0, - 153, 153, 153, 153, 0, 0, 0, 153, 0, 153, - 0, 101, 101, 101, 101, 153, 153, 0, 101, 0, - 101, 0, 0, 0, 0, 0, 153, 153, 0, 153, - 153, 153, 153, 153, 0, 0, 0, 101, 101, 0, - 101, 101, 101, 101, 101, 103, 0, 0, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, - 152, 0, 103, 103, 152, 0, 152, 103, 0, 0, - 0, 0, 152, 152, 0, 0, 0, 0, 105, 0, - 0, 105, 0, 152, 152, 0, 152, 152, 152, 152, - 152, 0, 0, 0, 0, 105, 105, 103, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 141, 141, - 141, 141, 0, 0, 0, 141, 0, 141, 0, 0, - 0, 0, 0, 141, 141, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 141, 141, 0, 141, 141, 141, - 141, 141, 0, 0, 0, 0, 118, 118, 118, 118, - 0, 0, 0, 118, 0, 118, 102, 102, 102, 102, - 0, 118, 118, 102, 0, 102, 0, 0, 0, 0, - 0, 0, 118, 118, 0, 118, 118, 118, 118, 118, - 0, 106, 102, 102, 106, 102, 102, 102, 102, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 95, 0, 0, 106, 0, 0, 0, 0, 105, 0, - 0, 0, 110, 0, 0, 119, 0, 0, 0, 0, - 0, 0, 126, 127, 128, 129, 130, 0, 0, 0, - 135, 136, 0, 106, 0, 0, 141, 0, 0, 0, + 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, + 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, + 0, 0, 54, 0, 0, 56, 0, 0, 0, 0, + 0, 57, 0, 58, 59, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 55, 0, 35, + 65, 67, 53, 0, 60, 298, 68, 64, 0, 63, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 66, 0, + 0, 0, 54, 108, 108, 108, 108, 0, 0, 0, + 108, 57, 108, 58, 59, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 61, 0, 0, 35, 0, + 0, 108, 108, 0, 108, 108, 108, 108, 108, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 0, 55, + 56, 54, 65, 67, 53, 0, 60, 307, 68, 64, + 57, 63, 58, 59, 0, 0, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 66, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 61, 0, 55, + 0, 54, 65, 67, 53, 0, 60, 0, 68, 64, + 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, + 66, 0, 56, 0, 0, 0, 0, 0, 158, 0, + 108, 158, 0, 0, 0, 0, 116, 95, 124, 0, + 0, 0, 130, 95, 0, 158, 158, 61, 0, 0, + 158, 0, 0, 0, 0, 95, 95, 95, 95, 0, + 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, + 0, 0, 0, 35, 0, 74, 0, 0, 74, 0, + 158, 0, 56, 0, 41, 0, 42, 43, 44, 45, + 46, 178, 0, 74, 178, 47, 48, 49, 50, 51, + 52, 0, 116, 0, 0, 0, 54, 0, 178, 178, + 0, 0, 0, 178, 0, 57, 0, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 0, 139, 0, 0, 139, 0, + 0, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 139, 139, 0, 35, 252, 139, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 284, 0, 0, 0, 139, 54, 0, + 0, 0, 0, 0, 0, 134, 0, 57, 134, 58, + 59, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 134, 134, 0, 35, 0, 134, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 0, 0, 0, 0, 134, 54, 158, + 158, 158, 158, 0, 0, 0, 158, 57, 158, 58, + 59, 0, 0, 0, 158, 158, 158, 158, 0, 0, + 0, 0, 0, 137, 0, 0, 137, 158, 158, 0, + 158, 158, 158, 158, 158, 158, 158, 0, 0, 158, + 137, 137, 158, 158, 158, 137, 74, 74, 74, 74, + 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 178, 178, 178, 0, 0, 0, 178, + 135, 178, 0, 135, 74, 137, 0, 178, 178, 178, + 178, 0, 0, 0, 0, 0, 0, 135, 135, 0, + 178, 178, 135, 178, 178, 178, 178, 178, 178, 178, + 0, 0, 178, 0, 0, 178, 178, 178, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 139, 139, 139, + 0, 145, 135, 139, 145, 139, 0, 0, 0, 0, + 0, 139, 139, 139, 139, 0, 0, 0, 145, 145, + 0, 0, 0, 145, 139, 139, 0, 139, 139, 139, + 139, 139, 139, 139, 0, 0, 139, 0, 0, 139, + 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 145, 0, 156, 134, 134, 134, 134, + 0, 169, 0, 134, 169, 134, 0, 0, 0, 156, + 156, 134, 134, 134, 134, 0, 0, 0, 169, 169, + 0, 0, 0, 169, 134, 134, 0, 134, 134, 134, + 134, 134, 134, 134, 0, 0, 134, 0, 0, 134, + 134, 134, 0, 0, 156, 0, 0, 172, 0, 0, + 172, 0, 0, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 172, 0, 0, 0, 172, + 0, 0, 0, 0, 137, 137, 137, 137, 0, 0, + 0, 137, 0, 137, 0, 0, 0, 0, 0, 137, + 137, 137, 137, 0, 0, 0, 0, 0, 0, 172, + 0, 0, 137, 137, 0, 137, 137, 137, 137, 137, + 137, 137, 0, 0, 137, 0, 0, 137, 137, 137, + 0, 135, 135, 135, 135, 0, 128, 0, 135, 128, + 135, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 0, 0, 0, 128, 128, 0, 0, 0, 128, 135, + 135, 0, 135, 135, 135, 135, 135, 135, 135, 0, + 0, 135, 0, 0, 135, 135, 135, 0, 0, 0, + 0, 0, 145, 145, 145, 145, 0, 76, 128, 145, + 76, 145, 0, 0, 0, 0, 0, 145, 145, 145, + 145, 0, 0, 0, 76, 76, 0, 0, 0, 76, + 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, + 0, 0, 145, 0, 0, 145, 145, 145, 0, 0, + 0, 0, 0, 156, 156, 156, 156, 0, 0, 76, + 156, 0, 169, 169, 169, 169, 0, 66, 0, 169, + 66, 169, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 156, 156, 0, 66, 66, 0, 0, 0, 66, + 169, 169, 0, 169, 169, 169, 169, 169, 169, 169, + 0, 0, 169, 0, 0, 169, 169, 169, 172, 172, + 172, 172, 0, 127, 0, 172, 127, 172, 0, 66, + 0, 0, 0, 172, 172, 172, 172, 0, 0, 0, + 127, 127, 0, 0, 0, 127, 172, 172, 0, 172, + 172, 172, 172, 172, 172, 172, 0, 0, 172, 0, + 0, 172, 172, 172, 0, 0, 0, 0, 0, 82, + 0, 0, 82, 0, 0, 127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 0, 0, + 0, 82, 114, 0, 0, 114, 0, 128, 128, 128, + 128, 0, 0, 0, 128, 0, 128, 0, 0, 114, + 114, 0, 128, 128, 128, 128, 0, 0, 0, 0, + 0, 82, 0, 0, 0, 128, 128, 0, 128, 128, + 128, 128, 128, 128, 128, 0, 0, 128, 0, 0, + 128, 128, 128, 102, 114, 0, 102, 0, 76, 76, + 76, 76, 179, 0, 0, 76, 0, 76, 0, 0, + 102, 102, 0, 76, 76, 76, 76, 0, 0, 179, + 179, 0, 0, 0, 179, 0, 76, 76, 0, 76, + 76, 76, 76, 76, 76, 76, 0, 0, 76, 0, + 0, 76, 76, 76, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 179, 0, 0, 0, 66, 66, + 66, 66, 157, 0, 0, 66, 0, 66, 0, 0, + 0, 0, 0, 66, 66, 66, 66, 0, 0, 157, + 157, 0, 0, 0, 157, 0, 66, 66, 0, 66, + 66, 66, 66, 66, 66, 66, 0, 0, 66, 0, + 0, 66, 66, 66, 127, 127, 127, 127, 79, 0, + 0, 127, 0, 127, 157, 0, 0, 0, 0, 127, + 127, 127, 127, 0, 0, 79, 79, 0, 0, 0, + 79, 0, 127, 127, 0, 127, 127, 127, 127, 127, + 127, 127, 0, 0, 127, 0, 0, 127, 127, 127, + 82, 82, 82, 82, 0, 0, 0, 82, 0, 82, + 79, 0, 0, 0, 0, 82, 82, 82, 82, 0, + 0, 0, 0, 114, 114, 114, 114, 0, 82, 82, + 114, 82, 82, 82, 82, 82, 82, 82, 0, 123, + 82, 0, 123, 82, 82, 82, 0, 0, 0, 0, + 0, 114, 114, 0, 114, 0, 123, 123, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 0, 0, + 0, 102, 0, 179, 179, 179, 179, 0, 0, 0, + 179, 123, 179, 0, 0, 0, 0, 0, 179, 179, + 179, 179, 102, 102, 0, 0, 0, 0, 0, 0, + 0, 179, 179, 0, 179, 179, 179, 179, 179, 179, + 179, 0, 0, 179, 0, 0, 179, 179, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, - 0, 0, 0, 103, 0, 103, 0, 0, 0, 0, + 0, 0, 0, 157, 157, 157, 157, 0, 0, 0, + 157, 124, 157, 0, 124, 0, 0, 0, 157, 157, + 157, 157, 0, 0, 0, 0, 0, 0, 124, 124, + 0, 157, 157, 124, 157, 157, 157, 157, 157, 157, + 157, 0, 0, 157, 0, 0, 157, 157, 157, 79, + 79, 79, 79, 0, 118, 0, 79, 118, 79, 0, + 0, 0, 0, 124, 79, 79, 79, 79, 0, 0, + 0, 118, 118, 0, 0, 0, 118, 79, 79, 0, + 79, 79, 79, 79, 79, 79, 79, 99, 0, 79, + 0, 0, 79, 79, 79, 109, 0, 0, 119, 114, + 0, 119, 123, 0, 0, 128, 118, 0, 0, 136, + 137, 138, 139, 140, 0, 119, 119, 145, 146, 0, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 123, 123, 123, 0, 0, 0, 123, 120, 123, + 0, 120, 0, 0, 0, 123, 123, 123, 123, 0, + 119, 0, 196, 0, 0, 120, 120, 0, 123, 123, + 120, 123, 123, 123, 123, 123, 123, 123, 0, 0, + 123, 0, 0, 0, 0, 0, 116, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 103, 0, 103, 103, 103, 103, 105, - 105, 105, 105, 0, 0, 0, 105, 0, 105, 0, - 0, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 105, 105, 0, 105, 105, - 105, 0, 0, 0, 0, 0, 0, 0, 251, 0, + 120, 0, 0, 116, 116, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 124, 124, 124, 124, 0, 117, 0, 124, + 117, 124, 0, 0, 0, 0, 0, 124, 124, 124, + 124, 0, 0, 0, 117, 117, 0, 0, 0, 117, + 124, 124, 0, 124, 124, 124, 124, 124, 124, 124, + 0, 0, 124, 0, 0, 118, 118, 118, 118, 0, + 115, 0, 118, 115, 118, 0, 0, 0, 0, 117, + 118, 118, 118, 118, 0, 0, 0, 115, 115, 0, + 0, 0, 115, 118, 118, 0, 118, 118, 118, 118, + 118, 118, 118, 0, 0, 0, 327, 0, 0, 119, + 119, 119, 119, 0, 0, 0, 119, 77, 119, 0, + 77, 0, 115, 0, 119, 119, 119, 119, 0, 0, + 0, 0, 0, 0, 77, 77, 0, 119, 119, 343, + 119, 119, 119, 119, 119, 119, 119, 0, 0, 120, + 120, 120, 120, 0, 103, 0, 120, 103, 120, 0, + 0, 0, 0, 0, 120, 120, 120, 120, 0, 77, + 0, 103, 103, 0, 0, 0, 103, 120, 120, 0, + 120, 120, 120, 120, 120, 120, 120, 116, 116, 116, + 116, 0, 104, 0, 116, 104, 116, 0, 0, 0, + 0, 0, 116, 116, 116, 116, 103, 0, 0, 104, + 104, 0, 0, 0, 104, 116, 116, 0, 116, 116, + 116, 116, 116, 116, 116, 0, 0, 0, 0, 105, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 0, 105, 105, 0, 0, + 0, 105, 0, 0, 0, 0, 0, 0, 117, 117, + 117, 117, 0, 0, 0, 117, 0, 117, 0, 0, + 0, 0, 0, 117, 117, 117, 117, 305, 0, 0, + 0, 105, 166, 0, 0, 0, 117, 117, 0, 117, + 117, 117, 117, 117, 117, 117, 0, 0, 0, 0, + 0, 115, 115, 115, 115, 0, 161, 0, 115, 161, + 115, 0, 0, 0, 0, 0, 115, 115, 115, 115, + 0, 0, 0, 161, 161, 0, 0, 0, 161, 115, + 115, 0, 115, 115, 115, 115, 115, 115, 115, 0, + 0, 0, 0, 160, 0, 0, 160, 0, 77, 77, + 77, 77, 0, 149, 0, 77, 149, 0, 161, 0, + 160, 160, 0, 0, 0, 160, 0, 0, 0, 0, + 149, 149, 0, 0, 0, 149, 77, 77, 0, 0, + 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, + 126, 0, 103, 126, 103, 160, 0, 0, 0, 0, + 103, 103, 103, 103, 0, 149, 0, 126, 126, 0, + 0, 0, 126, 103, 103, 0, 103, 103, 103, 103, + 103, 103, 103, 104, 104, 104, 104, 0, 107, 0, + 104, 107, 104, 0, 0, 0, 0, 0, 104, 104, + 104, 104, 126, 0, 0, 107, 107, 0, 0, 0, + 107, 104, 104, 0, 104, 104, 104, 104, 104, 104, + 105, 105, 105, 105, 0, 109, 0, 105, 109, 105, + 0, 0, 0, 0, 0, 105, 105, 0, 105, 0, + 107, 110, 109, 109, 110, 0, 0, 109, 105, 105, + 0, 105, 105, 105, 105, 105, 105, 0, 110, 110, + 160, 0, 0, 110, 0, 0, 161, 162, 163, 164, + 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 0, 110, 174, 175, 176, 161, 161, 161, + 161, 0, 112, 0, 161, 112, 161, 0, 0, 0, + 0, 0, 161, 161, 0, 0, 0, 0, 0, 112, + 112, 0, 0, 0, 112, 161, 161, 0, 161, 161, + 161, 161, 161, 0, 160, 160, 160, 160, 0, 113, + 0, 160, 113, 160, 149, 149, 149, 149, 0, 160, + 160, 149, 0, 149, 112, 0, 113, 113, 0, 149, + 149, 113, 160, 160, 0, 160, 160, 160, 160, 160, + 0, 0, 149, 149, 0, 149, 149, 149, 149, 149, + 0, 126, 126, 126, 126, 0, 0, 0, 126, 0, + 126, 113, 0, 0, 0, 0, 126, 126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 126, 0, 126, 126, 126, 126, 126, 0, 0, 107, + 107, 107, 107, 0, 0, 0, 107, 0, 107, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 107, 0, + 107, 107, 107, 107, 107, 0, 109, 109, 109, 109, + 0, 0, 0, 109, 0, 109, 0, 0, 0, 0, + 0, 0, 110, 110, 110, 110, 0, 0, 0, 110, + 0, 110, 0, 0, 109, 109, 0, 109, 109, 109, + 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 110, 0, 110, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 112, 112, 112, 0, 0, 0, + 112, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112, 112, 0, 112, 112, 112, 0, 0, 0, + 113, 113, 113, 113, 0, 0, 0, 113, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 106, 106, 106, 0, 0, 0, 106, - 0, 106, 0, 0, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 0, 106, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 113, + 0, 113, 113, }; -static short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, - 91, 41, 41, 40, 44, 298, 299, 257, 41, 93, - 58, 59, 46, 59, 40, 63, 41, 123, 58, 59, - 59, 41, 123, 57, 58, 40, 367, 41, 59, 41, - 41, 41, 123, 92, 59, 194, 41, 41, 257, 41, - 278, 41, 123, 41, 41, 93, 44, 40, 59, 59, - 91, 276, 277, 93, 91, 59, 115, 41, 123, 44, - 58, 59, 59, 40, 123, 63, 98, 99, 100, 101, - 102, 103, 41, 107, 108, 59, 40, 123, 123, 289, - 290, 59, 123, 59, 0, 59, 123, 40, 40, 36, - 59, 40, 40, 40, 294, 93, 306, 307, 44, 59, - 310, 123, 260, 313, 314, 315, 257, 40, 40, 40, - 144, 145, 146, 147, 148, 149, 150, 33, 277, 41, - 36, 37, 38, 93, 40, 315, 42, 43, 93, 45, - 93, 125, 93, 91, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 59, 91, 257, 36, 0, 64, 255, - 41, 185, 125, 312, 260, 189, 190, 91, 192, 299, - 194, 41, 40, 195, 41, 41, 93, 201, 93, 203, - 204, 41, 333, 334, 208, 91, 123, 338, 41, 257, - 33, 40, 125, 36, 37, 38, 41, 40, 59, 42, - 43, 59, 45, 354, 123, 125, 255, 358, 357, 125, - 234, 260, 236, 237, 0, 125, 59, 123, 41, 125, - 126, 64, 257, 125, 298, 299, 41, 262, 41, 298, - 299, 298, 299, 59, 272, 273, 274, 275, 298, 299, - 40, 279, 272, 273, 274, 275, 41, 33, 91, 279, - 36, 37, 38, 296, 40, 344, 42, 43, 41, 45, - 298, 299, 41, 301, 288, 298, 299, 123, 298, 299, - 294, 301, 41, 59, 59, 298, 299, 123, 64, 41, - 123, 59, 125, 126, 272, 273, 274, 275, 298, 299, - 314, 279, 41, 281, 298, 299, 298, 299, 41, 287, - 288, 289, 290, 298, 299, 91, 298, 299, 298, 299, - 298, 299, 59, 301, 302, 303, 304, 305, 306, 307, - 63, 258, 310, 298, 299, 313, 314, 315, 41, 353, - 298, 299, 298, 299, 298, 299, 8, 123, 298, 299, - 126, 32, 13, 298, 299, 298, 299, 298, 299, 145, - 256, 257, 258, 259, 260, 261, 353, 263, 264, 265, +static short yycheck[] = { 15, + 36, 91, 41, 36, 40, 59, 59, 41, 195, 41, + 59, 59, 41, 59, 59, 44, 59, 123, 93, 36, + 93, 358, 59, 40, 96, 91, 40, 91, 41, 58, + 59, 41, 41, 49, 63, 59, 41, 59, 41, 257, + 204, 40, 192, 90, 60, 61, 59, 41, 198, 257, + 59, 15, 389, 41, 101, 127, 59, 123, 41, 123, + 289, 290, 300, 301, 93, 59, 266, 267, 268, 41, + 270, 271, 41, 41, 91, 123, 41, 91, 123, 44, + 309, 45, 41, 312, 48, 93, 315, 316, 317, 44, + 123, 59, 91, 58, 59, 111, 112, 297, 63, 123, + 59, 123, 59, 36, 37, 40, 123, 40, 40, 123, + 257, 41, 59, 129, 0, 102, 103, 104, 105, 106, + 107, 85, 40, 310, 123, 278, 41, 291, 93, 59, + 312, 64, 40, 315, 316, 317, 100, 153, 154, 155, + 156, 157, 158, 159, 59, 276, 277, 33, 93, 40, + 36, 37, 38, 93, 40, 93, 42, 43, 40, 45, + 40, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 334, 8, 9, 59, 0, 40, 40, 123, 64, 195, + 59, 44, 123, 199, 200, 40, 202, 151, 204, 260, + 257, 40, 298, 41, 93, 211, 268, 213, 214, 40, + 125, 298, 274, 257, 317, 91, 222, 33, 36, 298, + 36, 37, 38, 91, 40, 379, 42, 43, 205, 45, + 41, 125, 257, 91, 257, 300, 301, 300, 301, 262, + 260, 301, 248, 59, 250, 251, 40, 123, 64, 125, + 126, 258, 0, 272, 273, 274, 275, 300, 301, 260, + 279, 300, 301, 298, 300, 301, 41, 300, 301, 41, + 296, 300, 301, 300, 301, 91, 300, 301, 300, 301, + 41, 300, 301, 41, 303, 33, 366, 41, 36, 37, + 38, 40, 40, 59, 42, 43, 41, 45, 304, 125, + 300, 301, 300, 301, 310, 300, 301, 123, 125, 125, + 126, 59, 125, 267, 123, 269, 64, 272, 273, 274, + 275, 275, 300, 301, 279, 125, 281, 300, 301, 59, + 336, 41, 287, 288, 289, 290, 125, 41, 300, 301, + 44, 300, 301, 91, 41, 300, 301, 41, 303, 304, + 305, 306, 307, 308, 309, 300, 301, 312, 59, 63, + 315, 316, 317, 300, 301, 300, 301, 40, 123, 375, + 300, 301, 300, 301, 41, 123, 41, 41, 126, 123, + 256, 257, 258, 259, 260, 261, 41, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 41, 59, 41, 279, 280, 289, 282, 283, 284, 285, + 286, 300, 301, 59, 41, 291, 292, 293, 294, 295, + 296, 297, 63, 59, 41, 309, 302, 35, 312, 52, + 52, 315, 316, 317, 15, 311, 154, 313, 314, 336, + 256, 257, 258, 259, 260, 261, 375, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 125, 192, 97, 279, 280, -1, 282, 283, 284, 285, - 286, 298, 299, 298, 299, 291, 292, 293, 294, 295, - 296, -1, -1, 41, 300, -1, 44, 266, 267, 268, - 314, 270, 271, 309, -1, 311, 312, -1, -1, -1, - -1, 59, -1, 256, 257, 258, 259, 260, 261, -1, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 125, -1, -1, 279, 280, 289, 282, - 283, 284, 285, 286, -1, 93, -1, -1, 291, 292, - 293, 294, 295, 296, -1, -1, 307, 300, 41, 310, - -1, 44, 313, 314, 315, -1, 309, -1, 311, 312, - 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 63, -1, -1, 269, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 266, 267, 268, 300, 270, 271, 310, -1, -1, - 313, 314, 315, 309, 33, 311, 312, 36, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, 58, - 59, -1, -1, -1, 63, 64, -1, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 266, 267, 268, -1, 270, 271, - -1, -1, 91, 33, 93, -1, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, -1, -1, 26, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, - 279, -1, -1, 63, 64, 43, 44, 126, -1, -1, - -1, -1, 50, -1, 272, 273, 274, 275, -1, 298, - 299, 279, -1, -1, 62, 63, 64, 65, -1, -1, - -1, -1, -1, 93, 33, -1, -1, 36, 37, 38, - 298, 40, -1, 42, 43, -1, 45, -1, 309, 310, - 311, -1, 313, -1, -1, 287, 288, 289, 290, -1, - 59, 307, -1, -1, 310, 64, 126, 313, 314, 315, - 108, 303, 304, 305, 306, 307, -1, -1, 310, 340, - -1, 313, 314, 315, 41, -1, 347, 44, 281, -1, - 351, -1, 91, -1, 287, 288, 289, 290, -1, -1, - -1, 58, 59, 364, 365, -1, 63, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 123, -1, -1, 126, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, 257, 258, + 202, 24, 269, 279, 280, -1, 282, 283, 284, 285, + 286, -1, -1, 125, -1, 291, 292, 293, 294, 295, + 296, 297, 355, 356, -1, 309, 302, 360, 312, -1, + -1, 315, 316, 317, -1, 311, -1, 313, 314, -1, + -1, 41, -1, 376, 44, -1, -1, 380, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 58, 59, + -1, 269, -1, 63, 272, 273, 274, 275, -1, -1, + -1, 279, 280, -1, 282, 283, 284, 285, 286, -1, + -1, 125, -1, 291, 292, 293, 294, 295, 296, -1, + -1, -1, -1, 93, 302, -1, -1, -1, -1, -1, + -1, -1, -1, 311, 33, 313, 314, 36, 37, 38, + -1, 40, 41, 42, 43, 44, 45, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, 64, -1, -1, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 266, 267, 268, -1, 270, 271, + -1, -1, 91, -1, 93, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, -1, + 281, -1, -1, -1, -1, 297, 287, 288, 289, 290, + 58, 59, -1, -1, -1, 63, 64, 126, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, 29, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 266, 267, 268, 93, 270, 271, 33, 46, + 47, 36, 37, 38, -1, 40, 53, 42, 43, -1, + 45, 287, 288, 289, 290, -1, -1, -1, 65, 66, + 67, 68, -1, 297, 59, -1, -1, -1, 126, 64, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, 91, 287, 288, 289, + 290, 272, 273, 274, 275, 112, -1, -1, 279, -1, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 123, 300, + 301, 126, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, - 269, -1, 58, 272, 273, 274, 275, 63, -1, -1, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, -1, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, -1, - 309, 310, 311, 312, 313, 314, 315, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, -1, 309, - 310, 311, 312, 313, 314, 315, -1, 256, 257, 258, - 259, 260, 261, -1, 263, 264, 265, -1, -1, 63, 269, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, -1, 33, - -1, 300, 36, 37, 38, 13, 40, -1, 42, 43, - 309, 45, 311, 312, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, 59, -1, -1, -1, -1, - 64, 288, -1, -1, 42, -1, -1, 45, 41, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, -1, - 287, 288, 289, 290, -1, 33, 59, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 305, 306, - 307, -1, -1, 310, 82, 281, 313, 314, 315, -1, - -1, 287, 288, 289, 290, -1, 64, -1, 96, 123, - 93, -1, 126, -1, -1, 301, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, - -1, 33, -1, 91, 36, 37, 38, -1, 40, -1, - 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 142, -1, -1, 287, 288, 289, - 290, -1, 64, -1, -1, 123, -1, -1, 126, -1, - 41, -1, -1, 44, 304, 305, 306, 307, -1, -1, - 310, -1, -1, 313, 314, 315, -1, 58, 59, 91, - -1, -1, -1, 181, 33, -1, -1, 36, 37, 38, - 188, 40, -1, 42, 43, -1, 45, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - -1, 123, 93, -1, 126, 64, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, -1, -1, 313, - 314, 315, 256, 257, 258, 259, 260, 261, -1, 263, - 264, 265, 91, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, 123, -1, 300, 126, -1, 272, - 273, 274, 275, -1, -1, 309, 279, 311, 312, 257, - 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, - -1, 269, -1, -1, 63, 298, 299, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, 257, 258, 259, 260, 261, - -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, - 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, - 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 295, 296, -1, 64, -1, 300, -1, - -1, 272, 273, 274, 275, -1, -1, 309, 279, 311, - 312, -1, 287, 288, 289, 290, -1, -1, 257, 258, - 259, 260, 261, 91, 263, 264, 265, 298, 299, -1, - 269, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, 126, 33, - -1, 300, 36, 37, 38, -1, 40, -1, 42, 43, - 309, 45, 311, 312, 287, -1, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, - 64, 25, 26, 306, 307, -1, 41, 310, -1, 44, - 313, 314, 315, 37, -1, -1, -1, -1, -1, 43, - 44, 45, -1, 58, 59, 33, 50, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 62, 63, - 64, 65, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, 64, -1, 93, -1, - -1, -1, 126, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, -1, -1, -1, - -1, -1, -1, 91, 108, 93, 33, -1, -1, 36, - 37, 38, -1, 40, 41, 42, 43, -1, 45, 257, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + -1, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, -1, 311, 312, 313, 314, 315, 316, 317, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, -1, -1, -1, -1, 64, 126, -1, + -1, 269, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, -1, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + -1, 256, 257, 258, 259, 260, 261, 63, 263, 264, + 265, -1, -1, -1, 269, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, 280, -1, 282, 283, 284, + 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, + 295, 296, -1, -1, -1, 33, -1, 302, 36, 37, + 38, -1, 40, -1, 42, 43, 311, 45, 313, 314, + -1, 46, -1, -1, -1, -1, -1, -1, -1, 54, + 287, 59, 289, 290, -1, -1, 64, -1, -1, 41, + -1, -1, 44, -1, -1, 331, 332, 333, -1, 335, + -1, 308, 309, -1, -1, 312, 58, 59, 315, 316, + 317, -1, -1, 91, -1, 33, -1, -1, 36, 37, + 38, 96, 40, -1, 42, 43, 362, 45, -1, -1, + -1, -1, -1, 369, -1, -1, -1, 373, -1, -1, + -1, 93, -1, -1, 119, 123, 64, -1, 126, -1, + 386, 387, 127, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, -1, -1, + -1, -1, -1, 91, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, + -1, -1, -1, -1, 41, 308, 309, 44, -1, 312, + -1, -1, 315, 316, 317, 123, -1, -1, 126, -1, + -1, 58, 59, 91, -1, -1, 63, -1, -1, 33, + -1, -1, 36, 37, 38, -1, 40, -1, 42, 43, + -1, 45, -1, -1, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, 123, 93, -1, 126, -1, + 64, -1, -1, -1, -1, -1, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 91, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + -1, 269, -1, 268, 272, 273, 274, 275, -1, 274, + -1, 279, 280, -1, 282, 283, 284, 285, 286, 123, + -1, -1, 126, 291, 292, 293, 294, 295, 296, -1, + 272, 273, 274, 275, 302, -1, -1, 279, -1, -1, + -1, -1, -1, 311, -1, 313, 314, -1, -1, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 300, 301, + -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, + 41, -1, -1, 291, 292, 293, 294, 295, 296, 257, + 258, 259, 260, 261, 302, 263, 264, 265, 59, -1, + -1, 269, -1, 311, -1, 313, 314, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, 63, -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 289, 290, 300, 167, 91, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, -1, 41, 307, -1, - 44, 310, -1, -1, 313, 314, 315, -1, -1, 193, - -1, -1, -1, -1, 58, 59, -1, 33, -1, 126, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 64, 93, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + -1, -1, 93, -1, 302, 272, 273, 274, 275, -1, + -1, -1, 279, 311, 281, 313, 314, -1, -1, -1, + 287, 288, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, -1, 300, 301, 269, 303, 304, 305, 306, + 307, 308, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, 91, 300, 272, 273, 274, - 275, -1, -1, -1, 279, 309, -1, 311, 312, 257, - 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, 298, 299, -1, -1, -1, -1, -1, - 126, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 41, -1, 300, 44, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, 41, 58, 59, 44, - 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, - -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, -1, 93, -1, 291, 292, 293, 294, 295, 296, - -1, -1, -1, 300, -1, -1, -1, -1, 93, -1, - -1, -1, 309, -1, 311, 312, -1, 33, -1, -1, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, -1, 64, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, -1, -1, 269, 298, 299, -1, -1, -1, -1, - -1, -1, -1, -1, 280, 91, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, 33, -1, 300, 36, 37, 38, -1, 40, - -1, 42, 43, 309, 45, 311, 312, -1, -1, -1, - 126, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, -1, -1, 64, -1, -1, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, + 294, 295, 296, 289, 290, -1, 33, -1, 302, 36, + 37, 38, -1, 40, -1, 42, 43, 311, 45, 313, + 314, -1, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 59, -1, -1, -1, -1, 64, -1, -1, + -1, 287, 288, 289, 290, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 305, + 306, 307, 308, 309, 91, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 64, -1, -1, + 287, 288, 289, 290, -1, -1, 33, -1, -1, 36, + 37, 38, -1, 40, -1, 42, 43, -1, 45, 126, + 307, 308, 309, -1, 91, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, 272, 273, 274, 275, -1, 33, -1, 279, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 126, + -1, -1, -1, -1, 91, -1, 93, 281, -1, 300, + 301, -1, -1, 287, 288, 289, 290, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - -1, -1, -1, -1, 64, 126, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, 298, 299, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 91, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, 257, 258, 259, 260, 261, 126, 263, 264, 265, - -1, -1, -1, 269, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, -1, 300, -1, 91, -1, -1, -1, - -1, -1, -1, 309, -1, 311, 312, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, -1, -1, -1, -1, 256, 257, 258, 259, 260, - 261, 126, 263, 264, 265, -1, -1, -1, 269, 64, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, 91, -1, -1, 300, - -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, - 311, 312, -1, -1, -1, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, -1, 33, -1, - 300, 36, 37, 38, -1, 40, -1, 42, 43, 309, - 45, 311, 312, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 280, 91, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, -1, 300, -1, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 126, -1, -1, 41, -1, -1, 44, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 58, 59, -1, 269, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, 41, 300, 93, 44, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + 304, 305, 306, 307, 308, 309, -1, -1, 312, 126, + -1, 315, 316, 317, 91, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - 93, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, 41, -1, 300, 44, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 91, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, 126, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, -1, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 64, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 91, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, 93, 44, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 58, 59, 279, -1, 281, 63, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, 93, 313, 314, 315, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 91, 33, -1, 63, 36, 37, 38, -1, 40, + -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, -1, 313, 314, 315, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, 41, -1, -1, 44, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, 58, 59, - 313, 314, 315, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, 93, -1, 126, 304, 305, 306, + 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 91, -1, 33, -1, -1, 36, 37, 38, -1, 40, + 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + -1, -1, 302, -1, -1, 126, -1, -1, -1, -1, + -1, 311, -1, 313, 314, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, 33, -1, 269, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, 64, -1, + -1, -1, 302, 272, 273, 274, 275, -1, -1, -1, + 279, 311, 281, 313, 314, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, 91, -1, -1, 269, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, -1, 33, + 126, 302, 36, 37, 38, -1, 40, 41, 42, 43, + 311, 45, 313, 314, -1, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + 64, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, 91, -1, 33, + -1, 302, 36, 37, 38, -1, 40, -1, 42, 43, + 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, 29, + 64, -1, 126, -1, -1, -1, -1, -1, 41, -1, + 40, 44, -1, -1, -1, -1, 46, 47, 48, -1, + -1, -1, 52, 53, -1, 58, 59, 91, -1, -1, + 63, -1, -1, -1, -1, 65, 66, 67, 68, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, -1, 41, -1, -1, 44, -1, + 93, -1, 126, -1, 280, -1, 282, 283, 284, 285, + 286, 41, -1, 59, 44, 291, 292, 293, 294, 295, + 296, -1, 112, -1, -1, -1, 302, -1, 58, 59, + -1, -1, -1, 63, -1, 311, -1, 313, 314, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, -1, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, + -1, -1, -1, 93, -1, 41, -1, -1, 44, -1, + -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, 176, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, 203, -1, -1, -1, 93, 302, -1, + -1, -1, -1, -1, -1, 41, -1, 311, 44, 313, + 314, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, -1, -1, -1, -1, 93, 302, 272, + 273, 274, 275, -1, -1, -1, 279, 311, 281, 313, + 314, -1, -1, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, 41, -1, -1, 44, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, + 58, 59, 315, 316, 317, 63, 272, 273, 274, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + 41, 281, -1, 44, 300, 93, -1, 287, 288, 289, + 290, -1, -1, -1, -1, -1, -1, 58, 59, -1, + 300, 301, 63, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 41, 93, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 41, 93, -1, 44, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, 58, + 59, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, 93, -1, -1, 41, -1, -1, + 44, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, - -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 41, -1, - 310, 44, 93, 313, 314, 315, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - 93, -1, 287, 288, 289, 290, -1, -1, -1, 41, - -1, -1, 44, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, 58, 59, 313, 314, - 315, 63, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 93, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 288, 289, 290, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, 41, -1, -1, 44, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, -1, -1, 310, - 58, 59, 313, 314, 315, 63, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, 93, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 41, -1, 310, - -1, -1, 313, 314, 315, -1, -1, -1, -1, 272, - 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, 41, 310, -1, 93, - 313, 314, 315, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, 93, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, 93, + 279, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, 300, 301, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, 93, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + -1, 63, 41, -1, -1, 44, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, 58, + 59, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, 93, -1, -1, -1, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, + 315, 316, 317, 41, 93, -1, 44, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + 58, 59, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 272, 273, 274, 275, 41, -1, + -1, 279, -1, 281, 93, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, 58, 59, -1, -1, -1, + 63, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 41, -1, -1, -1, 298, 299, 93, 301, - 302, 303, 304, 305, 306, 307, -1, -1, 310, 58, - 59, 313, 314, 315, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 300, 301, + 279, 303, 304, 305, 306, 307, 308, 309, -1, 41, + 312, -1, 44, 315, 316, 317, -1, -1, -1, -1, + -1, 300, 301, -1, 303, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, 93, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - 41, -1, -1, 44, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, 58, 59, 313, - 314, 315, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, 310, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, 41, 93, -1, - 44, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 279, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 93, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 300, 301, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - 41, -1, -1, 44, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 41, 281, -1, 44, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 300, 301, 63, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 33, -1, 312, + -1, -1, 315, 316, 317, 41, -1, -1, 41, 45, + -1, 44, 48, -1, -1, 51, 93, -1, -1, 55, + 56, 57, 58, 59, -1, 58, 59, 63, 64, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 41, 281, + -1, 44, -1, -1, -1, 287, 288, 289, 290, -1, + 93, -1, 98, -1, -1, 58, 59, -1, 300, 301, + 63, 303, 304, 305, 306, 307, 308, 309, -1, -1, + 312, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, 93, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + -1, 187, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, -1, -1, -1, -1, 93, + 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, -1, -1, -1, 272, -1, -1, 272, + 273, 274, 275, -1, -1, -1, 279, 41, 281, -1, + 44, -1, 93, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, 58, 59, -1, 300, 301, 305, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, -1, 287, 288, 289, 290, -1, 93, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, 93, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, + -1, -1, -1, 287, 288, 289, 290, 58, -1, -1, + -1, 93, 63, -1, -1, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 41, 298, 299, 44, 301, 302, 303, 304, - 305, 306, 307, -1, 272, 273, 274, 275, -1, 58, - 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 41, - 298, 299, 44, 301, 302, 303, 304, 305, 306, 307, - 41, -1, -1, 44, 93, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, 93, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, -1, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, 93, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, 93, -1, -1, - 279, -1, 281, -1, -1, -1, -1, 93, 287, 288, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, -1, -1, - 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, 272, 273, 274, 275, 287, 288, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 298, 299, -1, 301, - 302, 303, 304, 305, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, - -1, -1, 287, 288, -1, -1, -1, -1, 41, -1, - -1, 44, -1, 298, 299, -1, 301, 302, 303, 304, - 305, -1, -1, -1, -1, 58, 59, 93, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, -1, -1, -1, -1, - 93, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, 272, 273, 274, 275, - -1, 287, 288, 279, -1, 281, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 305, - -1, 41, 298, 299, 44, 301, 302, 303, 304, 305, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 30, -1, -1, 63, -1, -1, -1, -1, 38, -1, - -1, -1, 42, -1, -1, 45, -1, -1, -1, -1, - -1, -1, 52, 53, 54, 55, 56, -1, -1, -1, - 60, 61, -1, 93, -1, -1, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 272, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, -1, -1, 41, -1, -1, 44, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, -1, 93, -1, + 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, 93, -1, -1, -1, -1, + 287, 288, 289, 290, -1, 93, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 93, -1, -1, 58, 59, -1, -1, -1, + 63, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, + -1, -1, -1, -1, -1, 287, 288, -1, 290, -1, + 93, 41, 58, 59, 44, -1, -1, 63, 300, 301, + -1, 303, 304, 305, 306, 307, 308, -1, 58, 59, + 281, -1, -1, 63, -1, -1, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, 93, 315, 316, 317, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, -1, -1, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, -1, 272, 273, 274, 275, -1, 41, + -1, 279, 44, 281, 272, 273, 274, 275, -1, 287, + 288, 279, -1, 281, 93, -1, 58, 59, -1, 287, + 288, 63, 300, 301, -1, 303, 304, 305, 306, 307, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, 93, -1, -1, -1, -1, 287, 288, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, -1, 303, 304, 305, 306, 307, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 298, 299, -1, 301, 302, - 303, -1, -1, -1, -1, -1, -1, -1, 178, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 288, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, + 303, 304, 305, 306, 307, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, 300, 301, -1, 303, 304, 305, + 306, 307, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, -1, 303, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 281, -1, -1, -1, -1, -1, -1, 258, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, + -1, -1, -1, -1, -1, -1, -1, -1, 300, 301, + -1, 303, 304, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 315 +#define YYMAXTOKEN 317 #if YYDEBUG static char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1139,9 +1142,9 @@ static char *yyname[] = { "ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", "CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP", "RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY", -"PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR","ANDAND","BITOROP", -"BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC", -"POSTINC","POSTDEC","ARROW", +"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR", +"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", +"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; static char *yyrule[] = { "$accept : prog", @@ -1192,18 +1195,25 @@ static char *yyrule[] = { "label : LABEL", "decl : format", "decl : subrout", +"decl : mysubrout", "decl : package", "decl : use", "format : FORMAT startformsub formname block", "formname : WORD", "formname :", -"subrout : SUB startsub subname proto subbody", +"mysubrout : MYSUB startsub subname proto subattrlist subbody", +"subrout : SUB startsub subname proto subattrlist subbody", "startsub :", "startanonsub :", "startformsub :", "subname : WORD", "proto :", "proto : THING", +"subattrlist :", +"subattrlist : COLONATTR THING", +"subattrlist : COLONATTR", +"myattrlist : COLONATTR THING", +"myattrlist : COLONATTR", "subbody : block", "subbody : ';'", "package : PACKAGE WORD ';'", @@ -1262,14 +1272,15 @@ static char *yyrule[] = { "term : term POSTDEC", "term : PREINC term", "term : PREDEC term", -"term : local term", +"term : myattrterm", +"term : LOCAL term", "term : '(' expr ')'", "term : '(' ')'", "term : '[' expr ']'", "term : '[' ']'", "term : HASHBRACK expr ';' '}'", "term : HASHBRACK ';' '}'", -"term : ANONSUB startanonsub proto block", +"term : ANONSUB startanonsub proto subattrlist block", "term : scalar", "term : star", "term : hsh", @@ -1307,13 +1318,18 @@ static char *yyrule[] = { "term : PMFUNC '(' term ',' term ')'", "term : WORD", "term : listop", +"myattrterm : MY myterm myattrlist", +"myattrterm : MY myterm", +"myterm : '(' expr ')'", +"myterm : '(' ')'", +"myterm : scalar", +"myterm : hsh", +"myterm : ary", "listexpr :", "listexpr : argexpr", "listexprcom :", "listexprcom : expr", "listexprcom : expr ','", -"local : LOCAL", -"local : MY", "my_scalar : scalar", "amper : '&' indirob", "scalar : '$' indirob", @@ -1341,26 +1357,22 @@ static char *yyrule[] = { #define YYMAXDEPTH 500 #endif #endif -#line 666 "perly.y" +#line 726 "perly.y" /* PROGRAM */ -#line 1427 "perly.c" + +/* more stuff added to make perly_c.diff easier to apply */ + +#ifdef yyparse +#undef yyparse +#endif +#define yyparse() Perl_yyparse(pTHX) + +#line 1371 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab - -struct ysv { - short* yyss; - YYSTYPE* yyvs; - int oldyydebug; - int oldyynerrs; - int oldyyerrflag; - int oldyychar; - YYSTYPE oldyyval; - YYSTYPE oldyylval; -}; - int -Perl_yyparse(pTHX) +yyparse() { register int yym, yyn, yystate; register short *yyssp; @@ -1371,9 +1383,6 @@ Perl_yyparse(pTHX) int retval = 0; #if YYDEBUG register char *yys; -#ifndef __cplusplus - extern char *getenv(); -#endif #endif struct ysv *ysave; @@ -1385,7 +1394,7 @@ Perl_yyparse(pTHX) ysave->oldyychar = yychar; ysave->oldyyval = yyval; ysave->oldyylval = yylval; - + #if YYDEBUG if (yys = getenv("YYDEBUG")) { @@ -1424,7 +1433,7 @@ yyloop: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - printf("yydebug: state %d, reading %d (%s)\n", yystate, + PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif @@ -1446,10 +1455,8 @@ yyloop: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1490,8 +1497,8 @@ yyinrecovery: #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery shifting to state %d\n", - *yyssp, yytable[yyn]); + "yydebug: state %d, error recovery shifting to state %d\n", + *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -1502,10 +1509,8 @@ yyinrecovery: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, - yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, - yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1519,9 +1524,8 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, - "yydebug: error recovery discarding state %d\n", - *yyssp); + PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", + *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; @@ -1538,9 +1542,8 @@ yyinrecovery: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery discards token %d (%s)\n", - yystate, yychar, yys); + PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); } #endif yychar = (-1); @@ -1557,7 +1560,7 @@ yyreduce: switch (yyn) { case 1: -#line 101 "perly.y" +#line 125 "perly.y" { #if defined(YYDEBUG) && defined(DEBUGGING) yydebug = (PL_debug & 1); @@ -1566,50 +1569,50 @@ case 1: } break; case 2: -#line 108 "perly.y" +#line 132 "perly.y" { newPROG(yyvsp[0].opval); } break; case 3: -#line 112 "perly.y" +#line 136 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 4: -#line 118 "perly.y" +#line 142 "perly.y" { yyval.ival = block_start(TRUE); } break; case 5: -#line 122 "perly.y" +#line 146 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 6: -#line 128 "perly.y" +#line 152 "perly.y" { yyval.ival = block_start(FALSE); } break; case 7: -#line 132 "perly.y" +#line 156 "perly.y" { yyval.opval = Nullop; } break; case 8: -#line 134 "perly.y" +#line 158 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 9: -#line 136 "perly.y" +#line 160 "perly.y" { yyval.opval = append_list(OP_LINESEQ, (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval); PL_pad_reset_pending = TRUE; if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; } break; case 10: -#line 143 "perly.y" +#line 167 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); } break; case 12: -#line 146 "perly.y" +#line 170 "perly.y" { if (yyvsp[-1].pval != Nullch) { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0)); } @@ -1620,75 +1623,75 @@ case 12: PL_expect = XSTATE; } break; case 13: -#line 155 "perly.y" +#line 179 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval); PL_expect = XSTATE; } break; case 14: -#line 160 "perly.y" +#line 184 "perly.y" { yyval.opval = Nullop; } break; case 15: -#line 162 "perly.y" +#line 186 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 16: -#line 164 "perly.y" +#line 188 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 17: -#line 166 "perly.y" +#line 190 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 18: -#line 168 "perly.y" +#line 192 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); } break; case 19: -#line 170 "perly.y" +#line 194 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);} break; case 20: -#line 172 "perly.y" +#line 196 "perly.y" { yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival, Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); } break; case 21: -#line 177 "perly.y" +#line 201 "perly.y" { yyval.opval = Nullop; } break; case 22: -#line 179 "perly.y" +#line 203 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 23: -#line 181 "perly.y" +#line 205 "perly.y" { PL_copline = yyvsp[-5].ival; yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); PL_hints |= HINT_BLOCK_SCOPE; } break; case 24: -#line 187 "perly.y" +#line 211 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 25: -#line 191 "perly.y" +#line 215 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 26: -#line 197 "perly.y" +#line 221 "perly.y" { yyval.opval = Nullop; } break; case 27: -#line 199 "perly.y" +#line 223 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 28: -#line 203 "perly.y" +#line 227 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1696,7 +1699,7 @@ case 28: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 29: -#line 209 "perly.y" +#line 233 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1704,23 +1707,23 @@ case 29: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 30: -#line 215 "perly.y" +#line 239 "perly.y" { yyval.opval = block_end(yyvsp[-6].ival, newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 31: -#line 218 "perly.y" +#line 242 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 32: -#line 222 "perly.y" +#line 246 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 33: -#line 226 "perly.y" +#line 250 "perly.y" { OP *forop = append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval), newWHILEOP(0, 1, (LOOP*)Nullop, @@ -1730,427 +1733,459 @@ case 33: yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); } break; case 34: -#line 234 "perly.y" +#line 258 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 35: -#line 240 "perly.y" +#line 264 "perly.y" { yyval.opval = Nullop; } break; case 37: -#line 245 "perly.y" +#line 269 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; case 39: -#line 250 "perly.y" +#line 274 "perly.y" { yyval.opval = invert(scalar(yyvsp[0].opval)); } break; case 40: -#line 254 "perly.y" +#line 278 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 41: -#line 258 "perly.y" +#line 282 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 42: -#line 262 "perly.y" +#line 286 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 43: -#line 266 "perly.y" +#line 290 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 44: -#line 270 "perly.y" +#line 294 "perly.y" { yyval.pval = Nullch; } break; case 46: -#line 275 "perly.y" +#line 299 "perly.y" { yyval.ival = 0; } break; case 47: -#line 277 "perly.y" +#line 301 "perly.y" { yyval.ival = 0; } break; case 48: -#line 279 "perly.y" +#line 303 "perly.y" { yyval.ival = 0; } break; case 49: -#line 281 "perly.y" +#line 305 "perly.y" { yyval.ival = 0; } break; case 50: -#line 285 "perly.y" -{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 307 "perly.y" +{ yyval.ival = 0; } break; case 51: -#line 288 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 311 "perly.y" +{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 52: -#line 289 "perly.y" -{ yyval.opval = Nullop; } +#line 314 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 53: -#line 293 "perly.y" -{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +#line 315 "perly.y" +{ yyval.opval = Nullop; } break; case 54: -#line 297 "perly.y" -{ yyval.ival = start_subparse(FALSE, 0); } +#line 319 "perly.y" +{ newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 55: -#line 301 "perly.y" -{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +#line 323 "perly.y" +{ newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 56: -#line 305 "perly.y" -{ yyval.ival = start_subparse(TRUE, 0); } +#line 327 "perly.y" +{ yyval.ival = start_subparse(FALSE, 0); } break; case 57: -#line 308 "perly.y" +#line 331 "perly.y" +{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +break; +case 58: +#line 335 "perly.y" +{ yyval.ival = start_subparse(TRUE, 0); } +break; +case 59: +#line 338 "perly.y" { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT")) CvSPECIAL_on(PL_compcv); yyval.opval = yyvsp[0].opval; } break; -case 58: -#line 316 "perly.y" +case 60: +#line 346 "perly.y" { yyval.opval = Nullop; } break; -case 60: -#line 320 "perly.y" +case 62: +#line 351 "perly.y" +{ yyval.opval = Nullop; } +break; +case 63: +#line 353 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 64: +#line 355 "perly.y" +{ yyval.opval = Nullop; } +break; +case 65: +#line 359 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 61: -#line 321 "perly.y" +case 66: +#line 361 "perly.y" +{ yyval.opval = Nullop; } +break; +case 67: +#line 364 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 68: +#line 365 "perly.y" { yyval.opval = Nullop; PL_expect = XSTATE; } break; -case 62: -#line 325 "perly.y" +case 69: +#line 369 "perly.y" { package(yyvsp[-1].opval); } break; -case 63: -#line 327 "perly.y" +case 70: +#line 371 "perly.y" { package(Nullop); } break; -case 64: -#line 331 "perly.y" +case 71: +#line 375 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; -case 65: -#line 333 "perly.y" +case 72: +#line 377 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; -case 66: -#line 337 "perly.y" +case 73: +#line 381 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 67: -#line 339 "perly.y" +case 74: +#line 383 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 69: -#line 344 "perly.y" +case 76: +#line 388 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 70: -#line 346 "perly.y" +case 77: +#line 390 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 72: -#line 351 "perly.y" +case 79: +#line 395 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; -case 73: -#line 354 "perly.y" +case 80: +#line 398 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; -case 74: -#line 357 "perly.y" +case 81: +#line 401 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 75: -#line 362 "perly.y" +case 82: +#line 406 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar(yyvsp[-2].opval), newUNOP(OP_METHOD, 0, yyvsp[0].opval))); } break; -case 76: -#line 366 "perly.y" +case 83: +#line 410 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; -case 77: -#line 371 "perly.y" +case 84: +#line 415 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; -case 78: -#line 376 "perly.y" +case 85: +#line 420 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 79: -#line 378 "perly.y" +case 86: +#line 422 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 80: -#line 380 "perly.y" -{ yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } +case 87: +#line 424 "perly.y" +{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } break; -case 81: -#line 382 "perly.y" +case 88: +#line 426 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; -case 84: -#line 392 "perly.y" +case 91: +#line 436 "perly.y" { yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } break; -case 85: -#line 394 "perly.y" +case 92: +#line 438 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } break; -case 86: -#line 396 "perly.y" +case 93: +#line 440 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 87: -#line 400 "perly.y" +case 94: +#line 444 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 88: -#line 404 "perly.y" +case 95: +#line 448 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 89: -#line 407 "perly.y" +case 96: +#line 451 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 90: -#line 412 "perly.y" +case 97: +#line 456 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 91: -#line 417 "perly.y" +case 98: +#line 461 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 92: -#line 420 "perly.y" +case 99: +#line 464 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 93: -#line 425 "perly.y" +case 100: +#line 469 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-3].opval)))); } break; -case 94: -#line 429 "perly.y" +case 101: +#line 473 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-2].opval))); } break; -case 95: -#line 435 "perly.y" +case 102: +#line 479 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 96: -#line 437 "perly.y" +case 103: +#line 481 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 97: -#line 439 "perly.y" +case 104: +#line 483 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; -case 98: -#line 443 "perly.y" +case 105: +#line 487 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 99: -#line 445 "perly.y" +case 106: +#line 489 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 100: -#line 447 "perly.y" +case 107: +#line 491 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 101: -#line 449 "perly.y" +case 108: +#line 493 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 102: -#line 451 "perly.y" +case 109: +#line 495 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 103: -#line 453 "perly.y" +case 110: +#line 497 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 104: -#line 455 "perly.y" +case 111: +#line 499 "perly.y" { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; -case 105: -#line 457 "perly.y" +case 112: +#line 501 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 106: -#line 459 "perly.y" +case 113: +#line 503 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 107: -#line 461 "perly.y" +case 114: +#line 505 "perly.y" { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 108: -#line 463 "perly.y" +case 115: +#line 507 "perly.y" { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 109: -#line 466 "perly.y" +case 116: +#line 510 "perly.y" { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; -case 110: -#line 468 "perly.y" +case 117: +#line 512 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 111: -#line 470 "perly.y" +case 118: +#line 514 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 112: -#line 472 "perly.y" +case 119: +#line 516 "perly.y" { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; -case 113: -#line 474 "perly.y" +case 120: +#line 518 "perly.y" { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; -case 114: -#line 476 "perly.y" +case 121: +#line 520 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 115: -#line 479 "perly.y" +case 122: +#line 523 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 116: -#line 482 "perly.y" +case 123: +#line 526 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 117: -#line 485 "perly.y" +case 124: +#line 529 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 118: -#line 488 "perly.y" +case 125: +#line 532 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 126: +#line 534 "perly.y" { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; -case 119: -#line 490 "perly.y" +case 127: +#line 536 "perly.y" { yyval.opval = sawparens(yyvsp[-1].opval); } break; -case 120: -#line 492 "perly.y" +case 128: +#line 538 "perly.y" { yyval.opval = sawparens(newNULLLIST()); } break; -case 121: -#line 494 "perly.y" +case 129: +#line 540 "perly.y" { yyval.opval = newANONLIST(yyvsp[-1].opval); } break; -case 122: -#line 496 "perly.y" +case 130: +#line 542 "perly.y" { yyval.opval = newANONLIST(Nullop); } break; -case 123: -#line 498 "perly.y" +case 131: +#line 544 "perly.y" { yyval.opval = newANONHASH(yyvsp[-2].opval); } break; -case 124: -#line 500 "perly.y" +case 132: +#line 546 "perly.y" { yyval.opval = newANONHASH(Nullop); } break; -case 125: -#line 502 "perly.y" -{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +case 133: +#line 548 "perly.y" +{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; -case 126: -#line 504 "perly.y" +case 134: +#line 550 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 127: -#line 506 "perly.y" +case 135: +#line 552 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 128: -#line 508 "perly.y" +case 136: +#line 554 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 129: -#line 510 "perly.y" +case 137: +#line 556 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 130: -#line 512 "perly.y" +case 138: +#line 558 "perly.y" { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; -case 131: -#line 514 "perly.y" +case 139: +#line 560 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 132: -#line 516 "perly.y" +case 140: +#line 562 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; -case 133: -#line 518 "perly.y" +case 141: +#line 564 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; -case 134: -#line 520 "perly.y" +case 142: +#line 566 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list(yyvsp[-1].opval), ref(yyvsp[-3].opval, OP_ASLICE))); } break; -case 135: -#line 526 "perly.y" +case 143: +#line 572 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2158,38 +2193,38 @@ case 135: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); PL_expect = XOPERATOR; } break; -case 136: -#line 533 "perly.y" +case 144: +#line 579 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 137: -#line 535 "perly.y" +case 145: +#line 581 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; -case 138: -#line 537 "perly.y" +case 146: +#line 583 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; -case 139: -#line 539 "perly.y" +case 147: +#line 585 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; -case 140: -#line 542 "perly.y" +case 148: +#line 588 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 141: -#line 545 "perly.y" +case 149: +#line 591 "perly.y" { yyval.opval = dofile(yyvsp[0].opval); } break; -case 142: -#line 547 "perly.y" +case 150: +#line 593 "perly.y" { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } break; -case 143: -#line 549 "perly.y" +case 151: +#line 595 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2198,8 +2233,8 @@ case 143: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 144: -#line 557 "perly.y" +case 152: +#line 603 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2209,151 +2244,171 @@ case 144: scalar(yyvsp[-3].opval) )))); dep();} break; -case 145: -#line 566 "perly.y" +case 153: +#line 612 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; -case 146: -#line 570 "perly.y" +case 154: +#line 616 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; -case 147: -#line 575 "perly.y" +case 155: +#line 621 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; -case 148: -#line 578 "perly.y" +case 156: +#line 624 "perly.y" { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 149: -#line 580 "perly.y" +case 157: +#line 626 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 150: -#line 582 "perly.y" +case 158: +#line 628 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 151: -#line 584 "perly.y" +case 159: +#line 630 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 152: -#line 586 "perly.y" +case 160: +#line 632 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 153: -#line 588 "perly.y" +case 161: +#line 634 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 154: -#line 591 "perly.y" +case 162: +#line 637 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 155: -#line 593 "perly.y" +case 163: +#line 639 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, 0); } break; -case 156: -#line 595 "perly.y" +case 164: +#line 641 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[0].opval)); } break; -case 157: -#line 598 "perly.y" +case 165: +#line 644 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; -case 158: -#line 600 "perly.y" +case 166: +#line 646 "perly.y" { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 159: -#line 602 "perly.y" +case 167: +#line 648 "perly.y" { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 160: -#line 604 "perly.y" +case 168: +#line 650 "perly.y" { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; -case 163: -#line 610 "perly.y" -{ yyval.opval = Nullop; } +case 171: +#line 656 "perly.y" +{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } break; -case 164: -#line 612 "perly.y" +case 172: +#line 658 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +break; +case 173: +#line 662 "perly.y" +{ yyval.opval = sawparens(yyvsp[-1].opval); } +break; +case 174: +#line 664 "perly.y" +{ yyval.opval = sawparens(newNULLLIST()); } +break; +case 175: +#line 666 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 165: -#line 616 "perly.y" +case 176: +#line 668 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 177: +#line 670 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 178: +#line 674 "perly.y" { yyval.opval = Nullop; } break; -case 166: -#line 618 "perly.y" +case 179: +#line 676 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 167: -#line 620 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +case 180: +#line 680 "perly.y" +{ yyval.opval = Nullop; } break; -case 168: -#line 623 "perly.y" -{ yyval.ival = 0; } +case 181: +#line 682 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; -case 169: -#line 624 "perly.y" -{ yyval.ival = 1; } +case 182: +#line 684 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; -case 170: -#line 628 "perly.y" +case 183: +#line 688 "perly.y" { PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; -case 171: -#line 632 "perly.y" +case 184: +#line 692 "perly.y" { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 172: -#line 636 "perly.y" +case 185: +#line 696 "perly.y" { yyval.opval = newSVREF(yyvsp[0].opval); } break; -case 173: -#line 640 "perly.y" +case 186: +#line 700 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 174: -#line 644 "perly.y" +case 187: +#line 704 "perly.y" { yyval.opval = newHVREF(yyvsp[0].opval); } break; -case 175: -#line 648 "perly.y" +case 188: +#line 708 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 176: -#line 652 "perly.y" +case 189: +#line 712 "perly.y" { yyval.opval = newGVREF(0,yyvsp[0].opval); } break; -case 177: -#line 656 "perly.y" +case 190: +#line 716 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 178: -#line 658 "perly.y" +case 191: +#line 718 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 179: -#line 660 "perly.y" +case 192: +#line 720 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; -case 180: -#line 663 "perly.y" +case 193: +#line 723 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2365 "perly.c" +#line 2412 "perly.c" } yyssp -= yym; yystate = *yyssp; @@ -2364,8 +2419,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state 0 to state %d\n", - YYFINAL); + "yydebug: after reduction, shifting from state 0 to state %d\n", + YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; @@ -2395,8 +2450,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state %d to state %d\n", - *yyssp, yystate); + "yydebug: after reduction, shifting from state %d to state %d\n", + *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -2407,10 +2462,8 @@ break; int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; diff --git a/perly.fixer b/perly.fixer index afe1a38..daa558e 100755 --- a/perly.fixer +++ b/perly.fixer @@ -21,15 +21,34 @@ tmp=/tmp/f$$ if grep 'yaccpar 1.8 (Berkeley)' $input >/dev/null 2>&1; then cp $input $output + # Don't expect the diff to do everything -- do some by hand if test -f perly_c.diff; then patch -F3 $output $tmp && mv -f $tmp $output || exit 1 rm -rf $input + echo "If you need to debug perly.c, you need to fix up the #line" + echo "directives yourself." fi exit elif grep 'yaccpar 1.9 (Berkeley)' $input >/dev/null 2>&1; then if test -f perly.c.dif9; then patch -F3 $output $tmp && mv -f $tmp $output || exit 1 rm -rf $input + echo "If you need to debug perly.c, you need to fix up the #line" + echo "directives yourself." exit 0 else echo "Diffs from byacc-1.9 are not available." @@ -90,7 +109,7 @@ case "$plan" in # Also added are out of memory checks (makes porting the generated # code easier) For most systems, it can't hurt. -- TD "bsd43") - echo "Attempting to path perly.c to allow dynamic yacc stack allocation" + echo "Attempting to patch perly.c to allow dynamic yacc stack allocation" echo "Assuming bsd4.3 yaccpar" cat >$tmp <<'END' /YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];/c\ @@ -145,7 +164,7 @@ END ####################################################### "isc") # Interactive Systems 2.2 version - echo "Attempting to path perly.c to allow dynamic yacc stack allocation" + echo "Attempting to patch perly.c to allow dynamic yacc stack allocation" echo "Assuming Interactive SysVr3 2.2 yaccpar" # Easier to simply put whole script here than to modify the # bsd script with sed. diff --git a/perly.h b/perly.h index 14f5e92..15dfa0c 100644 --- a/perly.h +++ b/perly.h @@ -39,25 +39,27 @@ #define NOAMP 294 #define LOCAL 295 #define MY 296 -#define PREC_LOW 297 -#define OROP 298 -#define ANDOP 299 -#define NOTOP 300 -#define ASSIGNOP 301 -#define OROR 302 -#define ANDAND 303 -#define BITOROP 304 -#define BITANDOP 305 -#define SHIFTOP 306 -#define MATCHOP 307 -#define UMINUS 308 -#define REFGEN 309 -#define POWOP 310 -#define PREINC 311 -#define PREDEC 312 -#define POSTINC 313 -#define POSTDEC 314 -#define ARROW 315 +#define MYSUB 297 +#define COLONATTR 298 +#define PREC_LOW 299 +#define OROP 300 +#define ANDOP 301 +#define NOTOP 302 +#define ASSIGNOP 303 +#define OROR 304 +#define ANDAND 305 +#define BITOROP 306 +#define BITANDOP 307 +#define SHIFTOP 308 +#define MATCHOP 309 +#define UMINUS 310 +#define REFGEN 311 +#define POWOP 312 +#define PREINC 313 +#define PREDEC 314 +#define POSTINC 315 +#define POSTDEC 316 +#define ARROW 317 #endif /* PERL_CORE */ typedef union { diff --git a/perly.y b/perly.y index 9df012c..ddc0efc 100644 --- a/perly.y +++ b/perly.y @@ -19,13 +19,34 @@ #define dep() deprecate("\"do\" to call subroutines") +/* stuff included here to make perly_c.diff apply better */ + +#define yydebug PL_yydebug +#define yynerrs PL_yynerrs +#define yyerrflag PL_yyerrflag +#define yychar PL_yychar +#define yyval PL_yyval +#define yylval PL_yylval + +struct ysv { + short* yyss; + YYSTYPE* yyvs; + int oldyydebug; + int oldyynerrs; + int oldyyerrflag; + int oldyychar; + YYSTYPE oldyyval; + YYSTYPE oldyylval; +}; + +static void yydestruct(pTHXo_ void *ptr); + %} %start prog %{ -/* I sense a Big Blue pattern here... */ -#if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC) +#if 0 /* get this from perly.h instead */ %} %union { @@ -36,11 +57,12 @@ } %{ -#endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */ +#endif /* 0 */ #ifdef USE_PURE_BISON #define YYLEX_PARAM (&yychar) #endif + %} %token '{' @@ -54,15 +76,17 @@ %token FUNC0 FUNC1 FUNC UNIOP LSTOP %token RELOP EQOP MULOP ADDOP %token DOLSHARP DO HASHBRACK NOAMP -%token LOCAL MY +%token LOCAL MY MYSUB +%token COLONATTR -%type prog decl local format startsub startanonsub startformsub +%type prog decl format startsub startanonsub startformsub %type remember mremember '&' %type block mblock lineseq line loop cond else %type expr term subscripted scalar ary hsh arylen star amper sideff %type argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr %type listexpr listexprcom indirob listop method %type formname subname proto subbody cont my_scalar +%type subattrlist myattrlist mysubrout myattrterm myterm %type label %nonassoc PREC_LOW @@ -275,6 +299,8 @@ decl : format { $$ = 0; } | subrout { $$ = 0; } + | mysubrout + { $$ = 0; } | package { $$ = 0; } | use @@ -289,8 +315,12 @@ formname: WORD { $$ = $1; } | /* NULL */ { $$ = Nullop; } ; -subrout : SUB startsub subname proto subbody - { newSUB($2, $3, $4, $5); } +mysubrout: MYSUB startsub subname proto subattrlist subbody + { newMYSUB($2, $3, $4, $5, $6); } + ; + +subrout : SUB startsub subname proto subattrlist subbody + { newATTRSUB($2, $3, $4, $5, $6); } ; startsub: /* NULL */ /* start a regular subroutine scope */ @@ -317,6 +347,20 @@ proto : /* NULL */ | THING ; +subattrlist: /* NULL */ + { $$ = Nullop; } + | COLONATTR THING + { $$ = $2; } + | COLONATTR + { $$ = Nullop; } + ; + +myattrlist: COLONATTR THING + { $$ = $2; } + | COLONATTR + { $$ = Nullop; } + ; + subbody : block { $$ = $1; } | ';' { $$ = Nullop; PL_expect = XSTATE; } ; @@ -377,7 +421,7 @@ listop : LSTOP indirob argexpr | FUNC '(' listexprcom ')' { $$ = convert($1, 0, $3); } | LSTOPSUB startanonsub block - { $3 = newANONSUB($2, 0, $3); } + { $3 = newANONATTRSUB($2, 0, Nullop, $3); } listexpr %prec LSTOP { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, @@ -484,7 +528,9 @@ term : term ASSIGNOP term | PREDEC term { $$ = newUNOP(OP_PREDEC, 0, mod(scalar($2), OP_PREDEC)); } - | local term %prec UNIOP + | myattrterm %prec UNIOP + { $$ = $1; } + | LOCAL term %prec UNIOP { $$ = localize($2,$1); } | '(' expr ')' { $$ = sawparens($2); } @@ -498,8 +544,8 @@ term : term ASSIGNOP term { $$ = newANONHASH($2); } | HASHBRACK ';' '}' %prec '(' { $$ = newANONHASH(Nullop); } - | ANONSUB startanonsub proto block %prec '(' - { $$ = newANONSUB($2, $3, $4); } + | ANONSUB startanonsub proto subattrlist block %prec '(' + { $$ = newANONATTRSUB($2, $3, $4, $5); } | scalar %prec '(' { $$ = $1; } | star %prec '(' @@ -606,6 +652,24 @@ term : term ASSIGNOP term | listop ; +myattrterm: MY myterm myattrlist + { $$ = my_attrs($2,$3); } + | MY myterm + { $$ = localize($2,$1); } + ; + +myterm : '(' expr ')' + { $$ = sawparens($2); } + | '(' ')' + { $$ = sawparens(newNULLLIST()); } + | scalar %prec '(' + { $$ = $1; } + | hsh %prec '(' + { $$ = $1; } + | ary %prec '(' + { $$ = $1; } + ; + listexpr: /* NULL */ %prec PREC_LOW { $$ = Nullop; } | argexpr %prec PREC_LOW @@ -620,10 +684,6 @@ listexprcom: /* NULL */ { $$ = $1; } ; -local : LOCAL { $$ = 0; } - | MY { $$ = 1; } - ; - my_scalar: scalar { PL_in_my = 0; $$ = my($1); } ; @@ -664,3 +724,11 @@ indirob : WORD ; %% /* PROGRAM */ + +/* more stuff added to make perly_c.diff easier to apply */ + +#ifdef yyparse +#undef yyparse +#endif +#define yyparse() Perl_yyparse(pTHX) + diff --git a/perly_c.diff b/perly_c.diff index 463df80..7ade2f3 100644 --- a/perly_c.diff +++ b/perly_c.diff @@ -1,294 +1,19 @@ -*** perly.c.orig Mon Jul 26 03:27:57 1999 ---- perly.c Mon Jul 26 02:47:03 1999 +*** y.tab.c.orig Thu Aug 26 22:31:26 1999 +--- y.tab.c Thu Aug 26 22:32:22 1999 *************** -*** 8,91 **** - #include "perl.h" - - #define dep() deprecate("\"do\" to call subroutines") - -! #line 27 "perly.y" -! /* I sense a Big Blue pattern here... */ -! #if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC) -! #line 31 "perly.y" -! typedef union { -! I32 ival; -! char *pval; -! OP *opval; -! GV *gvval; -! } YYSTYPE; -! #line 39 "perly.y" -! #endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */ - -! #ifdef USE_PURE_BISON -! #define YYLEX_PARAM (&yychar) -! #endif -! #line 29 "y.tab.c" -! #define WORD 257 -! #define METHOD 258 -! #define FUNCMETH 259 -! #define THING 260 -! #define PMFUNC 261 -! #define PRIVATEREF 262 -! #define FUNC0SUB 263 -! #define UNIOPSUB 264 -! #define LSTOPSUB 265 -! #define LABEL 266 -! #define FORMAT 267 -! #define SUB 268 -! #define ANONSUB 269 -! #define PACKAGE 270 -! #define USE 271 -! #define WHILE 272 -! #define UNTIL 273 -! #define IF 274 -! #define UNLESS 275 -! #define ELSE 276 -! #define ELSIF 277 -! #define CONTINUE 278 -! #define FOR 279 -! #define LOOPEX 280 -! #define DOTDOT 281 -! #define FUNC0 282 -! #define FUNC1 283 -! #define FUNC 284 -! #define UNIOP 285 -! #define LSTOP 286 -! #define RELOP 287 -! #define EQOP 288 -! #define MULOP 289 -! #define ADDOP 290 -! #define DOLSHARP 291 -! #define DO 292 -! #define HASHBRACK 293 -! #define NOAMP 294 -! #define LOCAL 295 -! #define MY 296 -! #define PREC_LOW 297 -! #define OROP 298 -! #define ANDOP 299 -! #define NOTOP 300 -! #define ASSIGNOP 301 -! #define OROR 302 -! #define ANDAND 303 -! #define BITOROP 304 -! #define BITANDOP 305 -! #define SHIFTOP 306 -! #define MATCHOP 307 -! #define UMINUS 308 -! #define REFGEN 309 -! #define POWOP 310 -! #define PREINC 311 -! #define PREDEC 312 -! #define POSTINC 313 -! #define POSTDEC 314 -! #define ARROW 315 - #define YYERRCODE 256 -! short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, ---- 8,25 ---- - #include "perl.h" - -+ #define yydebug PL_yydebug -+ #define yynerrs PL_yynerrs -+ #define yyerrflag PL_yyerrflag -+ #define yychar PL_yychar -+ #define yyval PL_yyval -+ #define yylval PL_yylval -+ - #define dep() deprecate("\"do\" to call subroutines") - -! static void yydestruct(pTHXo_ void *ptr); - -! #line 27 "perly.y" - #define YYERRCODE 256 -! static short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, -*************** -*** 107,111 **** - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, - }; -! short yylen[] = { 2, - 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, ---- 41,45 ---- - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, - }; -! static short yylen[] = { 2, - 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, -*************** -*** 127,131 **** - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - }; -! short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, ---- 61,65 ---- - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - }; -! static short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, -*************** -*** 166,170 **** - 5, 0, 30, 0, 0, 33, 0, 23, - }; -! short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, ---- 100,104 ---- - 5, 0, 30, 0, 0, 33, 0, 23, - }; -! static short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, -*************** -*** 174,178 **** - 260, - }; -! short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, ---- 108,112 ---- - 260, - }; -! static short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, -*************** -*** 213,217 **** - 0, 228, 0, 92, 92, 0, -204, 0, - }; -! short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, ---- 147,151 ---- - 0, 228, 0, 92, 92, 0, -204, 0, - }; -! static short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, -*************** -*** 252,256 **** - 0, 0, 0, 0, 0, 0, 168, 0, - }; -! short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, ---- 186,190 ---- - 0, 0, 0, 0, 0, 0, 168, 0, - }; -! static short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, -*************** -*** 261,265 **** - }; - #define YYTABLESIZE 4610 -! short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, ---- 195,199 ---- - }; - #define YYTABLESIZE 4610 -! static short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, -*************** -*** 724,728 **** - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - }; -! short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, ---- 658,662 ---- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - }; -! static short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, -*************** -*** 1193,1197 **** - #define YYMAXTOKEN 315 - #if YYDEBUG -! char *yyname[] = { - "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, ---- 1127,1131 ---- - #define YYMAXTOKEN 315 - #if YYDEBUG -! static char *yyname[] = { - "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, -*************** -*** 1210,1214 **** - "POSTINC","POSTDEC","ARROW", - }; -! char *yyrule[] = { - "$accept : prog", - "$$1 :", ---- 1144,1148 ---- - "POSTINC","POSTDEC","ARROW", - }; -! static char *yyrule[] = { - "$accept : prog", - "$$1 :", -*************** -*** 1408,1436 **** - #endif - #endif -- int yydebug; -- int yynerrs; -- int yyerrflag; -- int yychar; -- short *yyssp; -- YYSTYPE *yyvsp; -- YYSTYPE yyval; -- YYSTYPE yylval; -- short yyss[YYSTACKSIZE]; -- YYSTYPE yyvs[YYSTACKSIZE]; -- #define yystacksize YYSTACKSIZE - #line 666 "perly.y" - /* PROGRAM */ -! #line 1424 "y.tab.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab - int -! yyparse() +*** 1447,1456 **** + yyparse() { register int yym, yyn, yystate; #if YYDEBUG register char *yys; - extern char *getenv(); +! extern char *getenv(); if (yys = getenv("YYDEBUG")) { ---- 1342,1391 ---- - #endif - #endif - #line 666 "perly.y" - /* PROGRAM */ -! #line 1427 "perly.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab -+ -+ struct ysv { -+ short* yyss; -+ YYSTYPE* yyvs; -+ int oldyydebug; -+ int oldyynerrs; -+ int oldyyerrflag; -+ int oldyychar; -+ YYSTYPE oldyyval; -+ YYSTYPE oldyylval; -+ }; -+ - int -! Perl_yyparse(pTHX) + yyn = *yys; +--- 1447,1473 ---- + yyparse() { register int yym, yyn, yystate; + register short *yyssp; @@ -299,11 +24,8 @@ + int retval = 0; #if YYDEBUG register char *yys; -+ #ifndef __cplusplus - extern char *getenv(); -+ #endif -+ #endif -+ +! #endif + + struct ysv *ysave; + New(73, ysave, 1, struct ysv); + SAVEDESTRUCTOR(yydestruct, ysave); @@ -313,13 +35,15 @@ + ysave->oldyychar = yychar; + ysave->oldyyval = yyval; + ysave->oldyylval = yylval; - ++ + #if YYDEBUG if (yys = getenv("YYDEBUG")) { + yyn = *yys; *************** -*** 1445,1448 **** ---- 1400,1413 ---- +*** 1463,1468 **** +--- 1480,1495 ---- + yyerrflag = 0; yychar = (-1); + /* @@ -334,23 +58,17 @@ + yyssp = yyss; yyvsp = yyvs; + *yyssp = yystate = 0; *************** -*** 1470,1479 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); +*** 1493,1499 **** #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; ---- 1435,1458 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); + *++yyvsp = yylval; +--- 1520,1538 ---- #endif if (yyssp >= yyss + yystacksize - 1) { @@ -361,34 +79,25 @@ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; -! ysave->yyvs = yyvs = -! (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); -! ysave->yyss = yyss = -! (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); +! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); +! ysave->yyss = Renew(yyss, yystacksize, short); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; *************** -*** 1511,1520 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, error recovery shifting\ -! to state %d\n", *yyssp, yytable[yyn]); +*** 1534,1540 **** #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; ---- 1490,1514 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: state %d, error recovery shifting to state %d\n", -! *yyssp, yytable[yyn]); + *++yyvsp = yylval; +--- 1573,1591 ---- #endif if (yyssp >= yyss + yystacksize - 1) { @@ -399,121 +108,33 @@ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; -! ysave->yyvs = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, -! yystacksize * sizeof(YYSTYPE)); -! ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, -! yystacksize * sizeof(short)); +! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); +! ysave->yyss = Renew(yyss, yystacksize, short); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; *************** -*** 1526,1531 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: error recovery discarding state %d\n", -! *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; ---- 1520,1526 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: error recovery discarding state %d\n", -! *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; -*************** -*** 1544,1549 **** - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! printf("yydebug: state %d, error recovery discards token %d (%s)\n", -! yystate, yychar, yys); - } - #endif ---- 1539,1545 ---- - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, -! "yydebug: state %d, error recovery discards token %d (%s)\n", -! yystate, yychar, yys); - } - #endif -*************** -*** 1554,1558 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif ---- 1550,1554 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif -*************** -*** 2358,2362 **** - { yyval.opval = yyvsp[0].opval; } - break; -! #line 2361 "y.tab.c" - } - yyssp -= yym; ---- 2354,2358 ---- - { yyval.opval = yyvsp[0].opval; } - break; -! #line 2365 "perly.c" - } - yyssp -= yym; -*************** -*** 2368,2373 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: after reduction, shifting from state 0 to\ -! state %d\n", YYFINAL); - #endif - yystate = YYFINAL; ---- 2364,2370 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: after reduction, shifting from state 0 to state %d\n", -! YYFINAL); - #endif - yystate = YYFINAL; -*************** -*** 2383,2387 **** - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! printf("yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } ---- 2380,2384 ---- - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } -*************** -*** 2398,2407 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: after reduction, shifting from state %d \ -! to state %d\n", *yyssp, yystate); +*** 2473,2487 **** #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate; ---- 2395,2419 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: after reduction, shifting from state %d to state %d\n", -! *yyssp, yystate); + *++yyvsp = yyval; + goto yyloop; + yyoverflow: +! yyerror("yacc stack overflow"); + yyabort: +! return (1); + yyaccept: +! return (0); + } +--- 2524,2570 ---- #endif if (yyssp >= yyss + yystacksize - 1) { @@ -524,27 +145,15 @@ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; -! ysave->yyvs = yyvs = -! (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); -! ysave->yyss = yyss = -! (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); +! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); +! ysave->yyss = Renew(yyss, yystacksize, short); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate; -*************** -*** 2409,2416 **** - goto yyloop; - yyoverflow: -! yyerror("yacc stack overflow"); - yyabort: -! return (1); - yyaccept: -! return (0); - } ---- 2421,2448 ---- + *++yyvsp = yyval; goto yyloop; yyoverflow: ! yyerror("Out of memory for yacc stack"); diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 0cb375a..353c62d 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -193,7 +193,7 @@ extension (not included with the standard Perl distribution) may also be of use. (Large file support is also related to 64-bit support, for obvious reasons) - + =head2 Better syntax checks on parenthesized unary operators Expressions such as: @@ -269,9 +269,25 @@ As before, lexical variables may not have names beginning with control characters. As before, variables whose names begin with a control character are always forced to be in package `main'. All such variables are reserved for future extensions, except those that begin with -C<^_>, which may be used by user programs and is guaranteed not to +C<^_>, which may be used by user programs and are guaranteed not to acquire special meaning in any future version of Perl. +=head2 C implicit in subroutine attributes + +Formerly, if you wanted to mark a subroutine as being a method call or +as requiring an automatic lock() when it is entered, you had to declare +that with a C pragma in the body of the subroutine. +That can now be accomplished with a declaration syntax, like this: + + sub mymethod : locked, method ; + ... + sub mymethod : locked, method { + ... + } + +F and F have been updated to keep the attributes +with the stubs they provide. See L. + =head1 Significant bug fixes =head2 EHANDLEE on empty files @@ -364,26 +380,34 @@ EPOC is is now supported (on Psion 5). =over 4 -=item op/io_const +=item lib/attrs + +Compatibility tests for C vs the older C. + +=item lib/io_const IO constants (SEEK_*, _IO*). -=item op/io_dir +=item lib/io_dir Directory-related IO methods (new, read, close, rewind, tied delete). -=item op/io_multihomed +=item lib/io_multihomed INET sockets with multi-homed hosts. -=item op/io_poll +=item lib/io_poll IO poll(). -=item op/io_unix +=item lib/io_unix UNIX sockets. +=item op/attrs + +Regression tests for C and . + =item op/filetest File test operators. @@ -400,6 +424,12 @@ Verify operations that access pad objects (lexicals and temporaries). =over 4 +=item attributes + +While used internally by Perl as a pragma, this module also +provides a way to fetch subroutine and variable attributes. +See L. + =item ByteLoader The ByteLoader is a dedication extension to generate and run @@ -540,6 +570,10 @@ See L for further information. =head2 Pragmata +C is now obsolescent, and is only provided for +backward-compatibility. It's been replaced by the C +syntax. See L and L. + C to enable UTF-8 and Unicode support. C allows modules to inherit pragmatic attributes @@ -579,6 +613,18 @@ A tutorial on managing class data for object modules. =head1 New Diagnostics +=item "my sub" not yet implemented + +(F) Lexically scoped subroutines are not yet implemented. Don't try that +yet. + +=item %s package attribute may clash with future reserved word: %s + +(W) A lowercase attribute name was used that had a package-specific handler. +That name might have a meaning to Perl itself some day, even though it +doesn't yet. Perhaps you should use a mixed-case attribute name, instead. +See L. + =item /%s/: Unrecognized escape \\%c passed through (W) You used a backslash-character combination which is not recognized @@ -593,16 +639,52 @@ intended it to be a read-write filehandle, you needed to open it with you intended only to read from the file, use "E". See L. +=item Invalid %s attribute: %s + +The indicated attribute for a subroutine or variable was not recognized +by Perl or by a user-supplied handler. See L. + +=item Invalid %s attributes: %s + +The indicated attributes for a subroutine or variable were not recognized +by Perl or by a user-supplied handler. See L. + +=item Invalid separator character %s in attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of an attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. See L. + =item Missing command in piped open (W) You used the C or C construction, but the command was missing or blank. +=item Missing name in "my sub" + +(F) The reserved syntax for lexically scoped subroutines requires that they +have a name with which they can be found. + =item Unrecognized escape \\%c passed through (W) You used a backslash-character combination which is not recognized by Perl. +=item Unterminated attribute parameter in attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing an +attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. See L. + +=item Unterminated attribute list + +(F) The lexer found something other than a simple identifier at the start +of an attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. See L. + =item defined(@array) is deprecated (D) defined() is not usually useful on arrays because it checks for an @@ -615,6 +697,27 @@ just use C for example. undefined I value. If you want to see if the hash is empty, just use C for example. +=item Invalid separator character %s in subroutine attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of a subroutine attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. + +=item Unterminated attribute parameter in subroutine attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing a +subroutine attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. + +=item Unterminated subroutine attribute list + +(F) The lexer found something other than a simple identifier at the start +of a subroutine attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. + =head1 Obsolete Diagnostics Todo. diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 7077088..cd9583b 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -30,6 +30,11 @@ The symbols C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. =over 4 +=item "my sub" not yet implemented + +(F) Lexically scoped subroutines are not yet implemented. Don't try that +yet. + =item "my" variable %s can't be in a package (F) Lexically scoped variables aren't in a package, so it doesn't make sense @@ -174,6 +179,13 @@ regular expression engine didn't specifically check for that. See L. (S) The symbol in question was declared but somehow went out of scope before it could possibly have been used. +=item %s package attribute may clash with future reserved word: %s + +(W) A lowercase attribute name was used that had a package-specific handler. +That name might have a meaning to Perl itself some day, even though it +doesn't yet. Perhaps you should use a mixed-case attribute name, instead. +See L. + =item %s syntax OK (F) The final summary message when a C succeeds. @@ -297,7 +309,8 @@ imported with the C pragma). To silently interpret it as the Perl operator, use the C prefix on the operator (e.g. C) or by declaring the subroutine -to be an object method (see L). +to be an object method (see L +or L). =item Args must match #! line @@ -1530,7 +1543,7 @@ before the illegal character. (F) The number of bits in vec() (the third argument) must be a power of two from 1 to 32 (or 64, if your platform supports that). - + =item Illegal switch in PERL5OPT: %s (X) The PERL5OPT environment variable may only be used to set the @@ -1614,6 +1627,16 @@ rebuild Perl. (P) Something went badly awry in the regular expression parser. +=item Invalid %s attribute: %s + +The indicated attribute for a subroutine or variable was not recognized +by Perl or by a user-supplied handler. See L. + +=item Invalid %s attributes: %s + +The indicated attributes for a subroutine or variable were not recognized +by Perl or by a user-supplied handler. See L. + =item invalid [] range in regexp (F) The range specified in a character class had a minimum character @@ -1625,6 +1648,13 @@ a literal character. See L. (W) Perl does not understand the given format conversion. See L. +=item Invalid separator character %s in attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of an attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. See L. + =item Invalid type in pack: '%s' (F) The given character is not a valid pack type. See L. @@ -1756,6 +1786,11 @@ be created for some peculiar reason. (W) Multidimensional arrays aren't written like C<$foo[1,2,3]>. They're written like C<$foo[1][2][3]>, as in C. +=item Missing name in "my sub" + +(F) The reserved syntax for lexically scoped subroutines requires that they +have a name with which they can be found. + =item Name "%s::%s" used only once: possible typo (W) Typographical errors often show up as unique variable names. @@ -3048,6 +3083,20 @@ a term, so it's looking for the corresponding right angle bracket, and not finding it. Chances are you left some needed parentheses out earlier in the line, and you really meant a "less than". +=item Unterminated attribute parameter in attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing an +attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. See L. + +=item Unterminated attribute list + +(F) The lexer found something other than a simple identifier at the start +of an attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. See L. + =item Use of $# is deprecated (D) This was an ill-advised attempt to emulate a poorly defined B feature. diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 004c0f4..d420059 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -2366,6 +2366,8 @@ there is an error. See also C and C documentation. =item my EXPR +=item my EXPR : ATTRIBUTES + A C declares the listed variables to be local (lexically) to the enclosing block, file, or C. If more than one value is listed, the list must be placed in parentheses. See @@ -4338,10 +4340,10 @@ out the names of those files that contain a match: =item sub NAME BLOCK This is subroutine definition, not a real function I. With just a -NAME (and possibly prototypes), it's just a forward declaration. Without -a NAME, it's an anonymous function declaration, and does actually return a -value: the CODE ref of the closure you just created. See L and -L for details. +NAME (and possibly prototypes or attributes), it's just a forward declaration. +Without a NAME, it's an anonymous function declaration, and does actually +return a value: the CODE ref of the closure you just created. See L +and L for details. =item substr EXPR,OFFSET,LENGTH,REPLACEMENT diff --git a/pod/perlmodlib.pod b/pod/perlmodlib.pod index abfa657..bfc5223 100644 --- a/pod/perlmodlib.pod +++ b/pod/perlmodlib.pod @@ -46,9 +46,13 @@ The following pragmas are defined (and have their own documentation). =over 12 +=item attributes + +set/get the attributes of a subroutine or variable + =item attrs -set/get attributes of a subroutine +set/get attributes of a subroutine (obsolescent) =item autouse diff --git a/pod/perlsub.pod b/pod/perlsub.pod index 2bd1cfd..47f507f 100644 --- a/pod/perlsub.pod +++ b/pod/perlsub.pod @@ -6,16 +6,22 @@ perlsub - Perl subroutines To declare subroutines: - sub NAME; # A "forward" declaration. - sub NAME(PROTO); # ditto, but with prototypes + sub NAME; # A "forward" declaration. + sub NAME(PROTO); # ditto, but with prototypes + sub NAME : ATTRS; # with attributes + sub NAME(PROTO) : ATTRS; # with attributes and prototypes - sub NAME BLOCK # A declaration and a definition. - sub NAME(PROTO) BLOCK # ditto, but with prototypes + sub NAME BLOCK # A declaration and a definition. + sub NAME(PROTO) BLOCK # ditto, but with prototypes + sub NAME : ATTRS BLOCK # with attributes + sub NAME(PROTO) : ATTRS BLOCK # with prototypes and attributes To define an anonymous subroutine at runtime: - $subref = sub BLOCK; # no proto - $subref = sub (PROTO) BLOCK; # with proto + $subref = sub BLOCK; # no proto + $subref = sub (PROTO) BLOCK; # with proto + $subref = sub : ATTRS BLOCK; # with attributes + $subref = sub (PROTO) : ATTRS BLOCK; # with proto and attributes To import subroutines: @@ -112,7 +118,7 @@ Example: ... } -Asisng to a list of private variables to name your arguments: +Assigning to a list of private variables to name your arguments: sub maybeset { my($key, $value) = @_; @@ -196,7 +202,7 @@ disables any prototype checking on arguments you do provide. This is partly for historical reasons, and partly for having a convenient way to cheat if you know what you're doing. See L below. -Function whose names are in all upper case are reserved to the Perl +Functions whose names are in all upper case are reserved to the Perl core, as are modules whose names are in all lower case. A function in all capitals is a loosely-held convention meaning it will be called indirectly by the run-time system itself, usually @@ -213,6 +219,11 @@ Synopsis: my (@wid, %get); # declare list of variables local my $foo = "flurp"; # declare $foo lexical, and init it my @oof = @bar; # declare @oof lexical, and init it + my $x : Foo = $y; # similar, with an attribute applied + +B: The use of attribute lists on C declarations is +experimental. This feature should not be relied upon. It may +change or disappear in future releases of Perl. See L. The C operator declares the listed variables to be lexically confined to the enclosing block, conditional (C), @@ -220,7 +231,7 @@ loop (C), subroutine, C, or C'd file. If more than one value is listed, the list must be placed in parentheses. All listed elements must be legal lvalues. Only alphanumeric identifiers may be lexically -scoped--magical built-in like C<$/> must currently be Cize +scoped--magical built-ins like C<$/> must currently be Cize with C instead. Unlike dynamic variables created by the C operator, lexical @@ -669,8 +680,8 @@ to it. Look out for implicit assignments in C conditionals. =item 2. You need to create a local file or directory handle or a local function. -A function that needs a filehandle of its own must use C uses -C on complete typeglob. This can be used to create new symbol +A function that needs a filehandle of its own must use +C on a complete typeglob. This can be used to create new symbol table entries: sub ioqueue { @@ -798,7 +809,7 @@ It turns out that you can actually do this also: Here we're using the typeglobs to do symbol table aliasing. It's a tad subtle, though, and also won't work if you're using C -variables, because only globals (even in disguised as Cs) +variables, because only globals (even in disguise as Cs) are in the symbol table. If you're passing around filehandles, you could usually just use the bare @@ -1043,7 +1054,7 @@ built-in name with the special package qualifier C. For example, saying C always refers to the built-in C, even if the current package has imported some other subroutine called C<&open()> from elsewhere. Even though it looks like a regular -function calls, it isn't: you can't take a reference to it, such as +function call, it isn't: you can't take a reference to it, such as the incorrect C<\&CORE::open> might appear to produce. Library modules should not in general export built-in names like C @@ -1167,6 +1178,46 @@ described in L and in L, the standard SelfLoader modules in L, and the document on adding C functions to Perl code in L. +=head2 Subroutine Attributes + +A subroutine declaration or definition may have a list of attributes +associated with it. If such an attribute list is present, it is +broken up at space or comma boundaries and treated as though a +C had been seen. See L for details +about what attributes are currently supported. +Unlike the limitation with the obsolescent C, the +C syntax works to associate the attributes with +a pre-declaration, and not just with a subroutine definition. + +The attributes must be valid as simple identifier names (without any +punctuation other than the '_' character). They may have a parameter +list appended, which is only checked for whether its parentheses ('(',')') +nest properly. + +Examples of valid syntax (even though the attributes are unknown): + + sub fnord (&\%) : switch(10,foo(7,3)) , , expensive ; + sub plugh () : Ugly('\(") , Bad ; + sub xyzzy : _5x5 { ... } + +Examples of invalid syntax: + + sub fnord : switch(10,foo() ; # ()-string not balanced + sub snoid : Ugly('(') ; # ()-string not balanced + sub xyzzy : 5x5 ; # "5x5" not a valid identifier + sub plugh : Y2::north ; # "Y2::north" not a simple identifier + sub snurt : foo + bar ; # "+" not a comma or space + +The attribute list is passed as a list of constant strings to the code +which associates them with the subroutine. In particular, the second example +of valid syntax above currently looks like this in terms of how it's +parsed and invoked: + + use attributes __PACKAGE__, \&plugh, q[Ugly('\(")], 'Bad'; + +For further details on attribute lists and their manipulation, +see L. + =head1 SEE ALSO See L for more about references and closures. diff --git a/proto.h b/proto.h index 5584aa4..5ae0636 100644 --- a/proto.h +++ b/proto.h @@ -729,6 +729,11 @@ VIRTUAL void Perl_sv_force_normal(pTHX_ SV *sv); VIRTUAL void Perl_tmps_grow(pTHX_ I32 n); VIRTUAL SV* Perl_sv_rvweaken(pTHX_ SV *sv); VIRTUAL int Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg); +VIRTUAL OP* Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block); +VIRTUAL CV* Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block); +VIRTUAL void Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block); +VIRTUAL OP * Perl_my_attrs(pTHX_ OP *o, OP *attrs); +VIRTUAL void Perl_boot_core_xsutils(pTHX); #if defined(PERL_OBJECT) protected: #endif @@ -784,6 +789,9 @@ STATIC bool S_is_handle_constructor(pTHX_ OP *o, I32 argnum); STATIC char* S_gv_ename(pTHX_ GV *gv); STATIC CV* S_cv_clone2(pTHX_ CV *proto, CV *outside); STATIC bool S_scalar_mod_type(pTHX_ OP *o, I32 type); +STATIC OP * S_my_kid(pTHX_ OP *o, OP *attrs); +STATIC OP * S_dup_attrlist(pTHX_ OP *o); +STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs); # if defined(PL_OP_SLAB_ALLOC) STATIC void* S_Slab_Alloc(pTHX_ int m, size_t sz); # endif @@ -938,7 +946,7 @@ STATIC char* S_scan_heredoc(pTHX_ char *s); STATIC char* S_scan_ident(pTHX_ char *s, char *send, char *dest, STRLEN destlen, I32 ck_uni); STATIC char* S_scan_inputsymbol(pTHX_ char *start); STATIC char* S_scan_pat(pTHX_ char *start, I32 type); -STATIC char* S_scan_str(pTHX_ char *start); +STATIC char* S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims); STATIC char* S_scan_subst(pTHX_ char *start); STATIC char* S_scan_trans(pTHX_ char *start); STATIC char* S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp); @@ -972,6 +980,9 @@ STATIC I32 S_win32_textfilter(pTHX_ int idx, SV *sv, int maxlen); #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) STATIC SV* S_isa_lookup(pTHX_ HV *stash, const char *name, int len, int level); #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +STATIC int S_modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs); +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) STATIC SV* S_mess_alloc(pTHX); # if defined(LEAKTEST) diff --git a/t/lib/attrs.t b/t/lib/attrs.t new file mode 100644 index 0000000..d8afbf6 --- /dev/null +++ b/t/lib/attrs.t @@ -0,0 +1,125 @@ +#!./perl + +# Regression tests for attrs.pm and the C syntax. + +BEGIN { + chdir 't' if -d 't'; + unshift @INC, '../lib'; + eval 'require attrs; 1' or do { + print "1..0\n"; + exit 0; + } +} + +sub NTESTS () ; + +my $test, $ntests; +BEGIN {$ntests=0} +$test=0; +my $failed = 0; + +print "1..".NTESTS."\n"; + +eval 'sub t1 ($) { use attrs "locked"; $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub t2 { use attrs "locked"; $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub t3 ($) : locked ;'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub t4 : locked ;'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my $anon1; +eval '$anon1 = sub ($) { use attrs qw(locked method); $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my $anon2; +eval '$anon2 = sub { use attrs qw(locked method); $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my $anon3; +eval '$anon3 = sub { use attrs "method"; $_[0]->[1] }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my @attrs = attrs::get($anon3 ? $anon3 : \&ns); +(print "not "), $failed=1 unless "@attrs" eq "method"; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +@attrs = sort +attrs::get($anon2 ? $anon2 : \&ns); +(print "not "), $failed=1 unless "@attrs" eq "locked method"; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +@attrs = sort +attrs::get($anon1 ? $anon1 : \&ns); +(print "not "), $failed=1 unless "@attrs" eq "locked method"; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e1 ($) : plugh ;'; +unless ($@ && $@ =~ m/^Invalid CODE attribute: ["']?plugh["']? at/) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e2 ($) : plugh(0,0) xyzzy ;'; +unless ($@ && $@ =~ m/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e3 ($) : plugh(0,0 xyzzy ;'; +unless ($@ && $@ =~ m/Unterminated attribute parameter in attribute list at/) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e4 ($) : plugh + xyzzy ;'; +unless ($@ && $@ =~ m/Invalid separator character '[+]' in attribute list at/) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + + +# Other tests should be added above this line + +sub NTESTS () { $ntests } + +exit $failed; diff --git a/t/op/attrs.t b/t/op/attrs.t new file mode 100644 index 0000000..e89c2cb --- /dev/null +++ b/t/op/attrs.t @@ -0,0 +1,176 @@ +#!./perl -w + +# Regression tests for attributes.pm and the C< : attrs> syntax. + +BEGIN { + chdir 't' if -d 't'; + unshift @INC, '../lib'; +} + +sub NTESTS () ; + +my ($test, $ntests); +BEGIN {$ntests=0} +$test=0; +my $failed = 0; + +print "1..".NTESTS."\n"; + +$SIG{__WARN__} = sub { die @_ }; + +sub mytest { + if (!$@ ne !$_[0] || $_[0] && $@ !~ $_[0]) { + if ($@) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# Got: $x\n" + } + else { + print "# Got unexpected success\n"; + } + if ($_[0]) { + print "# Expected: $_[0]\n"; + } + else { + print "# Expected success\n"; + } + $failed = 1; + print "not "; + } + elsif (@_ == 3 && $_[1] ne $_[2]) { + print "# Got: $_[1]\n"; + print "# Expected: $_[2]\n"; + $failed = 1; + print "not "; + } + print "ok ",++$test,"\n"; +} + +eval 'sub t1 ($) : locked { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +eval 'sub t2 : locked { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +eval 'sub t3 ($) : locked ;'; +mytest; +BEGIN {++$ntests} + +eval 'sub t4 : locked ;'; +mytest; +BEGIN {++$ntests} + +my $anon1; +eval '$anon1 = sub ($) : locked,,method { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +my $anon2; +eval '$anon2 = sub : locked , method { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +my $anon3; +eval '$anon3 = sub : method { $_[0]->[1] }'; +mytest; +BEGIN {++$ntests} + +eval 'sub e1 ($) : plugh ;'; +mytest qr/^Invalid CODE attributes?: ["']?plugh["']? at/; +BEGIN {++$ntests} + +eval 'sub e2 ($) : plugh(0,0) xyzzy ;'; +mytest qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /; +BEGIN {++$ntests} + +eval 'sub e3 ($) : plugh(0,0 xyzzy ;'; +mytest qr/Unterminated attribute parameter in attribute list at/; +BEGIN {++$ntests} + +eval 'sub e4 ($) : plugh + xyzzy ;'; +mytest qr/Invalid separator character '[+]' in attribute list at/; +BEGIN {++$ntests} + +eval 'my main $x : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my $x : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my $x ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x) : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x) ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x) : ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) : ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) : plugh;'; +mytest qr/^Invalid SCALAR attribute: ["']?plugh["']? at/; +BEGIN {++$ntests} + +sub A::MODIFY_SCALAR_ATTRIBUTES { return } +eval 'my A $x : plugh;'; +mytest qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/; +BEGIN {++$ntests} + +eval 'my A $x : plugh plover;'; +mytest qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /; +BEGIN {++$ntests} + +sub X::MODIFY_CODE_ATTRIBUTES { die "$_[0]" } +sub X::foo { 1 } +*Y::bar = \&X::foo; +*Y::bar = \&X::foo; # second time for -w +eval 'package Z; sub Y::bar : locked'; +mytest qr/^X at /; +BEGIN {++$ntests} + +my @attrs = eval 'attributes::get \&Y::bar'; +mytest '', "@attrs", "locked"; +BEGIN {++$ntests} + +@attrs = eval 'attributes::get $anon1'; +mytest '', "@attrs", "locked method"; +BEGIN {++$ntests} + +sub Z::DESTROY { } +sub Z::FETCH_CODE_ATTRIBUTES { return 'Z' } +my $thunk = eval 'bless +sub : method locked { 1 }, "Z"'; +mytest '', ref($thunk), "Z"; +BEGIN {++$ntests} + +@attrs = eval 'attributes::get $thunk'; +mytest '', "@attrs", "locked method Z"; +BEGIN {++$ntests} + + +# Other tests should be added above this line + +sub NTESTS () { $ntests } + +exit $failed; diff --git a/toke.c b/toke.c index 8308604..326c284 100644 --- a/toke.c +++ b/toke.c @@ -374,6 +374,7 @@ Perl_lex_start(pTHX_ SV *line) SAVEDESTRUCTOR(restore_rsfp, PL_rsfp); SAVESPTR(PL_lex_stuff); SAVEI32(PL_lex_defer); + SAVEI32(PL_sublex_info.sub_inwhat); SAVESPTR(PL_lex_repl); SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */ SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect); @@ -395,6 +396,7 @@ Perl_lex_start(pTHX_ SV *line) PL_lex_repl = Nullsv; PL_lex_inpat = 0; PL_lex_inwhat = 0; + PL_sublex_info.sub_inwhat = 0; PL_linestr = line; if (SvREADONLY(PL_linestr)) PL_linestr = sv_2mortal(newSVsv(PL_linestr)); @@ -492,6 +494,8 @@ S_skipspace(pTHX_ register char *s) } for (;;) { STRLEN prevlen; + SSize_t oldprevlen, oldoldprevlen; + SSize_t oldloplen, oldunilen; while (s < PL_bufend && isSPACE(*s)) { if (*s++ == '\n' && PL_in_eval && !PL_rsfp) incline(s); @@ -514,7 +518,8 @@ S_skipspace(pTHX_ register char *s) * of the buffer, we're not reading from a source filter, and * we're in normal lexing mode */ - if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL) + if (s < PL_bufend || !PL_rsfp || PL_sublex_info.sub_inwhat || + PL_lex_state == LEX_FORMLINE) return s; /* try to recharge the buffer */ @@ -555,9 +560,22 @@ S_skipspace(pTHX_ register char *s) } /* not at end of file, so we only read another line */ + /* make corresponding updates to old pointers, for yyerror() */ + oldprevlen = PL_oldbufptr - PL_bufend; + oldoldprevlen = PL_oldoldbufptr - PL_bufend; + if (PL_last_uni) + oldunilen = PL_last_uni - PL_bufend; + if (PL_last_lop) + oldloplen = PL_last_lop - PL_bufend; PL_linestart = PL_bufptr = s + prevlen; PL_bufend = s + SvCUR(PL_linestr); s = PL_bufptr; + PL_oldbufptr = s + oldprevlen; + PL_oldoldbufptr = s + oldoldprevlen; + if (PL_last_uni) + PL_last_uni = s + oldunilen; + if (PL_last_lop) + PL_last_lop = s + oldloplen; incline(s); /* debugger active and we're not compiling the debugger code, @@ -1037,6 +1055,7 @@ S_sublex_done(pTHX) PL_bufend = SvPVX(PL_linestr); PL_bufend += SvCUR(PL_linestr); PL_expect = XOPERATOR; + PL_sublex_info.sub_inwhat = 0; return ')'; } } @@ -1885,7 +1904,9 @@ S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append) #ifdef DEBUGGING static char* exp_name[] = - { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" }; + { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK", + "ATTRTERM", "TERMBLOCK" + }; #endif /* @@ -2033,7 +2054,7 @@ Perl_yylex(pTHX) break; #endif - /* when we're already built the next token, just pull it out the queue */ + /* when we've already built the next token, just pull it out of the queue */ case LEX_KNOWNEXT: PL_nexttoke--; yylval = PL_nextval[PL_nexttoke]; @@ -2659,6 +2680,84 @@ Perl_yylex(pTHX) goto just_a_word; } s++; + switch (PL_expect) { + OP *attrs; + case XOPERATOR: + if (!PL_in_my || PL_lex_state != LEX_NORMAL) + break; + PL_bufptr = s; /* update in case we back off */ + goto grabattrs; + case XATTRBLOCK: + PL_expect = XBLOCK; + goto grabattrs; + case XATTRTERM: + PL_expect = XTERMBLOCK; + grabattrs: + s = skipspace(s); + attrs = Nullop; + while (isIDFIRST_lazy(s)) { + d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len); + if (*d == '(') { + d = scan_str(d,TRUE,TRUE); + if (!d) { + if (PL_lex_stuff) { + SvREFCNT_dec(PL_lex_stuff); + PL_lex_stuff = Nullsv; + } + /* MUST advance bufptr here to avoid bogus + "at end of line" context messages from yyerror(). + */ + PL_bufptr = s + len; + yyerror("Unterminated attribute parameter in attribute list"); + if (attrs) + op_free(attrs); + return 0; /* EOF indicator */ + } + } + if (PL_lex_stuff) { + SV *sv = newSVpvn(s, len); + sv_catsv(sv, PL_lex_stuff); + attrs = append_elem(OP_LIST, attrs, + newSVOP(OP_CONST, 0, sv)); + SvREFCNT_dec(PL_lex_stuff); + PL_lex_stuff = Nullsv; + } + else { + attrs = append_elem(OP_LIST, attrs, + newSVOP(OP_CONST, 0, + newSVpvn(s, len))); + } + s = skipspace(d); + while (*s == ',') + s = skipspace(s+1); + } + tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}' for vi */ + if (*s != ';' && *s != tmp) { + char q = ((*s == '\'') ? '"' : '\''); + /* If here for an expression, and parsed no attrs, back off. */ + if (tmp == '=' && !attrs) { + s = PL_bufptr; + break; + } + /* MUST advance bufptr here to avoid bogus "at end of line" + context messages from yyerror(). + */ + PL_bufptr = s; + if (!*s) + yyerror("Unterminated attribute list"); + else + yyerror(Perl_form(aTHX_ "Invalid separator character %c%c%c in attribute list", + q, *s, q)); + if (attrs) + op_free(attrs); + OPERATOR(':'); + } + if (attrs) { + PL_nextval[PL_nexttoke].opval = attrs; + force_next(THING); + } + TOKEN(COLONATTR); + } OPERATOR(':'); case '(': s++; @@ -2736,10 +2835,12 @@ Perl_yylex(pTHX) } } /* FALL THROUGH */ + case XATTRBLOCK: case XBLOCK: PL_lex_brackstack[PL_lex_brackets++] = XSTATE; PL_expect = XSTATE; break; + case XATTRTERM: case XTERMBLOCK: PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR; PL_expect = XSTATE; @@ -3210,7 +3311,7 @@ Perl_yylex(pTHX) TERM(THING); case '\'': - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (PL_expect == XOPERATOR) { if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) { PL_expect = XTERM; @@ -3226,7 +3327,7 @@ Perl_yylex(pTHX) TERM(sublex_start()); case '"': - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (PL_expect == XOPERATOR) { if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) { PL_expect = XTERM; @@ -3248,7 +3349,7 @@ Perl_yylex(pTHX) TERM(sublex_start()); case '`': - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (PL_expect == XOPERATOR) no_op("Backticks",s); if (!s) @@ -3993,6 +4094,7 @@ Perl_yylex(pTHX) UNI(OP_LCFIRST); case KEY_local: + yylval.ival = 0; OPERATOR(LOCAL); case KEY_length: @@ -4049,6 +4151,8 @@ Perl_yylex(pTHX) s = skipspace(s); if (isIDFIRST_lazy(s)) { s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len); + if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3)) + goto really_sub; PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE); if (!PL_in_my_stash) { char tmpbuf[1024]; @@ -4057,6 +4161,7 @@ Perl_yylex(pTHX) yyerror(tmpbuf); } } + yylval.ival = 1; OPERATOR(MY); case KEY_next: @@ -4134,7 +4239,7 @@ Perl_yylex(pTHX) LOP(OP_PIPE_OP,XTERM); case KEY_q: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); yylval.ival = OP_CONST; @@ -4144,7 +4249,7 @@ Perl_yylex(pTHX) UNI(OP_QUOTEMETA); case KEY_qw: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); force_next(')'); @@ -4189,7 +4294,7 @@ Perl_yylex(pTHX) TOKEN('('); case KEY_qq: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); yylval.ival = OP_STRINGIFY; @@ -4202,7 +4307,7 @@ Perl_yylex(pTHX) TERM(sublex_start()); case KEY_qx: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); yylval.ival = OP_BACKTICK; @@ -4397,73 +4502,91 @@ Perl_yylex(pTHX) case KEY_format: case KEY_sub: really_sub: - s = skipspace(s); - - if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') { + { char tmpbuf[sizeof PL_tokenbuf]; - PL_expect = XBLOCK; - d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len); - if (strchr(tmpbuf, ':')) - sv_setpv(PL_subname, tmpbuf); + expectation attrful; + bool have_name, have_proto; + int key = tmp; + + s = skipspace(s); + + if (isIDFIRST_lazy(s) || *s == '\'' || + (*s == ':' && s[1] == ':')) + { + PL_expect = XBLOCK; + attrful = XATTRBLOCK; + d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len); + if (strchr(tmpbuf, ':')) + sv_setpv(PL_subname, tmpbuf); + else { + sv_setsv(PL_subname,PL_curstname); + sv_catpvn(PL_subname,"::",2); + sv_catpvn(PL_subname,tmpbuf,len); + } + s = skipspace(d); + have_name = TRUE; + } else { - sv_setsv(PL_subname,PL_curstname); - sv_catpvn(PL_subname,"::",2); - sv_catpvn(PL_subname,tmpbuf,len); + if (key == KEY_my) + Perl_croak(aTHX_ "Missing name in \"my sub\""); + PL_expect = XTERMBLOCK; + attrful = XATTRTERM; + sv_setpv(PL_subname,"?"); + have_name = FALSE; } - s = force_word(s,WORD,FALSE,TRUE,TRUE); - s = skipspace(s); - } - else { - PL_expect = XTERMBLOCK; - sv_setpv(PL_subname,"?"); - } - if (tmp == KEY_format) { - s = skipspace(s); - if (*s == '=') - PL_lex_formbrack = PL_lex_brackets + 1; - OPERATOR(FORMAT); - } + if (key == KEY_format) { + if (*s == '=') + PL_lex_formbrack = PL_lex_brackets + 1; + if (have_name) + (void) force_word(tmpbuf, WORD, FALSE, TRUE, TRUE); + OPERATOR(FORMAT); + } - /* Look for a prototype */ - if (*s == '(') { - char *p; + /* Look for a prototype */ + if (*s == '(') { + char *p; + + s = scan_str(s,FALSE,FALSE); + if (!s) { + if (PL_lex_stuff) + SvREFCNT_dec(PL_lex_stuff); + PL_lex_stuff = Nullsv; + Perl_croak(aTHX_ "Prototype not terminated"); + } + /* strip spaces */ + d = SvPVX(PL_lex_stuff); + tmp = 0; + for (p = d; *p; ++p) { + if (!isSPACE(*p)) + d[tmp++] = *p; + } + d[tmp] = '\0'; + SvCUR(PL_lex_stuff) = tmp; + have_proto = TRUE; - s = scan_str(s); - if (!s) { - if (PL_lex_stuff) - SvREFCNT_dec(PL_lex_stuff); - PL_lex_stuff = Nullsv; - Perl_croak(aTHX_ "Prototype not terminated"); + s = skipspace(s); } - /* strip spaces */ - d = SvPVX(PL_lex_stuff); - tmp = 0; - for (p = d; *p; ++p) { - if (!isSPACE(*p)) - d[tmp++] = *p; + else + have_proto = FALSE; + + if (*s == ':' && s[1] != ':') + PL_expect = attrful; + + if (have_proto) { + PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff); + PL_lex_stuff = Nullsv; + force_next(THING); } - d[tmp] = '\0'; - SvCUR(PL_lex_stuff) = tmp; - - PL_nexttoke++; - PL_nextval[1] = PL_nextval[0]; - PL_nexttype[1] = PL_nexttype[0]; - PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff); - PL_nexttype[0] = THING; - if (PL_nexttoke == 1) { - PL_lex_defer = PL_lex_state; - PL_lex_expect = PL_expect; - PL_lex_state = LEX_KNOWNEXT; + if (!have_name) { + sv_setpv(PL_subname,"__ANON__"); + TOKEN(ANONSUB); } - PL_lex_stuff = Nullsv; - } - - if (*SvPV(PL_subname,n_a) == '?') { - sv_setpv(PL_subname,"__ANON__"); - TOKEN(ANONSUB); + (void) force_word(tmpbuf, WORD, FALSE, TRUE, TRUE); + if (key == KEY_my) + TOKEN(MYSUB); + TOKEN(SUB); } - PREBLOCK(SUB); case KEY_system: set_csh(); @@ -5607,7 +5730,7 @@ S_scan_pat(pTHX_ char *start, I32 type) PMOP *pm; char *s; - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -5643,7 +5766,7 @@ S_scan_subst(pTHX_ char *start) yylval.ival = OP_NULL; - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) { if (PL_lex_stuff) @@ -5656,7 +5779,7 @@ S_scan_subst(pTHX_ char *start) s--; first_start = PL_multi_start; - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -5717,7 +5840,7 @@ S_scan_trans(pTHX_ char *start) yylval.ival = OP_NULL; - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -5727,7 +5850,7 @@ S_scan_trans(pTHX_ char *start) if (s[-1] == PL_multi_open) s--; - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -6042,7 +6165,7 @@ S_scan_inputsymbol(pTHX_ char *start) if (d - PL_tokenbuf != len) { yylval.ival = OP_GLOB; set_csh(); - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) Perl_croak(aTHX_ "Glob not terminated"); return s; @@ -6095,6 +6218,8 @@ S_scan_inputsymbol(pTHX_ char *start) /* scan_str takes: start position in buffer + keep_quoted preserve \ on the embedded delimiter(s) + keep_delims preserve the delimiters around the string returns: position to continue reading from buffer side-effects: multi_start, multi_close, lex_repl or lex_stuff, and updates the read buffer. @@ -6112,6 +6237,7 @@ S_scan_inputsymbol(pTHX_ char *start) tr/// string transliterate tr/this/that/ y/// string transliterate y/this/that/ ($*@) sub prototypes sub foo ($) + (stuff) sub attr parameters sub foo : attr(stuff) <> readline or globs , <>, <$fh>, or <*.c> In most of these cases (all but <>, patterns and transliterate) @@ -6134,7 +6260,7 @@ S_scan_inputsymbol(pTHX_ char *start) */ STATIC char * -S_scan_str(pTHX_ char *start) +S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims) { dTHR; SV *sv; /* scalar value: string */ @@ -6170,13 +6296,15 @@ S_scan_str(pTHX_ char *start) (void)SvPOK_only(sv); /* validate pointer */ /* move past delimiter and try to read a complete string */ + if (keep_delims) + sv_catpvn(sv, s, 1); s++; for (;;) { /* extend sv if need be */ SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1); /* set 'to' to the next character in the sv's string */ to = SvPVX(sv)+SvCUR(sv); - + /* if open delimiter is the close delimiter read unbridle */ if (PL_multi_open == PL_multi_close) { for (; s < PL_bufend; s++,to++) { @@ -6185,7 +6313,7 @@ S_scan_str(pTHX_ char *start) PL_curcop->cop_line++; /* handle quoted delimiters */ if (*s == '\\' && s+1 < PL_bufend && term != '\\') { - if (s[1] == term) + if (!keep_quoted && s[1] == term) s++; /* any other quotes are simply copied straight through */ else @@ -6211,7 +6339,8 @@ S_scan_str(pTHX_ char *start) PL_curcop->cop_line++; /* backslashes can escape the open or closing characters */ if (*s == '\\' && s+1 < PL_bufend) { - if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)) + if (!keep_quoted && + ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))) s++; else *to++ = *s++; @@ -6278,6 +6407,8 @@ S_scan_str(pTHX_ char *start) /* at this point, we have successfully read the delimited string */ + if (keep_delims) + sv_catpvn(sv, s, 1); PL_multi_end = PL_curcop->cop_line; s++; @@ -6380,7 +6511,7 @@ Perl_scan_num(pTHX_ char *start) s += 2; } /* check for a decimal in disguise */ - else if (s[1] == '.') + else if (strchr(".Ee", s[1])) goto decimal; /* so it must be octal */ else @@ -6411,9 +6542,6 @@ Perl_scan_num(pTHX_ char *start) case '8': case '9': if (shift == 3) yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s)); - else - if (shift == 1) - yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s)); /* FALL THROUGH */ /* octal digits */ diff --git a/vms/perly_c.vms b/vms/perly_c.vms index fc79a26..ad94f1e 100644 --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@ -8,6 +8,10 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define PERL_IN_PERLY_C #include "perl.h" +#define dep() deprecate("\"do\" to call subroutines") + +/* stuff included here to make perly_c.diff apply better */ + #define yydebug PL_yydebug #define yynerrs PL_yynerrs #define yyerrflag PL_yyerrflag @@ -15,1117 +19,1116 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define yyval PL_yyval #define yylval PL_yylval -#define dep() deprecate("\"do\" to call subroutines") +struct ysv { + short* yyss; + YYSTYPE* yyvs; + int oldyydebug; + int oldyynerrs; + int oldyyerrflag; + int oldyychar; + YYSTYPE oldyyval; + YYSTYPE oldyylval; +}; static void yydestruct(pTHXo_ void *ptr); -#line 27 "perly.y" +#line 49 "perly.y" +#if 0 /* get this from perly.h instead */ +#line 52 "perly.y" +typedef union { + I32 ival; + char *pval; + OP *opval; + GV *gvval; +} YYSTYPE; +#line 60 "perly.y" +#endif /* 0 */ + +#ifdef USE_PURE_BISON +#define YYLEX_PARAM (&yychar) +#endif + +#line 52 "perly.c" #define YYERRCODE 256 -static short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, - 13, 13, 13, 13, 27, 27, 28, 28, 29, 30, - 31, 32, 33, 45, 45, 1, 1, 1, 1, 3, - 39, 39, 47, 4, 5, 6, 40, 41, 41, 42, - 42, 48, 48, 50, 49, 16, 16, 16, 26, 26, - 26, 37, 37, 37, 37, 37, 37, 37, 37, 51, - 37, 38, 38, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, +static short yylhs[] = { -1, + 50, 0, 8, 6, 9, 7, 10, 10, 10, 11, + 11, 11, 11, 24, 24, 24, 24, 24, 24, 24, + 14, 14, 14, 13, 13, 42, 42, 12, 12, 12, + 12, 12, 12, 12, 26, 26, 27, 27, 28, 29, + 30, 31, 32, 49, 49, 1, 1, 1, 1, 1, + 2, 38, 38, 46, 51, 3, 4, 5, 39, 40, + 40, 44, 44, 44, 45, 45, 41, 41, 52, 52, + 54, 53, 15, 15, 15, 25, 25, 25, 36, 36, + 36, 36, 36, 36, 36, 36, 55, 36, 37, 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 34, 34, 35, 35, 35, 2, 2, 44, - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, + 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 47, 47, 48, 48, 48, 48, 48, 33, 33, 34, + 34, 34, 43, 23, 18, 19, 20, 21, 22, 35, + 35, 35, 35, }; -static short yylen[] = { 2, +static short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, 9, 8, 11, 3, 0, 1, 0, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, - 1, 0, 5, 0, 0, 0, 1, 0, 1, 1, - 1, 3, 2, 0, 7, 3, 3, 1, 2, 3, - 1, 3, 5, 6, 3, 3, 5, 2, 4, 0, - 5, 1, 1, 5, 4, 5, 4, 5, 6, 5, - 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 3, 2, 4, 3, 4, 1, 1, 1, 1, 1, - 1, 6, 5, 4, 5, 1, 1, 3, 4, 3, - 2, 2, 4, 5, 4, 5, 1, 2, 2, 1, - 2, 2, 2, 1, 3, 1, 3, 4, 4, 6, - 1, 1, 0, 1, 0, 1, 2, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 4, 1, 0, 6, 6, 0, 0, 0, 1, 0, + 1, 0, 2, 1, 2, 1, 1, 1, 3, 2, + 0, 7, 3, 3, 1, 2, 3, 1, 3, 5, + 6, 3, 3, 5, 2, 4, 0, 5, 1, 1, + 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 3, 2, 3, 2, + 4, 3, 5, 1, 1, 1, 1, 1, 1, 6, + 5, 4, 5, 1, 1, 3, 4, 3, 2, 2, + 4, 5, 4, 5, 1, 2, 2, 1, 2, 2, + 2, 1, 3, 1, 3, 4, 4, 6, 1, 1, + 3, 2, 3, 2, 1, 1, 1, 0, 1, 0, + 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, }; -static short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, - 64, 14, 4, 161, 0, 0, 136, 0, 156, 0, - 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 128, 130, 0, 0, 0, 0, 162, - 51, 0, 57, 0, 62, 0, 7, 177, 180, 179, - 178, 0, 0, 0, 0, 0, 0, 4, 4, 4, - 4, 4, 4, 0, 0, 0, 0, 0, 151, 0, - 0, 0, 0, 78, 0, 175, 0, 142, 0, 0, - 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 0, 172, 173, 174, 176, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, +static short yydefred[] = { 1, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 4, 169, 0, 0, 144, + 0, 164, 0, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 50, 59, - 0, 0, 0, 76, 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 4, 155, 157, 0, 0, 0, - 0, 0, 0, 0, 124, 0, 140, 0, 0, 121, - 27, 0, 0, 19, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, - 94, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 61, 60, 53, 0, 3, 0, 0, 159, 0, - 125, 0, 42, 0, 43, 0, 0, 0, 0, 170, - 0, 0, 36, 41, 0, 0, 0, 158, 167, 79, - 0, 143, 0, 145, 0, 123, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 93, 87, 0, 85, 0, - 134, 0, 139, 0, 77, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 144, 146, 133, 0, - 0, 0, 92, 86, 0, 90, 88, 135, 84, 65, - 160, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 89, 74, 7, 28, 29, 0, 0, 24, 25, - 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, - 5, 0, 30, 0, 0, 33, 0, 23, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 136, 138, 0, 0, 0, + 0, 170, 125, 52, 0, 59, 0, 69, 0, 0, + 7, 190, 193, 192, 191, 0, 0, 0, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, + 0, 0, 159, 0, 0, 0, 0, 85, 0, 188, + 0, 150, 0, 0, 0, 0, 0, 0, 0, 175, + 177, 176, 0, 184, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 0, 185, 186, 187, 189, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 51, 61, 0, + 0, 0, 0, 83, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 4, 163, 165, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 148, 174, 0, 0, + 171, 0, 0, 129, 27, 0, 0, 19, 0, 0, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, + 0, 90, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 167, 0, 0, 0, 42, 0, 43, 0, + 0, 0, 0, 183, 0, 0, 36, 41, 0, 0, + 0, 166, 182, 86, 0, 151, 0, 153, 0, 131, + 173, 65, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 100, 94, 0, 92, 0, 142, 0, 147, 63, + 68, 67, 55, 0, 54, 84, 0, 88, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 152, 154, + 141, 0, 0, 0, 99, 93, 0, 97, 95, 143, + 91, 72, 168, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 140, 96, 81, 7, 28, 29, 0, 0, + 24, 25, 0, 32, 0, 0, 0, 22, 0, 0, + 0, 31, 5, 0, 30, 0, 0, 33, 0, 23, }; -static short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, - 74, 75, 76, 77, 273, 79, 274, 263, 265, 268, - 276, 264, 266, 114, 200, 92, 80, 239, 82, 84, - 181, 254, 143, 271, 13, 2, 14, 15, 16, 86, - 260, +static short yydgoto[] = { 1, + 10, 11, 20, 100, 19, 91, 366, 94, 355, 3, + 12, 13, 70, 371, 281, 72, 73, 74, 75, 76, + 77, 78, 79, 287, 81, 288, 277, 279, 282, 290, + 278, 280, 118, 210, 96, 82, 253, 85, 87, 190, + 323, 152, 285, 267, 221, 14, 83, 133, 15, 2, + 16, 17, 18, 89, 274, }; -static short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, - 0, 0, 0, 0, -24, -24, 0, -5, 0, 2126, - 0, 0, 6, 28, 44, 57, -32, 2126, 68, 69, - 72, 999, 943, -24, 1062, 1327, -198, 0, 0, -24, - 2126, 2126, 2126, 2126, 2126, 2126, 1233, 1383, 0, 2126, - 2126, -24, -24, -24, -24, 2126, -217, 0, 342, 827, - -20, -80, -70, 0, 0, -60, 73, 61, 75, 0, - 0, -1, 0, -137, 0, -130, 0, 0, 0, 0, - 0, 2126, 88, 2126, -189, -1, -137, 0, 0, 0, - 0, 0, 0, 89, 827, 99, 1444, 943, 0, -189, - 0, -80, 75, 0, 2126, 0, 90, 0, -189, -16, - 27, -58, 2126, 0, 75, 218, 218, 218, -169, -169, - 63, -22, 0, -63, 218, 218, 0, 0, 0, 0, - -189, -1, 0, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 0, 0, 74, 2126, 1535, 2126, - 2126, 2126, 2126, 2126, 2126, 1725, 0, 2126, 0, 0, - -44, -91, 256, 0, 2126, 428, 0, -1, 2126, 2126, - 2126, 2126, 131, 1800, 0, 0, 0, -12, 36, 130, - 2126, 75, 1861, 1936, 0, 48, 0, 2126, 87, 0, - 0, -272, -272, 0, -272, -272, -272, -119, 0, 1565, - -189, 1088, 375, 160, 827, 715, 389, 771, 684, 1026, - 1242, 218, 218, 2126, 0, 2006, 2126, 0, 143, -56, - 0, 1, 51, -49, 56, 43, 58, 45, 0, 7, - 827, 0, 0, 0, 2126, 0, 141, 2126, 0, 2126, - 0, -272, 0, 144, 0, 145, -272, 151, 158, 0, - 162, 342, 0, 0, 166, 150, 2126, 0, 0, 0, - 9, 0, 16, 0, 19, 0, 60, 2126, 2126, 47, - 0, 21, 94, 2126, 78, 0, 0, 91, 0, 95, - 0, 101, 0, 153, 0, 268, 0, 92, 92, 92, - 92, 2126, 92, 2126, 188, 0, 0, 0, 0, 96, - 1152, 109, 0, 0, 196, 0, 0, 0, 0, 0, - 0, 0, -217, -217, -204, -204, 198, -217, 185, 92, - 0, 0, 0, 0, 0, 0, 92, 211, 0, 0, - 92, 0, 1800, -217, 319, 0, 2126, -217, 216, 0, - 0, 228, 0, 92, 92, 0, -204, 0, +static short yysindex[] = { 0, + 0, 0, -199, 0, 0, 0, -53, 0, 0, 0, + 0, 0, 0, 0, 646, 0, 0, 0, -217, -207, + 44, 0, 0, -207, 0, 0, 0, -32, -32, 0, + 66, 0, 2177, 0, 0, 69, 83, 93, 110, -35, + 2177, 119, 121, 136, 1013, 973, -32, 1077, 1344, -146, + 2177, 68, -32, 2177, 2177, 2177, 2177, 2177, 2177, 1384, + 1424, 0, 2177, 2177, -32, -32, -32, -32, -152, 0, + 470, 845, -13, -65, -63, 0, 0, 55, 137, 122, + 138, 0, 0, 0, 60, 0, -70, 0, -66, -70, + 0, 0, 0, 0, 0, 2177, 146, 2177, 1085, 60, + -70, 0, 0, 0, 0, 0, 0, 152, 845, 153, + 1464, 973, 0, 1085, 0, -65, 138, 0, 2177, 0, + 160, 0, 1085, 2, 76, -52, 2177, 1085, 1524, 0, + 0, 0, -96, 0, 138, -181, -181, -181, -112, -112, + 123, -38, 0, -74, -181, -181, 0, 0, 0, 0, + 60, 0, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 0, 0, -16, 2177, 1731, 2177, 2177, + 2177, 2177, 2177, 2177, 1791, 0, 2177, 0, 0, -88, + -34, -88, 339, 0, 2177, 287, 0, -88, 2177, 2177, + 2177, 2177, 173, 1850, 0, 0, 0, -33, 46, 180, + 2177, 138, 1910, 2025, 0, 97, 0, 0, -31, -29, + 0, 2177, 133, 0, 0, -237, -237, 0, -237, -237, + -237, -69, 0, 1614, 1085, 684, 167, 107, 845, 3800, + 1125, 405, 1164, 778, -228, -181, -181, 2177, 0, 2117, + 2177, 0, 197, -48, 0, -9, -72, -45, -7, -42, + 56, -36, 0, -4, 845, -10, -47, 2177, -47, 0, + 216, 2177, 0, 2177, 60, -237, 0, 219, 0, 230, + -237, 233, 237, 0, 242, 470, 0, 0, 246, 225, + 2177, 0, 0, 0, 13, 0, 18, 0, 29, 0, + 0, 0, 61, 2177, 2177, 54, 0, 32, 63, 2177, + 165, 0, 0, 174, 0, 178, 0, 191, 0, 0, + 0, 0, 0, 261, 0, 0, 350, 0, 0, 182, + 182, 182, 182, 2177, 182, 2177, 281, 0, 0, 0, + 0, 102, 1237, 202, 0, 0, 294, 0, 0, 0, + 0, 0, 0, 0, -152, -152, -130, -130, 297, -152, + 290, 182, 0, 0, 0, 0, 0, 0, 182, 318, + 0, 0, 182, 0, 1850, -152, 407, 0, 2177, -152, + 324, 0, 0, 326, 0, 182, 182, 0, -130, 0, }; -static short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, +static short yyrindex[] = { 0, + 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 2214, 0, - 0, 2264, 2308, 0, 0, 0, 0, 0, 0, 0, + 36, 451, 0, 0, 2208, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 0, -18, 1030, - 2383, 2433, 2561, 0, 0, 2636, 2686, 0, 918, 0, - 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, - 0, 2308, 0, 0, 3879, 0, 165, 0, 0, 0, - 0, 0, 0, 0, 1356, 0, 0, 232, 0, 3936, - 502, 561, 3047, 0, 0, 0, 2730, 0, 3987, 2433, - 0, 0, 2308, 0, 3096, 3236, 3300, 3436, 1656, 3186, - 2780, 0, 0, 0, 3487, 3550, 0, 0, 0, 0, - 4025, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + -12, 939, 2325, 2385, 2463, 0, 0, 2510, 2561, 0, + 1220, 0, 0, 0, 0, 0, -44, 0, 0, -44, + 0, 0, 0, 0, 0, 2271, 0, 0, 3846, 0, + -105, 0, 0, 0, 0, 0, 0, 0, 2612, 0, + 0, 327, 0, 3883, 522, 583, 3032, 0, 0, 0, + 2621, 0, 3893, 2385, 0, 0, 2271, 3930, 0, 0, + 0, 0, 2667, 0, 3092, 3374, 3418, 3458, 3219, 3331, + 2746, 0, 0, 0, 3496, 3567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2828, 0, 0, - 0, 0, 887, 0, 232, 0, 0, 0, 242, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 249, 0, - 0, 3142, 0, 0, 0, 0, 0, 0, 2889, 0, - 0, -4, 10, 0, 11, 17, 24, 363, 0, -27, - 664, 3890, 3686, 3737, 1507, 0, 4291, 4188, 4155, 4035, - 3842, 3586, 3623, 0, 0, 0, 0, 0, 2983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1640, 0, 0, 0, 233, 0, 0, 0, 0, 2308, - 0, 37, 0, 0, 0, 0, 262, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2797, 0, 0, -23, + 0, -23, 913, 0, 327, 0, 0, 247, 336, 0, + 0, 0, 0, 333, 0, 0, 0, 0, 352, 0, + 0, 3138, 0, 0, 0, 0, 0, 0, 0, 2857, + 0, 0, 2903, 0, 0, -8, -2, 0, 7, 33, + 42, 2255, 0, -28, 3968, 1822, 3732, 3769, 3023, 0, + 4119, 4082, 4021, 4005, 1044, 3610, 3694, 0, 0, 0, + 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3657, -21, 0, 345, 0, 0, + 0, 0, 0, 2271, 0, 71, 0, 0, 0, 0, + 364, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, - -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105, 105, 168, 168, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 105, 887, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, + 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 115, 175, 175, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 374, 115, 913, 0, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, }; -static short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, - 0, 0, 0, 0, 340, -38, 0, 0, 215, -138, - 14, 97, 190, -85, -179, 583, 0, 0, 0, 0, - 286, 0, -140, 0, 0, 0, 0, 0, 0, 0, - 0, +static short yygindex[] = { 0, + 0, 0, 164, 383, 0, 14, 0, 37, 655, -89, + 0, 0, 0, -336, -15, 3415, 0, 2211, 368, 369, + 0, 0, 0, 410, 916, 0, 0, 273, -163, 62, + 94, 249, -71, -186, 634, 0, 0, 0, 428, -46, + 184, 118, 0, -149, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4610 -static short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, - 174, 107, 15, 204, 107, 149, 150, 83, 278, 210, - 104, 104, 122, 58, 94, 104, 18, 207, 107, 107, - 15, 296, 171, 132, 134, 98, 368, 303, 85, 316, - 39, 16, 173, 113, 18, 275, 317, 17, 123, 318, - 142, 323, 175, 147, 20, 104, 147, 99, 39, 16, - 170, 347, 348, 107, 172, 17, 202, 38, 23, 279, - 147, 147, 20, 100, 113, 147, 189, 190, 191, 192, - 193, 194, 40, 198, 199, 38, 101, 58, 23, 154, - 155, 300, 168, 302, 26, 322, 171, 106, 107, 62, - 15, 108, 176, 236, 325, 147, 162, 163, 178, 177, - 164, 23, 180, 165, 166, 167, 182, 185, 195, 203, - 212, 213, 215, 216, 217, 218, 219, 26, 315, 196, - 26, 26, 26, 297, 26, 167, 26, 26, 299, 26, - 301, 205, 319, 208, 240, 242, 243, 244, 245, 246, - 247, 248, 250, 26, 237, 255, 62, 21, 26, 304, - 280, 199, 286, 337, 307, 262, 213, 288, 213, 150, - 272, 305, 294, 277, 308, 309, 324, 281, 341, 283, - 285, 310, 345, 346, 287, 26, 234, 352, 311, 19, - 21, 312, 326, 21, 21, 21, 313, 21, 314, 21, - 21, 330, 21, 360, 332, 327, 113, 363, 362, 328, - 290, 113, 292, 293, 2, 329, 21, 26, 340, 26, - 26, 21, 88, 342, 149, 150, 343, 89, 351, 149, - 150, 149, 150, 353, 104, 104, 104, 104, 149, 150, - 357, 104, 107, 107, 107, 107, 364, 44, 21, 107, - 44, 44, 44, 102, 44, 355, 44, 44, 365, 44, - 104, 104, 165, 104, 320, 149, 150, 52, 107, 107, - 199, 107, 37, 44, 35, 149, 150, 58, 44, 166, - 21, 163, 21, 21, 147, 147, 147, 147, 149, 150, - 262, 147, 40, 147, 149, 150, 149, 150, 331, 147, - 147, 147, 147, 149, 150, 44, 149, 150, 149, 150, - 147, 147, 37, 147, 147, 147, 147, 147, 147, 147, - 157, 235, 147, 149, 150, 147, 147, 147, 35, 69, - 149, 150, 149, 150, 149, 150, 21, 44, 149, 150, - 44, 97, 78, 149, 150, 149, 150, 149, 150, 214, - 26, 26, 26, 26, 26, 26, 359, 26, 26, 26, +#define YYTABLESIZE 4423 +static short yytable[] = { 71, + 65, 193, 223, 65, 107, 22, 216, 292, 271, 301, + 311, 321, 111, 314, 60, 111, 316, 60, 224, 65, + 313, 372, 318, 250, 194, 181, 178, 183, 15, 111, + 111, 312, 18, 126, 111, 62, 319, 64, 39, 84, + 289, 214, 269, 192, 142, 144, 15, 16, 275, 86, + 18, 69, 390, 338, 198, 217, 39, 180, 339, 182, + 163, 164, 158, 159, 111, 16, 4, 5, 6, 340, + 7, 8, 345, 17, 251, 26, 155, 179, 60, 155, + 172, 113, 20, 173, 122, 315, 174, 175, 176, 293, + 26, 17, 181, 155, 155, 208, 209, 9, 155, 62, + 20, 64, 88, 65, 67, 98, 248, 129, 102, 177, + 127, 38, 344, 219, 26, 199, 200, 201, 202, 203, + 204, 188, 103, 347, 180, 151, 40, 337, 155, 38, + 173, 66, 104, 174, 175, 176, 197, 226, 227, 229, + 230, 231, 232, 233, 15, 369, 370, 26, 317, 105, + 26, 26, 26, 341, 26, 346, 26, 26, 110, 26, + 111, 254, 256, 257, 258, 259, 260, 261, 262, 264, + 359, 23, 24, 26, 21, 112, 185, 184, 26, 209, + 186, 187, 26, 276, 227, 195, 227, 225, 286, 189, + 191, 205, 60, 206, 363, 295, 324, 297, 299, 213, + 215, 220, 328, 21, 176, 26, 303, 21, 65, 266, + 21, 21, 21, 222, 21, 384, 21, 21, 291, 21, + 294, 300, 268, 304, 92, 158, 159, 158, 159, 93, + 302, 159, 306, 21, 308, 309, 310, 26, 21, 26, + 26, 249, 2, 111, 111, 111, 111, 158, 159, 320, + 111, 158, 159, 60, 158, 159, 326, 158, 159, 330, + 106, 158, 159, 158, 159, 21, 158, 159, 158, 159, + 331, 111, 111, 332, 111, 44, 377, 333, 44, 44, + 44, 334, 44, 336, 44, 44, 335, 44, 342, 348, + 158, 159, 158, 159, 209, 158, 159, 21, 349, 21, + 21, 44, 350, 322, 354, 322, 44, 155, 155, 155, + 155, 329, 158, 159, 155, 351, 155, 158, 159, 352, + 276, 362, 155, 155, 155, 155, 364, 273, 158, 159, + 272, 158, 159, 44, 365, 155, 155, 373, 155, 155, + 155, 155, 155, 155, 155, 158, 159, 155, 375, 166, + 155, 155, 155, 158, 159, 158, 159, 379, 53, 71, + 158, 159, 158, 159, 386, 44, 387, 180, 44, 62, + 26, 26, 26, 26, 26, 26, 37, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 256, 269, 188, 26, 26, 0, 26, 26, 26, 26, - 26, 149, 150, 149, 150, 26, 26, 26, 26, 26, - 26, 0, 0, 67, 26, 0, 67, 4, 5, 6, - 339, 7, 8, 26, 0, 26, 26, 0, 0, 0, - 0, 67, 0, 21, 21, 21, 21, 21, 21, 0, + 353, 35, 181, 26, 26, 163, 26, 26, 26, 26, + 26, 158, 159, 178, 40, 26, 26, 26, 26, 26, + 26, 26, 166, 37, 35, 172, 26, 101, 173, 131, + 132, 174, 175, 176, 80, 26, 228, 26, 26, 361, + 21, 21, 21, 21, 21, 21, 381, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 361, 0, 0, 21, 21, 154, 21, - 21, 21, 21, 21, 0, 67, 0, 0, 21, 21, - 21, 21, 21, 21, 0, 0, 163, 21, 259, 164, - 0, 258, 165, 166, 167, 0, 21, 0, 21, 21, - 44, 44, 44, 44, 44, 44, 0, 44, 44, 44, - 157, 0, 0, 44, 0, 0, 44, 44, 44, 44, - 0, 0, 0, 44, 44, 0, 44, 44, 44, 44, - 44, 0, 0, 0, 0, 44, 44, 44, 44, 44, - 44, 4, 5, 6, 44, 7, 8, 164, 0, 0, - 165, 166, 167, 44, 177, 44, 44, 177, 177, 177, - 0, 177, 161, 177, 177, 161, 177, 0, 151, 0, - 0, 0, 0, 0, 152, 153, 154, 155, 0, 161, - 161, 0, 0, 0, 161, 177, 0, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 4, 5, 6, 0, 7, 8, - 0, 0, 177, 178, 161, 0, 178, 178, 178, 0, - 178, 126, 178, 178, 126, 178, 0, 0, 93, 0, - 0, 0, 0, 144, 145, 146, 147, 0, 126, 126, - 148, 0, 0, 126, 178, 115, 116, 177, 0, 0, - 0, 0, 124, 0, 67, 67, 67, 67, 0, 149, - 150, 67, 0, 0, 137, 138, 139, 140, 0, 0, - 0, 0, 0, 126, 52, 0, 0, 62, 64, 50, - 67, 57, 0, 65, 61, 0, 60, 0, 334, 335, - 336, 0, 338, 0, 0, 152, 153, 154, 155, 0, - 59, 163, 0, 0, 164, 63, 178, 165, 166, 167, - 201, 159, 160, 161, 162, 163, 0, 0, 164, 354, - 0, 165, 166, 167, 100, 0, 356, 100, 151, 0, - 358, 0, 58, 0, 152, 153, 154, 155, 0, 0, - 0, 100, 100, 366, 367, 0, 100, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 23, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 177, 177, - 177, 177, 177, 0, 177, 177, 177, 0, 0, 0, - 177, 0, 289, 161, 161, 161, 161, 157, 0, 0, - 161, 177, 161, 177, 177, 177, 177, 177, 161, 161, - 161, 161, 177, 177, 177, 177, 177, 177, 0, 161, - 161, 177, 161, 161, 161, 161, 161, 161, 161, 0, - 177, 161, 177, 177, 161, 161, 161, 178, 178, 178, - 178, 178, 0, 178, 178, 178, 0, 0, 0, 178, - 0, 0, 126, 126, 126, 126, 0, 0, 0, 126, - 178, 126, 178, 178, 178, 178, 178, 126, 126, 126, - 126, 178, 178, 178, 178, 178, 178, 0, 126, 126, - 178, 126, 126, 126, 126, 126, 126, 126, 0, 178, - 126, 178, 178, 126, 126, 126, 0, 22, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 0, 0, 157, - 32, 0, 0, 33, 34, 35, 36, 0, 0, 0, - 37, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 0, 44, - 0, 51, 44, 44, 44, 67, 44, 0, 44, 44, - 54, 44, 55, 56, 0, 100, 100, 100, 100, 0, - 0, 0, 100, 0, 100, 44, 0, 0, 0, 0, - 44, 100, 0, 0, 109, 0, 0, 118, 68, 0, - 0, 100, 100, 0, 100, 100, 100, 100, 100, 0, - 152, 153, 154, 155, 0, 52, 68, 44, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 161, 162, - 163, 0, 0, 164, 179, 151, 165, 166, 167, 0, - 0, 152, 153, 154, 155, 0, 63, 0, 187, 44, - 68, 0, 44, 0, 0, 156, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 52, 0, 58, 62, 64, 50, 0, 57, 0, - 65, 61, 0, 60, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 211, 0, 0, 152, 153, 154, - 155, 0, 63, 0, 0, 23, 0, 0, 53, 0, - 71, 0, 0, 71, 160, 161, 162, 163, 0, 0, - 164, 0, 0, 165, 166, 167, 0, 71, 71, 58, - 0, 0, 0, 253, 52, 0, 0, 62, 64, 50, - 261, 57, 0, 65, 61, 0, 60, 151, 0, 0, - 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, - 0, 23, 71, 0, 53, 63, 0, 156, 158, 159, - 160, 161, 162, 163, 0, 0, 164, 0, 0, 165, - 166, 167, 44, 44, 44, 44, 44, 44, 0, 44, - 44, 44, 58, 0, 0, 44, 0, 0, 44, 44, - 44, 44, 0, 0, 0, 44, 44, 0, 44, 44, - 44, 44, 44, 0, 0, 0, 0, 44, 44, 44, - 44, 44, 44, 0, 23, 0, 44, 53, 0, 68, - 68, 68, 68, 0, 0, 44, 68, 44, 44, 111, - 25, 26, 27, 28, 89, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 157, 68, 68, 0, 0, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 0, 52, 0, 32, 62, 64, - 50, 0, 57, 131, 65, 61, 0, 60, 38, 0, - 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, - 45, 46, 47, 48, 49, 0, 63, 0, 51, 0, - 0, 71, 71, 71, 71, 0, 0, 54, 71, 55, - 56, 0, 152, 153, 154, 155, 0, 0, 117, 25, - 26, 27, 28, 58, 29, 30, 31, 71, 71, 0, - 32, 162, 163, 0, 0, 164, 0, 0, 165, 166, - 167, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 53, 52, - 0, 51, 62, 64, 50, 0, 57, 0, 65, 61, - 54, 60, 55, 56, 152, 0, 154, 155, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 63, 91, 91, 162, 163, 0, 148, 164, 0, 148, - 165, 166, 167, 104, 0, 0, 0, 0, 0, 112, - 91, 120, 0, 148, 148, 52, 91, 58, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 91, 91, - 91, 91, 151, 0, 0, 0, 0, 0, 152, 153, - 154, 155, 0, 0, 0, 0, 63, 0, 148, 0, - 0, 0, 53, 158, 159, 160, 161, 162, 163, 0, - 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 58, 112, 133, 52, 0, 0, 62, - 64, 50, 0, 57, 197, 65, 61, 0, 60, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 63, 53, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 154, 155, 51, 238, 58, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 0, 95, 163, 0, - 95, 164, 0, 0, 165, 166, 167, 0, 0, 270, - 0, 0, 0, 0, 95, 95, 0, 52, 0, 53, - 62, 64, 50, 0, 57, 241, 65, 61, 0, 60, - 0, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 0, 0, 0, 32, 0, 0, 63, 95, - 0, 0, 0, 0, 0, 0, 38, 0, 39, 40, - 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, - 47, 48, 49, 0, 0, 58, 51, 148, 148, 148, - 148, 0, 0, 0, 148, 54, 0, 55, 56, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 148, 148, 0, 0, 0, 0, 0, - 53, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 70, 0, 51, 70, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 116, 70, 70, 116, - 24, 25, 26, 27, 28, 0, 29, 30, 31, 0, - 0, 0, 32, 116, 116, 0, 0, 0, 116, 0, - 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, - 0, 0, 70, 0, 44, 45, 46, 47, 48, 49, - 0, 0, 0, 51, 0, 0, 0, 0, 116, 0, - 0, 0, 54, 0, 55, 56, 0, 52, 0, 0, - 62, 64, 50, 0, 57, 249, 65, 61, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 0, 0, 0, 95, 0, 0, 63, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 0, 0, 32, 95, 95, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 58, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 52, 0, 51, 62, 64, 50, 0, 57, - 0, 65, 61, 54, 60, 55, 56, 0, 0, 0, - 53, 152, 153, 154, 155, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 0, 0, 52, 0, 0, 62, 64, 50, 0, - 57, 282, 65, 61, 0, 60, 0, 0, 0, 0, - 0, 70, 70, 70, 70, 0, 0, 0, 70, 0, - 0, 0, 0, 0, 63, 53, 0, 116, 116, 116, - 116, 0, 0, 0, 116, 0, 116, 70, 70, 0, - 0, 0, 116, 116, 116, 116, 0, 0, 0, 0, - 0, 58, 0, 116, 116, 0, 116, 116, 116, 116, - 116, 116, 116, 0, 0, 116, 0, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 284, 65, 61, 0, - 60, 24, 25, 26, 27, 28, 53, 29, 30, 31, - 0, 0, 0, 32, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 0, 51, 0, 58, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 291, 65, 61, 0, - 60, 0, 0, 0, 0, 22, 24, 25, 26, 27, - 28, 53, 29, 30, 31, 0, 0, 0, 32, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 58, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 55, 56, 0, 0, 0, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, - 0, 44, 45, 46, 47, 48, 49, 0, 52, 0, - 51, 62, 64, 50, 0, 57, 0, 65, 61, 54, - 60, 55, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 58, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 53, 0, 0, 154, 0, 0, 154, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 154, 154, 0, 32, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 150, 51, 154, 150, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 150, 150, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, - 0, 163, 0, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 163, 163, 0, 0, 0, - 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 163, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 131, 0, 51, 131, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 131, 131, 0, 0, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 126, 0, 131, 126, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 154, 154, 154, 0, - 126, 126, 154, 0, 154, 126, 0, 0, 0, 0, - 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, - 0, 154, 154, 0, 154, 154, 154, 154, 154, 154, - 154, 0, 0, 154, 0, 126, 154, 154, 154, 0, - 0, 0, 0, 0, 0, 150, 150, 150, 150, 0, - 0, 0, 150, 0, 150, 0, 0, 0, 0, 0, - 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, - 0, 150, 150, 0, 150, 150, 150, 150, 150, 150, - 150, 0, 0, 150, 0, 0, 150, 150, 150, 163, - 163, 163, 163, 0, 0, 0, 163, 0, 163, 0, - 0, 0, 0, 0, 163, 163, 163, 163, 0, 0, - 0, 129, 0, 0, 129, 163, 163, 0, 163, 163, - 163, 163, 163, 163, 163, 0, 0, 163, 129, 129, - 163, 163, 163, 129, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 129, 131, 131, 131, 131, 0, 0, - 0, 131, 0, 131, 0, 0, 0, 0, 0, 131, - 131, 131, 131, 0, 0, 0, 127, 0, 0, 127, - 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, - 0, 0, 131, 127, 127, 131, 131, 131, 127, 0, - 0, 0, 0, 0, 126, 126, 126, 126, 0, 0, - 0, 126, 0, 126, 0, 0, 0, 0, 0, 126, - 126, 126, 126, 0, 0, 0, 137, 0, 127, 137, - 126, 126, 0, 126, 126, 126, 126, 126, 126, 126, - 0, 0, 126, 137, 137, 126, 126, 126, 137, 0, + 283, 90, 325, 21, 21, 0, 21, 21, 21, 21, + 21, 0, 0, 270, 0, 21, 21, 21, 21, 21, + 21, 21, 367, 368, 0, 172, 21, 374, 173, 0, + 0, 174, 175, 176, 0, 21, 0, 21, 21, 0, + 0, 162, 0, 382, 162, 0, 0, 385, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 162, 162, + 0, 44, 0, 162, 44, 44, 44, 44, 0, 0, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 0, + 0, 383, 0, 44, 44, 44, 44, 44, 44, 0, + 0, 0, 0, 162, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 190, 44, 44, 190, 190, 190, + 0, 190, 169, 190, 190, 169, 190, 160, 0, 0, + 0, 0, 0, 161, 162, 163, 164, 0, 0, 169, + 169, 0, 0, 0, 169, 190, 0, 0, 0, 165, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 0, + 0, 174, 175, 176, 4, 5, 6, 0, 7, 8, + 0, 0, 190, 0, 169, 191, 0, 0, 191, 191, + 191, 0, 191, 134, 191, 191, 134, 191, 0, 0, + 160, 0, 0, 0, 0, 9, 161, 162, 163, 164, + 134, 134, 0, 0, 0, 134, 191, 190, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 97, 0, 174, 175, 176, 0, 0, 0, + 0, 0, 4, 5, 6, 134, 7, 8, 55, 119, + 120, 65, 67, 53, 0, 60, 134, 68, 64, 0, + 63, 161, 162, 163, 164, 0, 0, 0, 147, 148, + 149, 150, 0, 9, 62, 0, 0, 0, 191, 66, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 162, 162, 162, 162, 0, 0, 0, 162, + 0, 162, 0, 0, 0, 0, 61, 162, 162, 162, + 162, 153, 154, 155, 156, 211, 0, 0, 157, 0, + 162, 162, 0, 162, 162, 162, 162, 162, 162, 162, + 0, 0, 162, 0, 0, 162, 162, 162, 26, 158, + 159, 56, 0, 0, 0, 0, 0, 0, 190, 190, + 190, 190, 190, 0, 190, 190, 190, 0, 0, 0, + 190, 0, 0, 169, 169, 169, 169, 0, 0, 0, + 169, 190, 169, 190, 190, 190, 190, 190, 169, 169, + 169, 169, 190, 190, 190, 190, 190, 190, 0, 0, + 0, 169, 169, 190, 169, 169, 169, 169, 169, 169, + 169, 0, 190, 169, 190, 190, 169, 169, 169, 191, + 191, 191, 191, 191, 0, 191, 191, 191, 0, 0, + 0, 191, 0, 0, 134, 134, 134, 134, 0, 0, + 0, 134, 191, 134, 191, 191, 191, 191, 191, 134, + 134, 134, 134, 191, 191, 191, 191, 191, 191, 0, + 0, 0, 134, 134, 191, 134, 134, 134, 134, 134, + 134, 134, 0, 191, 134, 191, 191, 134, 134, 134, + 0, 25, 27, 28, 29, 30, 31, 166, 32, 33, + 34, 0, 0, 0, 35, 0, 0, 36, 37, 38, + 39, 0, 0, 0, 40, 41, 0, 42, 43, 44, + 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, + 51, 52, 0, 0, 0, 44, 0, 54, 44, 44, + 44, 0, 44, 0, 44, 44, 57, 44, 58, 59, + 0, 117, 0, 0, 0, 0, 0, 0, 0, 135, + 161, 44, 163, 164, 0, 0, 44, 0, 0, 78, + 0, 0, 78, 0, 0, 356, 357, 358, 0, 360, + 0, 171, 172, 0, 0, 173, 78, 78, 174, 175, + 176, 0, 0, 44, 0, 55, 0, 0, 65, 67, + 53, 117, 60, 0, 68, 64, 376, 63, 0, 0, + 0, 0, 0, 378, 0, 0, 0, 380, 0, 0, + 0, 78, 0, 0, 212, 44, 66, 0, 44, 0, + 388, 389, 117, 0, 0, 55, 0, 0, 65, 67, + 53, 0, 60, 0, 68, 64, 0, 63, 0, 0, + 0, 0, 0, 61, 161, 162, 163, 164, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 106, 171, 172, 106, 0, 173, + 0, 0, 174, 175, 176, 26, 0, 0, 56, 0, + 0, 106, 106, 61, 0, 0, 106, 0, 0, 55, + 0, 0, 65, 67, 53, 0, 60, 0, 68, 64, + 0, 63, 0, 0, 0, 160, 0, 0, 0, 0, + 0, 161, 162, 163, 164, 26, 106, 0, 56, 0, + 66, 0, 0, 0, 0, 0, 0, 165, 167, 168, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 61, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 0, 0, + 0, 44, 0, 117, 44, 44, 44, 44, 0, 117, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 26, + 0, 0, 56, 44, 44, 44, 44, 44, 44, 0, + 78, 78, 78, 78, 44, 0, 0, 78, 0, 0, + 0, 0, 0, 44, 0, 44, 44, 0, 0, 115, + 28, 29, 30, 31, 93, 32, 33, 34, 78, 78, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, + 75, 0, 0, 47, 48, 49, 50, 51, 52, 27, + 28, 29, 30, 31, 54, 32, 33, 34, 75, 0, + 0, 35, 0, 57, 0, 58, 59, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 166, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 0, 0, 75, 0, 54, 106, 106, 106, 106, 0, + 0, 0, 106, 57, 106, 58, 59, 0, 0, 0, + 106, 106, 0, 121, 28, 29, 30, 31, 0, 32, + 33, 34, 0, 106, 106, 35, 106, 106, 106, 106, + 106, 106, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 163, 164, 0, 55, 0, 54, 65, + 67, 53, 0, 60, 0, 68, 64, 57, 63, 58, + 59, 0, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 125, 0, 0, 0, 0, 66, 0, 0, + 0, 161, 162, 163, 164, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 141, 68, 64, 0, 63, 168, + 169, 170, 171, 172, 61, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 66, 0, 0, + 161, 162, 163, 164, 0, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 0, 68, 64, 0, 63, 56, + 170, 171, 172, 0, 61, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 75, 75, 75, 75, 0, 55, 0, 75, 65, + 67, 53, 0, 60, 207, 68, 64, 0, 63, 56, + 0, 0, 0, 0, 61, 0, 143, 160, 0, 75, + 75, 0, 0, 161, 162, 163, 164, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 56, + 0, 174, 175, 176, 61, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 218, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 0, 161, 0, 0, 0, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 161, 0, - 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 56, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 0, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 255, 68, 64, 57, 63, 58, 59, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 61, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 263, 68, 64, 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 161, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 129, 129, 129, 0, 120, 120, 129, - 0, 129, 120, 0, 0, 0, 0, 129, 129, 129, - 129, 0, 0, 0, 0, 0, 0, 0, 129, 129, - 0, 129, 129, 129, 129, 129, 129, 129, 69, 0, - 129, 69, 120, 129, 129, 129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 0, 0, - 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, - 127, 0, 0, 0, 127, 0, 127, 0, 0, 0, - 69, 0, 127, 127, 127, 127, 0, 0, 0, 119, - 0, 0, 119, 127, 127, 0, 127, 127, 127, 127, - 127, 127, 127, 0, 0, 127, 119, 119, 127, 127, - 127, 119, 0, 0, 0, 0, 0, 137, 137, 137, - 137, 0, 0, 0, 137, 0, 137, 0, 0, 0, - 0, 0, 137, 137, 137, 137, 0, 0, 0, 0, - 0, 119, 0, 137, 137, 0, 137, 137, 137, 137, - 137, 137, 137, 0, 0, 137, 0, 0, 137, 137, - 137, 161, 161, 161, 161, 0, 0, 0, 161, 0, - 161, 0, 0, 0, 0, 0, 161, 161, 161, 161, - 0, 0, 0, 75, 0, 0, 75, 161, 161, 0, - 161, 161, 161, 161, 161, 161, 161, 0, 0, 161, - 75, 75, 161, 161, 161, 75, 0, 0, 0, 0, - 0, 120, 120, 120, 120, 0, 0, 0, 120, 0, - 120, 0, 0, 0, 0, 0, 120, 120, 120, 120, - 0, 0, 0, 0, 0, 75, 0, 120, 120, 0, - 120, 120, 120, 120, 120, 120, 120, 164, 0, 120, - 0, 0, 120, 120, 120, 0, 0, 0, 0, 69, - 69, 69, 69, 0, 164, 164, 69, 0, 69, 164, - 0, 0, 0, 0, 69, 69, 69, 69, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 69, 69, - 69, 69, 69, 69, 69, 0, 149, 69, 0, 164, - 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 149, 0, 0, 0, 149, 0, - 119, 119, 119, 119, 0, 0, 0, 119, 0, 119, - 0, 0, 0, 0, 0, 119, 119, 119, 119, 0, - 0, 0, 72, 0, 0, 0, 119, 119, 149, 119, - 119, 119, 119, 119, 119, 119, 0, 0, 119, 72, - 72, 119, 119, 119, 72, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, + 0, 0, 108, 0, 0, 108, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 108, 61, 55, 0, 108, 65, 67, 53, 0, 60, + 0, 68, 64, 0, 63, 0, 0, 0, 0, 0, + 161, 162, 163, 164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 108, 0, 56, 167, 168, 169, + 170, 171, 172, 0, 0, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 55, 0, 0, 65, 67, 53, 0, 60, + 296, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 0, 0, 117, - 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 117, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, - 0, 75, 0, 75, 0, 0, 0, 0, 0, 75, - 75, 75, 75, 0, 0, 0, 111, 0, 117, 111, - 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, - 0, 0, 75, 111, 111, 75, 75, 75, 111, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, - 164, 164, 0, 0, 0, 164, 0, 164, 111, 0, - 0, 0, 0, 164, 164, 164, 164, 0, 0, 0, - 112, 0, 0, 112, 164, 164, 0, 164, 164, 164, - 164, 164, 164, 164, 0, 0, 164, 112, 112, 164, - 164, 164, 112, 0, 0, 0, 0, 149, 149, 149, - 149, 0, 0, 0, 149, 0, 149, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 0, 0, 0, 0, - 0, 0, 112, 149, 149, 0, 149, 149, 149, 149, - 149, 149, 149, 0, 0, 149, 0, 0, 149, 149, - 149, 0, 0, 72, 72, 72, 72, 0, 0, 0, - 72, 0, 72, 0, 0, 0, 0, 0, 72, 72, - 72, 72, 0, 0, 0, 0, 0, 0, 0, 72, - 72, 0, 72, 72, 72, 72, 72, 72, 72, 0, - 0, 72, 0, 0, 72, 72, 72, 117, 117, 117, - 117, 0, 0, 0, 117, 0, 117, 0, 0, 0, - 0, 0, 117, 117, 117, 117, 113, 0, 0, 113, - 0, 0, 0, 117, 117, 0, 117, 117, 117, 117, - 117, 117, 117, 113, 113, 117, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 0, 0, 0, 111, 0, 111, 0, 0, 0, - 0, 0, 111, 111, 111, 111, 0, 109, 113, 0, - 109, 0, 0, 111, 111, 0, 111, 111, 111, 111, - 111, 111, 111, 0, 109, 109, 0, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112, 112, 112, 112, 0, 0, 0, 112, 109, - 112, 0, 0, 0, 0, 0, 112, 112, 112, 112, - 110, 0, 0, 110, 0, 0, 0, 112, 112, 0, - 112, 112, 112, 112, 112, 112, 112, 110, 110, 0, - 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 108, 108, 0, 0, 0, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 96, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 96, 96, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 113, 113, - 113, 0, 0, 0, 113, 96, 113, 0, 0, 0, - 0, 0, 113, 113, 113, 113, 97, 0, 0, 97, - 0, 0, 0, 113, 113, 0, 113, 113, 113, 113, - 113, 113, 113, 97, 97, 0, 0, 0, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, - 109, 109, 0, 0, 0, 109, 0, 109, 0, 0, - 0, 0, 0, 109, 109, 109, 109, 98, 97, 0, - 98, 0, 0, 0, 109, 109, 0, 109, 109, 109, - 109, 109, 109, 109, 98, 98, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 110, 110, 110, 0, 0, 0, 110, 98, - 110, 0, 0, 0, 0, 0, 110, 110, 110, 110, - 0, 0, 0, 0, 0, 0, 0, 110, 110, 0, - 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, - 108, 0, 0, 0, 108, 0, 108, 0, 0, 0, - 0, 0, 108, 108, 108, 108, 0, 0, 0, 0, - 0, 0, 99, 108, 108, 99, 108, 108, 108, 108, - 108, 108, 108, 0, 96, 96, 96, 96, 0, 99, - 99, 96, 0, 96, 99, 0, 0, 0, 0, 96, - 96, 96, 96, 0, 0, 0, 0, 0, 0, 153, - 96, 96, 153, 96, 96, 96, 96, 96, 96, 96, - 101, 0, 0, 101, 99, 0, 153, 153, 0, 0, - 0, 153, 0, 0, 0, 0, 0, 101, 101, 0, - 0, 0, 101, 0, 0, 0, 0, 97, 97, 97, - 97, 0, 0, 0, 97, 0, 97, 0, 0, 0, - 0, 153, 97, 97, 97, 97, 152, 0, 0, 152, - 0, 0, 101, 97, 97, 0, 97, 97, 97, 97, - 97, 97, 0, 152, 152, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 98, - 98, 98, 0, 0, 0, 98, 0, 98, 0, 0, - 0, 0, 0, 98, 98, 0, 98, 141, 152, 0, - 141, 0, 0, 0, 98, 98, 0, 98, 98, 98, - 98, 98, 98, 0, 141, 141, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 118, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 102, 0, 0, 102, 141, - 0, 0, 118, 118, 0, 0, 0, 118, 0, 0, - 0, 0, 102, 102, 0, 0, 0, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 99, 99, 99, 118, 0, 0, - 99, 0, 99, 0, 0, 0, 0, 102, 99, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 99, 0, 99, 99, 99, 99, 99, 99, 0, 0, - 153, 153, 153, 153, 0, 0, 0, 153, 0, 153, - 0, 101, 101, 101, 101, 153, 153, 0, 101, 0, - 101, 0, 0, 0, 0, 0, 153, 153, 0, 153, - 153, 153, 153, 153, 0, 0, 0, 101, 101, 0, - 101, 101, 101, 101, 101, 103, 0, 0, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, - 152, 0, 103, 103, 152, 0, 152, 103, 0, 0, - 0, 0, 152, 152, 0, 0, 0, 0, 105, 0, - 0, 105, 0, 152, 152, 0, 152, 152, 152, 152, - 152, 0, 0, 0, 0, 105, 105, 103, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 141, 141, - 141, 141, 0, 0, 0, 141, 0, 141, 0, 0, - 0, 0, 0, 141, 141, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 141, 141, 0, 141, 141, 141, - 141, 141, 0, 0, 0, 0, 118, 118, 118, 118, - 0, 0, 0, 118, 0, 118, 102, 102, 102, 102, - 0, 118, 118, 102, 0, 102, 0, 0, 0, 0, - 0, 0, 118, 118, 0, 118, 118, 118, 118, 118, - 0, 106, 102, 102, 106, 102, 102, 102, 102, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 95, 0, 0, 106, 0, 0, 0, 0, 105, 0, - 0, 0, 110, 0, 0, 119, 0, 0, 0, 0, - 0, 0, 126, 127, 128, 129, 130, 0, 0, 0, - 135, 136, 0, 106, 0, 0, 141, 0, 0, 0, + 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, + 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, + 0, 0, 54, 0, 0, 56, 0, 0, 0, 0, + 0, 57, 0, 58, 59, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 55, 0, 35, + 65, 67, 53, 0, 60, 298, 68, 64, 0, 63, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 66, 0, + 0, 0, 54, 108, 108, 108, 108, 0, 0, 0, + 108, 57, 108, 58, 59, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 61, 0, 0, 35, 0, + 0, 108, 108, 0, 108, 108, 108, 108, 108, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 0, 55, + 56, 54, 65, 67, 53, 0, 60, 307, 68, 64, + 57, 63, 58, 59, 0, 0, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 66, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 61, 0, 55, + 0, 54, 65, 67, 53, 0, 60, 0, 68, 64, + 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, + 66, 0, 56, 0, 0, 0, 0, 0, 158, 0, + 108, 158, 0, 0, 0, 0, 116, 95, 124, 0, + 0, 0, 130, 95, 0, 158, 158, 61, 0, 0, + 158, 0, 0, 0, 0, 95, 95, 95, 95, 0, + 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, + 0, 0, 0, 35, 0, 74, 0, 0, 74, 0, + 158, 0, 56, 0, 41, 0, 42, 43, 44, 45, + 46, 178, 0, 74, 178, 47, 48, 49, 50, 51, + 52, 0, 116, 0, 0, 0, 54, 0, 178, 178, + 0, 0, 0, 178, 0, 57, 0, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 0, 139, 0, 0, 139, 0, + 0, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 139, 139, 0, 35, 252, 139, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 284, 0, 0, 0, 139, 54, 0, + 0, 0, 0, 0, 0, 134, 0, 57, 134, 58, + 59, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 134, 134, 0, 35, 0, 134, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 0, 0, 0, 0, 134, 54, 158, + 158, 158, 158, 0, 0, 0, 158, 57, 158, 58, + 59, 0, 0, 0, 158, 158, 158, 158, 0, 0, + 0, 0, 0, 137, 0, 0, 137, 158, 158, 0, + 158, 158, 158, 158, 158, 158, 158, 0, 0, 158, + 137, 137, 158, 158, 158, 137, 74, 74, 74, 74, + 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 178, 178, 178, 0, 0, 0, 178, + 135, 178, 0, 135, 74, 137, 0, 178, 178, 178, + 178, 0, 0, 0, 0, 0, 0, 135, 135, 0, + 178, 178, 135, 178, 178, 178, 178, 178, 178, 178, + 0, 0, 178, 0, 0, 178, 178, 178, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 139, 139, 139, + 0, 145, 135, 139, 145, 139, 0, 0, 0, 0, + 0, 139, 139, 139, 139, 0, 0, 0, 145, 145, + 0, 0, 0, 145, 139, 139, 0, 139, 139, 139, + 139, 139, 139, 139, 0, 0, 139, 0, 0, 139, + 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 145, 0, 156, 134, 134, 134, 134, + 0, 169, 0, 134, 169, 134, 0, 0, 0, 156, + 156, 134, 134, 134, 134, 0, 0, 0, 169, 169, + 0, 0, 0, 169, 134, 134, 0, 134, 134, 134, + 134, 134, 134, 134, 0, 0, 134, 0, 0, 134, + 134, 134, 0, 0, 156, 0, 0, 172, 0, 0, + 172, 0, 0, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 172, 0, 0, 0, 172, + 0, 0, 0, 0, 137, 137, 137, 137, 0, 0, + 0, 137, 0, 137, 0, 0, 0, 0, 0, 137, + 137, 137, 137, 0, 0, 0, 0, 0, 0, 172, + 0, 0, 137, 137, 0, 137, 137, 137, 137, 137, + 137, 137, 0, 0, 137, 0, 0, 137, 137, 137, + 0, 135, 135, 135, 135, 0, 128, 0, 135, 128, + 135, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 0, 0, 0, 128, 128, 0, 0, 0, 128, 135, + 135, 0, 135, 135, 135, 135, 135, 135, 135, 0, + 0, 135, 0, 0, 135, 135, 135, 0, 0, 0, + 0, 0, 145, 145, 145, 145, 0, 76, 128, 145, + 76, 145, 0, 0, 0, 0, 0, 145, 145, 145, + 145, 0, 0, 0, 76, 76, 0, 0, 0, 76, + 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, + 0, 0, 145, 0, 0, 145, 145, 145, 0, 0, + 0, 0, 0, 156, 156, 156, 156, 0, 0, 76, + 156, 0, 169, 169, 169, 169, 0, 66, 0, 169, + 66, 169, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 156, 156, 0, 66, 66, 0, 0, 0, 66, + 169, 169, 0, 169, 169, 169, 169, 169, 169, 169, + 0, 0, 169, 0, 0, 169, 169, 169, 172, 172, + 172, 172, 0, 127, 0, 172, 127, 172, 0, 66, + 0, 0, 0, 172, 172, 172, 172, 0, 0, 0, + 127, 127, 0, 0, 0, 127, 172, 172, 0, 172, + 172, 172, 172, 172, 172, 172, 0, 0, 172, 0, + 0, 172, 172, 172, 0, 0, 0, 0, 0, 82, + 0, 0, 82, 0, 0, 127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 0, 0, + 0, 82, 114, 0, 0, 114, 0, 128, 128, 128, + 128, 0, 0, 0, 128, 0, 128, 0, 0, 114, + 114, 0, 128, 128, 128, 128, 0, 0, 0, 0, + 0, 82, 0, 0, 0, 128, 128, 0, 128, 128, + 128, 128, 128, 128, 128, 0, 0, 128, 0, 0, + 128, 128, 128, 102, 114, 0, 102, 0, 76, 76, + 76, 76, 179, 0, 0, 76, 0, 76, 0, 0, + 102, 102, 0, 76, 76, 76, 76, 0, 0, 179, + 179, 0, 0, 0, 179, 0, 76, 76, 0, 76, + 76, 76, 76, 76, 76, 76, 0, 0, 76, 0, + 0, 76, 76, 76, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 179, 0, 0, 0, 66, 66, + 66, 66, 157, 0, 0, 66, 0, 66, 0, 0, + 0, 0, 0, 66, 66, 66, 66, 0, 0, 157, + 157, 0, 0, 0, 157, 0, 66, 66, 0, 66, + 66, 66, 66, 66, 66, 66, 0, 0, 66, 0, + 0, 66, 66, 66, 127, 127, 127, 127, 79, 0, + 0, 127, 0, 127, 157, 0, 0, 0, 0, 127, + 127, 127, 127, 0, 0, 79, 79, 0, 0, 0, + 79, 0, 127, 127, 0, 127, 127, 127, 127, 127, + 127, 127, 0, 0, 127, 0, 0, 127, 127, 127, + 82, 82, 82, 82, 0, 0, 0, 82, 0, 82, + 79, 0, 0, 0, 0, 82, 82, 82, 82, 0, + 0, 0, 0, 114, 114, 114, 114, 0, 82, 82, + 114, 82, 82, 82, 82, 82, 82, 82, 0, 123, + 82, 0, 123, 82, 82, 82, 0, 0, 0, 0, + 0, 114, 114, 0, 114, 0, 123, 123, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 0, 0, + 0, 102, 0, 179, 179, 179, 179, 0, 0, 0, + 179, 123, 179, 0, 0, 0, 0, 0, 179, 179, + 179, 179, 102, 102, 0, 0, 0, 0, 0, 0, + 0, 179, 179, 0, 179, 179, 179, 179, 179, 179, + 179, 0, 0, 179, 0, 0, 179, 179, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, - 0, 0, 0, 103, 0, 103, 0, 0, 0, 0, + 0, 0, 0, 157, 157, 157, 157, 0, 0, 0, + 157, 124, 157, 0, 124, 0, 0, 0, 157, 157, + 157, 157, 0, 0, 0, 0, 0, 0, 124, 124, + 0, 157, 157, 124, 157, 157, 157, 157, 157, 157, + 157, 0, 0, 157, 0, 0, 157, 157, 157, 79, + 79, 79, 79, 0, 118, 0, 79, 118, 79, 0, + 0, 0, 0, 124, 79, 79, 79, 79, 0, 0, + 0, 118, 118, 0, 0, 0, 118, 79, 79, 0, + 79, 79, 79, 79, 79, 79, 79, 99, 0, 79, + 0, 0, 79, 79, 79, 109, 0, 0, 119, 114, + 0, 119, 123, 0, 0, 128, 118, 0, 0, 136, + 137, 138, 139, 140, 0, 119, 119, 145, 146, 0, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 123, 123, 123, 0, 0, 0, 123, 120, 123, + 0, 120, 0, 0, 0, 123, 123, 123, 123, 0, + 119, 0, 196, 0, 0, 120, 120, 0, 123, 123, + 120, 123, 123, 123, 123, 123, 123, 123, 0, 0, + 123, 0, 0, 0, 0, 0, 116, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 103, 0, 103, 103, 103, 103, 105, - 105, 105, 105, 0, 0, 0, 105, 0, 105, 0, - 0, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 105, 105, 0, 105, 105, - 105, 0, 0, 0, 0, 0, 0, 0, 251, 0, + 120, 0, 0, 116, 116, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 124, 124, 124, 124, 0, 117, 0, 124, + 117, 124, 0, 0, 0, 0, 0, 124, 124, 124, + 124, 0, 0, 0, 117, 117, 0, 0, 0, 117, + 124, 124, 0, 124, 124, 124, 124, 124, 124, 124, + 0, 0, 124, 0, 0, 118, 118, 118, 118, 0, + 115, 0, 118, 115, 118, 0, 0, 0, 0, 117, + 118, 118, 118, 118, 0, 0, 0, 115, 115, 0, + 0, 0, 115, 118, 118, 0, 118, 118, 118, 118, + 118, 118, 118, 0, 0, 0, 327, 0, 0, 119, + 119, 119, 119, 0, 0, 0, 119, 77, 119, 0, + 77, 0, 115, 0, 119, 119, 119, 119, 0, 0, + 0, 0, 0, 0, 77, 77, 0, 119, 119, 343, + 119, 119, 119, 119, 119, 119, 119, 0, 0, 120, + 120, 120, 120, 0, 103, 0, 120, 103, 120, 0, + 0, 0, 0, 0, 120, 120, 120, 120, 0, 77, + 0, 103, 103, 0, 0, 0, 103, 120, 120, 0, + 120, 120, 120, 120, 120, 120, 120, 116, 116, 116, + 116, 0, 104, 0, 116, 104, 116, 0, 0, 0, + 0, 0, 116, 116, 116, 116, 103, 0, 0, 104, + 104, 0, 0, 0, 104, 116, 116, 0, 116, 116, + 116, 116, 116, 116, 116, 0, 0, 0, 0, 105, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 0, 105, 105, 0, 0, + 0, 105, 0, 0, 0, 0, 0, 0, 117, 117, + 117, 117, 0, 0, 0, 117, 0, 117, 0, 0, + 0, 0, 0, 117, 117, 117, 117, 305, 0, 0, + 0, 105, 166, 0, 0, 0, 117, 117, 0, 117, + 117, 117, 117, 117, 117, 117, 0, 0, 0, 0, + 0, 115, 115, 115, 115, 0, 161, 0, 115, 161, + 115, 0, 0, 0, 0, 0, 115, 115, 115, 115, + 0, 0, 0, 161, 161, 0, 0, 0, 161, 115, + 115, 0, 115, 115, 115, 115, 115, 115, 115, 0, + 0, 0, 0, 160, 0, 0, 160, 0, 77, 77, + 77, 77, 0, 149, 0, 77, 149, 0, 161, 0, + 160, 160, 0, 0, 0, 160, 0, 0, 0, 0, + 149, 149, 0, 0, 0, 149, 77, 77, 0, 0, + 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, + 126, 0, 103, 126, 103, 160, 0, 0, 0, 0, + 103, 103, 103, 103, 0, 149, 0, 126, 126, 0, + 0, 0, 126, 103, 103, 0, 103, 103, 103, 103, + 103, 103, 103, 104, 104, 104, 104, 0, 107, 0, + 104, 107, 104, 0, 0, 0, 0, 0, 104, 104, + 104, 104, 126, 0, 0, 107, 107, 0, 0, 0, + 107, 104, 104, 0, 104, 104, 104, 104, 104, 104, + 105, 105, 105, 105, 0, 109, 0, 105, 109, 105, + 0, 0, 0, 0, 0, 105, 105, 0, 105, 0, + 107, 110, 109, 109, 110, 0, 0, 109, 105, 105, + 0, 105, 105, 105, 105, 105, 105, 0, 110, 110, + 160, 0, 0, 110, 0, 0, 161, 162, 163, 164, + 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 0, 110, 174, 175, 176, 161, 161, 161, + 161, 0, 112, 0, 161, 112, 161, 0, 0, 0, + 0, 0, 161, 161, 0, 0, 0, 0, 0, 112, + 112, 0, 0, 0, 112, 161, 161, 0, 161, 161, + 161, 161, 161, 0, 160, 160, 160, 160, 0, 113, + 0, 160, 113, 160, 149, 149, 149, 149, 0, 160, + 160, 149, 0, 149, 112, 0, 113, 113, 0, 149, + 149, 113, 160, 160, 0, 160, 160, 160, 160, 160, + 0, 0, 149, 149, 0, 149, 149, 149, 149, 149, + 0, 126, 126, 126, 126, 0, 0, 0, 126, 0, + 126, 113, 0, 0, 0, 0, 126, 126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 126, 0, 126, 126, 126, 126, 126, 0, 0, 107, + 107, 107, 107, 0, 0, 0, 107, 0, 107, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 107, 0, + 107, 107, 107, 107, 107, 0, 109, 109, 109, 109, + 0, 0, 0, 109, 0, 109, 0, 0, 0, 0, + 0, 0, 110, 110, 110, 110, 0, 0, 0, 110, + 0, 110, 0, 0, 109, 109, 0, 109, 109, 109, + 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 110, 0, 110, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 112, 112, 112, 0, 0, 0, + 112, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112, 112, 0, 112, 112, 112, 0, 0, 0, + 113, 113, 113, 113, 0, 0, 0, 113, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 106, 106, 106, 0, 0, 0, 106, - 0, 106, 0, 0, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 0, 106, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 113, + 0, 113, 113, }; -static short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, - 91, 41, 41, 40, 44, 298, 299, 257, 41, 93, - 58, 59, 46, 59, 40, 63, 41, 123, 58, 59, - 59, 41, 123, 57, 58, 40, 367, 41, 59, 41, - 41, 41, 123, 92, 59, 194, 41, 41, 257, 41, - 278, 41, 123, 41, 41, 93, 44, 40, 59, 59, - 91, 276, 277, 93, 91, 59, 115, 41, 123, 44, - 58, 59, 59, 40, 123, 63, 98, 99, 100, 101, - 102, 103, 41, 107, 108, 59, 40, 123, 123, 289, - 290, 59, 123, 59, 0, 59, 123, 40, 40, 36, - 59, 40, 40, 40, 294, 93, 306, 307, 44, 59, - 310, 123, 260, 313, 314, 315, 257, 40, 40, 40, - 144, 145, 146, 147, 148, 149, 150, 33, 277, 41, - 36, 37, 38, 93, 40, 315, 42, 43, 93, 45, - 93, 125, 93, 91, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 59, 91, 257, 36, 0, 64, 255, - 41, 185, 125, 312, 260, 189, 190, 91, 192, 299, - 194, 41, 40, 195, 41, 41, 93, 201, 93, 203, - 204, 41, 333, 334, 208, 91, 123, 338, 41, 257, - 33, 40, 125, 36, 37, 38, 41, 40, 59, 42, - 43, 59, 45, 354, 123, 125, 255, 358, 357, 125, - 234, 260, 236, 237, 0, 125, 59, 123, 41, 125, - 126, 64, 257, 125, 298, 299, 41, 262, 41, 298, - 299, 298, 299, 59, 272, 273, 274, 275, 298, 299, - 40, 279, 272, 273, 274, 275, 41, 33, 91, 279, - 36, 37, 38, 296, 40, 344, 42, 43, 41, 45, - 298, 299, 41, 301, 288, 298, 299, 123, 298, 299, - 294, 301, 41, 59, 59, 298, 299, 123, 64, 41, - 123, 59, 125, 126, 272, 273, 274, 275, 298, 299, - 314, 279, 41, 281, 298, 299, 298, 299, 41, 287, - 288, 289, 290, 298, 299, 91, 298, 299, 298, 299, - 298, 299, 59, 301, 302, 303, 304, 305, 306, 307, - 63, 258, 310, 298, 299, 313, 314, 315, 41, 353, - 298, 299, 298, 299, 298, 299, 8, 123, 298, 299, - 126, 32, 13, 298, 299, 298, 299, 298, 299, 145, - 256, 257, 258, 259, 260, 261, 353, 263, 264, 265, +static short yycheck[] = { 15, + 36, 91, 41, 36, 40, 59, 59, 41, 195, 41, + 59, 59, 41, 59, 59, 44, 59, 123, 93, 36, + 93, 358, 59, 40, 96, 91, 40, 91, 41, 58, + 59, 41, 41, 49, 63, 59, 41, 59, 41, 257, + 204, 40, 192, 90, 60, 61, 59, 41, 198, 257, + 59, 15, 389, 41, 101, 127, 59, 123, 41, 123, + 289, 290, 300, 301, 93, 59, 266, 267, 268, 41, + 270, 271, 41, 41, 91, 123, 41, 91, 123, 44, + 309, 45, 41, 312, 48, 93, 315, 316, 317, 44, + 123, 59, 91, 58, 59, 111, 112, 297, 63, 123, + 59, 123, 59, 36, 37, 40, 123, 40, 40, 123, + 257, 41, 59, 129, 0, 102, 103, 104, 105, 106, + 107, 85, 40, 310, 123, 278, 41, 291, 93, 59, + 312, 64, 40, 315, 316, 317, 100, 153, 154, 155, + 156, 157, 158, 159, 59, 276, 277, 33, 93, 40, + 36, 37, 38, 93, 40, 93, 42, 43, 40, 45, + 40, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 334, 8, 9, 59, 0, 40, 40, 123, 64, 195, + 59, 44, 123, 199, 200, 40, 202, 151, 204, 260, + 257, 40, 298, 41, 93, 211, 268, 213, 214, 40, + 125, 298, 274, 257, 317, 91, 222, 33, 36, 298, + 36, 37, 38, 91, 40, 379, 42, 43, 205, 45, + 41, 125, 257, 91, 257, 300, 301, 300, 301, 262, + 260, 301, 248, 59, 250, 251, 40, 123, 64, 125, + 126, 258, 0, 272, 273, 274, 275, 300, 301, 260, + 279, 300, 301, 298, 300, 301, 41, 300, 301, 41, + 296, 300, 301, 300, 301, 91, 300, 301, 300, 301, + 41, 300, 301, 41, 303, 33, 366, 41, 36, 37, + 38, 40, 40, 59, 42, 43, 41, 45, 304, 125, + 300, 301, 300, 301, 310, 300, 301, 123, 125, 125, + 126, 59, 125, 267, 123, 269, 64, 272, 273, 274, + 275, 275, 300, 301, 279, 125, 281, 300, 301, 59, + 336, 41, 287, 288, 289, 290, 125, 41, 300, 301, + 44, 300, 301, 91, 41, 300, 301, 41, 303, 304, + 305, 306, 307, 308, 309, 300, 301, 312, 59, 63, + 315, 316, 317, 300, 301, 300, 301, 40, 123, 375, + 300, 301, 300, 301, 41, 123, 41, 41, 126, 123, + 256, 257, 258, 259, 260, 261, 41, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 41, 59, 41, 279, 280, 289, 282, 283, 284, 285, + 286, 300, 301, 59, 41, 291, 292, 293, 294, 295, + 296, 297, 63, 59, 41, 309, 302, 35, 312, 52, + 52, 315, 316, 317, 15, 311, 154, 313, 314, 336, + 256, 257, 258, 259, 260, 261, 375, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 125, 192, 97, 279, 280, -1, 282, 283, 284, 285, - 286, 298, 299, 298, 299, 291, 292, 293, 294, 295, - 296, -1, -1, 41, 300, -1, 44, 266, 267, 268, - 314, 270, 271, 309, -1, 311, 312, -1, -1, -1, - -1, 59, -1, 256, 257, 258, 259, 260, 261, -1, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 125, -1, -1, 279, 280, 289, 282, - 283, 284, 285, 286, -1, 93, -1, -1, 291, 292, - 293, 294, 295, 296, -1, -1, 307, 300, 41, 310, - -1, 44, 313, 314, 315, -1, 309, -1, 311, 312, - 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 63, -1, -1, 269, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 266, 267, 268, 300, 270, 271, 310, -1, -1, - 313, 314, 315, 309, 33, 311, 312, 36, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, 58, - 59, -1, -1, -1, 63, 64, -1, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 266, 267, 268, -1, 270, 271, - -1, -1, 91, 33, 93, -1, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, -1, -1, 26, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, - 279, -1, -1, 63, 64, 43, 44, 126, -1, -1, - -1, -1, 50, -1, 272, 273, 274, 275, -1, 298, - 299, 279, -1, -1, 62, 63, 64, 65, -1, -1, - -1, -1, -1, 93, 33, -1, -1, 36, 37, 38, - 298, 40, -1, 42, 43, -1, 45, -1, 309, 310, - 311, -1, 313, -1, -1, 287, 288, 289, 290, -1, - 59, 307, -1, -1, 310, 64, 126, 313, 314, 315, - 108, 303, 304, 305, 306, 307, -1, -1, 310, 340, - -1, 313, 314, 315, 41, -1, 347, 44, 281, -1, - 351, -1, 91, -1, 287, 288, 289, 290, -1, -1, - -1, 58, 59, 364, 365, -1, 63, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 123, -1, -1, 126, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, 257, 258, + 202, 24, 269, 279, 280, -1, 282, 283, 284, 285, + 286, -1, -1, 125, -1, 291, 292, 293, 294, 295, + 296, 297, 355, 356, -1, 309, 302, 360, 312, -1, + -1, 315, 316, 317, -1, 311, -1, 313, 314, -1, + -1, 41, -1, 376, 44, -1, -1, 380, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 58, 59, + -1, 269, -1, 63, 272, 273, 274, 275, -1, -1, + -1, 279, 280, -1, 282, 283, 284, 285, 286, -1, + -1, 125, -1, 291, 292, 293, 294, 295, 296, -1, + -1, -1, -1, 93, 302, -1, -1, -1, -1, -1, + -1, -1, -1, 311, 33, 313, 314, 36, 37, 38, + -1, 40, 41, 42, 43, 44, 45, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, 64, -1, -1, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 266, 267, 268, -1, 270, 271, + -1, -1, 91, -1, 93, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, -1, + 281, -1, -1, -1, -1, 297, 287, 288, 289, 290, + 58, 59, -1, -1, -1, 63, 64, 126, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, 29, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 266, 267, 268, 93, 270, 271, 33, 46, + 47, 36, 37, 38, -1, 40, 53, 42, 43, -1, + 45, 287, 288, 289, 290, -1, -1, -1, 65, 66, + 67, 68, -1, 297, 59, -1, -1, -1, 126, 64, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, 91, 287, 288, 289, + 290, 272, 273, 274, 275, 112, -1, -1, 279, -1, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 123, 300, + 301, 126, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, - 269, -1, 58, 272, 273, 274, 275, 63, -1, -1, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, -1, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, -1, - 309, 310, 311, 312, 313, 314, 315, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, -1, 309, - 310, 311, 312, 313, 314, 315, -1, 256, 257, 258, - 259, 260, 261, -1, 263, 264, 265, -1, -1, 63, 269, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, -1, 33, - -1, 300, 36, 37, 38, 13, 40, -1, 42, 43, - 309, 45, 311, 312, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, 59, -1, -1, -1, -1, - 64, 288, -1, -1, 42, -1, -1, 45, 41, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, -1, - 287, 288, 289, 290, -1, 33, 59, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 305, 306, - 307, -1, -1, 310, 82, 281, 313, 314, 315, -1, - -1, 287, 288, 289, 290, -1, 64, -1, 96, 123, - 93, -1, 126, -1, -1, 301, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, - -1, 33, -1, 91, 36, 37, 38, -1, 40, -1, - 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 142, -1, -1, 287, 288, 289, - 290, -1, 64, -1, -1, 123, -1, -1, 126, -1, - 41, -1, -1, 44, 304, 305, 306, 307, -1, -1, - 310, -1, -1, 313, 314, 315, -1, 58, 59, 91, - -1, -1, -1, 181, 33, -1, -1, 36, 37, 38, - 188, 40, -1, 42, 43, -1, 45, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - -1, 123, 93, -1, 126, 64, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, -1, -1, 313, - 314, 315, 256, 257, 258, 259, 260, 261, -1, 263, - 264, 265, 91, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, 123, -1, 300, 126, -1, 272, - 273, 274, 275, -1, -1, 309, 279, 311, 312, 257, - 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, - -1, 269, -1, -1, 63, 298, 299, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, 257, 258, 259, 260, 261, - -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, - 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, - 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 295, 296, -1, 64, -1, 300, -1, - -1, 272, 273, 274, 275, -1, -1, 309, 279, 311, - 312, -1, 287, 288, 289, 290, -1, -1, 257, 258, - 259, 260, 261, 91, 263, 264, 265, 298, 299, -1, - 269, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, 126, 33, - -1, 300, 36, 37, 38, -1, 40, -1, 42, 43, - 309, 45, 311, 312, 287, -1, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, - 64, 25, 26, 306, 307, -1, 41, 310, -1, 44, - 313, 314, 315, 37, -1, -1, -1, -1, -1, 43, - 44, 45, -1, 58, 59, 33, 50, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 62, 63, - 64, 65, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, 64, -1, 93, -1, - -1, -1, 126, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, -1, -1, -1, - -1, -1, -1, 91, 108, 93, 33, -1, -1, 36, - 37, 38, -1, 40, 41, 42, 43, -1, 45, 257, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + -1, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, -1, 311, 312, 313, 314, 315, 316, 317, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, -1, -1, -1, -1, 64, 126, -1, + -1, 269, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, -1, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + -1, 256, 257, 258, 259, 260, 261, 63, 263, 264, + 265, -1, -1, -1, 269, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, 280, -1, 282, 283, 284, + 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, + 295, 296, -1, -1, -1, 33, -1, 302, 36, 37, + 38, -1, 40, -1, 42, 43, 311, 45, 313, 314, + -1, 46, -1, -1, -1, -1, -1, -1, -1, 54, + 287, 59, 289, 290, -1, -1, 64, -1, -1, 41, + -1, -1, 44, -1, -1, 331, 332, 333, -1, 335, + -1, 308, 309, -1, -1, 312, 58, 59, 315, 316, + 317, -1, -1, 91, -1, 33, -1, -1, 36, 37, + 38, 96, 40, -1, 42, 43, 362, 45, -1, -1, + -1, -1, -1, 369, -1, -1, -1, 373, -1, -1, + -1, 93, -1, -1, 119, 123, 64, -1, 126, -1, + 386, 387, 127, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, -1, -1, + -1, -1, -1, 91, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, + -1, -1, -1, -1, 41, 308, 309, 44, -1, 312, + -1, -1, 315, 316, 317, 123, -1, -1, 126, -1, + -1, 58, 59, 91, -1, -1, 63, -1, -1, 33, + -1, -1, 36, 37, 38, -1, 40, -1, 42, 43, + -1, 45, -1, -1, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, 123, 93, -1, 126, -1, + 64, -1, -1, -1, -1, -1, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 91, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + -1, 269, -1, 268, 272, 273, 274, 275, -1, 274, + -1, 279, 280, -1, 282, 283, 284, 285, 286, 123, + -1, -1, 126, 291, 292, 293, 294, 295, 296, -1, + 272, 273, 274, 275, 302, -1, -1, 279, -1, -1, + -1, -1, -1, 311, -1, 313, 314, -1, -1, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 300, 301, + -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, + 41, -1, -1, 291, 292, 293, 294, 295, 296, 257, + 258, 259, 260, 261, 302, 263, 264, 265, 59, -1, + -1, 269, -1, 311, -1, 313, 314, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, 63, -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 289, 290, 300, 167, 91, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, -1, 41, 307, -1, - 44, 310, -1, -1, 313, 314, 315, -1, -1, 193, - -1, -1, -1, -1, 58, 59, -1, 33, -1, 126, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 64, 93, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + -1, -1, 93, -1, 302, 272, 273, 274, 275, -1, + -1, -1, 279, 311, 281, 313, 314, -1, -1, -1, + 287, 288, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, -1, 300, 301, 269, 303, 304, 305, 306, + 307, 308, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, 91, 300, 272, 273, 274, - 275, -1, -1, -1, 279, 309, -1, 311, 312, 257, - 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, 298, 299, -1, -1, -1, -1, -1, - 126, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 41, -1, 300, 44, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, 41, 58, 59, 44, - 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, - -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, -1, 93, -1, 291, 292, 293, 294, 295, 296, - -1, -1, -1, 300, -1, -1, -1, -1, 93, -1, - -1, -1, 309, -1, 311, 312, -1, 33, -1, -1, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, -1, 64, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, -1, -1, 269, 298, 299, -1, -1, -1, -1, - -1, -1, -1, -1, 280, 91, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, 33, -1, 300, 36, 37, 38, -1, 40, - -1, 42, 43, 309, 45, 311, 312, -1, -1, -1, - 126, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, -1, -1, 64, -1, -1, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, + 294, 295, 296, 289, 290, -1, 33, -1, 302, 36, + 37, 38, -1, 40, -1, 42, 43, 311, 45, 313, + 314, -1, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 59, -1, -1, -1, -1, 64, -1, -1, + -1, 287, 288, 289, 290, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 305, + 306, 307, 308, 309, 91, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 64, -1, -1, + 287, 288, 289, 290, -1, -1, 33, -1, -1, 36, + 37, 38, -1, 40, -1, 42, 43, -1, 45, 126, + 307, 308, 309, -1, 91, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, 272, 273, 274, 275, -1, 33, -1, 279, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 126, + -1, -1, -1, -1, 91, -1, 93, 281, -1, 300, + 301, -1, -1, 287, 288, 289, 290, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - -1, -1, -1, -1, 64, 126, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, 298, 299, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 91, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, 257, 258, 259, 260, 261, 126, 263, 264, 265, - -1, -1, -1, 269, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, -1, 300, -1, 91, -1, -1, -1, - -1, -1, -1, 309, -1, 311, 312, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, -1, -1, -1, -1, 256, 257, 258, 259, 260, - 261, 126, 263, 264, 265, -1, -1, -1, 269, 64, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, 91, -1, -1, 300, - -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, - 311, 312, -1, -1, -1, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, -1, 33, -1, - 300, 36, 37, 38, -1, 40, -1, 42, 43, 309, - 45, 311, 312, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 280, 91, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, -1, 300, -1, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 126, -1, -1, 41, -1, -1, 44, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 58, 59, -1, 269, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, 41, 300, 93, 44, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + 304, 305, 306, 307, 308, 309, -1, -1, 312, 126, + -1, 315, 316, 317, 91, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - 93, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, 41, -1, 300, 44, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 91, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, 126, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, -1, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 64, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 91, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, 93, 44, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 58, 59, 279, -1, 281, 63, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, 93, 313, 314, 315, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 91, 33, -1, 63, 36, 37, 38, -1, 40, + -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, -1, 313, 314, 315, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, 41, -1, -1, 44, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, 58, 59, - 313, 314, 315, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, 93, -1, 126, 304, 305, 306, + 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 91, -1, 33, -1, -1, 36, 37, 38, -1, 40, + 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + -1, -1, 302, -1, -1, 126, -1, -1, -1, -1, + -1, 311, -1, 313, 314, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, 33, -1, 269, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, 64, -1, + -1, -1, 302, 272, 273, 274, 275, -1, -1, -1, + 279, 311, 281, 313, 314, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, 91, -1, -1, 269, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, -1, 33, + 126, 302, 36, 37, 38, -1, 40, 41, 42, 43, + 311, 45, 313, 314, -1, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + 64, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, 91, -1, 33, + -1, 302, 36, 37, 38, -1, 40, -1, 42, 43, + 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, 29, + 64, -1, 126, -1, -1, -1, -1, -1, 41, -1, + 40, 44, -1, -1, -1, -1, 46, 47, 48, -1, + -1, -1, 52, 53, -1, 58, 59, 91, -1, -1, + 63, -1, -1, -1, -1, 65, 66, 67, 68, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, -1, 41, -1, -1, 44, -1, + 93, -1, 126, -1, 280, -1, 282, 283, 284, 285, + 286, 41, -1, 59, 44, 291, 292, 293, 294, 295, + 296, -1, 112, -1, -1, -1, 302, -1, 58, 59, + -1, -1, -1, 63, -1, 311, -1, 313, 314, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, -1, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, + -1, -1, -1, 93, -1, 41, -1, -1, 44, -1, + -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, 176, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, 203, -1, -1, -1, 93, 302, -1, + -1, -1, -1, -1, -1, 41, -1, 311, 44, 313, + 314, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, -1, -1, -1, -1, 93, 302, 272, + 273, 274, 275, -1, -1, -1, 279, 311, 281, 313, + 314, -1, -1, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, 41, -1, -1, 44, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, + 58, 59, 315, 316, 317, 63, 272, 273, 274, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + 41, 281, -1, 44, 300, 93, -1, 287, 288, 289, + 290, -1, -1, -1, -1, -1, -1, 58, 59, -1, + 300, 301, 63, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 41, 93, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 41, 93, -1, 44, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, 58, + 59, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, 93, -1, -1, 41, -1, -1, + 44, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, - -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 41, -1, - 310, 44, 93, 313, 314, 315, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - 93, -1, 287, 288, 289, 290, -1, -1, -1, 41, - -1, -1, 44, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, 58, 59, 313, 314, - 315, 63, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 93, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 288, 289, 290, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, 41, -1, -1, 44, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, -1, -1, 310, - 58, 59, 313, 314, 315, 63, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, 93, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 41, -1, 310, - -1, -1, 313, 314, 315, -1, -1, -1, -1, 272, - 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, 41, 310, -1, 93, - 313, 314, 315, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, 93, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, 93, + 279, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, 300, 301, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, 93, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + -1, 63, 41, -1, -1, 44, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, 58, + 59, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, 93, -1, -1, -1, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, + 315, 316, 317, 41, 93, -1, 44, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + 58, 59, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 272, 273, 274, 275, 41, -1, + -1, 279, -1, 281, 93, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, 58, 59, -1, -1, -1, + 63, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 41, -1, -1, -1, 298, 299, 93, 301, - 302, 303, 304, 305, 306, 307, -1, -1, 310, 58, - 59, 313, 314, 315, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 300, 301, + 279, 303, 304, 305, 306, 307, 308, 309, -1, 41, + 312, -1, 44, 315, 316, 317, -1, -1, -1, -1, + -1, 300, 301, -1, 303, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, 93, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - 41, -1, -1, 44, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, 58, 59, 313, - 314, 315, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, 310, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, 41, 93, -1, - 44, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 279, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 93, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 300, 301, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - 41, -1, -1, 44, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 41, 281, -1, 44, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 300, 301, 63, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 33, -1, 312, + -1, -1, 315, 316, 317, 41, -1, -1, 41, 45, + -1, 44, 48, -1, -1, 51, 93, -1, -1, 55, + 56, 57, 58, 59, -1, 58, 59, 63, 64, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 41, 281, + -1, 44, -1, -1, -1, 287, 288, 289, 290, -1, + 93, -1, 98, -1, -1, 58, 59, -1, 300, 301, + 63, 303, 304, 305, 306, 307, 308, 309, -1, -1, + 312, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, 93, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + -1, 187, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, -1, -1, -1, -1, 93, + 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, -1, -1, -1, 272, -1, -1, 272, + 273, 274, 275, -1, -1, -1, 279, 41, 281, -1, + 44, -1, 93, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, 58, 59, -1, 300, 301, 305, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, -1, 287, 288, 289, 290, -1, 93, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, 93, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, + -1, -1, -1, 287, 288, 289, 290, 58, -1, -1, + -1, 93, 63, -1, -1, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 41, 298, 299, 44, 301, 302, 303, 304, - 305, 306, 307, -1, 272, 273, 274, 275, -1, 58, - 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 41, - 298, 299, 44, 301, 302, 303, 304, 305, 306, 307, - 41, -1, -1, 44, 93, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, 93, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, -1, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, 93, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, 93, -1, -1, - 279, -1, 281, -1, -1, -1, -1, 93, 287, 288, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, -1, -1, - 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, 272, 273, 274, 275, 287, 288, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 298, 299, -1, 301, - 302, 303, 304, 305, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, - -1, -1, 287, 288, -1, -1, -1, -1, 41, -1, - -1, 44, -1, 298, 299, -1, 301, 302, 303, 304, - 305, -1, -1, -1, -1, 58, 59, 93, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, -1, -1, -1, -1, - 93, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, 272, 273, 274, 275, - -1, 287, 288, 279, -1, 281, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 305, - -1, 41, 298, 299, 44, 301, 302, 303, 304, 305, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 30, -1, -1, 63, -1, -1, -1, -1, 38, -1, - -1, -1, 42, -1, -1, 45, -1, -1, -1, -1, - -1, -1, 52, 53, 54, 55, 56, -1, -1, -1, - 60, 61, -1, 93, -1, -1, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 272, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, -1, -1, 41, -1, -1, 44, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, -1, 93, -1, + 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, 93, -1, -1, -1, -1, + 287, 288, 289, 290, -1, 93, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 93, -1, -1, 58, 59, -1, -1, -1, + 63, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, + -1, -1, -1, -1, -1, 287, 288, -1, 290, -1, + 93, 41, 58, 59, 44, -1, -1, 63, 300, 301, + -1, 303, 304, 305, 306, 307, 308, -1, 58, 59, + 281, -1, -1, 63, -1, -1, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, 93, 315, 316, 317, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, -1, -1, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, -1, 272, 273, 274, 275, -1, 41, + -1, 279, 44, 281, 272, 273, 274, 275, -1, 287, + 288, 279, -1, 281, 93, -1, 58, 59, -1, 287, + 288, 63, 300, 301, -1, 303, 304, 305, 306, 307, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, 93, -1, -1, -1, -1, 287, 288, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, -1, 303, 304, 305, 306, 307, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 298, 299, -1, 301, 302, - 303, -1, -1, -1, -1, -1, -1, -1, 178, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 288, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, + 303, 304, 305, 306, 307, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, 300, 301, -1, 303, 304, 305, + 306, 307, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, -1, 303, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 281, -1, -1, -1, -1, -1, -1, 258, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, + -1, -1, -1, -1, -1, -1, -1, -1, 300, 301, + -1, 303, 304, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 315 +#define YYMAXTOKEN 317 #if YYDEBUG static char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1140,9 +1143,9 @@ static char *yyname[] = { "ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", "CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP", "RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY", -"PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR","ANDAND","BITOROP", -"BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC", -"POSTINC","POSTDEC","ARROW", +"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR", +"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", +"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; static char *yyrule[] = { "$accept : prog", @@ -1193,18 +1196,25 @@ static char *yyrule[] = { "label : LABEL", "decl : format", "decl : subrout", +"decl : mysubrout", "decl : package", "decl : use", "format : FORMAT startformsub formname block", "formname : WORD", "formname :", -"subrout : SUB startsub subname proto subbody", +"mysubrout : MYSUB startsub subname proto subattrlist subbody", +"subrout : SUB startsub subname proto subattrlist subbody", "startsub :", "startanonsub :", "startformsub :", "subname : WORD", "proto :", "proto : THING", +"subattrlist :", +"subattrlist : COLONATTR THING", +"subattrlist : COLONATTR", +"myattrlist : COLONATTR THING", +"myattrlist : COLONATTR", "subbody : block", "subbody : ';'", "package : PACKAGE WORD ';'", @@ -1263,14 +1273,15 @@ static char *yyrule[] = { "term : term POSTDEC", "term : PREINC term", "term : PREDEC term", -"term : local term", +"term : myattrterm", +"term : LOCAL term", "term : '(' expr ')'", "term : '(' ')'", "term : '[' expr ']'", "term : '[' ']'", "term : HASHBRACK expr ';' '}'", "term : HASHBRACK ';' '}'", -"term : ANONSUB startanonsub proto block", +"term : ANONSUB startanonsub proto subattrlist block", "term : scalar", "term : star", "term : hsh", @@ -1308,13 +1319,18 @@ static char *yyrule[] = { "term : PMFUNC '(' term ',' term ')'", "term : WORD", "term : listop", +"myattrterm : MY myterm myattrlist", +"myattrterm : MY myterm", +"myterm : '(' expr ')'", +"myterm : '(' ')'", +"myterm : scalar", +"myterm : hsh", +"myterm : ary", "listexpr :", "listexpr : argexpr", "listexprcom :", "listexprcom : expr", "listexprcom : expr ','", -"local : LOCAL", -"local : MY", "my_scalar : scalar", "amper : '&' indirob", "scalar : '$' indirob", @@ -1342,26 +1358,22 @@ static char *yyrule[] = { #define YYMAXDEPTH 500 #endif #endif -#line 666 "perly.y" +#line 726 "perly.y" /* PROGRAM */ -#line 1427 "perly.c" + +/* more stuff added to make perly_c.diff easier to apply */ + +#ifdef yyparse +#undef yyparse +#endif +#define yyparse() Perl_yyparse(pTHX) + +#line 1372 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab - -struct ysv { - short* yyss; - YYSTYPE* yyvs; - int oldyydebug; - int oldyynerrs; - int oldyyerrflag; - int oldyychar; - YYSTYPE oldyyval; - YYSTYPE oldyylval; -}; - int -Perl_yyparse(pTHX) +yyparse() { register int yym, yyn, yystate; register short *yyssp; @@ -1372,11 +1384,6 @@ Perl_yyparse(pTHX) int retval = 0; #if YYDEBUG register char *yys; -#ifndef __cplusplus -# ifndef getenv - extern char *getenv(); -# endif -#endif #endif struct ysv *ysave; @@ -1388,7 +1395,7 @@ Perl_yyparse(pTHX) ysave->oldyychar = yychar; ysave->oldyyval = yyval; ysave->oldyylval = yylval; - + #if YYDEBUG if (yys = getenv("YYDEBUG")) { @@ -1428,7 +1435,7 @@ yyloop: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - printf("yydebug: state %d, reading %d (%s)\n", yystate, + PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif @@ -1450,10 +1457,8 @@ yyloop: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1494,8 +1499,8 @@ yyinrecovery: #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery shifting to state %d\n", - *yyssp, yytable[yyn]); + "yydebug: state %d, error recovery shifting to state %d\n", + *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -1506,10 +1511,8 @@ yyinrecovery: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, - yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, - yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1523,9 +1526,8 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, - "yydebug: error recovery discarding state %d\n", - *yyssp); + PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", + *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; @@ -1542,9 +1544,8 @@ yyinrecovery: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery discards token %d (%s)\n", - yystate, yychar, yys); + PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); } #endif yychar = (-1); @@ -1561,7 +1562,7 @@ yyreduce: switch (yyn) { case 1: -#line 101 "perly.y" +#line 125 "perly.y" { #if defined(YYDEBUG) && defined(DEBUGGING) yydebug = (PL_debug & 1); @@ -1570,50 +1571,50 @@ case 1: } break; case 2: -#line 108 "perly.y" +#line 132 "perly.y" { newPROG(yyvsp[0].opval); } break; case 3: -#line 112 "perly.y" +#line 136 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 4: -#line 118 "perly.y" +#line 142 "perly.y" { yyval.ival = block_start(TRUE); } break; case 5: -#line 122 "perly.y" +#line 146 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 6: -#line 128 "perly.y" +#line 152 "perly.y" { yyval.ival = block_start(FALSE); } break; case 7: -#line 132 "perly.y" +#line 156 "perly.y" { yyval.opval = Nullop; } break; case 8: -#line 134 "perly.y" +#line 158 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 9: -#line 136 "perly.y" +#line 160 "perly.y" { yyval.opval = append_list(OP_LINESEQ, (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval); PL_pad_reset_pending = TRUE; if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; } break; case 10: -#line 143 "perly.y" +#line 167 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); } break; case 12: -#line 146 "perly.y" +#line 170 "perly.y" { if (yyvsp[-1].pval != Nullch) { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0)); } @@ -1624,75 +1625,75 @@ case 12: PL_expect = XSTATE; } break; case 13: -#line 155 "perly.y" +#line 179 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval); PL_expect = XSTATE; } break; case 14: -#line 160 "perly.y" +#line 184 "perly.y" { yyval.opval = Nullop; } break; case 15: -#line 162 "perly.y" +#line 186 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 16: -#line 164 "perly.y" +#line 188 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 17: -#line 166 "perly.y" +#line 190 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 18: -#line 168 "perly.y" +#line 192 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); } break; case 19: -#line 170 "perly.y" +#line 194 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);} break; case 20: -#line 172 "perly.y" +#line 196 "perly.y" { yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival, Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); } break; case 21: -#line 177 "perly.y" +#line 201 "perly.y" { yyval.opval = Nullop; } break; case 22: -#line 179 "perly.y" +#line 203 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 23: -#line 181 "perly.y" +#line 205 "perly.y" { PL_copline = yyvsp[-5].ival; yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); PL_hints |= HINT_BLOCK_SCOPE; } break; case 24: -#line 187 "perly.y" +#line 211 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 25: -#line 191 "perly.y" +#line 215 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 26: -#line 197 "perly.y" +#line 221 "perly.y" { yyval.opval = Nullop; } break; case 27: -#line 199 "perly.y" +#line 223 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 28: -#line 203 "perly.y" +#line 227 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1700,7 +1701,7 @@ case 28: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 29: -#line 209 "perly.y" +#line 233 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1708,23 +1709,23 @@ case 29: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 30: -#line 215 "perly.y" +#line 239 "perly.y" { yyval.opval = block_end(yyvsp[-6].ival, newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 31: -#line 218 "perly.y" +#line 242 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 32: -#line 222 "perly.y" +#line 246 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 33: -#line 226 "perly.y" +#line 250 "perly.y" { OP *forop = append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval), newWHILEOP(0, 1, (LOOP*)Nullop, @@ -1734,427 +1735,459 @@ case 33: yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); } break; case 34: -#line 234 "perly.y" +#line 258 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 35: -#line 240 "perly.y" +#line 264 "perly.y" { yyval.opval = Nullop; } break; case 37: -#line 245 "perly.y" +#line 269 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; case 39: -#line 250 "perly.y" +#line 274 "perly.y" { yyval.opval = invert(scalar(yyvsp[0].opval)); } break; case 40: -#line 254 "perly.y" +#line 278 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 41: -#line 258 "perly.y" +#line 282 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 42: -#line 262 "perly.y" +#line 286 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 43: -#line 266 "perly.y" +#line 290 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 44: -#line 270 "perly.y" +#line 294 "perly.y" { yyval.pval = Nullch; } break; case 46: -#line 275 "perly.y" +#line 299 "perly.y" { yyval.ival = 0; } break; case 47: -#line 277 "perly.y" +#line 301 "perly.y" { yyval.ival = 0; } break; case 48: -#line 279 "perly.y" +#line 303 "perly.y" { yyval.ival = 0; } break; case 49: -#line 281 "perly.y" +#line 305 "perly.y" { yyval.ival = 0; } break; case 50: -#line 285 "perly.y" -{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 307 "perly.y" +{ yyval.ival = 0; } break; case 51: -#line 288 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 311 "perly.y" +{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 52: -#line 289 "perly.y" -{ yyval.opval = Nullop; } +#line 314 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 53: -#line 293 "perly.y" -{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +#line 315 "perly.y" +{ yyval.opval = Nullop; } break; case 54: -#line 297 "perly.y" -{ yyval.ival = start_subparse(FALSE, 0); } +#line 319 "perly.y" +{ newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 55: -#line 301 "perly.y" -{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +#line 323 "perly.y" +{ newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 56: -#line 305 "perly.y" -{ yyval.ival = start_subparse(TRUE, 0); } +#line 327 "perly.y" +{ yyval.ival = start_subparse(FALSE, 0); } break; case 57: -#line 308 "perly.y" +#line 331 "perly.y" +{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +break; +case 58: +#line 335 "perly.y" +{ yyval.ival = start_subparse(TRUE, 0); } +break; +case 59: +#line 338 "perly.y" { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT")) CvSPECIAL_on(PL_compcv); yyval.opval = yyvsp[0].opval; } break; -case 58: -#line 316 "perly.y" +case 60: +#line 346 "perly.y" { yyval.opval = Nullop; } break; -case 60: -#line 320 "perly.y" +case 62: +#line 351 "perly.y" +{ yyval.opval = Nullop; } +break; +case 63: +#line 353 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 64: +#line 355 "perly.y" +{ yyval.opval = Nullop; } +break; +case 65: +#line 359 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 61: -#line 321 "perly.y" +case 66: +#line 361 "perly.y" +{ yyval.opval = Nullop; } +break; +case 67: +#line 364 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 68: +#line 365 "perly.y" { yyval.opval = Nullop; PL_expect = XSTATE; } break; -case 62: -#line 325 "perly.y" +case 69: +#line 369 "perly.y" { package(yyvsp[-1].opval); } break; -case 63: -#line 327 "perly.y" +case 70: +#line 371 "perly.y" { package(Nullop); } break; -case 64: -#line 331 "perly.y" +case 71: +#line 375 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; -case 65: -#line 333 "perly.y" +case 72: +#line 377 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; -case 66: -#line 337 "perly.y" +case 73: +#line 381 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 67: -#line 339 "perly.y" +case 74: +#line 383 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 69: -#line 344 "perly.y" +case 76: +#line 388 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 70: -#line 346 "perly.y" +case 77: +#line 390 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 72: -#line 351 "perly.y" +case 79: +#line 395 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; -case 73: -#line 354 "perly.y" +case 80: +#line 398 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; -case 74: -#line 357 "perly.y" +case 81: +#line 401 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 75: -#line 362 "perly.y" +case 82: +#line 406 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar(yyvsp[-2].opval), newUNOP(OP_METHOD, 0, yyvsp[0].opval))); } break; -case 76: -#line 366 "perly.y" +case 83: +#line 410 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; -case 77: -#line 371 "perly.y" +case 84: +#line 415 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; -case 78: -#line 376 "perly.y" +case 85: +#line 420 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 79: -#line 378 "perly.y" +case 86: +#line 422 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 80: -#line 380 "perly.y" -{ yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } +case 87: +#line 424 "perly.y" +{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } break; -case 81: -#line 382 "perly.y" +case 88: +#line 426 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; -case 84: -#line 392 "perly.y" +case 91: +#line 436 "perly.y" { yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } break; -case 85: -#line 394 "perly.y" +case 92: +#line 438 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } break; -case 86: -#line 396 "perly.y" +case 93: +#line 440 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 87: -#line 400 "perly.y" +case 94: +#line 444 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 88: -#line 404 "perly.y" +case 95: +#line 448 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 89: -#line 407 "perly.y" +case 96: +#line 451 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 90: -#line 412 "perly.y" +case 97: +#line 456 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 91: -#line 417 "perly.y" +case 98: +#line 461 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 92: -#line 420 "perly.y" +case 99: +#line 464 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 93: -#line 425 "perly.y" +case 100: +#line 469 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-3].opval)))); } break; -case 94: -#line 429 "perly.y" +case 101: +#line 473 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-2].opval))); } break; -case 95: -#line 435 "perly.y" +case 102: +#line 479 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 96: -#line 437 "perly.y" +case 103: +#line 481 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 97: -#line 439 "perly.y" +case 104: +#line 483 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; -case 98: -#line 443 "perly.y" +case 105: +#line 487 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 99: -#line 445 "perly.y" +case 106: +#line 489 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 100: -#line 447 "perly.y" +case 107: +#line 491 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 101: -#line 449 "perly.y" +case 108: +#line 493 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 102: -#line 451 "perly.y" +case 109: +#line 495 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 103: -#line 453 "perly.y" +case 110: +#line 497 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 104: -#line 455 "perly.y" +case 111: +#line 499 "perly.y" { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; -case 105: -#line 457 "perly.y" +case 112: +#line 501 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 106: -#line 459 "perly.y" +case 113: +#line 503 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 107: -#line 461 "perly.y" +case 114: +#line 505 "perly.y" { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 108: -#line 463 "perly.y" +case 115: +#line 507 "perly.y" { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 109: -#line 466 "perly.y" +case 116: +#line 510 "perly.y" { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; -case 110: -#line 468 "perly.y" +case 117: +#line 512 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 111: -#line 470 "perly.y" +case 118: +#line 514 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 112: -#line 472 "perly.y" +case 119: +#line 516 "perly.y" { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; -case 113: -#line 474 "perly.y" +case 120: +#line 518 "perly.y" { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; -case 114: -#line 476 "perly.y" +case 121: +#line 520 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 115: -#line 479 "perly.y" +case 122: +#line 523 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 116: -#line 482 "perly.y" +case 123: +#line 526 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 117: -#line 485 "perly.y" +case 124: +#line 529 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 118: -#line 488 "perly.y" +case 125: +#line 532 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 126: +#line 534 "perly.y" { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; -case 119: -#line 490 "perly.y" +case 127: +#line 536 "perly.y" { yyval.opval = sawparens(yyvsp[-1].opval); } break; -case 120: -#line 492 "perly.y" +case 128: +#line 538 "perly.y" { yyval.opval = sawparens(newNULLLIST()); } break; -case 121: -#line 494 "perly.y" +case 129: +#line 540 "perly.y" { yyval.opval = newANONLIST(yyvsp[-1].opval); } break; -case 122: -#line 496 "perly.y" +case 130: +#line 542 "perly.y" { yyval.opval = newANONLIST(Nullop); } break; -case 123: -#line 498 "perly.y" +case 131: +#line 544 "perly.y" { yyval.opval = newANONHASH(yyvsp[-2].opval); } break; -case 124: -#line 500 "perly.y" +case 132: +#line 546 "perly.y" { yyval.opval = newANONHASH(Nullop); } break; -case 125: -#line 502 "perly.y" -{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +case 133: +#line 548 "perly.y" +{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; -case 126: -#line 504 "perly.y" +case 134: +#line 550 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 127: -#line 506 "perly.y" +case 135: +#line 552 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 128: -#line 508 "perly.y" +case 136: +#line 554 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 129: -#line 510 "perly.y" +case 137: +#line 556 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 130: -#line 512 "perly.y" +case 138: +#line 558 "perly.y" { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; -case 131: -#line 514 "perly.y" +case 139: +#line 560 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 132: -#line 516 "perly.y" +case 140: +#line 562 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; -case 133: -#line 518 "perly.y" +case 141: +#line 564 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; -case 134: -#line 520 "perly.y" +case 142: +#line 566 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list(yyvsp[-1].opval), ref(yyvsp[-3].opval, OP_ASLICE))); } break; -case 135: -#line 526 "perly.y" +case 143: +#line 572 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2162,38 +2195,38 @@ case 135: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); PL_expect = XOPERATOR; } break; -case 136: -#line 533 "perly.y" +case 144: +#line 579 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 137: -#line 535 "perly.y" +case 145: +#line 581 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; -case 138: -#line 537 "perly.y" +case 146: +#line 583 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; -case 139: -#line 539 "perly.y" +case 147: +#line 585 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; -case 140: -#line 542 "perly.y" +case 148: +#line 588 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 141: -#line 545 "perly.y" +case 149: +#line 591 "perly.y" { yyval.opval = dofile(yyvsp[0].opval); } break; -case 142: -#line 547 "perly.y" +case 150: +#line 593 "perly.y" { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } break; -case 143: -#line 549 "perly.y" +case 151: +#line 595 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2202,8 +2235,8 @@ case 143: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 144: -#line 557 "perly.y" +case 152: +#line 603 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2213,151 +2246,171 @@ case 144: scalar(yyvsp[-3].opval) )))); dep();} break; -case 145: -#line 566 "perly.y" +case 153: +#line 612 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; -case 146: -#line 570 "perly.y" +case 154: +#line 616 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; -case 147: -#line 575 "perly.y" +case 155: +#line 621 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; -case 148: -#line 578 "perly.y" +case 156: +#line 624 "perly.y" { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 149: -#line 580 "perly.y" +case 157: +#line 626 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 150: -#line 582 "perly.y" +case 158: +#line 628 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 151: -#line 584 "perly.y" +case 159: +#line 630 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 152: -#line 586 "perly.y" +case 160: +#line 632 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 153: -#line 588 "perly.y" +case 161: +#line 634 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 154: -#line 591 "perly.y" +case 162: +#line 637 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 155: -#line 593 "perly.y" +case 163: +#line 639 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, 0); } break; -case 156: -#line 595 "perly.y" +case 164: +#line 641 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[0].opval)); } break; -case 157: -#line 598 "perly.y" +case 165: +#line 644 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; -case 158: -#line 600 "perly.y" +case 166: +#line 646 "perly.y" { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 159: -#line 602 "perly.y" +case 167: +#line 648 "perly.y" { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 160: -#line 604 "perly.y" +case 168: +#line 650 "perly.y" { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; -case 163: -#line 610 "perly.y" -{ yyval.opval = Nullop; } +case 171: +#line 656 "perly.y" +{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } break; -case 164: -#line 612 "perly.y" +case 172: +#line 658 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +break; +case 173: +#line 662 "perly.y" +{ yyval.opval = sawparens(yyvsp[-1].opval); } +break; +case 174: +#line 664 "perly.y" +{ yyval.opval = sawparens(newNULLLIST()); } +break; +case 175: +#line 666 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 165: -#line 616 "perly.y" +case 176: +#line 668 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 177: +#line 670 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 178: +#line 674 "perly.y" { yyval.opval = Nullop; } break; -case 166: -#line 618 "perly.y" +case 179: +#line 676 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 167: -#line 620 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +case 180: +#line 680 "perly.y" +{ yyval.opval = Nullop; } break; -case 168: -#line 623 "perly.y" -{ yyval.ival = 0; } +case 181: +#line 682 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; -case 169: -#line 624 "perly.y" -{ yyval.ival = 1; } +case 182: +#line 684 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; -case 170: -#line 628 "perly.y" +case 183: +#line 688 "perly.y" { PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; -case 171: -#line 632 "perly.y" +case 184: +#line 692 "perly.y" { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 172: -#line 636 "perly.y" +case 185: +#line 696 "perly.y" { yyval.opval = newSVREF(yyvsp[0].opval); } break; -case 173: -#line 640 "perly.y" +case 186: +#line 700 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 174: -#line 644 "perly.y" +case 187: +#line 704 "perly.y" { yyval.opval = newHVREF(yyvsp[0].opval); } break; -case 175: -#line 648 "perly.y" +case 188: +#line 708 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 176: -#line 652 "perly.y" +case 189: +#line 712 "perly.y" { yyval.opval = newGVREF(0,yyvsp[0].opval); } break; -case 177: -#line 656 "perly.y" +case 190: +#line 716 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 178: -#line 658 "perly.y" +case 191: +#line 718 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 179: -#line 660 "perly.y" +case 192: +#line 720 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; -case 180: -#line 663 "perly.y" +case 193: +#line 723 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2365 "perly.c" +#line 2414 "perly.c" } yyssp -= yym; yystate = *yyssp; @@ -2368,8 +2421,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state 0 to state %d\n", - YYFINAL); + "yydebug: after reduction, shifting from state 0 to state %d\n", + YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; @@ -2399,8 +2452,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state %d to state %d\n", - *yyssp, yystate); + "yydebug: after reduction, shifting from state %d to state %d\n", + *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -2411,10 +2464,8 @@ break; int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; diff --git a/vms/perly_h.vms b/vms/perly_h.vms index c750217..ff89cff 100644 --- a/vms/perly_h.vms +++ b/vms/perly_h.vms @@ -40,24 +40,27 @@ #define NOAMP 294 #define LOCAL 295 #define MY 296 -#define OROP 297 -#define ANDOP 298 -#define NOTOP 299 -#define ASSIGNOP 300 -#define OROR 301 -#define ANDAND 302 -#define BITOROP 303 -#define BITANDOP 304 -#define SHIFTOP 305 -#define MATCHOP 306 -#define UMINUS 307 -#define REFGEN 308 -#define POWOP 309 -#define PREINC 310 -#define PREDEC 311 -#define POSTINC 312 -#define POSTDEC 313 -#define ARROW 314 +#define MYSUB 297 +#define COLONATTR 298 +#define PREC_LOW 299 +#define OROP 300 +#define ANDOP 301 +#define NOTOP 302 +#define ASSIGNOP 303 +#define OROR 304 +#define ANDAND 305 +#define BITOROP 306 +#define BITANDOP 307 +#define SHIFTOP 308 +#define MATCHOP 309 +#define UMINUS 310 +#define REFGEN 311 +#define POWOP 312 +#define PREINC 313 +#define PREDEC 314 +#define POSTINC 315 +#define POSTDEC 316 +#define ARROW 317 #endif /* PERL_CORE */ typedef union { diff --git a/xsutils.c b/xsutils.c new file mode 100644 index 0000000..14f9d0f --- /dev/null +++ b/xsutils.c @@ -0,0 +1,298 @@ +#include "EXTERN.h" +#define PERL_IN_XSUTILS_C +#include "perl.h" + +/* + * Contributed by Spider Boardman (spider.boardman@orb.nashua.nh.us). + */ + +STATIC int +S_modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) +{ + SV *attr; + char *name; + STRLEN len; + bool negated; + int nret; + + for (nret = 0 ; numattrs && (attr = *attrlist++); numattrs--) { + name = SvPV(attr, len); + if (negated = (*name == '-')) { + name++; + len--; + } + switch (SvTYPE(sv)) { + case SVt_PVCV: + switch ((int)len) { + case 6: + switch (*name) { + case 'l': +#ifdef CVf_LVALUE + if (strEQ(name, "lvalue")) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_LVALUE; + else + CvFLAGS((CV*)sv) |= CVf_LVALUE; + continue; + } +#endif /* defined CVf_LVALUE */ + if (strEQ(name, "locked")) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_LOCKED; + else + CvFLAGS((CV*)sv) |= CVf_LOCKED; + continue; + } + break; + case 'm': + if (strEQ(name, "method")) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_METHOD; + else + CvFLAGS((CV*)sv) |= CVf_METHOD; + continue; + } + break; + } + break; + } + break; + default: + /* nothing, yet */ + break; + } + /* anything recognized had a 'continue' above */ + *retlist++ = attr; + nret++; + } + + return nret; +} + + +/* package attributes; */ +void XS_attributes__warn_reserved(pTHXo_ CV *cv); +void XS_attributes_reftype(pTHXo_ CV *cv); +void XS_attributes__modify_attrs(pTHXo_ CV *cv); +void XS_attributes__guess_stash(pTHXo_ CV *cv); +void XS_attributes__fetch_attrs(pTHXo_ CV *cv); +void XS_attributes_bootstrap(pTHXo_ CV *cv); + + +/* + * Note that only ${pkg}::bootstrap definitions should go here. + * This helps keep down the start-up time, which is especially + * relevant for users who don't invoke any features which are + * (partially) implemented here. + * + * The various bootstrap definitions can take care of doing + * package-specific newXS() calls. Since the layout of the + * bundled lib/*.pm files is in a version-specific directory, + * version checks in these bootstrap calls are optional. + */ + +void +Perl_boot_core_xsutils(pTHX) +{ + char *file = __FILE__; + + newXS("attributes::bootstrap", XS_attributes_bootstrap, file); +} + +#ifdef PERL_OBJECT +#define NO_XSLOCKS +#endif /* PERL_OBJECT */ + +#include "XSUB.h" + +/* package attributes; */ + +XS(XS_attributes_bootstrap) +{ + dXSARGS; + char *file = __FILE__; + + newXSproto("attributes::_warn_reserved", XS_attributes__warn_reserved, file, ""); + newXS("attributes::_modify_attrs", XS_attributes__modify_attrs, file); + newXSproto("attributes::_guess_stash", XS_attributes__guess_stash, file, "$"); + newXSproto("attributes::_fetch_attrs", XS_attributes__fetch_attrs, file, "$"); + newXSproto("attributes::reftype", XS_attributes_reftype, file, "$"); + + XSRETURN(0); +} + +XS(XS_attributes__modify_attrs) +{ + dXSARGS; + SV *rv, *sv; + + if (items < 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::_modify_attrs $reference, @attributes"); + } + + rv = ST(0); + if (!(SvOK(rv) && SvROK(rv))) + goto usage; + sv = SvRV(rv); + if (items > 1) + XSRETURN(modify_SV_attributes(sv, &ST(0), &ST(1), items-1)); + + XSRETURN(0); +} + +XS(XS_attributes__fetch_attrs) +{ + dXSARGS; + SV *rv, *sv; + cv_flags_t cvflags; + + if (items != 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::_fetch_attrs $reference"); + } + + rv = ST(0); + SP -= items; + if (!(SvOK(rv) && SvROK(rv))) + goto usage; + sv = SvRV(rv); + + switch (SvTYPE(sv)) { + case SVt_PVCV: + cvflags = CvFLAGS((CV*)sv); + if (cvflags & CVf_LOCKED) + XPUSHs(sv_2mortal(newSVpvn("locked", 6))); +#ifdef CVf_LVALUE + if (cvflags & CVf_LVALUE) + XPUSHs(sv_2mortal(newSVpvn("lvalue", 6))); +#endif + if (cvflags & CVf_METHOD) + XPUSHs(sv_2mortal(newSVpvn("method", 6))); + break; + default: + break; + } + + PUTBACK; +} + +XS(XS_attributes__guess_stash) +{ + dXSARGS; + SV *rv, *sv; +#ifdef dXSTARGET + dXSTARGET; +#else + SV * TARG = sv_newmortal(); +#endif + + if (items != 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::_guess_stash $reference"); + } + + rv = ST(0); + ST(0) = TARG; + if (!(SvOK(rv) && SvROK(rv))) + goto usage; + sv = SvRV(rv); + + if (SvOBJECT(sv)) + sv_setpv(TARG, HvNAME(SvSTASH(sv))); +#if 0 /* this was probably a bad idea */ + else if (SvPADMY(sv)) + sv_setsv(TARG, &PL_sv_no); /* unblessed lexical */ +#endif + else { + HV *stash = Nullhv; + switch (SvTYPE(sv)) { + case SVt_PVCV: + if (CvGV(sv) && isGV(CvGV(sv)) && GvSTASH(CvGV(sv)) && + HvNAME(GvSTASH(CvGV(sv)))) + stash = GvSTASH(CvGV(sv)); + else if (/* !CvANON(sv) && */ CvSTASH(sv) && HvNAME(CvSTASH(sv))) + stash = CvSTASH(sv); + break; + case SVt_PVMG: + if (!(SvFAKE(sv) && SvTIED_mg(sv, '*'))) + break; + /*FALLTHROUGH*/ + case SVt_PVGV: + if (GvGP(sv) && GvESTASH((GV*)sv) && HvNAME(GvESTASH((GV*)sv))) + stash = GvESTASH((GV*)sv); + break; + default: + break; + } + if (stash) + sv_setpv(TARG, HvNAME(stash)); + } + +#ifdef dXSTARGET + SvSETMAGIC(TARG); +#endif + XSRETURN(1); +} + +XS(XS_attributes_reftype) +{ + dXSARGS; + SV *rv, *sv; +#ifdef dXSTARGET + dXSTARGET; +#else + SV * TARG = sv_newmortal(); +#endif + + if (items != 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::reftype $reference"); + } + + rv = ST(0); + ST(0) = TARG; + if (!SvOK(rv)) { + ST(0) = &PL_sv_no; + XSRETURN(1); + } + if (!SvROK(rv)) + goto usage; + sv = SvRV(rv); + sv_setpv(TARG, sv_reftype(sv, 0)); +#ifdef dXSTARGET + SvSETMAGIC(TARG); +#endif + + XSRETURN(1); +} + +XS(XS_attributes__warn_reserved) +{ + dXSARGS; + SV *rv, *sv; +#ifdef dXSTARGET + dXSTARGET; +#else + SV * TARG = sv_newmortal(); +#endif + + if (items != 0) { + Perl_croak(aTHX_ + "Usage: attributes::_warn_reserved ()"); + } + + EXTEND(SP,1); + ST(0) = TARG; + sv_setiv(TARG, ckWARN(WARN_RESERVED) != 0); +#ifdef dXSTARGET + SvSETMAGIC(TARG); +#endif + + XSRETURN(1); +} +