Allocate ‘our sub’ in the pad
authorFather Chrysostomos <sprout@cpan.org>
Sun, 1 Jul 2012 06:20:25 +0000 (23:20 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 16 Sep 2012 05:44:53 +0000 (22:44 -0700)
Currently the name is only allocated there.  Nothing fetches it yet.

Notes on the implementation:

S_pending_ident contains the logic for determining whether $foo or
@foo refers to a lexical or package variable.

yylex defers to S_pending_ident if PL_pending_ident is set.

The KEY_sub case in yylex is changed to set PL_pending_ident instead
of using force_word.  For package variables (including our),
S_pending_ident returns a WORD token, which is the same thing that
force_word produces.  So *that* aspect of this change does not affect
the grammar.  However....

The barestmt rule’s SUB branch begins with ‘SUB startsub subname’.
startsub is a null rule that creates a new sub in PL_compcv via
start_subparse().  subname is defined in terms of WORD and also checks
whether this is a special block, turning on CvSPECIAL(PL_compcv) if
it is.  That flag has to be visible during compilation of the sub.

But for a lexical name, such as ‘our foo’, to be allocated in the
right pad, it has to come *before* startsub, i.e., ‘SUB subname
startsub’.

But subname needs to modify the sub that startsub created, set-
ting the flag.

So I copied (not moved, because MYSUB still uses it) the name-checking
code from the subname rule into the SUB branch of barestmt.  Now that
uses WORD directly instead of invoking subname.  That allows the code
there to set everything up in the right order.

perly.act
perly.h
perly.tab
perly.y
toke.c

index 270d617..dfa1d3a 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -241,30 +241,43 @@ case 2:
 
   case 30:
 #line 318 "perly.y"
+    { const char *const name = SvPV_nolen_const(((SVOP*)(ps[(2) - (3)].val.opval))->op_sv);
+                         if (strEQ(name, "BEGIN") || strEQ(name, "END")
+                             || strEQ(name, "INIT") || strEQ(name, "CHECK")
+                             || strEQ(name, "UNITCHECK"))
+                             CvSPECIAL_on(PL_compcv);
+                         PL_parser->in_my = 0;
+                         PL_parser->in_my_stash = NULL;
+                       ;}
+    break;
+
+  case 31:
+#line 327 "perly.y"
     {
                          SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          {
                              OP* o = newSVOP(OP_ANONCODE, 0,
-                               (SV*)newATTRSUB((ps[(2) - (6)].val.ival), (ps[(3) - (6)].val.opval), (ps[(4) - (6)].val.opval), (ps[(5) - (6)].val.opval), (ps[(6) - (6)].val.opval)));
+                               (SV*)newATTRSUB((ps[(3) - (7)].val.ival), (ps[(2) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval)));
                              (yyval.opval) = newOP(OP_NULL,0);
                              op_getmad(o,(yyval.opval),'&');
-                             op_getmad((ps[(3) - (6)].val.opval),(yyval.opval),'n');
-                             op_getmad((ps[(4) - (6)].val.opval),(yyval.opval),'s');
-                             op_getmad((ps[(5) - (6)].val.opval),(yyval.opval),'a');
-                             token_getmad((ps[(1) - (6)].val.i_tkval),(yyval.opval),'d');
-                             append_madprops((ps[(6) - (6)].val.opval)->op_madprop, (yyval.opval), 0);
-                             (ps[(6) - (6)].val.opval)->op_madprop = 0;
+                             op_getmad((ps[(2) - (7)].val.opval),(yyval.opval),'n');
+                             op_getmad((ps[(5) - (7)].val.opval),(yyval.opval),'s');
+                             op_getmad((ps[(6) - (7)].val.opval),(yyval.opval),'a');
+                             token_getmad((ps[(1) - (7)].val.i_tkval),(yyval.opval),'d');
+                             append_madprops((ps[(7) - (7)].val.opval)->op_madprop, (yyval.opval), 0);
+                             (ps[(7) - (7)].val.opval)->op_madprop = 0;
                          }
 #else
-                         newATTRSUB((ps[(2) - (6)].val.ival), (ps[(3) - (6)].val.opval), (ps[(4) - (6)].val.opval), (ps[(5) - (6)].val.opval), (ps[(6) - (6)].val.opval));
+                         newATTRSUB((ps[(3) - (7)].val.ival), (ps[(2) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval));
                          (yyval.opval) = (OP*)NULL;
 #endif
+                         intro_my();
                        ;}
     break;
 
-  case 31:
-#line 339 "perly.y"
+  case 32:
+#line 349 "perly.y"
     {
                          /* Unimplemented "my sub foo { }" */
                          SvREFCNT_inc_simple_void(PL_compcv);
@@ -278,8 +291,8 @@ case 2:
                        ;}
     break;
 
-  case 32:
-#line 351 "perly.y"
+  case 33:
+#line 361 "perly.y"
     {
 #ifdef MAD
                          (yyval.opval) = package((ps[(3) - (4)].val.opval));
@@ -296,13 +309,13 @@ case 2:
                        ;}
     break;
 
-  case 33:
-#line 366 "perly.y"
+  case 34:
+#line 376 "perly.y"
     { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;}
     break;
 
-  case 34:
-#line 368 "perly.y"
+  case 35:
+#line 378 "perly.y"
     {
                          SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
@@ -319,8 +332,8 @@ case 2:
                        ;}
     break;
 
-  case 35:
-#line 383 "perly.y"
+  case 36:
+#line 393 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                              newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -331,8 +344,8 @@ case 2:
                        ;}
     break;
 
-  case 36:
-#line 392 "perly.y"
+  case 37:
+#line 402 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                              newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -343,8 +356,8 @@ case 2:
                        ;}
     break;
 
-  case 37:
-#line 401 "perly.y"
+  case 38:
+#line 411 "perly.y"
     {
                          const PADOFFSET offset = pad_findmy_pvs("$_", 0);
                          (yyval.opval) = block_end((ps[(3) - (6)].val.ival),
@@ -357,18 +370,18 @@ case 2:
                        ;}
     break;
 
-  case 38:
-#line 412 "perly.y"
+  case 39:
+#line 422 "perly.y"
     { (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newWHENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)))); ;}
     break;
 
-  case 39:
-#line 414 "perly.y"
+  case 40:
+#line 424 "perly.y"
     { (yyval.opval) = newWHENOP(0, op_scope((ps[(2) - (2)].val.opval))); ;}
     break;
 
-  case 40:
-#line 416 "perly.y"
+  case 41:
+#line 426 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(3) - (8)].val.ival),
                                  newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -380,8 +393,8 @@ case 2:
                        ;}
     break;
 
-  case 41:
-#line 426 "perly.y"
+  case 42:
+#line 436 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(3) - (8)].val.ival),
                                  newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -393,8 +406,8 @@ case 2:
                        ;}
     break;
 
-  case 42:
-#line 437 "perly.y"
+  case 43:
+#line 447 "perly.y"
     {
                          OP *initop = IF_MAD((ps[(4) - (11)].val.opval) ? (ps[(4) - (11)].val.opval) : newOP(OP_NULL, 0), (ps[(4) - (11)].val.opval));
                          OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -416,8 +429,8 @@ case 2:
                        ;}
     break;
 
-  case 43:
-#line 457 "perly.y"
+  case 44:
+#line 467 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(3) - (9)].val.ival), newFOROP(0, (ps[(4) - (9)].val.opval), (ps[(6) - (9)].val.opval), (ps[(8) - (9)].val.opval), (ps[(9) - (9)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (9)].val.i_tkval),(yyval.opval),'W');
@@ -428,8 +441,8 @@ case 2:
                        ;}
     break;
 
-  case 44:
-#line 466 "perly.y"
+  case 45:
+#line 476 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(4) - (8)].val.ival), newFOROP(0,
                                      op_lvalue((ps[(2) - (8)].val.opval), OP_ENTERLOOP), (ps[(5) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval)));
@@ -440,8 +453,8 @@ case 2:
                        ;}
     break;
 
-  case 45:
-#line 475 "perly.y"
+  case 46:
+#line 485 "perly.y"
     {
                          (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                                  newFOROP(0, (OP*)NULL, (ps[(4) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval)));
@@ -452,8 +465,8 @@ case 2:
                        ;}
     break;
 
-  case 46:
-#line 484 "perly.y"
+  case 47:
+#line 494 "perly.y"
     {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -461,8 +474,8 @@ case 2:
                        ;}
     break;
 
-  case 47:
-#line 490 "perly.y"
+  case 48:
+#line 500 "perly.y"
     {
                          package((ps[(3) - (5)].val.opval));
                          if ((ps[(2) - (5)].val.opval)) {
@@ -471,8 +484,8 @@ case 2:
                        ;}
     break;
 
-  case 48:
-#line 497 "perly.y"
+  case 49:
+#line 507 "perly.y"
     {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -484,8 +497,8 @@ case 2:
                        ;}
     break;
 
-  case 49:
-#line 507 "perly.y"
+  case 50:
+#line 517 "perly.y"
     {
                          PL_parser->expect = XSTATE;
                          (yyval.opval) = (ps[(1) - (2)].val.opval);
@@ -493,8 +506,8 @@ case 2:
                        ;}
     break;
 
-  case 50:
-#line 513 "perly.y"
+  case 51:
+#line 523 "perly.y"
     {
                          PL_parser->expect = XSTATE;
                          (yyval.opval) = IF_MAD(newOP(OP_NULL, 0), (OP*)NULL);
@@ -503,8 +516,8 @@ case 2:
                        ;}
     break;
 
-  case 51:
-#line 523 "perly.y"
+  case 52:
+#line 533 "perly.y"
     { OP *list;
                          if ((ps[(2) - (2)].val.opval)) {
                              OP *term = (ps[(2) - (2)].val.opval);
@@ -527,74 +540,74 @@ case 2:
                        ;}
     break;
 
-  case 52:
-#line 546 "perly.y"
+  case 53:
+#line 556 "perly.y"
     { (yyval.opval) = NULL; ;}
     break;
 
-  case 53:
-#line 548 "perly.y"
+  case 54:
+#line 558 "perly.y"
     { (yyval.opval) = op_unscope((ps[(2) - (3)].val.opval)); ;}
     break;
 
-  case 54:
-#line 553 "perly.y"
+  case 55:
+#line 563 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 55:
-#line 555 "perly.y"
+  case 56:
+#line 565 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 56:
-#line 557 "perly.y"
+  case 57:
+#line 567 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
                        ;}
     break;
 
-  case 57:
-#line 561 "perly.y"
+  case 58:
+#line 571 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
                        ;}
     break;
 
-  case 58:
-#line 565 "perly.y"
+  case 59:
+#line 575 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
                        ;}
     break;
 
-  case 59:
-#line 569 "perly.y"
+  case 60:
+#line 579 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
                        ;}
     break;
 
-  case 60:
-#line 573 "perly.y"
+  case 61:
+#line 583 "perly.y"
     { (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
                          PL_parser->copline = (line_t)IVAL((ps[(2) - (3)].val.i_tkval));
                        ;}
     break;
 
-  case 61:
-#line 578 "perly.y"
+  case 62:
+#line 588 "perly.y"
     { (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), op_scope((ps[(1) - (3)].val.opval))); ;}
     break;
 
-  case 62:
-#line 583 "perly.y"
+  case 63:
+#line 593 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 63:
-#line 585 "perly.y"
+  case 64:
+#line 595 "perly.y"
     {
                          ((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS;
                          (yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
@@ -602,8 +615,8 @@ case 2:
                        ;}
     break;
 
-  case 64:
-#line 591 "perly.y"
+  case 65:
+#line 601 "perly.y"
     { PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval));
                            (yyval.opval) = newCONDOP(0,
                                newSTATEOP(OPf_SPECIAL,NULL,(ps[(3) - (6)].val.opval)),
@@ -615,88 +628,88 @@ case 2:
                        ;}
     break;
 
-  case 65:
-#line 604 "perly.y"
+  case 66:
+#line 614 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 66:
-#line 606 "perly.y"
+  case 67:
+#line 616 "perly.y"
     {
                          (yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 67:
-#line 614 "perly.y"
+  case 68:
+#line 624 "perly.y"
     { (yyval.ival) = (PL_min_intro_pending &&
                            PL_max_intro_pending >=  PL_min_intro_pending);
                          intro_my(); ;}
     break;
 
-  case 68:
-#line 620 "perly.y"
+  case 69:
+#line 630 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 70:
-#line 626 "perly.y"
+  case 71:
+#line 636 "perly.y"
     { YYSTYPE tmplval;
                          (void)scan_num("1", &tmplval);
                          (yyval.opval) = tmplval.opval; ;}
     break;
 
-  case 72:
-#line 634 "perly.y"
-    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
-    break;
-
   case 73:
-#line 639 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
+#line 644 "perly.y"
+    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
   case 74:
-#line 643 "perly.y"
+#line 649 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 75:
-#line 647 "perly.y"
+#line 653 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 76:
-#line 650 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 657 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 77:
-#line 651 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+#line 660 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 78:
-#line 655 "perly.y"
+#line 661 "perly.y"
+    { (yyval.opval) = (OP*)NULL; ;}
+    break;
+
+  case 79:
+#line 665 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, 0);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
-  case 79:
-#line 661 "perly.y"
+  case 80:
+#line 671 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
-  case 80:
-#line 666 "perly.y"
+  case 81:
+#line 676 "perly.y"
     { (yyval.ival) = start_subparse(TRUE, 0);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
-  case 81:
-#line 671 "perly.y"
+  case 82:
+#line 681 "perly.y"
     { const char *const name = SvPV_nolen_const(((SVOP*)(ps[(1) - (1)].val.opval))->op_sv);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END")
                              || strEQ(name, "INIT") || strEQ(name, "CHECK")
@@ -705,25 +718,25 @@ case 2:
                          (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 82:
-#line 681 "perly.y"
+  case 83:
+#line 691 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 84:
-#line 687 "perly.y"
+  case 85:
+#line 697 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 85:
-#line 689 "perly.y"
+  case 86:
+#line 699 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
-  case 86:
-#line 693 "perly.y"
+  case 87:
+#line 703 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL, 0),
                                    (OP*)NULL
@@ -732,15 +745,15 @@ case 2:
                        ;}
     break;
 
-  case 87:
-#line 703 "perly.y"
+  case 88:
+#line 713 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
-  case 88:
-#line 707 "perly.y"
+  case 89:
+#line 717 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL, 0),
                                    (OP*)NULL
@@ -749,13 +762,13 @@ case 2:
                        ;}
     break;
 
-  case 89:
-#line 716 "perly.y"
+  case 90:
+#line 726 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 90:
-#line 717 "perly.y"
+  case 91:
+#line 727 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL,0),
                                    (OP*)NULL
@@ -765,29 +778,29 @@ case 2:
                        ;}
     break;
 
-  case 91:
-#line 728 "perly.y"
+  case 92:
+#line 738 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 92:
-#line 732 "perly.y"
+  case 93:
+#line 742 "perly.y"
     { (yyval.opval) = newLOGOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 93:
-#line 736 "perly.y"
+  case 94:
+#line 746 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 95:
-#line 744 "perly.y"
+  case 96:
+#line 754 "perly.y"
     {
 #ifdef MAD
                          OP* op = newNULLLIST();
@@ -799,8 +812,8 @@ case 2:
                        ;}
     break;
 
-  case 96:
-#line 754 "perly.y"
+  case 97:
+#line 764 "perly.y"
     { 
                          OP* term = (ps[(3) - (3)].val.opval);
                          DO_MAD(
@@ -811,16 +824,16 @@ case 2:
                        ;}
     break;
 
-  case 98:
-#line 767 "perly.y"
+  case 99:
+#line 777 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (3)].val.i_tkval)),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 99:
-#line 772 "perly.y"
+  case 100:
+#line 782 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (5)].val.i_tkval)), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (5)].val.i_tkval)),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) );
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
@@ -829,8 +842,8 @@ case 2:
                        ;}
     break;
 
-  case 100:
-#line 779 "perly.y"
+  case 101:
+#line 789 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)),
@@ -841,8 +854,8 @@ case 2:
                        ;}
     break;
 
-  case 101:
-#line 788 "perly.y"
+  case 102:
+#line 798 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
                                    newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
@@ -850,8 +863,8 @@ case 2:
                        ;}
     break;
 
-  case 102:
-#line 794 "perly.y"
+  case 103:
+#line 804 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
@@ -859,8 +872,8 @@ case 2:
                        ;}
     break;
 
-  case 103:
-#line 800 "perly.y"
+  case 104:
+#line 810 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)),
@@ -870,15 +883,15 @@ case 2:
                        ;}
     break;
 
-  case 104:
-#line 808 "perly.y"
+  case 105:
+#line 818 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 105:
-#line 812 "perly.y"
+  case 106:
+#line 822 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -886,22 +899,22 @@ case 2:
                        ;}
     break;
 
-  case 106:
-#line 818 "perly.y"
+  case 107:
+#line 828 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); ;}
     break;
 
-  case 107:
-#line 821 "perly.y"
+  case 108:
+#line 831 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 op_append_elem(OP_LIST,
                                   op_prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
                        ;}
     break;
 
-  case 110:
-#line 836 "perly.y"
+  case 111:
+#line 846 "perly.y"
     { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[(1) - (5)].val.opval), scalar((ps[(3) - (5)].val.opval)));
                            PL_parser->expect = XOPERATOR;
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
@@ -910,16 +923,16 @@ case 2:
                        ;}
     break;
 
-  case 111:
-#line 843 "perly.y"
+  case 112:
+#line 853 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 112:
-#line 848 "perly.y"
+  case 113:
+#line 858 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV),
                                        scalar((ps[(4) - (5)].val.opval)));
@@ -929,8 +942,8 @@ case 2:
                        ;}
     break;
 
-  case 113:
-#line 856 "perly.y"
+  case 114:
+#line 866 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV),
                                        scalar((ps[(3) - (4)].val.opval)));
@@ -939,8 +952,8 @@ case 2:
                        ;}
     break;
 
-  case 114:
-#line 863 "perly.y"
+  case 115:
+#line 873 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[(1) - (5)].val.opval)), jmaybe((ps[(3) - (5)].val.opval)));
                            PL_parser->expect = XOPERATOR;
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
@@ -949,8 +962,8 @@ case 2:
                        ;}
     break;
 
-  case 115:
-#line 870 "perly.y"
+  case 116:
+#line 880 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV),
                                        jmaybe((ps[(4) - (6)].val.opval)));
@@ -962,8 +975,8 @@ case 2:
                        ;}
     break;
 
-  case 116:
-#line 880 "perly.y"
+  case 117:
+#line 890 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV),
                                        jmaybe((ps[(3) - (5)].val.opval)));
@@ -974,8 +987,8 @@ case 2:
                        ;}
     break;
 
-  case 117:
-#line 889 "perly.y"
+  case 118:
+#line 899 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[(1) - (4)].val.opval))));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'a');
@@ -984,8 +997,8 @@ case 2:
                        ;}
     break;
 
-  case 118:
-#line 896 "perly.y"
+  case 119:
+#line 906 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
                                       newCVREF(0, scalar((ps[(1) - (5)].val.opval)))));
@@ -995,8 +1008,8 @@ case 2:
                        ;}
     break;
 
-  case 119:
-#line 905 "perly.y"
+  case 120:
+#line 915 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
                                               newCVREF(0, scalar((ps[(1) - (4)].val.opval)))));
@@ -1005,8 +1018,8 @@ case 2:
                        ;}
     break;
 
-  case 120:
-#line 912 "perly.y"
+  case 121:
+#line 922 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[(1) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
@@ -1014,8 +1027,8 @@ case 2:
                        ;}
     break;
 
-  case 121:
-#line 918 "perly.y"
+  case 122:
+#line 928 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),')');
@@ -1024,16 +1037,16 @@ case 2:
                        ;}
     break;
 
-  case 122:
-#line 925 "perly.y"
+  case 123:
+#line 935 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[(3) - (4)].val.opval), (ps[(1) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 123:
-#line 930 "perly.y"
+  case 124:
+#line 940 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),')');
@@ -1042,22 +1055,22 @@ case 2:
                        ;}
     break;
 
-  case 124:
-#line 940 "perly.y"
+  case 125:
+#line 950 "perly.y"
     { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 125:
-#line 944 "perly.y"
+  case 126:
+#line 954 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 126:
-#line 948 "perly.y"
+  case 127:
+#line 958 "perly.y"
     {   if (IVAL((ps[(2) - (3)].val.i_tkval)) != OP_REPEAT)
                                scalar((ps[(1) - (3)].val.opval));
                            (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
@@ -1065,50 +1078,50 @@ case 2:
                        ;}
     break;
 
-  case 127:
-#line 954 "perly.y"
-    { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
-                         TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
-    break;
-
   case 128:
-#line 958 "perly.y"
+#line 964 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 129:
-#line 962 "perly.y"
+#line 968 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 130:
-#line 966 "perly.y"
+#line 972 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 131:
-#line 970 "perly.y"
+#line 976 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 132:
-#line 974 "perly.y"
+#line 980 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 133:
-#line 978 "perly.y"
+#line 984 "perly.y"
+    { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
+                         TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
+                       ;}
+    break;
+
+  case 134:
+#line 988 "perly.y"
     {
                          (yyval.opval) = newRANGE(IVAL((ps[(2) - (3)].val.i_tkval)), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          DO_MAD({
@@ -1122,29 +1135,29 @@ case 2:
                        ;}
     break;
 
-  case 134:
-#line 990 "perly.y"
+  case 135:
+#line 1000 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 135:
-#line 994 "perly.y"
+  case 136:
+#line 1004 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 136:
-#line 998 "perly.y"
+  case 137:
+#line 1008 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 137:
-#line 1002 "perly.y"
+  case 138:
+#line 1012 "perly.y"
     { (yyval.opval) = bind_match(IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),
                                ((yyval.opval)->op_type == OP_NOT
@@ -1153,15 +1166,15 @@ case 2:
                        ;}
     break;
 
-  case 138:
-#line 1012 "perly.y"
+  case 139:
+#line 1022 "perly.y"
     { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 139:
-#line 1016 "perly.y"
+  case 140:
+#line 1026 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newUNOP(OP_NULL, 0, (ps[(2) - (2)].val.opval)),
                                    (ps[(2) - (2)].val.opval)
@@ -1170,70 +1183,70 @@ case 2:
                        ;}
     break;
 
-  case 140:
-#line 1023 "perly.y"
+  case 141:
+#line 1033 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 141:
-#line 1027 "perly.y"
+  case 142:
+#line 1037 "perly.y"
     { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 142:
-#line 1031 "perly.y"
+  case 143:
+#line 1041 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
                                        op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 143:
-#line 1036 "perly.y"
+  case 144:
+#line 1046 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
                                        op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 144:
-#line 1041 "perly.y"
+  case 145:
+#line 1051 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREINC, 0,
                                        op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREINC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 145:
-#line 1046 "perly.y"
+  case 146:
+#line 1056 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
                                        op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 146:
-#line 1055 "perly.y"
+  case 147:
+#line 1065 "perly.y"
     { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 147:
-#line 1060 "perly.y"
+  case 148:
+#line 1070 "perly.y"
     { (yyval.opval) = newANONLIST((OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 148:
-#line 1065 "perly.y"
+  case 149:
+#line 1075 "perly.y"
     { (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),';');
@@ -1241,8 +1254,8 @@ case 2:
                        ;}
     break;
 
-  case 149:
-#line 1071 "perly.y"
+  case 150:
+#line 1081 "perly.y"
     { (yyval.opval) = newANONHASH((OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),';');
@@ -1250,8 +1263,8 @@ case 2:
                        ;}
     break;
 
-  case 150:
-#line 1077 "perly.y"
+  case 151:
+#line 1087 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
@@ -1260,22 +1273,22 @@ case 2:
                        ;}
     break;
 
-  case 151:
-#line 1088 "perly.y"
+  case 152:
+#line 1098 "perly.y"
     { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 152:
-#line 1092 "perly.y"
+  case 153:
+#line 1102 "perly.y"
     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D');
                        ;}
     break;
 
-  case 153:
-#line 1096 "perly.y"
+  case 154:
+#line 1106 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            op_prepend_elem(OP_LIST,
@@ -1289,8 +1302,8 @@ case 2:
                        ;}
     break;
 
-  case 154:
-#line 1108 "perly.y"
+  case 155:
+#line 1118 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            op_append_elem(OP_LIST,
@@ -1305,8 +1318,8 @@ case 2:
                        ;}
     break;
 
-  case 155:
-#line 1121 "perly.y"
+  case 156:
+#line 1131 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            op_prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar((ps[(2) - (4)].val.opval)))), (OP*)NULL)); dep();
@@ -1316,8 +1329,8 @@ case 2:
                        ;}
     break;
 
-  case 156:
-#line 1129 "perly.y"
+  case 157:
+#line 1139 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            op_prepend_elem(OP_LIST,
                                (ps[(4) - (5)].val.opval),
@@ -1328,86 +1341,86 @@ case 2:
                        ;}
     break;
 
-  case 161:
-#line 1145 "perly.y"
+  case 162:
+#line 1155 "perly.y"
     { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'?');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
-  case 162:
-#line 1150 "perly.y"
+  case 163:
+#line 1160 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, op_lvalue((ps[(2) - (2)].val.opval),OP_REFGEN));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 163:
-#line 1154 "perly.y"
+  case 164:
+#line 1164 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 164:
-#line 1156 "perly.y"
+  case 165:
+#line 1166 "perly.y"
     { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'k');
                        ;}
     break;
 
-  case 165:
-#line 1160 "perly.y"
+  case 166:
+#line 1170 "perly.y"
     { (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(ps[(2) - (3)].val.opval)), (ps[(2) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 166:
-#line 1165 "perly.y"
+  case 167:
+#line 1175 "perly.y"
     { (yyval.opval) = IF_MAD(newUNOP(OP_NULL,0,(ps[(1) - (1)].val.opval)), (ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 167:
-#line 1167 "perly.y"
+  case 168:
+#line 1177 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST());
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 168:
-#line 1172 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
-    break;
-
   case 169:
-#line 1174 "perly.y"
+#line 1182 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 170:
-#line 1176 "perly.y"
+#line 1184 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 171:
-#line 1178 "perly.y"
+#line 1186 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 172:
-#line 1180 "perly.y"
-    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
+#line 1188 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 173:
-#line 1182 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1190 "perly.y"
+    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
     break;
 
   case 174:
-#line 1184 "perly.y"
+#line 1192 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    break;
+
+  case 175:
+#line 1194 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -1418,8 +1431,8 @@ case 2:
                        ;}
     break;
 
-  case 175:
-#line 1193 "perly.y"
+  case 176:
+#line 1203 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1432,26 +1445,26 @@ case 2:
                        ;}
     break;
 
-  case 176:
-#line 1204 "perly.y"
+  case 177:
+#line 1214 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 177:
-#line 1206 "perly.y"
+  case 178:
+#line 1216 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
-  case 178:
-#line 1208 "perly.y"
+  case 179:
+#line 1218 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 179:
-#line 1213 "perly.y"
+  case 180:
+#line 1223 "perly.y"
     {
                          (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
@@ -1466,91 +1479,91 @@ case 2:
                        ;}
     break;
 
-  case 180:
-#line 1226 "perly.y"
+  case 181:
+#line 1236 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 181:
-#line 1231 "perly.y"
+  case 182:
+#line 1241 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE;
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 182:
-#line 1236 "perly.y"
+  case 183:
+#line 1246 "perly.y"
     { (yyval.opval) = newLOOPEX(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 183:
-#line 1240 "perly.y"
+  case 184:
+#line 1250 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 184:
-#line 1244 "perly.y"
+  case 185:
+#line 1254 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 185:
-#line 1248 "perly.y"
+  case 186:
+#line 1258 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 186:
-#line 1252 "perly.y"
+  case 187:
+#line 1262 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 187:
-#line 1256 "perly.y"
+  case 188:
+#line 1266 "perly.y"
     { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.i_tkval) ? OPf_SPECIAL : 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 188:
-#line 1260 "perly.y"
+  case 189:
+#line 1270 "perly.y"
     { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.i_tkval) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 189:
-#line 1264 "perly.y"
+  case 190:
+#line 1274 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
-  case 190:
-#line 1266 "perly.y"
+  case 191:
+#line 1276 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); ;}
     break;
 
-  case 191:
-#line 1269 "perly.y"
+  case 192:
+#line 1279 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 192:
-#line 1273 "perly.y"
+  case 193:
+#line 1283 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
@@ -1558,27 +1571,27 @@ case 2:
                        ;}
     break;
 
-  case 193:
-#line 1279 "perly.y"
+  case 194:
+#line 1289 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 194:
-#line 1281 "perly.y"
+  case 195:
+#line 1291 "perly.y"
     { (yyval.opval) = (ps[(1) - (3)].val.opval);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 195:
-#line 1286 "perly.y"
+  case 196:
+#line 1296 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
-  case 196:
-#line 1289 "perly.y"
+  case 197:
+#line 1299 "perly.y"
     { (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT)
                            ? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0)))
                            : newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL);
@@ -1589,8 +1602,8 @@ case 2:
                        ;}
     break;
 
-  case 197:
-#line 1298 "perly.y"
+  case 198:
+#line 1308 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -1598,8 +1611,8 @@ case 2:
                        ;}
     break;
 
-  case 198:
-#line 1304 "perly.y"
+  case 199:
+#line 1314 "perly.y"
     {
                            if (   (ps[(1) - (1)].val.opval)->op_type != OP_TRANS
                                && (ps[(1) - (1)].val.opval)->op_type != OP_TRANSR
@@ -1612,16 +1625,16 @@ case 2:
                        ;}
     break;
 
-  case 199:
-#line 1315 "perly.y"
+  case 200:
+#line 1325 "perly.y"
     { (yyval.opval) = pmruntime((ps[(1) - (5)].val.opval), (ps[(4) - (5)].val.opval), 1, (ps[(2) - (5)].val.ival));
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 202:
-#line 1322 "perly.y"
+  case 203:
+#line 1332 "perly.y"
     {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -1629,8 +1642,8 @@ case 2:
                        ;}
     break;
 
-  case 204:
-#line 1332 "perly.y"
+  case 205:
+#line 1342 "perly.y"
     { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval));
                          DO_MAD(
                              token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d');
@@ -1640,128 +1653,128 @@ case 2:
                        ;}
     break;
 
-  case 205:
-#line 1340 "perly.y"
+  case 206:
+#line 1350 "perly.y"
     { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d');
                        ;}
     break;
 
-  case 206:
-#line 1347 "perly.y"
+  case 207:
+#line 1357 "perly.y"
     { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 207:
-#line 1352 "perly.y"
+  case 208:
+#line 1362 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST());
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 208:
-#line 1357 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
-    break;
-
   case 209:
-#line 1359 "perly.y"
+#line 1367 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 210:
-#line 1361 "perly.y"
+#line 1369 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 211:
-#line 1366 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+#line 1371 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 212:
-#line 1368 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1376 "perly.y"
+    { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 213:
-#line 1372 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+#line 1378 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 214:
-#line 1374 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1382 "perly.y"
+    { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 215:
-#line 1380 "perly.y"
-    { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
+#line 1384 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 216:
-#line 1384 "perly.y"
+#line 1390 "perly.y"
+    { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
+    break;
+
+  case 217:
+#line 1394 "perly.y"
     { (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&');
                        ;}
     break;
 
-  case 217:
-#line 1390 "perly.y"
+  case 218:
+#line 1400 "perly.y"
     { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
                        ;}
     break;
 
-  case 218:
-#line 1396 "perly.y"
+  case 219:
+#line 1406 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
                        ;}
     break;
 
-  case 219:
-#line 1402 "perly.y"
+  case 220:
+#line 1412 "perly.y"
     { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
                        ;}
     break;
 
-  case 220:
-#line 1408 "perly.y"
+  case 221:
+#line 1418 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
                        ;}
     break;
 
-  case 221:
-#line 1414 "perly.y"
+  case 222:
+#line 1424 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
                        ;}
     break;
 
-  case 222:
-#line 1421 "perly.y"
+  case 223:
+#line 1431 "perly.y"
     { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 223:
-#line 1423 "perly.y"
+  case 224:
+#line 1433 "perly.y"
     { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 224:
-#line 1425 "perly.y"
+  case 225:
+#line 1435 "perly.y"
     { (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 225:
-#line 1428 "perly.y"
+  case 226:
+#line 1438 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
@@ -1772,6 +1785,6 @@ case 2:
     
 
 /* Generated from:
- * 580d1bac82838fb0ae1e092010e776fb247f0d4cb68834a166507fae86707700 perly.y
+ * 3e01d5213d0f6a4dd26b90cfb22baf8eaf3c89d8ae0025fdc9e06ec1f871e826 perly.y
  * 4a3ced51fe6585f6ec59e65e1ffd74bc976c498b0e6992eaab337219fee72e51 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index daa777b..eccc250 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -268,6 +268,6 @@ typedef union YYSTYPE
 
 
 /* Generated from:
- * 580d1bac82838fb0ae1e092010e776fb247f0d4cb68834a166507fae86707700 perly.y
+ * 3e01d5213d0f6a4dd26b90cfb22baf8eaf3c89d8ae0025fdc9e06ec1f871e826 perly.y
  * 4a3ced51fe6585f6ec59e65e1ffd74bc976c498b0e6992eaab337219fee72e51 regen_perly.pl
  * ex: set ro: */
index e7982ec..cfd1c6d 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -6,16 +6,16 @@
 
 #define YYFINAL  14
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2806
+#define YYLAST   2819
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  105
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  65
+#define YYNNTS  66
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  225
+#define YYNRULES  226
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  458
+#define YYNSTATES  459
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -71,109 +71,110 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     4,     9,    10,    14,    15,    19,    20,
       24,    25,    29,    30,    34,    39,    47,    48,    53,    54,
       55,    58,    59,    62,    64,    66,    69,    72,    74,    76,
-      81,    88,    95,   100,   101,   109,   117,   125,   132,   139,
-     142,   151,   160,   172,   182,   191,   199,   202,   203,   212,
-     215,   217,   220,   221,   225,   227,   229,   233,   237,   241,
-     245,   249,   253,   254,   257,   264,   265,   268,   269,   270,
-     272,   273,   275,   277,   279,   281,   283,   285,   286,   287,
-     288,   289,   291,   292,   294,   295,   298,   300,   303,   305,
-     307,   309,   313,   317,   321,   323,   326,   330,   332,   336,
-     342,   349,   353,   357,   363,   366,   371,   372,   378,   380,
-     382,   388,   393,   399,   404,   410,   417,   423,   428,   434,
-     439,   443,   450,   455,   461,   465,   469,   473,   477,   481,
-     485,   489,   493,   497,   501,   505,   509,   513,   517,   520,
-     523,   526,   529,   532,   535,   538,   541,   545,   548,   553,
-     557,   563,   566,   569,   574,   580,   585,   591,   593,   595,
-     597,   599,   605,   608,   610,   613,   617,   619,   622,   624,
-     626,   628,   630,   632,   634,   639,   645,   647,   649,   653,
-     658,   662,   664,   667,   670,   672,   675,   678,   680,   683,
-     685,   688,   690,   694,   696,   700,   702,   706,   711,   712,
-     718,   720,   722,   724,   726,   730,   733,   737,   740,   742,
-     744,   746,   747,   749,   750,   752,   754,   757,   760,   763,
-     766,   769,   772,   774,   776,   778
+      81,    82,    90,    97,   102,   103,   111,   119,   127,   134,
+     141,   144,   153,   162,   174,   184,   193,   201,   204,   205,
+     214,   217,   219,   222,   223,   227,   229,   231,   235,   239,
+     243,   247,   251,   255,   256,   259,   266,   267,   270,   271,
+     272,   274,   275,   277,   279,   281,   283,   285,   287,   288,
+     289,   290,   291,   293,   294,   296,   297,   300,   302,   305,
+     307,   309,   311,   315,   319,   323,   325,   328,   332,   334,
+     338,   344,   351,   355,   359,   365,   368,   373,   374,   380,
+     382,   384,   390,   395,   401,   406,   412,   419,   425,   430,
+     436,   441,   445,   452,   457,   463,   467,   471,   475,   479,
+     483,   487,   491,   495,   499,   503,   507,   511,   515,   519,
+     522,   525,   528,   531,   534,   537,   540,   543,   547,   550,
+     555,   559,   565,   568,   571,   576,   582,   587,   593,   595,
+     597,   599,   601,   607,   610,   612,   615,   619,   621,   624,
+     626,   628,   630,   632,   634,   636,   641,   647,   649,   651,
+     655,   660,   664,   666,   669,   672,   674,   677,   680,   682,
+     685,   687,   690,   692,   696,   698,   702,   704,   708,   713,
+     714,   720,   722,   724,   726,   728,   732,   735,   739,   742,
+     744,   746,   748,   749,   751,   752,   754,   756,   759,   762,
+     765,   768,   771,   774,   776,   778,   780
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
      106,     0,    -1,    -1,     3,   107,   115,   118,    -1,    -1,
-       4,   108,   161,    -1,    -1,     5,   109,   113,    -1,    -1,
+       4,   108,   162,    -1,    -1,     5,   109,   113,    -1,    -1,
        6,   110,   122,    -1,    -1,     7,   111,   120,    -1,    -1,
        8,   112,   118,    -1,     9,   115,   118,    10,    -1,    21,
      115,    20,    75,   119,    20,    22,    -1,    -1,     9,   117,
      118,    10,    -1,    -1,    -1,   118,   120,    -1,    -1,   119,
-     125,    -1,   122,    -1,   121,    -1,    36,   122,    -1,    36,
-     121,    -1,    35,    -1,   104,    -1,    37,   140,   137,   114,
-      -1,    38,   138,   141,   142,   143,   145,    -1,    71,   138,
-     141,   142,   143,   145,    -1,    40,    23,    23,    20,    -1,
-      -1,    41,   138,   123,    23,    23,   160,    20,    -1,    44,
-     103,   115,   134,   102,   116,   128,    -1,    45,   103,   115,
-     136,   102,   116,   128,    -1,    50,   103,   115,   134,   102,
-     116,    -1,    51,   103,   115,   134,   102,   116,    -1,    52,
-     113,    -1,    42,   103,   115,   132,   102,   130,   116,   129,
-      -1,    43,   103,   115,   133,   102,   130,   116,   129,    -1,
-      49,   103,   115,   135,    20,   132,    20,   130,   135,   102,
-     116,    -1,    49,    70,   115,   162,   103,   134,   102,   116,
-     129,    -1,    49,   164,   103,   115,   134,   102,   116,   129,
-      -1,    49,   103,   115,   134,   102,   116,   129,    -1,   113,
-     129,    -1,    -1,    40,    23,    23,     9,   115,   124,   118,
-      10,    -1,   127,    20,    -1,    20,    -1,    26,   126,    -1,
-      -1,    74,   118,    75,    -1,     1,    -1,   146,    -1,   146,
-      44,   146,    -1,   146,    45,   146,    -1,   146,    42,   146,
-      -1,   146,    43,   133,    -1,   146,    49,   146,    -1,   146,
-      51,   146,    -1,    -1,    46,   116,    -1,    47,   103,   134,
-     102,   116,   128,    -1,    -1,    48,   113,    -1,    -1,    -1,
-     127,    -1,    -1,   146,    -1,   146,    -1,   146,    -1,   131,
-      -1,   133,    -1,    23,    -1,    -1,    -1,    -1,    -1,    23,
-      -1,    -1,    26,    -1,    -1,    73,    26,    -1,    73,    -1,
-      73,    26,    -1,    73,    -1,   113,    -1,    20,    -1,   146,
-      79,   146,    -1,   146,    78,   146,    -1,   146,    77,   146,
-      -1,   147,    -1,   147,    81,    -1,   147,    81,   156,    -1,
-     156,    -1,    60,   169,   147,    -1,    58,   103,   169,   146,
-     102,    -1,   156,   101,   150,   103,   161,   102,    -1,   156,
-     101,   150,    -1,    24,   169,   160,    -1,    25,   169,   103,
-     161,   102,    -1,    60,   160,    -1,    58,   103,   161,   102,
-      -1,    -1,    33,   139,   113,   149,   160,    -1,    24,    -1,
-     164,    -1,   168,     9,   146,    20,    10,    -1,   164,    11,
-     146,    12,    -1,   156,   101,    11,   146,    12,    -1,   151,
-      11,   146,    12,    -1,   164,     9,   146,    20,    10,    -1,
-     156,   101,     9,   146,    20,    10,    -1,   151,     9,   146,
-      20,    10,    -1,   156,   101,   103,   102,    -1,   156,   101,
-     103,   146,   102,    -1,   151,   103,   146,   102,    -1,   151,
-     103,   102,    -1,   103,   146,   102,    11,   146,    12,    -1,
-      29,    11,   146,    12,    -1,   103,   102,    11,   146,    12,
-      -1,   156,    82,   156,    -1,   156,    96,   156,    -1,   156,
-      63,   156,    -1,   156,    64,   156,    -1,   156,    90,   156,
-      -1,   156,    61,   156,    -1,   156,    62,   156,    -1,   156,
-      89,   156,    -1,   156,    88,   156,    -1,   156,    54,   156,
-      -1,   156,    87,   156,    -1,   156,    86,   156,    -1,   156,
-      85,   156,    -1,   156,    91,   156,    -1,    13,   156,    -1,
-      14,   156,    -1,    92,   156,    -1,    93,   156,    -1,   156,
-      98,    -1,   156,    97,    -1,   100,   156,    -1,    99,   156,
-      -1,    11,   146,    12,    -1,    11,    12,    -1,    67,   146,
-      20,    10,    -1,    67,    20,    10,    -1,    39,   139,   142,
-     143,   113,    -1,    66,   156,    -1,    66,   113,    -1,    66,
-      23,   103,   102,    -1,    66,    23,   103,   146,   102,    -1,
-      66,   164,   103,   102,    -1,    66,   164,   103,   146,   102,
-      -1,   152,    -1,   153,    -1,   154,    -1,   155,    -1,   156,
-      83,   156,    84,   156,    -1,    94,   156,    -1,   158,    -1,
-      69,   156,    -1,   103,   146,   102,    -1,    29,    -1,   103,
-     102,    -1,   164,    -1,   168,    -1,   166,    -1,   165,    -1,
-     167,    -1,   151,    -1,   165,    11,   146,    12,    -1,   165,
-       9,   146,    20,    10,    -1,    26,    -1,   163,    -1,   163,
-     103,   102,    -1,   163,   103,   146,   102,    -1,    68,    23,
-     160,    -1,    53,    -1,    53,   156,    -1,    80,   147,    -1,
-      59,    -1,    59,   113,    -1,    59,   156,    -1,    72,    -1,
-      72,   156,    -1,    32,    -1,    32,   156,    -1,    56,    -1,
-      56,   103,   102,    -1,    30,    -1,    30,   103,   102,    -1,
-      31,    -1,    57,   103,   102,    -1,    57,   103,   146,   102,
-      -1,    -1,    27,   157,   103,   147,   102,    -1,    23,    -1,
-     148,    -1,    55,    -1,    34,    -1,    70,   159,   144,    -1,
-      70,   159,    -1,   103,   146,   102,    -1,   103,   102,    -1,
-     164,    -1,   166,    -1,   165,    -1,    -1,   147,    -1,    -1,
-     146,    -1,   164,    -1,    19,   169,    -1,    15,   169,    -1,
-      16,   169,    -1,    17,   169,    -1,    65,   169,    -1,    18,
-     169,    -1,    23,    -1,   164,    -1,   113,    -1,    28,    -1
+     126,    -1,   122,    -1,   121,    -1,    36,   122,    -1,    36,
+     121,    -1,    35,    -1,   104,    -1,    37,   141,   138,   114,
+      -1,    -1,    38,    23,   139,   123,   143,   144,   146,    -1,
+      71,   139,   142,   143,   144,   146,    -1,    40,    23,    23,
+      20,    -1,    -1,    41,   139,   124,    23,    23,   161,    20,
+      -1,    44,   103,   115,   135,   102,   116,   129,    -1,    45,
+     103,   115,   137,   102,   116,   129,    -1,    50,   103,   115,
+     135,   102,   116,    -1,    51,   103,   115,   135,   102,   116,
+      -1,    52,   113,    -1,    42,   103,   115,   133,   102,   131,
+     116,   130,    -1,    43,   103,   115,   134,   102,   131,   116,
+     130,    -1,    49,   103,   115,   136,    20,   133,    20,   131,
+     136,   102,   116,    -1,    49,    70,   115,   163,   103,   135,
+     102,   116,   130,    -1,    49,   165,   103,   115,   135,   102,
+     116,   130,    -1,    49,   103,   115,   135,   102,   116,   130,
+      -1,   113,   130,    -1,    -1,    40,    23,    23,     9,   115,
+     125,   118,    10,    -1,   128,    20,    -1,    20,    -1,    26,
+     127,    -1,    -1,    74,   118,    75,    -1,     1,    -1,   147,
+      -1,   147,    44,   147,    -1,   147,    45,   147,    -1,   147,
+      42,   147,    -1,   147,    43,   134,    -1,   147,    49,   147,
+      -1,   147,    51,   147,    -1,    -1,    46,   116,    -1,    47,
+     103,   135,   102,   116,   129,    -1,    -1,    48,   113,    -1,
+      -1,    -1,   128,    -1,    -1,   147,    -1,   147,    -1,   147,
+      -1,   132,    -1,   134,    -1,    23,    -1,    -1,    -1,    -1,
+      -1,    23,    -1,    -1,    26,    -1,    -1,    73,    26,    -1,
+      73,    -1,    73,    26,    -1,    73,    -1,   113,    -1,    20,
+      -1,   147,    79,   147,    -1,   147,    78,   147,    -1,   147,
+      77,   147,    -1,   148,    -1,   148,    81,    -1,   148,    81,
+     157,    -1,   157,    -1,    60,   170,   148,    -1,    58,   103,
+     170,   147,   102,    -1,   157,   101,   151,   103,   162,   102,
+      -1,   157,   101,   151,    -1,    24,   170,   161,    -1,    25,
+     170,   103,   162,   102,    -1,    60,   161,    -1,    58,   103,
+     162,   102,    -1,    -1,    33,   140,   113,   150,   161,    -1,
+      24,    -1,   165,    -1,   169,     9,   147,    20,    10,    -1,
+     165,    11,   147,    12,    -1,   157,   101,    11,   147,    12,
+      -1,   152,    11,   147,    12,    -1,   165,     9,   147,    20,
+      10,    -1,   157,   101,     9,   147,    20,    10,    -1,   152,
+       9,   147,    20,    10,    -1,   157,   101,   103,   102,    -1,
+     157,   101,   103,   147,   102,    -1,   152,   103,   147,   102,
+      -1,   152,   103,   102,    -1,   103,   147,   102,    11,   147,
+      12,    -1,    29,    11,   147,    12,    -1,   103,   102,    11,
+     147,    12,    -1,   157,    82,   157,    -1,   157,    96,   157,
+      -1,   157,    63,   157,    -1,   157,    64,   157,    -1,   157,
+      90,   157,    -1,   157,    61,   157,    -1,   157,    62,   157,
+      -1,   157,    89,   157,    -1,   157,    88,   157,    -1,   157,
+      54,   157,    -1,   157,    87,   157,    -1,   157,    86,   157,
+      -1,   157,    85,   157,    -1,   157,    91,   157,    -1,    13,
+     157,    -1,    14,   157,    -1,    92,   157,    -1,    93,   157,
+      -1,   157,    98,    -1,   157,    97,    -1,   100,   157,    -1,
+      99,   157,    -1,    11,   147,    12,    -1,    11,    12,    -1,
+      67,   147,    20,    10,    -1,    67,    20,    10,    -1,    39,
+     140,   143,   144,   113,    -1,    66,   157,    -1,    66,   113,
+      -1,    66,    23,   103,   102,    -1,    66,    23,   103,   147,
+     102,    -1,    66,   165,   103,   102,    -1,    66,   165,   103,
+     147,   102,    -1,   153,    -1,   154,    -1,   155,    -1,   156,
+      -1,   157,    83,   157,    84,   157,    -1,    94,   157,    -1,
+     159,    -1,    69,   157,    -1,   103,   147,   102,    -1,    29,
+      -1,   103,   102,    -1,   165,    -1,   169,    -1,   167,    -1,
+     166,    -1,   168,    -1,   152,    -1,   166,    11,   147,    12,
+      -1,   166,     9,   147,    20,    10,    -1,    26,    -1,   164,
+      -1,   164,   103,   102,    -1,   164,   103,   147,   102,    -1,
+      68,    23,   161,    -1,    53,    -1,    53,   157,    -1,    80,
+     148,    -1,    59,    -1,    59,   113,    -1,    59,   157,    -1,
+      72,    -1,    72,   157,    -1,    32,    -1,    32,   157,    -1,
+      56,    -1,    56,   103,   102,    -1,    30,    -1,    30,   103,
+     102,    -1,    31,    -1,    57,   103,   102,    -1,    57,   103,
+     147,   102,    -1,    -1,    27,   158,   103,   148,   102,    -1,
+      23,    -1,   149,    -1,    55,    -1,    34,    -1,    70,   160,
+     145,    -1,    70,   160,    -1,   103,   147,   102,    -1,   103,
+     102,    -1,   165,    -1,   167,    -1,   166,    -1,    -1,   148,
+      -1,    -1,   147,    -1,   165,    -1,    19,   170,    -1,    15,
+     170,    -1,    16,   170,    -1,    17,   170,    -1,    65,   170,
+      -1,    18,   170,    -1,    23,    -1,   165,    -1,   113,    -1,
+      28,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -182,26 +183,26 @@ static const yytype_uint16 yyrline[] =
        0,   141,   141,   140,   150,   149,   159,   158,   171,   170,
      183,   182,   195,   194,   206,   216,   226,   229,   239,   244,
      245,   255,   256,   265,   273,   277,   284,   293,   295,   300,
-     317,   338,   350,   366,   365,   382,   391,   400,   411,   413,
-     415,   425,   435,   456,   465,   474,   483,   490,   489,   506,
-     512,   522,   546,   547,   552,   554,   556,   560,   564,   568,
-     572,   577,   583,   584,   590,   604,   605,   614,   620,   621,
-     626,   629,   633,   638,   642,   646,   650,   651,   655,   661,
-     666,   671,   681,   682,   687,   688,   692,   702,   706,   716,
-     717,   727,   731,   735,   739,   743,   753,   762,   766,   771,
-     778,   787,   793,   799,   807,   811,   818,   817,   828,   829,
-     833,   842,   847,   855,   862,   869,   879,   888,   895,   904,
-     911,   917,   924,   929,   939,   943,   947,   953,   957,   961,
-     965,   969,   973,   977,   989,   993,   997,  1001,  1011,  1015,
-    1022,  1026,  1030,  1035,  1040,  1045,  1054,  1059,  1064,  1070,
-    1076,  1087,  1091,  1095,  1107,  1120,  1128,  1140,  1141,  1142,
-    1143,  1144,  1149,  1153,  1155,  1159,  1164,  1166,  1171,  1173,
-    1175,  1177,  1179,  1181,  1183,  1192,  1203,  1205,  1207,  1212,
-    1225,  1230,  1235,  1239,  1243,  1247,  1251,  1255,  1259,  1263,
-    1265,  1268,  1272,  1278,  1280,  1285,  1288,  1297,  1304,  1303,
-    1319,  1320,  1321,  1327,  1331,  1339,  1346,  1351,  1356,  1358,
-    1360,  1365,  1367,  1372,  1373,  1379,  1383,  1389,  1395,  1401,
-    1407,  1413,  1420,  1422,  1424,  1427
+     318,   317,   348,   360,   376,   375,   392,   401,   410,   421,
+     423,   425,   435,   445,   466,   475,   484,   493,   500,   499,
+     516,   522,   532,   556,   557,   562,   564,   566,   570,   574,
+     578,   582,   587,   593,   594,   600,   614,   615,   624,   630,
+     631,   636,   639,   643,   648,   652,   656,   660,   661,   665,
+     671,   676,   681,   691,   692,   697,   698,   702,   712,   716,
+     726,   727,   737,   741,   745,   749,   753,   763,   772,   776,
+     781,   788,   797,   803,   809,   817,   821,   828,   827,   838,
+     839,   843,   852,   857,   865,   872,   879,   889,   898,   905,
+     914,   921,   927,   934,   939,   949,   953,   957,   963,   967,
+     971,   975,   979,   983,   987,   999,  1003,  1007,  1011,  1021,
+    1025,  1032,  1036,  1040,  1045,  1050,  1055,  1064,  1069,  1074,
+    1080,  1086,  1097,  1101,  1105,  1117,  1130,  1138,  1150,  1151,
+    1152,  1153,  1154,  1159,  1163,  1165,  1169,  1174,  1176,  1181,
+    1183,  1185,  1187,  1189,  1191,  1193,  1202,  1213,  1215,  1217,
+    1222,  1235,  1240,  1245,  1249,  1253,  1257,  1261,  1265,  1269,
+    1273,  1275,  1278,  1282,  1288,  1290,  1295,  1298,  1307,  1314,
+    1313,  1329,  1330,  1331,  1337,  1341,  1349,  1356,  1361,  1366,
+    1368,  1370,  1375,  1377,  1382,  1383,  1389,  1393,  1399,  1405,
+    1411,  1417,  1423,  1430,  1432,  1434,  1437
 };
 #endif
 
@@ -227,12 +228,12 @@ static const char *const yytname[] =
   "PREINC", "ARROW", "')'", "'('", "PEG", "$accept", "grammar", "@1", "@2",
   "@3", "@4", "@5", "@6", "block", "formblock", "remember", "mblock",
   "mremember", "stmtseq", "formstmtseq", "fullstmt", "labfullstmt",
-  "barestmt", "@7", "@8", "formline", "formarg", "sideff", "else", "cont",
-  "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "miexpr",
+  "barestmt", "@7", "@8", "@9", "formline", "formarg", "sideff", "else",
+  "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "miexpr",
   "formname", "startsub", "startanonsub", "startformsub", "subname",
   "proto", "subattrlist", "myattrlist", "subbody", "expr", "listexpr",
-  "listop", "@9", "method", "subscripted", "termbinop", "termunop",
-  "anonymous", "termdo", "term", "@10", "myattrterm", "myterm",
+  "listop", "@10", "method", "subscripted", "termbinop", "termunop",
+  "anonymous", "termdo", "term", "@11", "myattrterm", "myterm",
   "optlistexpr", "optexpr", "my_scalar", "amper", "scalar", "ary", "hsh",
   "arylen", "star", "indirob", 0
 };
@@ -263,26 +264,26 @@ static const yytype_uint8 yyr1[] =
        0,   105,   107,   106,   108,   106,   109,   106,   110,   106,
      111,   106,   112,   106,   113,   114,   115,   116,   117,   118,
      118,   119,   119,   120,   120,   121,   121,   122,   122,   122,
-     122,   122,   122,   123,   122,   122,   122,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   124,   122,   122,
-     122,   125,   126,   126,   127,   127,   127,   127,   127,   127,
-     127,   127,   128,   128,   128,   129,   129,   130,   131,   131,
-     132,   132,   133,   134,   135,   136,   137,   137,   138,   139,
-     140,   141,   142,   142,   143,   143,   143,   144,   144,   145,
-     145,   146,   146,   146,   146,   147,   147,   147,   148,   148,
-     148,   148,   148,   148,   148,   148,   149,   148,   150,   150,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   152,   152,   152,   152,   152,   152,
-     152,   152,   152,   152,   152,   152,   152,   152,   153,   153,
-     153,   153,   153,   153,   153,   153,   154,   154,   154,   154,
-     154,   155,   155,   155,   155,   155,   155,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   157,   156,
-     156,   156,   156,   156,   158,   158,   159,   159,   159,   159,
-     159,   160,   160,   161,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   169,   169,   169
+     123,   122,   122,   122,   124,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   125,   122,
+     122,   122,   126,   127,   127,   128,   128,   128,   128,   128,
+     128,   128,   128,   129,   129,   129,   130,   130,   131,   132,
+     132,   133,   133,   134,   135,   136,   137,   138,   138,   139,
+     140,   141,   142,   143,   143,   144,   144,   144,   145,   145,
+     146,   146,   147,   147,   147,   147,   148,   148,   148,   149,
+     149,   149,   149,   149,   149,   149,   149,   150,   149,   151,
+     151,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   153,   153,   153,   153,   153,
+     153,   153,   153,   153,   153,   153,   153,   153,   153,   154,
+     154,   154,   154,   154,   154,   154,   154,   155,   155,   155,
+     155,   155,   156,   156,   156,   156,   156,   156,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   158,
+     157,   157,   157,   157,   157,   159,   159,   160,   160,   160,
+     160,   160,   161,   161,   162,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   170,   170,   170
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -291,26 +292,26 @@ static const yytype_uint8 yyr2[] =
        0,     2,     0,     4,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     4,     7,     0,     4,     0,     0,
        2,     0,     2,     1,     1,     2,     2,     1,     1,     4,
-       6,     6,     4,     0,     7,     7,     7,     6,     6,     2,
-       8,     8,    11,     9,     8,     7,     2,     0,     8,     2,
-       1,     2,     0,     3,     1,     1,     3,     3,     3,     3,
-       3,     3,     0,     2,     6,     0,     2,     0,     0,     1,
-       0,     1,     1,     1,     1,     1,     1,     0,     0,     0,
-       0,     1,     0,     1,     0,     2,     1,     2,     1,     1,
-       1,     3,     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,     6,     4,     5,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     2,     2,
-       2,     2,     2,     2,     2,     2,     3,     2,     4,     3,
-       5,     2,     2,     4,     5,     4,     5,     1,     1,     1,
-       1,     5,     2,     1,     2,     3,     1,     2,     1,     1,
-       1,     1,     1,     1,     4,     5,     1,     1,     3,     4,
-       3,     1,     2,     2,     1,     2,     2,     1,     2,     1,
-       2,     1,     3,     1,     3,     1,     3,     4,     0,     5,
-       1,     1,     1,     1,     3,     2,     3,     2,     1,     1,
-       1,     0,     1,     0,     1,     1,     2,     2,     2,     2,
-       2,     2,     1,     1,     1,     1
+       0,     7,     6,     4,     0,     7,     7,     7,     6,     6,
+       2,     8,     8,    11,     9,     8,     7,     2,     0,     8,
+       2,     1,     2,     0,     3,     1,     1,     3,     3,     3,
+       3,     3,     3,     0,     2,     6,     0,     2,     0,     0,
+       1,     0,     1,     1,     1,     1,     1,     1,     0,     0,
+       0,     0,     1,     0,     1,     0,     2,     1,     2,     1,
+       1,     1,     3,     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,     6,     4,     5,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     2,
+       2,     2,     2,     2,     2,     2,     2,     3,     2,     4,
+       3,     5,     2,     2,     4,     5,     4,     5,     1,     1,
+       1,     1,     5,     2,     1,     2,     3,     1,     2,     1,
+       1,     1,     1,     1,     1,     4,     5,     1,     1,     3,
+       4,     3,     1,     2,     2,     1,     2,     2,     1,     2,
+       1,     2,     1,     3,     1,     3,     1,     3,     4,     0,
+       5,     1,     1,     1,     1,     3,     2,     3,     2,     1,
+       1,     1,     0,     1,     0,     1,     1,     2,     2,     2,
+       2,     2,     2,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -318,331 +319,359 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     2,     4,     6,     8,    10,    12,     0,    16,   213,
+       0,     2,     4,     6,     8,    10,    12,     0,    16,   214,
        0,     0,     0,    19,     1,    19,     0,     0,     0,     0,
-       0,     0,     0,     0,   200,     0,     0,   176,   198,   166,
-     193,   195,   189,    79,   203,    79,   181,   202,   191,     0,
-       0,   184,   211,     0,     0,     0,     0,     0,     0,   187,
-       0,     0,     0,     0,     0,     0,     0,   214,    94,   201,
-     173,   157,   158,   159,   160,    97,   163,     5,   177,   168,
-     171,   170,   172,   169,    16,     7,    54,    50,    27,    80,
-      78,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-       0,    78,    28,    65,     9,     0,    55,     0,    11,    24,
-      23,     0,     0,   147,     0,   138,   139,   222,   225,   224,
-     223,   217,   218,   219,   221,   216,   211,     0,     0,     0,
-       0,   190,     0,    82,   182,     0,     0,   213,   185,   186,
-     222,   212,   104,   223,     0,   220,   200,   152,   151,   168,
-       0,     0,   211,   164,     0,   205,   208,   210,   209,   188,
-     183,   140,   141,   162,   145,   144,   167,     0,     0,     0,
-       0,    95,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   201,     0,     0,   177,   199,   167,
+     194,   196,   190,    80,   204,    80,   182,   203,   192,     0,
+       0,   185,   212,     0,     0,     0,     0,     0,     0,   188,
+       0,     0,     0,     0,     0,     0,     0,   215,    95,   202,
+     174,   158,   159,   160,   161,    98,   164,     5,   178,   169,
+     172,   171,   173,   170,    16,     7,    55,    51,    27,    81,
+       0,     0,    79,     0,     0,     0,     0,     0,     0,     0,
+       0,    79,    28,    66,     9,     0,    56,     0,    11,    24,
+      23,     0,     0,   148,     0,   139,   140,   223,   226,   225,
+     224,   218,   219,   220,   222,   217,   212,     0,     0,     0,
+       0,   191,     0,    83,   183,     0,     0,   214,   186,   187,
+     223,   213,   105,   224,     0,   221,   201,   153,   152,   169,
+       0,     0,   212,   165,     0,   206,   209,   211,   210,   189,
+     184,   141,   142,   163,   146,   145,   168,     0,     0,     0,
+       0,    96,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     143,   142,     0,     0,     0,     0,     0,     0,     0,    19,
-      77,     0,     0,    33,    16,    16,    16,    16,    16,    16,
-       0,    16,    16,    39,     0,     0,    46,    49,     0,     0,
-       0,     0,     0,     0,    26,    25,    20,   146,   102,   213,
-       0,     0,   194,   106,    83,    84,   192,   196,     0,     0,
-       0,    98,     0,     0,   149,     0,   180,   207,     0,    88,
-     204,     0,   165,    93,    92,    91,    96,     0,     0,   120,
-       0,   133,   129,   130,   126,   127,   124,     0,   136,   135,
-     134,   132,   131,   128,   137,   125,     0,     0,   108,     0,
-     101,   109,   178,     0,     0,     0,     0,     0,     0,     0,
-      76,     0,    81,    82,     0,     0,    70,     0,     0,     0,
-       0,     0,    16,     0,     0,    82,    66,    58,    59,    72,
-      56,    57,    60,    61,     0,     0,   122,   211,    86,     0,
-     197,   105,     0,   153,     0,   155,     0,   148,   206,    87,
-       0,     0,     0,   113,   119,     0,     0,     0,   117,     0,
-     213,   179,     0,   111,     0,   174,     0,    14,    16,    29,
-      84,    16,    32,     0,     0,    71,     0,     0,    73,    75,
-       0,     0,   215,    69,    74,     0,     0,    55,     0,     0,
-       0,    84,   103,   199,   107,    85,   150,    99,   154,   156,
-     123,     0,   116,   161,     0,   112,   118,     0,   114,   175,
-     110,     0,     0,    47,   211,    67,    67,     0,     0,     0,
-       0,    70,     0,     0,     0,     0,   121,   115,   100,     0,
-      90,    89,    30,    19,     0,     0,     0,    18,    62,    62,
-       0,    65,     0,     0,    37,    38,    31,    21,     0,    34,
-      65,    65,    19,     0,     0,    35,    36,     0,    45,    67,
-      65,     0,    48,    40,    41,     0,    63,     0,    65,     0,
-      44,     0,    52,    22,    17,     0,    43,     0,    15,    19,
-      51,     0,     0,     0,    62,    42,    53,    64
+     144,   143,     0,     0,     0,     0,     0,     0,     0,    19,
+      78,    79,     0,    34,    16,    16,    16,    16,    16,    16,
+       0,    16,    16,    40,     0,     0,    47,    50,     0,     0,
+       0,     0,     0,     0,    26,    25,    20,   147,   103,   214,
+       0,     0,   195,   107,    84,    85,   193,   197,     0,     0,
+       0,    99,     0,     0,   150,     0,   181,   208,     0,    89,
+     205,     0,   166,    94,    93,    92,    97,     0,     0,   121,
+       0,   134,   130,   131,   127,   128,   125,     0,   137,   136,
+     135,   133,   132,   129,   138,   126,     0,     0,   109,     0,
+     102,   110,   179,     0,     0,     0,     0,     0,     0,     0,
+      77,     0,    30,     0,     0,    71,     0,     0,     0,     0,
+       0,    16,     0,     0,    82,    83,    67,    59,    60,    73,
+      57,    58,    61,    62,     0,     0,   123,   212,    87,     0,
+     198,   106,     0,   154,     0,   156,     0,   149,   207,    88,
+       0,     0,     0,   114,   120,     0,     0,     0,   118,     0,
+     214,   180,     0,   112,     0,   175,     0,    14,    16,    29,
+      83,    16,    33,     0,     0,    72,     0,     0,    74,    76,
+       0,     0,   216,    70,    75,     0,     0,    56,     0,     0,
+       0,    85,   104,   200,   108,    86,   151,   100,   155,   157,
+     124,     0,   117,   162,     0,   113,   119,     0,   115,   176,
+     111,     0,    85,    48,   212,    68,    68,     0,     0,     0,
+       0,    71,     0,     0,     0,     0,   122,   116,   101,     0,
+       0,    19,     0,     0,     0,    18,    63,    63,     0,    66,
+       0,     0,    38,    39,    91,    90,    32,    21,    31,     0,
+      35,    66,    66,    19,     0,     0,    36,    37,     0,    46,
+      68,    66,     0,    49,    41,    42,     0,    64,     0,    66,
+       0,    45,     0,    53,    22,    17,     0,    44,     0,    15,
+      19,    52,     0,     0,     0,    63,    43,    54,    65
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     7,     8,     9,    10,    11,    12,    13,   109,   339,
-      15,   408,   422,   101,   431,   216,    99,   100,   285,   403,
-     443,   450,    95,   425,   206,   405,   354,   344,   298,   347,
-     356,   350,   281,   191,   122,   190,   283,   225,   309,   240,
-     402,    96,    58,    59,   307,   270,    60,    61,    62,    63,
-      64,    65,   118,    66,   145,   132,    67,   351,    68,    69,
-      70,    71,    72,    73,   111
+      15,   406,   423,   101,   432,   216,    99,   100,   340,   284,
+     401,   444,   451,    95,   426,   206,   403,   354,   344,   298,
+     347,   356,   350,   281,   193,   122,   190,   295,   225,   309,
+     240,   416,    96,    58,    59,   307,   270,    60,    61,    62,
+      63,    64,    65,   118,    66,   145,   132,    67,   351,    68,
+      69,    70,    71,    72,    73,   111
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -377
+#define YYPACT_NINF -391
 static const yytype_int16 yypact[] =
 {
-     695,  -377,  -377,  -377,  -377,  -377,  -377,    26,  -377,  2654,
-      33,  1105,  1009,  -377,  -377,  -377,  1728,  2654,  2654,   403,
-     403,   403,   403,   403,  -377,   403,   403,  -377,  -377,    62,
-     -13,  -377,  2654,  -377,  -377,  -377,  2654,  -377,    -1,    45,
-      53,  1542,  1449,   403,  1635,  1819,    75,  2654,    21,  2654,
-    2654,  2654,  2654,  2654,  2654,  2654,  1910,   320,    29,  -377,
-      24,  -377,  -377,  -377,  -377,  2705,  -377,  -377,   109,   185,
-     230,  -377,  -377,   142,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,   129,  -377,   110,   114,   115,   121,    -2,   157,   168,
-      33,  -377,  -377,   225,  -377,   259,   351,  1009,  -377,  -377,
-    -377,   433,   529,  -377,    -7,   137,   137,  -377,  -377,  -377,
-    -377,  -377,  -377,  -377,  -377,  -377,  2654,   182,   184,  2654,
-     194,  1804,    33,   265,  2705,   195,  2003,  1449,  -377,  1804,
-     278,    29,  -377,  1355,  2654,  -377,   201,  -377,  1804,    38,
-     296,    39,  2654,  1804,  2096,   234,  -377,  -377,  -377,  1804,
-      29,   137,   137,   137,   253,   253,   298,   216,  2654,  2654,
-    2654,  2654,  2654,  2654,  2189,  2654,  2654,  2654,  2654,  2654,
-    2654,  2654,  2654,  2654,  2654,  2654,  2654,  2654,  2654,  2654,
-    -377,  -377,     5,  2282,  2654,  2654,  2654,  2654,  2654,  -377,
-     291,   292,   301,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-     227,  -377,  -377,  -377,   292,    33,  -377,  -377,  2654,  2654,
-    2654,  2654,  2654,  2654,  -377,  -377,  -377,  -377,  -377,  2654,
-    2654,    -3,  -377,  -377,  -377,   258,  -377,  -377,   224,   235,
-    2654,    29,  2375,  2468,  -377,   333,  -377,  -377,   304,   310,
-    -377,  2654,   337,   273,   273,  -377,  2705,    59,     7,  -377,
-     417,  1437,  1713,   125,   515,   237,  2705,  2688,   326,   326,
-    1280,  1527,  1620,   179,   137,   137,  2654,  2654,  -377,  2561,
-     241,  -377,  -377,   429,    68,    27,    93,    65,   153,   625,
-    -377,   350,  -377,   265,    47,   335,  2654,  2654,  2654,  2654,
-     358,  1199,  -377,  2654,  2654,   265,  -377,   320,  -377,   320,
-     320,   320,   320,   320,   275,   -38,  -377,  2654,   352,    33,
-    -377,  -377,   432,  -377,   437,  -377,   513,  -377,  -377,  -377,
-      97,  2654,   382,  -377,  -377,  2654,   189,   113,  -377,   525,
-    2654,  -377,   391,  -377,   393,  -377,   395,  -377,  -377,  -377,
-     258,  -377,  -377,   384,   307,   320,   309,   317,   320,  -377,
-     318,   332,  -377,  -377,  -377,   319,   416,   268,  2654,   336,
-     338,   258,  -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,   123,  -377,  1187,   431,  -377,  -377,   343,  -377,  -377,
-    -377,   419,    49,  -377,  2654,  -377,  -377,   445,   445,  2654,
-     445,  2654,   353,   445,   445,    49,  -377,  -377,  -377,   386,
-    -377,  -377,  -377,  -377,   459,   445,   445,  -377,    48,    48,
-     378,   225,   461,   445,  -377,  -377,  -377,  -377,   721,  -377,
-     225,   225,  -377,   445,   394,  -377,  -377,   445,  -377,  -377,
-     225,   173,  -377,  -377,  -377,   817,  -377,  2654,   225,  1293,
-    -377,   465,   438,  -377,  -377,   415,  -377,   418,  -377,  -377,
-    -377,   445,   445,   913,    48,  -377,  -377,  -377
+     696,  -391,  -391,  -391,  -391,  -391,  -391,    30,  -391,  2655,
+      39,  1106,  1010,  -391,  -391,  -391,  1729,  2655,  2655,   390,
+     390,   390,   390,   390,  -391,   390,   390,  -391,  -391,    28,
+     -45,  -391,  2655,  -391,  -391,  -391,  2655,  -391,   -37,   -29,
+     -24,  1543,  1450,   390,  1636,  1820,    80,  2655,    21,  2655,
+    2655,  2655,  2655,  2655,  2655,  2655,  1911,   141,    23,  -391,
+      24,  -391,  -391,  -391,  -391,  2718,  -391,  -391,     7,   127,
+     185,  -391,  -391,   107,  -391,  -391,  -391,  -391,  -391,  -391,
+     123,   133,  -391,    90,    99,   109,   110,    -2,   126,   131,
+      39,  -391,  -391,   162,  -391,   218,  2002,  1010,  -391,  -391,
+    -391,   434,   530,  -391,     6,   507,   507,  -391,  -391,  -391,
+    -391,  -391,  -391,  -391,  -391,  -391,  2655,   138,   139,  2655,
+     158,  1896,    39,   237,  2718,   166,  2004,  1450,  -391,  1896,
+     277,    23,  -391,  1356,  2655,  -391,   170,  -391,  1896,    32,
+     274,    73,  2655,  1896,  2097,   203,  -391,  -391,  -391,  1896,
+      23,   507,   507,   507,   226,   226,   284,   -16,  2655,  2655,
+    2655,  2655,  2655,  2655,  2190,  2655,  2655,  2655,  2655,  2655,
+    2655,  2655,  2655,  2655,  2655,  2655,  2655,  2655,  2655,  2655,
+    -391,  -391,     5,  2283,  2655,  2655,  2655,  2655,  2655,  -391,
+     273,  -391,   287,  -391,  -391,  -391,  -391,  -391,  -391,  -391,
+     208,  -391,  -391,  -391,   292,    39,  -391,  -391,  2655,  2655,
+    2655,  2655,  2655,  2655,  -391,  -391,  -391,  -391,  -391,  2655,
+    2655,    40,  -391,  -391,  -391,   245,  -391,  -391,   122,   227,
+    2655,    23,  2376,  2469,  -391,   320,  -391,  -391,   269,   316,
+    -391,  2655,   339,   272,   272,  -391,  2718,   215,    63,  -391,
+     338,  1438,  1805,   125,   515,   216,  2718,  2677,  1282,  1282,
+    1528,  1621,  1714,   207,   507,   507,  2655,  2655,  -391,  2562,
+     249,  -391,  -391,   344,   223,    66,   255,    70,   258,   626,
+    -391,   336,  -391,    93,   346,  2655,  2655,  2655,  2655,   357,
+    1200,  -391,  2655,  2655,  -391,   237,  -391,   141,  -391,   141,
+     141,   141,   141,   141,   275,   -55,  -391,  2655,   350,    39,
+    -391,  -391,   418,  -391,   430,  -391,   433,  -391,  -391,  -391,
+      94,  2655,   370,  -391,  -391,  2655,   266,    97,  -391,   438,
+    2655,  -391,   371,  -391,   377,  -391,   378,  -391,  -391,  -391,
+     237,  -391,  -391,   372,   296,   141,   299,   300,   141,  -391,
+     301,   291,  -391,  -391,  -391,   306,   392,   188,  2655,   308,
+     317,   245,  -391,  -391,  -391,  -391,  -391,  -391,  -391,  -391,
+    -391,   113,  -391,  1188,   410,  -391,  -391,   322,  -391,  -391,
+    -391,   405,   245,  -391,  2655,  -391,  -391,   419,   419,  2655,
+     419,  2655,   327,   419,   419,   189,  -391,  -391,  -391,   355,
+     189,  -391,   412,   419,   419,  -391,    48,    48,   334,   162,
+     417,   419,  -391,  -391,  -391,  -391,  -391,  -391,  -391,   722,
+    -391,   162,   162,  -391,   419,   359,  -391,  -391,   419,  -391,
+    -391,   162,    47,  -391,  -391,  -391,   818,  -391,  2655,   162,
+    1294,  -391,   420,   365,  -391,  -391,   379,  -391,   380,  -391,
+    -391,  -391,   419,   419,   914,    48,  -391,  -391,  -391
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -377,  -377,  -377,  -377,  -377,  -377,  -377,  -377,   -10,  -377,
-     -33,  2312,  -377,   -12,  -377,   506,   424,     6,  -377,  -377,
-    -377,  -377,  -279,  -361,  -201,  -376,  -377,   131,   -24,  -239,
-      84,  -377,  -377,    58,   489,  -377,   324,  -265,  -283,  -377,
-     140,    -5,   -35,  -377,  -377,  -377,  -377,  -377,  -377,  -377,
-    -377,    79,  -377,  -377,  -377,  -110,  -119,  -377,  -377,     2,
-     493,   502,  -377,  -377,    40
+    -391,  -391,  -391,  -391,  -391,  -391,  -391,  -391,   -10,  -391,
+     -32,     3,  -391,   -12,  -391,   429,   383,     1,  -391,  -391,
+    -391,  -391,  -391,  -280,  -390,   -39,  -377,  -391,   128,  -198,
+    -221,    58,  -391,  -391,   -86,   453,  -391,  -391,  -276,  -312,
+    -391,   118,    -5,   -35,  -391,  -391,  -391,  -391,  -391,  -391,
+    -391,  -391,    79,  -391,  -391,  -391,  -110,  -119,  -391,  -391,
+       2,   465,   473,  -391,  -391,    34
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -201
+#define YYTABLE_NINF -202
 static const yytype_int16 yytable[] =
 {
-      75,    93,    93,   102,    57,   217,   218,   131,   229,   306,
-     406,   104,   353,    19,   266,   150,   267,    94,   340,   323,
-      19,   110,   110,   110,   110,   110,    14,   110,   110,   268,
-     361,   128,   236,   162,   137,   163,    19,    20,    21,   333,
-     141,   189,    74,   161,   133,   110,   139,   184,   426,   185,
-     146,   157,   355,   439,   359,   360,   341,   382,    74,   235,
-     112,   113,   114,   115,   363,   116,   117,   342,   198,   400,
-     158,   159,   160,   119,   158,   159,   160,   335,   395,   322,
-     203,   131,   134,   135,   158,   159,   160,    93,   332,   200,
-     120,    93,    93,   457,   423,   424,   105,   106,   142,   231,
-     304,   199,   125,   215,   158,   159,   160,   131,   269,   370,
-     161,   121,   223,   334,   221,   124,   158,   159,   160,   392,
-     129,   228,    57,   138,   144,   375,   143,   164,   149,   133,
-     151,   152,   153,   154,   155,   396,   158,   159,   160,   238,
-     193,   233,   158,   159,   160,   158,   159,   160,   126,   204,
-     410,   188,   192,   243,   244,   245,   127,   247,   248,   250,
-     353,   286,   287,   288,   289,   290,   291,   230,   293,   294,
-     158,   159,   160,   336,   158,   159,   160,   279,   273,   274,
-     275,   276,   277,   278,   271,   305,   166,  -201,   168,   169,
-     158,   159,   160,   441,   184,   296,   185,   364,   445,   442,
-     158,   159,   160,   297,   299,   300,   301,   302,   303,   374,
-     428,   377,   183,   194,    57,   177,   178,   195,   196,   433,
-     434,   179,   180,   181,   197,   312,   182,   314,   316,   440,
-     158,   159,   160,   179,   180,   181,   320,   446,   182,   186,
-     246,   187,   168,   169,   251,   252,   253,   254,   255,   256,
+      75,    93,    93,   102,    57,   204,   218,   131,   229,   404,
+     353,   104,    94,    19,   266,   150,   267,   427,   217,   361,
+      19,   110,   110,   110,   110,   110,   161,   110,   110,   268,
+      14,   128,   236,   162,   137,   163,    19,    20,    21,   119,
+     141,   184,   189,   185,   133,   110,   139,   363,    74,   395,
+     146,   157,   306,   440,   112,   113,   114,   115,   120,   116,
+     117,   158,   159,   160,   382,   458,   125,   442,   198,   355,
+     400,   359,   360,   443,   126,   323,   134,   135,   333,   127,
+     203,   131,   335,   158,   159,   160,   242,    93,   346,   200,
+     349,    93,    93,   235,   424,   425,   105,   106,   215,   231,
+     304,   199,   341,   142,   161,   282,   370,   131,   269,   375,
+     183,   121,   223,   342,   221,   124,   188,   158,   159,   160,
+     129,   228,    57,   138,   144,   396,   143,   164,   149,   133,
+     151,   152,   153,   154,   155,   233,   184,   392,   185,   238,
+     158,   159,   160,   158,   159,   160,   191,   158,   159,   160,
+     158,   159,   160,   243,   244,   245,   192,   247,   248,   250,
+     353,   230,   285,   286,   287,   288,   289,   290,   408,   292,
+     293,   158,   159,   160,   158,   159,   160,   279,   273,   274,
+     275,   276,   277,   278,   271,   305,   166,  -202,   168,   169,
+     158,   159,   160,   194,   186,   296,   187,   364,    74,   158,
+     159,   160,   195,   297,   299,   300,   301,   302,   303,   414,
+     205,   377,   196,   197,    57,   177,   178,   446,   158,   159,
+     160,   179,   180,   181,   310,   312,   182,   314,   316,   201,
+     208,   209,   210,   211,   202,   322,   320,   212,   207,   213,
+     246,   219,   220,   332,   251,   252,   253,   254,   255,   256,
      257,   258,   259,   260,   261,   262,   263,   264,   265,   358,
-     201,   326,   327,   346,   329,   349,   158,   159,   160,    93,
-     178,   202,   131,   205,   404,   179,   180,   181,  -200,   207,
-     182,   345,   299,   348,   299,   219,   357,   220,   348,   348,
-    -200,   224,   352,   158,   159,   160,   222,   226,  -200,   366,
-     168,   158,   159,   160,   232,   381,   234,   239,   383,   241,
-     208,   209,   210,   211,   280,   282,   371,   212,   242,   213,
-    -200,  -200,  -200,  -200,   284,    57,   310,  -200,   178,  -200,
-     292,   308,  -200,   179,   180,   181,   319,   311,   182,  -200,
-    -200,  -200,  -200,   317,   330,   158,   159,   160,   321,   131,
-    -201,  -201,   160,   348,   182,  -200,  -200,  -200,   343,  -200,
-    -200,  -200,  -200,  -200,  -200,  -200,  -200,  -200,  -200,  -200,
-     -73,   338,   401,    19,  -200,  -200,  -200,   362,   365,  -200,
-    -200,   158,   159,   160,   348,   401,   345,   166,   167,   168,
-     169,   418,   372,   208,   209,   210,   211,   158,   159,   160,
-     212,   378,   213,   379,   373,   380,   318,   384,    93,   385,
-     435,   386,    74,   174,   175,   176,   177,   178,    19,   387,
-     388,   390,   179,   180,   181,    93,   107,   182,   158,   159,
-     160,   108,   348,   -13,    76,   389,   391,   453,   393,   399,
-     394,   397,    74,    93,    16,   398,    17,    18,    19,    20,
-      21,    22,    23,    77,   407,   413,    24,    25,    26,    27,
-      28,   417,    29,    30,    31,    32,    33,    34,    78,    97,
-      79,    80,    35,    81,    82,    83,    84,    85,    86,   419,
-     427,   429,    87,    88,    89,    90,    36,   448,    37,    38,
-      39,    40,    41,    42,   158,   159,   160,   437,    43,    44,
-      45,    46,    47,    48,    91,    49,   158,   159,   160,   158,
-     159,   160,   449,    50,   158,   159,   160,   451,    98,   324,
-     452,   214,   412,   447,   123,    51,    52,    53,   295,    -3,
-      76,   331,    54,    55,   367,   416,    56,    92,    74,   368,
-      16,   147,    17,    18,    19,    20,    21,    22,    23,    77,
-     148,     0,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    78,    97,    79,    80,    35,    81,
-      82,    83,    84,    85,    86,     0,     0,     0,    87,    88,
-      89,    90,    36,     0,    37,    38,    39,    40,    41,    42,
-     158,   159,   160,     0,    43,    44,    45,    46,    47,    48,
-      91,    49,   158,   159,   160,     0,   178,     0,     0,    50,
-       0,   179,   180,   181,     0,   369,   182,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,    76,   376,    54,    55,
-       0,     0,    56,    92,    74,   337,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,    97,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    91,    49,     1,     2,
-       3,     4,     5,     6,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,    76,     0,    54,    55,     0,     0,    56,    92,
-      74,   432,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    78,    97,    79,    80,
-      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
-      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,    91,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,    76,     0,
-      54,    55,     0,     0,    56,    92,    74,   444,    16,     0,
-      17,    18,    19,    20,    21,    22,    23,    77,     0,     0,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    78,    97,    79,    80,    35,    81,    82,    83,
-      84,    85,    86,     0,     0,     0,    87,    88,    89,    90,
-      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
-       0,     0,    43,    44,    45,    46,    47,    48,    91,    49,
-       0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,    76,     0,    54,    55,     0,     0,
-      56,    92,    74,     0,    16,     0,    17,    18,    19,    20,
-      21,    22,    23,    77,     0,     0,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    78,    97,
-      79,    80,    35,    81,    82,    83,    84,    85,    86,     0,
-       0,     0,    87,    88,    89,    90,    36,     0,    37,    38,
-      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
-      45,    46,    47,    48,    91,    49,     0,     0,   456,     0,
-       0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-      76,     0,    54,    55,     0,     0,    56,    92,    74,     0,
-      16,     0,    17,    18,    19,    20,    21,    22,    23,    77,
-       0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    78,    97,    79,    80,    35,    81,
-      82,    83,    84,    85,    86,     0,     0,     0,    87,    88,
-      89,    90,    36,     0,    37,    38,    39,    40,    41,    42,
-       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
-      91,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+     222,   326,   327,   224,   329,   158,   159,   160,   226,    93,
+     168,   169,   131,   232,   402,   334,   239,  -201,   336,   168,
+     345,   299,   348,   299,   234,   357,   374,   348,   348,  -201,
+     -74,   352,   158,   159,   160,   241,   280,  -201,   178,   366,
+     158,   159,   160,   179,   180,   181,   381,   178,   182,   383,
+     283,   291,   179,   180,   181,   294,   371,   182,   308,  -201,
+    -201,  -201,  -201,  -202,  -202,    57,  -201,   182,  -201,   311,
+     317,  -201,   158,   159,   160,   158,   159,   160,  -201,  -201,
+    -201,  -201,   319,   158,   159,   160,   158,   159,   160,   131,
+     321,   160,   330,   348,  -201,  -201,  -201,   338,  -201,  -201,
+    -201,  -201,  -201,  -201,  -201,  -201,  -201,  -201,  -201,   343,
+     429,   318,    19,  -201,  -201,  -201,   365,   362,  -201,  -201,
+     372,   378,   434,   435,   348,   415,   345,   379,   380,   419,
+     415,   407,   441,   409,   389,   384,   412,   413,   385,    74,
+     447,   386,   387,   388,   373,    19,   421,   422,   390,    93,
+     393,   436,   391,   107,   431,   158,   159,   160,   108,   394,
+     397,   158,   159,   160,   398,   399,    93,   437,   405,   411,
+     417,   439,   420,   348,   -13,    76,   428,   430,   454,   450,
+     324,    98,   449,    74,    93,    16,   331,    17,    18,    19,
+      20,    21,    22,    23,    77,   455,   456,    24,    25,    26,
+      27,    28,   438,    29,    30,    31,    32,    33,    34,    78,
+      97,    79,    80,    35,    81,    82,    83,    84,    85,    86,
+     214,   452,   453,    87,    88,    89,    90,    36,   123,    37,
+      38,    39,    40,    41,    42,   158,   159,   160,   448,    43,
+      44,    45,    46,    47,    48,    91,    49,   158,   159,   160,
+     158,   159,   160,   147,    50,   158,   159,   160,   418,   410,
+     367,   148,     0,     0,     0,     0,    51,    52,    53,     0,
+      -3,    76,   368,    54,    55,   369,     0,    56,    92,    74,
+     376,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,    97,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,    91,    49,   179,   180,   181,   178,     0,   182,     0,
+      50,   179,   180,   181,     0,     0,   182,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
+      55,     0,     0,    56,    92,    74,   337,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    78,    97,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    91,    49,     1,
+       2,     3,     4,     5,     6,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,    76,     0,    54,    55,     0,     0,    56,
+      92,    74,   433,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,    77,     0,     0,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    78,    97,    79,
+      80,    35,    81,    82,    83,    84,    85,    86,     0,     0,
+       0,    87,    88,    89,    90,    36,     0,    37,    38,    39,
+      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
+      46,    47,    48,    91,    49,     0,     0,     0,     0,     0,
+       0,     0,    50,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    51,    52,    53,     0,     0,    76,
+       0,    54,    55,     0,     0,    56,    92,    74,   445,    16,
+       0,    17,    18,    19,    20,    21,    22,    23,    77,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    78,    97,    79,    80,    35,    81,    82,
+      83,    84,    85,    86,     0,     0,     0,    87,    88,    89,
+      90,    36,     0,    37,    38,    39,    40,    41,    42,     0,
+       0,     0,     0,    43,    44,    45,    46,    47,    48,    91,
+      49,     0,     0,     0,     0,     0,     0,     0,    50,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
-       0,     0,    56,    92,    74,     0,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,     0,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    91,    49,     0,     0,
-       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-      76,     0,     0,     0,    54,    55,     0,     0,    56,    92,
-      16,     0,    17,    18,    19,    20,    21,    22,    23,   -68,
-       0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
-       0,   165,     0,     0,     0,     0,     0,     0,   166,   167,
-     168,   169,    36,     0,    37,    38,    39,    40,    41,    42,
-       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
-     171,    49,   172,   173,   174,   175,   176,   177,   178,    50,
-       0,     0,     0,   179,   180,   181,     0,     0,   182,     0,
-       0,    51,    52,    53,    76,     0,     0,     0,    54,    55,
-       0,     0,    56,     0,    16,     0,    17,    18,    19,    20,
+      51,    52,    53,     0,     0,    76,     0,    54,    55,     0,
+       0,    56,    92,    74,     0,    16,     0,    17,    18,    19,
+      20,    21,    22,    23,    77,     0,     0,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    78,
+      97,    79,    80,    35,    81,    82,    83,    84,    85,    86,
+       0,     0,     0,    87,    88,    89,    90,    36,     0,    37,
+      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
+      44,    45,    46,    47,    48,    91,    49,     0,     0,   457,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,    76,     0,    54,    55,     0,     0,    56,    92,    74,
+       0,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    78,    97,    79,    80,    35,
+      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
+      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,    91,    49,     0,     0,     0,     0,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
+      55,     0,     0,    56,    92,    74,     0,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    78,     0,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    91,    49,     0,
+       0,     0,     0,     0,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,    76,     0,     0,     0,    54,    55,     0,     0,    56,
+      92,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+     -69,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
+       0,     0,   165,     0,     0,     0,     0,     0,     0,   166,
+     167,   168,   169,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,   171,    49,   172,   173,   174,   175,   176,   177,   178,
+      50,     0,     0,     0,   179,   180,   181,     0,     0,   182,
+       0,     0,    51,    52,    53,    76,     0,     0,     0,    54,
+      55,     0,     0,    56,     0,    16,     0,    17,    18,    19,
+      20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   166,   167,   168,   169,    36,     0,    37,
+      38,    39,    40,    41,    42,     0,  -169,     0,     0,    43,
+      44,    45,    46,    47,    48,   184,    49,   185,  -169,   174,
+     175,   176,   177,   178,    50,     0,  -169,     0,   179,   180,
+     181,     0,     0,   182,     0,     0,    51,    52,    53,     0,
+       0,     0,     0,    54,    55,     0,   -69,    56,  -169,  -169,
+    -169,  -169,     0,     0,     0,  -169,     0,  -169,     0,     0,
+    -169,     0,     0,     0,     0,     0,     0,  -169,  -169,  -169,
+    -169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  -169,  -169,  -169,     0,  -169,  -169,  -169,
+    -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,     0,     0,
+       0,     0,  -169,  -169,  -169,     0,     0,  -169,  -169,    74,
+       0,    16,     0,    17,    18,    19,    20,    21,    22,    23,
+       0,     0,     0,   130,    25,    26,    27,    28,   108,    29,
+      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
+       0,     0,  -202,     0,     0,     0,     0,     0,     0,   166,
+     167,   168,   169,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,     0,    49,   172,   173,   174,   175,   176,   177,   178,
+      50,     0,     0,     0,   179,   180,   181,     0,     0,   182,
+       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
+      55,     0,    74,    56,    16,     0,    17,    18,    19,    20,
       21,    22,    23,     0,     0,     0,    24,    25,    26,    27,
       28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
-       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
-       0,   166,   167,   168,   169,     0,    36,     0,    37,    38,
-      39,    40,    41,    42,     0,  -168,     0,     0,    43,    44,
-      45,    46,    47,    48,   184,    49,   185,  -168,   175,   176,
-     177,   178,     0,    50,     0,  -168,   179,   180,   181,     0,
-       0,   182,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   -68,    56,  -168,  -168,  -168,
-    -168,     0,     0,     0,  -168,     0,  -168,     0,     0,  -168,
-       0,     0,     0,     0,     0,     0,  -168,  -168,  -168,  -168,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -168,  -168,  -168,     0,  -168,  -168,  -168,  -168,
-    -168,  -168,  -168,  -168,  -168,  -168,  -168,     0,     0,     0,
-       0,  -168,  -168,  -168,     0,     0,  -168,  -168,    74,     0,
-      16,     0,    17,    18,    19,    20,    21,    22,    23,     0,
-       0,     0,   130,    25,    26,    27,    28,   108,    29,    30,
-      31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
-       0,  -201,     0,     0,     0,     0,     0,     0,   166,   167,
-     168,   169,    36,     0,    37,    38,    39,    40,    41,    42,
-       0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
-       0,    49,   172,   173,   174,   175,   176,   177,   178,    50,
-       0,     0,     0,   179,   180,   181,     0,     0,   182,     0,
-       0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
-       0,    74,    56,    16,     0,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,   166,   167,
-     168,   169,     0,     0,     0,    36,     0,    37,    38,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,     0,    49,     0,   176,   177,   178,     0,
-       0,     0,    50,   179,   180,   181,     0,     0,   182,     0,
-       0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
-       0,    54,    55,     0,    74,    56,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,     0,     0,     0,   136,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-       0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
-       0,   166,   167,   168,   169,     0,     0,     0,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,     0,    49,     0,     0,
-     177,   178,     0,     0,     0,    50,   179,   180,   181,     0,
-       0,   182,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,     0,    56,    16,
-     103,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,  -201,     0,   168,   169,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,     0,
-      49,     0,     0,   177,   178,     0,     0,     0,    50,   179,
-     180,   181,     0,     0,   182,     0,     0,     0,     0,     0,
-      51,    52,    53,     0,     0,     0,     0,    54,    55,     0,
-      16,    56,    17,    18,    19,    20,    21,    22,    23,   140,
+       0,     0,    35,     0,     0,     0,     0,     0,     0,   166,
+     167,   168,   169,     0,     0,     0,    36,     0,    37,    38,
+      39,    40,    41,    42,     0,     0,     0,     0,    43,    44,
+      45,    46,    47,    48,     0,    49,   175,   176,   177,   178,
+       0,     0,     0,    50,   179,   180,   181,     0,     0,   182,
+       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
+       0,     0,    54,    55,     0,    74,    56,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,     0,     0,     0,   136,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
+       0,     0,   166,   167,   168,   169,     0,     0,     0,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,     0,    49,     0,
+     176,   177,   178,     0,     0,     0,    50,   179,   180,   181,
+       0,     0,   182,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,     0,     0,    54,    55,     0,     0,    56,
+      16,   103,    17,    18,    19,    20,    21,    22,    23,     0,
        0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
       31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
-       0,     0,     0,     0,     0,     0,     0,   168,   169,     0,
+       0,     0,     0,     0,     0,   166,   167,   168,   169,     0,
        0,     0,    36,     0,    37,    38,    39,    40,    41,    42,
        0,     0,     0,     0,    43,    44,    45,    46,    47,    48,
        0,    49,     0,     0,   177,   178,     0,     0,     0,    50,
      179,   180,   181,     0,     0,   182,     0,     0,     0,     0,
        0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
        0,    16,    56,    17,    18,    19,    20,    21,    22,    23,
+     140,     0,     0,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
+       0,     0,     0,     0,     0,     0,  -202,     0,   168,   169,
+       0,     0,     0,    36,     0,    37,    38,    39,    40,    41,
+      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
+      48,     0,    49,     0,     0,   177,   178,     0,     0,     0,
+      50,   179,   180,   181,     0,     0,   182,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
+      55,     0,    16,    56,    17,    18,    19,    20,    21,    22,
+      23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
+      35,     0,     0,     0,     0,     0,     0,     0,     0,   168,
+     169,     0,     0,     0,    36,     0,    37,    38,    39,    40,
+      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
+      47,    48,     0,    49,     0,     0,   177,   178,     0,     0,
+       0,    50,   179,   180,   181,     0,     0,   182,     0,     0,
+       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
+      54,    55,     0,   156,    56,    16,     0,    17,    18,    19,
+      20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,     0,     0,    35,   208,   209,   210,   211,     0,     0,
+       0,   212,     0,   213,     0,     0,     0,    36,     0,    37,
+      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
+      44,    45,    46,    47,    48,     0,    49,     0,     0,   158,
+     159,   160,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
+       0,     0,     0,    54,    55,     0,   227,    56,    16,     0,
+      17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
+       0,     0,    43,    44,    45,    46,    47,    48,     0,    49,
+       0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
+      52,    53,     0,     0,     0,     0,    54,    55,     0,   237,
+      56,    16,     0,    17,    18,    19,    20,    21,    22,    23,
        0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
       30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -651,7 +680,7 @@ static const yytype_int16 yytable[] =
       48,     0,    49,     0,     0,     0,     0,     0,     0,     0,
       50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    51,    52,    53,     0,     0,     0,     0,    54,
-      55,     0,   156,    56,    16,     0,    17,    18,    19,    20,
+      55,     0,   249,    56,    16,     0,    17,    18,    19,    20,
       21,    22,    23,     0,     0,     0,    24,    25,    26,    27,
       28,     0,    29,    30,    31,    32,    33,    34,     0,     0,
        0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
@@ -660,7 +689,7 @@ static const yytype_int16 yytable[] =
       45,    46,    47,    48,     0,    49,     0,     0,     0,     0,
        0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   227,    56,    16,     0,    17,
+       0,     0,    54,    55,     0,   272,    56,    16,     0,    17,
       18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
       25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
       34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
@@ -669,7 +698,7 @@ static const yytype_int16 yytable[] =
        0,    43,    44,    45,    46,    47,    48,     0,    49,     0,
        0,     0,     0,     0,     0,     0,    50,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    51,    52,
-      53,     0,     0,     0,     0,    54,    55,     0,   237,    56,
+      53,     0,     0,     0,     0,    54,    55,     0,   313,    56,
       16,     0,    17,    18,    19,    20,    21,    22,    23,     0,
        0,     0,    24,    25,    26,    27,    28,     0,    29,    30,
       31,    32,    33,    34,     0,     0,     0,     0,    35,     0,
@@ -679,7 +708,7 @@ static const yytype_int16 yytable[] =
        0,    49,     0,     0,     0,     0,     0,     0,     0,    50,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
-       0,   249,    56,    16,     0,    17,    18,    19,    20,    21,
+       0,   315,    56,    16,     0,    17,    18,    19,    20,    21,
       22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
        0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
        0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -688,246 +717,247 @@ static const yytype_int16 yytable[] =
       46,    47,    48,     0,    49,     0,     0,     0,     0,     0,
        0,     0,    50,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    51,    52,    53,     0,     0,     0,
-       0,    54,    55,     0,   272,    56,    16,     0,    17,    18,
+       0,    54,    55,     0,   328,    56,    16,     0,    17,    18,
       19,    20,    21,    22,    23,     0,     0,     0,    24,    25,
       26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
        0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
       37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
       43,    44,    45,    46,    47,    48,     0,    49,     0,     0,
-       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,   313,    56,    16,
-       0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,     0,
-      49,     0,     0,     0,     0,     0,     0,     0,    50,     0,
+       0,   165,     0,     0,     0,    50,     0,     0,   166,   167,
+     168,   169,     0,     0,     0,     0,     0,    51,    52,    53,
+       0,     0,     0,     0,    54,    55,     0,     0,    56,   170,
+     171,   325,   172,   173,   174,   175,   176,   177,   178,     0,
+       0,     0,   165,   179,   180,   181,     0,     0,   182,   166,
+     167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      51,    52,    53,     0,     0,     0,     0,    54,    55,     0,
-     315,    56,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
-      35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
-      47,    48,     0,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,   328,    56,    16,     0,    17,    18,    19,
-      20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
-     409,     0,   411,     0,     0,   414,   415,    36,     0,    37,
-      38,    39,    40,    41,    42,     0,     0,   420,   421,    43,
-      44,    45,    46,    47,    48,   430,    49,     0,     0,     0,
-       0,     0,     0,     0,    50,   436,     0,     0,     0,   438,
-       0,     0,   165,     0,     0,     0,    51,    52,    53,   166,
-     167,   168,   169,    54,    55,     0,     0,    56,     0,   165,
-       0,     0,     0,   454,   455,     0,   166,   167,   168,   169,
-     170,   171,   325,   172,   173,   174,   175,   176,   177,   178,
-       0,     0,     0,     0,   179,   180,   181,   170,   171,   182,
-     172,   173,   174,   175,   176,   177,   178,     0,     0,     0,
-       0,   179,   180,   181,     0,     0,   182
+     170,   171,     0,   172,   173,   174,   175,   176,   177,   178,
+       0,     0,     0,     0,   179,   180,   181,     0,     0,   182
 };
 
 static const yytype_int16 yycheck[] =
 {
-      10,    11,    12,    15,     9,    12,   116,    42,   127,    12,
-     386,    16,   291,    15,     9,    50,    11,    11,   283,    12,
-      15,    19,    20,    21,    22,    23,     0,    25,    26,    24,
-     295,    41,   142,     9,    44,    11,    15,    16,    17,    12,
-      45,    74,     9,    81,    42,    43,    44,     9,   409,    11,
-      48,    56,   291,   429,   293,   294,     9,   340,     9,    20,
-      20,    21,    22,    23,   102,    25,    26,    20,    70,    20,
-      77,    78,    79,    11,    77,    78,    79,    12,   361,    20,
-      90,   116,    42,    43,    77,    78,    79,    97,    20,    87,
-     103,   101,   102,   454,    46,    47,    17,    18,    23,   134,
-     219,   103,   103,    97,    77,    78,    79,   142,   103,    12,
-      81,    32,   122,    20,   119,    36,    77,    78,    79,   358,
+      10,    11,    12,    15,     9,    91,   116,    42,   127,   386,
+     290,    16,    11,    15,     9,    50,    11,   407,    12,   295,
+      15,    19,    20,    21,    22,    23,    81,    25,    26,    24,
+       0,    41,   142,     9,    44,    11,    15,    16,    17,    11,
+      45,     9,    74,    11,    42,    43,    44,   102,     9,   361,
+      48,    56,    12,   430,    20,    21,    22,    23,   103,    25,
+      26,    77,    78,    79,   340,   455,   103,    20,    70,   290,
+     382,   292,   293,    26,   103,    12,    42,    43,    12,   103,
+      90,   116,    12,    77,    78,    79,   102,    97,   286,    87,
+     288,   101,   102,    20,    46,    47,    17,    18,    97,   134,
+     219,   103,     9,    23,    81,   191,    12,   142,   103,    12,
+     103,    32,   122,    20,   119,    36,     9,    77,    78,    79,
       41,   126,   127,    44,   103,    12,    47,   103,    49,   127,
-      51,    52,    53,    54,    55,    12,    77,    78,    79,   144,
-      82,   103,    77,    78,    79,    77,    78,    79,   103,    91,
-     389,     9,    23,   158,   159,   160,   103,   162,   163,   164,
-     439,   194,   195,   196,   197,   198,   199,   127,   201,   202,
-      77,    78,    79,    20,    77,    78,    79,   189,   183,   184,
+      51,    52,    53,    54,    55,   103,     9,   358,    11,   144,
+      77,    78,    79,    77,    78,    79,    23,    77,    78,    79,
+      77,    78,    79,   158,   159,   160,    23,   162,   163,   164,
+     440,   127,   194,   195,   196,   197,   198,   199,   389,   201,
+     202,    77,    78,    79,    77,    78,    79,   189,   183,   184,
      185,   186,   187,   188,   182,   220,    61,    62,    63,    64,
-      77,    78,    79,    20,     9,   205,    11,   307,   437,    26,
-      77,    78,    79,   208,   209,   210,   211,   212,   213,    20,
-     411,   330,   103,   103,   219,    90,    91,   103,   103,   420,
-     421,    96,    97,    98,   103,   230,   101,   232,   233,   430,
-      77,    78,    79,    96,    97,    98,   241,   438,   101,     9,
-     161,    11,    63,    64,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   292,
-     103,   266,   267,   287,   269,   289,    77,    78,    79,   279,
-      91,   103,   307,    48,   384,    96,    97,    98,     0,    20,
-     101,   286,   287,   288,   289,   103,   291,   103,   293,   294,
-      12,    26,   290,    77,    78,    79,   102,   102,    20,   309,
-      63,    77,    78,    79,   103,   338,    10,    73,   341,    11,
-      42,    43,    44,    45,    23,    23,   321,    49,   102,    51,
-      42,    43,    44,    45,    23,   330,   102,    49,    91,    51,
-     103,    73,    54,    96,    97,    98,    26,   102,   101,    61,
-      62,    63,    64,    10,   103,    77,    78,    79,    11,   384,
-      97,    98,    79,   358,   101,    77,    78,    79,    23,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-     102,    21,   382,    15,    96,    97,    98,   102,    26,   101,
-     102,    77,    78,    79,   389,   395,   391,    61,    62,    63,
-      64,   403,    10,    42,    43,    44,    45,    77,    78,    79,
-      49,    10,    51,    10,   325,    10,   102,    23,   418,   102,
-     422,   102,     9,    87,    88,    89,    90,    91,    15,   102,
-     102,   102,    96,    97,    98,   435,    23,   101,    77,    78,
-      79,    28,   437,     0,     1,   103,    20,   449,   102,    20,
-     102,    10,     9,   453,    11,   102,    13,    14,    15,    16,
-      17,    18,    19,    20,     9,   102,    23,    24,    25,    26,
-      27,    75,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    20,
-     102,    20,    49,    50,    51,    52,    53,    22,    55,    56,
-      57,    58,    59,    60,    77,    78,    79,   103,    65,    66,
-      67,    68,    69,    70,    71,    72,    77,    78,    79,    77,
-      78,    79,    74,    80,    77,    78,    79,   102,    12,   102,
-     102,    97,   391,   439,    35,    92,    93,    94,   204,     0,
-       1,   102,    99,   100,   102,   395,   103,   104,     9,   102,
-      11,    48,    13,    14,    15,    16,    17,    18,    19,    20,
-      48,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    -1,    -1,    -1,    49,    50,
-      51,    52,    53,    -1,    55,    56,    57,    58,    59,    60,
-      77,    78,    79,    -1,    65,    66,    67,    68,    69,    70,
-      71,    72,    77,    78,    79,    -1,    91,    -1,    -1,    80,
-      -1,    96,    97,    98,    -1,   102,   101,    -1,    -1,    -1,
-      -1,    92,    93,    94,    -1,    -1,     1,   102,    99,   100,
-      -1,    -1,   103,   104,     9,    10,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,    72,     3,     4,
-       5,     6,     7,     8,    -1,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
-      -1,    -1,     1,    -1,    99,   100,    -1,    -1,   103,   104,
-       9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    92,    93,    94,    -1,    -1,     1,    -1,
-      99,   100,    -1,    -1,   103,   104,     9,    10,    11,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      -1,    -1,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    94,    -1,    -1,     1,    -1,    99,   100,    -1,    -1,
-     103,   104,     9,    -1,    11,    -1,    13,    14,    15,    16,
-      17,    18,    19,    20,    -1,    -1,    23,    24,    25,    26,
-      27,    -1,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
-      -1,    -1,    49,    50,    51,    52,    53,    -1,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    75,    -1,
-      -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
-       1,    -1,    99,   100,    -1,    -1,   103,   104,     9,    -1,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    -1,    -1,    -1,    49,    50,
-      51,    52,    53,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
+      77,    78,    79,   103,     9,   205,    11,   307,     9,    77,
+      78,    79,   103,   208,   209,   210,   211,   212,   213,    20,
+      48,   330,   103,   103,   219,    90,    91,   438,    77,    78,
+      79,    96,    97,    98,   102,   230,   101,   232,   233,   103,
+      42,    43,    44,    45,   103,    20,   241,    49,    20,    51,
+     161,   103,   103,    20,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   291,
+     102,   266,   267,    26,   269,    77,    78,    79,   102,   279,
+      63,    64,   307,   103,   384,    20,    73,     0,    20,    63,
+     285,   286,   287,   288,    10,   290,    20,   292,   293,    12,
+     102,   289,    77,    78,    79,    11,    23,    20,    91,   309,
+      77,    78,    79,    96,    97,    98,   338,    91,   101,   341,
+      23,   103,    96,    97,    98,    23,   321,   101,    73,    42,
+      43,    44,    45,    97,    98,   330,    49,   101,    51,   102,
+      10,    54,    77,    78,    79,    77,    78,    79,    61,    62,
+      63,    64,    26,    77,    78,    79,    77,    78,    79,   384,
+      11,    79,   103,   358,    77,    78,    79,    21,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    23,
+     409,   102,    15,    96,    97,    98,    26,   102,   101,   102,
+      10,    10,   421,   422,   389,   395,   391,    10,    10,   401,
+     400,   388,   431,   390,   103,    23,   393,   394,   102,     9,
+     439,   102,   102,   102,   325,    15,   403,   404,   102,   419,
+     102,   423,    20,    23,   411,    77,    78,    79,    28,   102,
+      10,    77,    78,    79,   102,    20,   436,   424,     9,   102,
+      75,   428,    20,   438,     0,     1,   102,    20,   450,    74,
+     102,    12,    22,     9,   454,    11,   102,    13,    14,    15,
+      16,    17,    18,    19,    20,   452,   453,    23,    24,    25,
+      26,    27,   103,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      97,   102,   102,    49,    50,    51,    52,    53,    35,    55,
+      56,    57,    58,    59,    60,    77,    78,    79,   440,    65,
+      66,    67,    68,    69,    70,    71,    72,    77,    78,    79,
+      77,    78,    79,    48,    80,    77,    78,    79,   400,   391,
+     102,    48,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
+       0,     1,   102,    99,   100,   102,    -1,   103,   104,     9,
+     102,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    72,    96,    97,    98,    91,    -1,   101,    -1,
+      80,    96,    97,    98,    -1,    -1,   101,    -1,    -1,    -1,
+      -1,    -1,    92,    93,    94,    -1,    -1,     1,    -1,    99,
+     100,    -1,    -1,   103,   104,     9,    10,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,    72,     3,
+       4,     5,     6,     7,     8,    -1,    80,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,    -1,    -1,     1,    -1,    99,   100,    -1,    -1,   103,
+     104,     9,    10,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    -1,    -1,    23,    24,    25,    26,    27,
+      -1,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
+      -1,    49,    50,    51,    52,    53,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,     1,
+      -1,    99,   100,    -1,    -1,   103,   104,     9,    10,    11,
+      -1,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    -1,    -1,    -1,    49,    50,    51,
+      52,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    92,    93,    94,    -1,    -1,     1,    -1,    99,   100,
-      -1,    -1,   103,   104,     9,    -1,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    -1,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
-       1,    -1,    -1,    -1,    99,   100,    -1,    -1,   103,   104,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
-      31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    53,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
-      83,    72,    85,    86,    87,    88,    89,    90,    91,    80,
-      -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101,    -1,
-      -1,    92,    93,    94,     1,    -1,    -1,    -1,    99,   100,
-      -1,    -1,   103,    -1,    11,    -1,    13,    14,    15,    16,
+      92,    93,    94,    -1,    -1,     1,    -1,    99,   100,    -1,
+      -1,   103,   104,     9,    -1,    11,    -1,    13,    14,    15,
+      16,    17,    18,    19,    20,    -1,    -1,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    75,
+      -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
+      -1,     1,    -1,    99,   100,    -1,    -1,   103,   104,     9,
+      -1,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    92,    93,    94,    -1,    -1,     1,    -1,    99,
+     100,    -1,    -1,   103,   104,     9,    -1,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    35,    -1,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,     1,    -1,    -1,    -1,    99,   100,    -1,    -1,   103,
+     104,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    83,    72,    85,    86,    87,    88,    89,    90,    91,
+      80,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101,
+      -1,    -1,    92,    93,    94,     1,    -1,    -1,    -1,    99,
+     100,    -1,    -1,   103,    -1,    11,    -1,    13,    14,    15,
+      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    61,    62,    63,    64,    53,    -1,    55,
+      56,    57,    58,    59,    60,    -1,     0,    -1,    -1,    65,
+      66,    67,    68,    69,    70,     9,    72,    11,    12,    87,
+      88,    89,    90,    91,    80,    -1,    20,    -1,    96,    97,
+      98,    -1,    -1,   101,    -1,    -1,    92,    93,    94,    -1,
+      -1,    -1,    -1,    99,   100,    -1,   102,   103,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    -1,    51,    -1,    -1,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,
+      64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    78,    79,    -1,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    -1,    -1,
+      -1,    -1,    96,    97,    98,    -1,    -1,   101,   102,     9,
+      -1,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      -1,    -1,    -1,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    -1,    72,    85,    86,    87,    88,    89,    90,    91,
+      80,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101,
+      -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,
+     100,    -1,     9,   103,    11,    -1,    13,    14,    15,    16,
       17,    18,    19,    -1,    -1,    -1,    23,    24,    25,    26,
       27,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    61,    62,    63,    64,    -1,    53,    -1,    55,    56,
-      57,    58,    59,    60,    -1,     0,    -1,    -1,    65,    66,
-      67,    68,    69,    70,     9,    72,    11,    12,    88,    89,
-      90,    91,    -1,    80,    -1,    20,    96,    97,    98,    -1,
-      -1,   101,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
-      -1,    -1,    99,   100,    -1,   102,   103,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    -1,    51,    -1,    -1,    54,
-      -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    78,    79,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      -1,    96,    97,    98,    -1,    -1,   101,   102,     9,    -1,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    -1,
-      -1,    -1,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    53,    -1,    55,    56,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
-      -1,    72,    85,    86,    87,    88,    89,    90,    91,    80,
-      -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101,    -1,
-      -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,
-      -1,     9,   103,    11,    -1,    13,    14,    15,    16,    17,
-      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
-      68,    69,    70,    -1,    72,    -1,    89,    90,    91,    -1,
-      -1,    -1,    80,    96,    97,    98,    -1,    -1,   101,    -1,
-      -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,
-      -1,    99,   100,    -1,     9,   103,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    -1,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    61,    62,    63,    64,    -1,    -1,    -1,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    -1,    72,    -1,    -1,
-      90,    91,    -1,    -1,    -1,    80,    96,    97,    98,    -1,
-      -1,   101,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
-      -1,    -1,    -1,    -1,    99,   100,    -1,    -1,   103,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    61,    -1,    63,    64,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    -1,
-      72,    -1,    -1,    90,    91,    -1,    -1,    -1,    80,    96,
-      97,    98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
-      92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,
-      11,   103,    13,    14,    15,    16,    17,    18,    19,    20,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    61,
+      62,    63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,
+      67,    68,    69,    70,    -1,    72,    88,    89,    90,    91,
+      -1,    -1,    -1,    80,    96,    97,    98,    -1,    -1,   101,
+      -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,    -1,
+      -1,    -1,    99,   100,    -1,     9,   103,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    61,    62,    63,    64,    -1,    -1,    -1,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    -1,    72,    -1,
+      89,    90,    91,    -1,    -1,    -1,    80,    96,    97,    98,
+      -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,    -1,    -1,    -1,    -1,    99,   100,    -1,    -1,   103,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    -1,
       -1,    -1,    23,    24,    25,    26,    27,    -1,    29,    30,
       31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,
+      -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,    -1,
       -1,    -1,    53,    -1,    55,    56,    57,    58,    59,    60,
       -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
       -1,    72,    -1,    -1,    90,    91,    -1,    -1,    -1,    80,
       96,    97,    98,    -1,    -1,   101,    -1,    -1,    -1,    -1,
       -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,
       -1,    11,   103,    13,    14,    15,    16,    17,    18,    19,
+      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,    63,    64,
+      -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      70,    -1,    72,    -1,    -1,    90,    91,    -1,    -1,    -1,
+      80,    96,    97,    98,    -1,    -1,   101,    -1,    -1,    -1,
+      -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,    99,
+     100,    -1,    11,   103,    13,    14,    15,    16,    17,    18,
+      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,
+      64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    -1,    72,    -1,    -1,    90,    91,    -1,    -1,
+      -1,    80,    96,    97,    98,    -1,    -1,   101,    -1,    -1,
+      -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,
+      99,   100,    -1,   102,   103,    11,    -1,    13,    14,    15,
+      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
+      -1,    -1,    -1,    39,    42,    43,    44,    45,    -1,    -1,
+      -1,    49,    -1,    51,    -1,    -1,    -1,    53,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    -1,    72,    -1,    -1,    77,
+      78,    79,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,    -1,
+      -1,    -1,    -1,    99,   100,    -1,   102,   103,    11,    -1,
+      13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      -1,    -1,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,
+     103,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
       -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
       30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -980,42 +1010,15 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,
       55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
       65,    66,    67,    68,    69,    70,    -1,    72,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
-      -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,    11,
-      -1,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    54,    -1,    -1,    -1,    80,    -1,    -1,    61,    62,
+      63,    64,    -1,    -1,    -1,    -1,    -1,    92,    93,    94,
+      -1,    -1,    -1,    -1,    99,   100,    -1,    -1,   103,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    -1,
+      -1,    -1,    54,    96,    97,    98,    -1,    -1,   101,    61,
+      62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    -1,
-      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      92,    93,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,
-     102,   103,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-      69,    70,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    92,    93,    94,    -1,    -1,    -1,    -1,
-      99,   100,    -1,   102,   103,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
-      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-     388,    -1,   390,    -1,    -1,   393,   394,    53,    -1,    55,
-      56,    57,    58,    59,    60,    -1,    -1,   405,   406,    65,
-      66,    67,    68,    69,    70,   413,    72,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    80,   423,    -1,    -1,    -1,   427,
-      -1,    -1,    54,    -1,    -1,    -1,    92,    93,    94,    61,
-      62,    63,    64,    99,   100,    -1,    -1,   103,    -1,    54,
-      -1,    -1,    -1,   451,   452,    -1,    61,    62,    63,    64,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      -1,    -1,    -1,    -1,    96,    97,    98,    82,    83,   101,
-      85,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      -1,    96,    97,    98,    -1,    -1,   101
+      82,    83,    -1,    85,    86,    87,    88,    89,    90,    91,
+      -1,    -1,    -1,    -1,    96,    97,    98,    -1,    -1,   101
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1027,47 +1030,47 @@ static const yytype_uint8 yystos[] =
       16,    17,    18,    19,    23,    24,    25,    26,    27,    29,
       30,    31,    32,    33,    34,    39,    53,    55,    56,    57,
       58,    59,    60,    65,    66,    67,    68,    69,    70,    72,
-      80,    92,    93,    94,    99,   100,   103,   146,   147,   148,
-     151,   152,   153,   154,   155,   156,   158,   161,   163,   164,
-     165,   166,   167,   168,     9,   113,     1,    20,    35,    37,
+      80,    92,    93,    94,    99,   100,   103,   147,   148,   149,
+     152,   153,   154,   155,   156,   157,   159,   162,   164,   165,
+     166,   167,   168,   169,     9,   113,     1,    20,    35,    37,
       38,    40,    41,    42,    43,    44,    45,    49,    50,    51,
-      52,    71,   104,   113,   122,   127,   146,    36,   120,   121,
-     122,   118,   118,    12,   146,   156,   156,    23,    28,   113,
-     164,   169,   169,   169,   169,   169,   169,   169,   157,    11,
-     103,   156,   139,   139,   156,   103,   103,   103,   113,   156,
-      23,   147,   160,   164,   169,   169,    23,   113,   156,   164,
-      20,   146,    23,   156,   103,   159,   164,   165,   166,   156,
-     147,   156,   156,   156,   156,   156,   102,   146,    77,    78,
+      52,    71,   104,   113,   122,   128,   147,    36,   120,   121,
+     122,   118,   118,    12,   147,   157,   157,    23,    28,   113,
+     165,   170,   170,   170,   170,   170,   170,   170,   158,    11,
+     103,   157,   140,   140,   157,   103,   103,   103,   113,   157,
+      23,   148,   161,   165,   170,   170,    23,   113,   157,   165,
+      20,   147,    23,   157,   103,   160,   165,   166,   167,   157,
+     148,   157,   157,   157,   157,   157,   102,   147,    77,    78,
       79,    81,     9,    11,   103,    54,    61,    62,    63,    64,
       82,    83,    85,    86,    87,    88,    89,    90,    91,    96,
       97,    98,   101,   103,     9,    11,     9,    11,     9,   115,
-     140,   138,    23,   138,   103,   103,   103,   103,    70,   103,
-     164,   103,   103,   113,   138,    48,   129,    20,    42,    43,
-      44,    45,    49,    51,   121,   122,   120,    12,   160,   103,
-     103,   146,   102,   113,    26,   142,   102,   102,   146,   161,
-     169,   147,   103,   103,    10,    20,   160,   102,   146,    73,
-     144,    11,   102,   146,   146,   146,   156,   146,   146,   102,
-     146,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,     9,    11,    24,   103,
-     150,   164,   102,   146,   146,   146,   146,   146,   146,   118,
-      23,   137,    23,   141,    23,   123,   115,   115,   115,   115,
-     115,   115,   103,   115,   115,   141,   113,   146,   133,   146,
-     146,   146,   146,   146,   161,   147,    12,   149,    73,   143,
-     102,   102,   146,   102,   146,   102,   146,    10,   102,    26,
-     146,    11,    20,    12,   102,    84,   146,   146,   102,   146,
+     141,    23,    23,   139,   103,   103,   103,   103,    70,   103,
+     165,   103,   103,   113,   139,    48,   130,    20,    42,    43,
+      44,    45,    49,    51,   121,   122,   120,    12,   161,   103,
+     103,   147,   102,   113,    26,   143,   102,   102,   147,   162,
+     170,   148,   103,   103,    10,    20,   161,   102,   147,    73,
+     145,    11,   102,   147,   147,   147,   157,   147,   147,   102,
+     147,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   157,     9,    11,    24,   103,
+     151,   165,   102,   147,   147,   147,   147,   147,   147,   118,
+      23,   138,   139,    23,   124,   115,   115,   115,   115,   115,
+     115,   103,   115,   115,    23,   142,   113,   147,   134,   147,
+     147,   147,   147,   147,   162,   148,    12,   150,    73,   144,
+     102,   102,   147,   102,   147,   102,   147,    10,   102,    26,
+     147,    11,    20,    12,   102,    84,   147,   147,   102,   147,
      103,   102,    20,    12,    20,    12,    20,    10,    21,   114,
-     142,     9,    20,    23,   132,   146,   133,   134,   146,   133,
-     136,   162,   164,   127,   131,   134,   135,   146,   115,   134,
-     134,   142,   102,   102,   160,    26,   113,   102,   102,   102,
-      12,   146,    10,   156,    20,    12,   102,   161,    10,    10,
+     123,     9,    20,    23,   133,   147,   134,   135,   147,   134,
+     137,   163,   165,   128,   132,   135,   136,   147,   115,   135,
+     135,   143,   102,   102,   161,    26,   113,   102,   102,   102,
+      12,   147,    10,   157,    20,    12,   102,   162,    10,    10,
       10,   115,   143,   115,    23,   102,   102,   102,   102,   103,
-     102,    20,   134,   102,   102,   143,    12,    10,   102,    20,
-      20,   113,   145,   124,   160,   130,   130,     9,   116,   116,
-     134,   116,   132,   102,   116,   116,   145,    75,   118,    20,
-     116,   116,   117,    46,    47,   128,   128,   102,   129,    20,
-     116,   119,    10,   129,   129,   118,   116,   103,   116,   130,
-     129,    20,    26,   125,    10,   134,   129,   135,    22,    74,
-     126,   102,   102,   118,   116,   116,    75,   128
+     102,    20,   135,   102,   102,   144,    12,    10,   102,    20,
+     144,   125,   161,   131,   131,     9,   116,   116,   135,   116,
+     133,   102,   116,   116,    20,   113,   146,    75,   146,   118,
+      20,   116,   116,   117,    46,    47,   129,   129,   102,   130,
+      20,   116,   119,    10,   130,   130,   118,   116,   103,   116,
+     131,   130,    20,    26,   126,    10,   135,   130,   136,    22,
+      74,   127,   102,   102,   118,   116,   116,    75,   129
 };
 
 typedef enum {
@@ -1094,8 +1097,8 @@ static const toketypes yy_type_tab[] =
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_ival, toketype_opval,
   toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
   toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
   toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
   toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
@@ -1105,6 +1108,6 @@ static const toketypes yy_type_tab[] =
 };
 
 /* Generated from:
- * 580d1bac82838fb0ae1e092010e776fb247f0d4cb68834a166507fae86707700 perly.y
+ * 3e01d5213d0f6a4dd26b90cfb22baf8eaf3c89d8ae0025fdc9e06ec1f871e826 perly.y
  * 4a3ced51fe6585f6ec59e65e1ffd74bc976c498b0e6992eaab337219fee72e51 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index 04170b3..2634605 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -314,26 +314,36 @@ barestmt: PLUGSTMT
                              pad_add_anon(fmtcv, OP_NULL);
                          }
                        }
-       |       SUB startsub subname proto subattrlist subbody
+       |       SUB WORD startsub
+                       { const char *const name = SvPV_nolen_const(((SVOP*)$2)->op_sv);
+                         if (strEQ(name, "BEGIN") || strEQ(name, "END")
+                             || strEQ(name, "INIT") || strEQ(name, "CHECK")
+                             || strEQ(name, "UNITCHECK"))
+                             CvSPECIAL_on(PL_compcv);
+                         PL_parser->in_my = 0;
+                         PL_parser->in_my_stash = NULL;
+                       }
+               proto subattrlist subbody
                        {
                          SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          {
                              OP* o = newSVOP(OP_ANONCODE, 0,
-                               (SV*)newATTRSUB($2, $3, $4, $5, $6));
+                               (SV*)newATTRSUB($3, $2, $5, $6, $7));
                              $$ = newOP(OP_NULL,0);
                              op_getmad(o,$$,'&');
-                             op_getmad($3,$$,'n');
-                             op_getmad($4,$$,'s');
-                             op_getmad($5,$$,'a');
+                             op_getmad($2,$$,'n');
+                             op_getmad($5,$$,'s');
+                             op_getmad($6,$$,'a');
                              token_getmad($1,$$,'d');
-                             append_madprops($6->op_madprop, $$, 0);
-                             $6->op_madprop = 0;
+                             append_madprops($7->op_madprop, $$, 0);
+                             $7->op_madprop = 0;
                          }
 #else
-                         newATTRSUB($2, $3, $4, $5, $6);
+                         newATTRSUB($3, $2, $5, $6, $7);
                          $$ = (OP*)NULL;
 #endif
+                         intro_my();
                        }
        |       MYSUB startsub subname proto subattrlist subbody
                        {
diff --git a/toke.c b/toke.c
index 6437344..568e618 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -8234,7 +8234,7 @@ Perl_yylex(pTHX)
                    if (PL_madskills)
                        nametoke = newSVpvn_flags(s, d - s, SvUTF8(PL_linestr));
 #endif
-                   if (memchr(tmpbuf, ':', len))
+                   if (memchr(tmpbuf, ':', len) || key == KEY_our)
                        sv_setpvn(PL_subname, tmpbuf, len);
                    else {
                        sv_setsv(PL_subname,PL_curstname);
@@ -8246,12 +8246,13 @@ Perl_yylex(pTHX)
                    have_name = TRUE;
 
 #ifdef PERL_MAD
-
-                   start_force(0);
-                   CURMAD('X', nametoke);
-                   CURMAD('_', tmpwhite);
-                   (void) force_word(PL_oldbufptr + tboffset, WORD,
+                   if (key != KEY_our) {
+                       start_force(0);
+                       CURMAD('X', nametoke);
+                       CURMAD('_', tmpwhite);
+                       (void) force_word(PL_oldbufptr + tboffset, WORD,
                                      FALSE, TRUE, TRUE);
+                   }
 
                    s = SKIPSPACE2(d,tmpwhite);
 #else
@@ -8413,8 +8414,14 @@ Perl_yylex(pTHX)
                        sv_setpvs(PL_subname, "__ANON__::__ANON__");
                    TOKEN(ANONSUB);
                }
+               if (key == KEY_our) {
+                   PL_pending_ident = *PL_tokenbuf = '&';
+                   Copy(tmpbuf, PL_tokenbuf+1, len, char);
+                   PL_tokenbuf[len+1] = '\0';
+               }
 #ifndef PERL_MAD
-               (void) force_word(PL_oldbufptr + tboffset, WORD,
+               else
+                   (void) force_word(PL_oldbufptr + tboffset, WORD,
                                  FALSE, TRUE, TRUE);
 #endif
                if (key == KEY_my)
@@ -8648,6 +8655,7 @@ S_pending_ident(pTHX)
                     ),
                     ((PL_tokenbuf[0] == '$') ? SVt_PV
                      : (PL_tokenbuf[0] == '@') ? SVt_PVAV
+                     : (PL_tokenbuf[0] == '&') ? SVt_PVGV
                      : SVt_PVHV));
                 return WORD;
             }
@@ -8691,6 +8699,7 @@ S_pending_ident(pTHX)
                      | ( UTF ? SVf_UTF8 : 0 ),
                     ((PL_tokenbuf[0] == '$') ? SVt_PV
                      : (PL_tokenbuf[0] == '@') ? SVt_PVAV
+                     : (PL_tokenbuf[0] == '&') ? SVt_PVGV
                      : SVt_PVHV));
     return WORD;
 }