develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35089 - in trunk: compilers/imcc docs/pdds include/parrot src src/atomic src/pmc t/op

From:
infinoid
Date:
January 6, 2009 21:39
Subject:
[svn:parrot] r35089 - in trunk: compilers/imcc docs/pdds include/parrot src src/atomic src/pmc t/op
Message ID:
20090107053508.F394CCB9FA@x12.develooper.com
Author: infinoid
Date: Tue Jan  6 21:35:06 2009
New Revision: 35089

Added:
   trunk/t/op/annotate.t
Modified:
   trunk/compilers/imcc/imcc.l
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imclexer.c
   trunk/compilers/imcc/imcparser.c
   trunk/compilers/imcc/imcparser.h
   trunk/compilers/imcc/parser_util.c
   trunk/compilers/imcc/pbc.c
   trunk/include/parrot/packfile.h
   trunk/src/atomic/gcc_x86.c
   trunk/src/embed.c
   trunk/src/packfile.c
   trunk/src/pbc_merge.c
   trunk/src/pmc/exception.pmc

Changes in other areas also in this revision:
Modified:
   trunk/docs/pdds/pdd13_bytecode.pod
   trunk/docs/pdds/pdd19_pir.pod

Log:
Merge changes from bcanno branch back into trunk.

Modified: trunk/compilers/imcc/imcc.l
==============================================================================
--- trunk/compilers/imcc/imcc.l	(original)
+++ trunk/compilers/imcc/imcc.l	Tue Jan  6 21:35:06 2009
@@ -302,6 +302,7 @@
 
 <*>".line"               return TK_LINE;
 <*>".file"               return TK_FILE;
+<INITIAL,emit>".annotate" return ANNOTATE;
 <INITIAL,emit>".lex"     return LEXICAL;
 ".set_arg"               return ARG;
 ".sub"                   return SUB;

Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	(original)
+++ trunk/compilers/imcc/imcc.y	Tue Jan  6 21:35:06 2009
@@ -800,7 +800,7 @@
 %token <t> ADV_FLAT ADV_SLURPY ADV_OPTIONAL ADV_OPT_FLAG ADV_NAMED ADV_ARROW
 %token <t> NEW ADV_INVOCANT
 %token <t> NAMESPACE DOT_METHOD
-%token <t> SUB SYM LOCAL LEXICAL CONST
+%token <t> SUB SYM LOCAL LEXICAL CONST ANNOTATE
 %token <t> INC DEC GLOBAL_CONST
 %token <t> PLUS_ASSIGN MINUS_ASSIGN MUL_ASSIGN DIV_ASSIGN CONCAT_ASSIGN
 %token <t> BAND_ASSIGN BOR_ASSIGN BXOR_ASSIGN FDIV FDIV_ASSIGN MOD_ASSIGN
@@ -840,6 +840,7 @@
 %type <i> if_statement unless_statement
 %type <i> func_assign get_results
 %type <i> opt_invocant
+%type <i> annotate_directive
 %type <sr> target targetlist reg const var result pcc_set_yield
 %type <sr> keylist keylist_force _keylist key maybe_ns
 %type <sr> vars _vars var_or_i _var_or_i label_op sub_label_op sub_label_op_c
@@ -927,6 +928,17 @@
          }
    ;
 
+annotate_directive:
+    ANNOTATE STRINGC COMMA const
+        {
+          /* We'll want to store an entry while emitting instructions, so just
+           * store annotation like it's an instruction. */
+          SymReg * const key = mk_const(interp, $2, 'S');
+          $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, ".annotate", 2, key, $4);
+          mem_sys_free($2);
+        }
+    ;
+
 hll_def:
 
      HLL STRINGC
@@ -1558,6 +1570,7 @@
    | FILECOMMENT               { $$ = 0; }
    | LINECOMMENT               { $$ = 0; }
    | location_directive        { $$ = 0; }
+   | annotate_directive        { $$ = $1; }
    ;
 
 labels:

Modified: trunk/compilers/imcc/imclexer.c
==============================================================================
--- trunk/compilers/imcc/imclexer.c	(original)
+++ trunk/compilers/imcc/imclexer.c	Tue Jan  6 21:35:06 2009
@@ -368,8 +368,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 147
-#define YY_END_OF_BUFFER 148
+#define YY_NUM_RULES 148
+#define YY_END_OF_BUFFER 149
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -377,123 +377,124 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1047] =
+static yyconst flex_int16_t yy_accept[1055] =
     {   0,
         0,    0,    0,    0,    0,    0,   15,   15,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        3,    3,  148,  134,  133,   10,  133,  134,  134,   11,
-      134,  134,  134,  134,  134,  134,  114,  134,   94,  134,
-      118,  118,  134,   86,  134,   88,  132,  132,  132,  132,
-      132,  132,  132,  132,  134,  134,   13,  133,  133,  134,
-      134,  134,  134,  132,   13,  146,  141,  136,  141,  146,
-      146,  146,  146,  146,  118,  118,  146,  144,  144,  144,
-      140,  140,   13,   15,   16,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,  147,  134,    8,    8,
-
-      134,  134,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    5,  134,    9,  134,  134,  134,  134,  134,
-      118,  118,  134,  134,  134,  134,   12,  134,  134,  134,
-      134,  134,  118,  118,  134,  134,  134,  147,    1,  147,
-      147,  147,  147,  147,  118,  118,  147,  147,  147,    3,
+        3,    3,  149,  135,  134,   10,  134,  135,  135,   11,
+      135,  135,  135,  135,  135,  135,  115,  135,   95,  135,
+      119,  119,  135,   87,  135,   89,  133,  133,  133,  133,
+      133,  133,  133,  133,  135,  135,   13,  134,  134,  135,
+      135,  135,  135,  133,   13,  147,  142,  137,  142,  147,
+      147,  147,  147,  147,  119,  119,  147,  145,  145,  145,
+      141,  141,   13,   15,   16,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,  148,  135,    8,    8,
+
+      135,  135,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    5,  135,    9,  135,  135,  135,  135,  135,
+      119,  119,  135,  135,  135,  135,   12,  135,  135,  135,
+      135,  135,  119,  119,  135,  135,  135,  148,    1,  148,
+      148,  148,  148,  148,  119,  119,  148,  148,  148,    3,
         2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,  133,    0,   10,   91,    0,  123,    0,  130,  130,
-      130,  130,  130,   99,   83,  102,    0,   92,   97,    0,
-      118,   95,   96,  117,  108,  116,  116,  116,  116,  116,
-      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
+        3,  134,    0,   10,   92,    0,  124,    0,  131,  131,
+      131,  131,  131,  100,   84,  103,    0,   93,   98,    0,
+      119,   96,   97,  118,  109,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
 
-      116,  100,   98,  117,    0,    0,  122,    0,    0,    0,
+      117,  117,  101,   99,  118,    0,    0,  123,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       80,   87,   90,   62,   89,   81,  113,    0,  132,  115,
-      131,  132,   72,  132,  132,  132,  132,  132,  132,  132,
-      103,   84,  104,   85,  133,  116,  116,  116,  116,  116,
-      116,    0,    0,    0,    0,  141,  136,  141,    0,    0,
-        0,  145,  145,  145,  145,  144,    0,  142,  144,  140,
-      140,   15,   16,   15,   15,   15,   15,   15,   15,   15,
+        0,   81,   88,   91,   63,   90,   82,  114,    0,  133,
+      116,  132,  133,   73,  133,  133,  133,  133,  133,  133,
+      133,  104,   85,  105,   86,  134,  117,  117,  117,  117,
+      117,  117,    0,    0,    0,    0,  142,  137,  142,    0,
+        0,    0,  146,  146,  146,  146,  145,    0,  143,  145,
+      141,  141,   15,   16,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,    0,    0,    8,    0,    4,    4,    4,
+       15,   15,   15,   15,    0,    0,    8,    0,    4,    4,
 
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    0,    9,    0,    0,    0,
-      123,    0,    0,    0,    0,  118,  117,    0,    0,  117,
-        0,    0,  122,    0,    0,    0,    0,    0,    0,    0,
-       12,    0,    0,    0,  123,    0,    0,    0,    0,  118,
-      117,    0,    0,  117,    0,    0,  122,    0,    0,    0,
-        0,    0,    0,    0,    1,    0,    0,    0,  123,    0,
-        0,    0,    0,  118,  117,    0,    0,  117,    0,    0,
-      122,    0,    0,    0,    0,    0,    0,    3,    2,    3,
+        4,    4,    4,    4,    4,    4,    0,    9,    0,    0,
+        0,  124,    0,    0,    0,    0,  119,  118,    0,    0,
+      118,    0,    0,  123,    0,    0,    0,    0,    0,    0,
+        0,   12,    0,    0,    0,  124,    0,    0,    0,    0,
+      119,  118,    0,    0,  118,    0,    0,  123,    0,    0,
+        0,    0,    0,    0,    0,    1,    0,    0,    0,  124,
+        0,    0,    0,    0,  119,  118,    0,    0,  118,    0,
+        0,  123,    0,    0,    0,    0,    0,    0,    3,    2,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
 
-        3,    3,    3,    3,    3,    3,    3,    3,   93,  126,
-      127,  129,  128,    0,  116,  116,  116,  116,  116,  116,
-      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
-      116,  116,  116,  116,  116,  116,  116,  116,  101,  117,
-      120,    0,  117,  121,  119,    0,    0,    0,    0,    0,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,   94,
+      127,  128,  130,  129,    0,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      102,  118,  121,    0,  118,  122,  120,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  106,  105,   82,  112,    0,
-        0,  131,  132,   75,   77,  132,   76,   78,  132,  132,
-      132,  116,  116,    0,    0,  137,  143,  139,  145,  145,
-      145,  145,  145,  144,   15,   15,   15,   15,   15,   15,
+        0,    0,    0,    0,    0,    0,    0,  107,  106,   83,
+      113,    0,    0,  132,  133,   76,   78,  133,   77,   79,
+      133,  133,  133,  117,  117,    0,    0,  138,  144,  140,
+      146,  146,  146,  146,  146,  145,   15,   15,   15,   15,
 
-       15,   15,   15,   15,   15,   15,   15,   15,   15,    0,
-        0,    0,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    0,    0,    0,  117,  120,    0,
-      117,  121,  119,    0,    0,    0,    0,    0,    0,    0,
-        0,  117,  120,    0,  117,  121,  119,    0,    0,    0,
-        0,    0,    0,    0,    0,  117,  120,    0,  117,  121,
-      119,    0,    0,    0,    0,    0,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        0,  117,   65,  116,  116,  116,   22,  116,  116,  116,
-      116,  116,   19,  116,  116,  116,  116,  116,  116,  116,
-
-      116,  116,  116,  116,   21,  116,  116,    0,    0,    0,
-        0,    0,    0,   43,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  124,    0,
-        0,  107,    0,  125,    0,    0,    0,   71,   74,  132,
-      132,  132,  132,  139,  145,  145,  145,  145,  144,  144,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,    0,    0,    0,    0,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        0,  117,    0,    0,    0,    0,  124,    0,    0,    0,
-        0,    0,  125,    0,    0,    0,    0,    0,    0,  117,
+       15,    0,    0,    0,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    0,    0,    0,  118,
+      121,    0,  118,  122,  120,    0,    0,    0,    0,    0,
+        0,    0,    0,  118,  121,    0,  118,  122,  120,    0,
+        0,    0,    0,    0,    0,    0,    0,  118,  121,    0,
+      118,  122,  120,    0,    0,    0,    0,    0,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    0,  118,   66,  117,  117,  117,  117,   23,
+      117,  117,  117,  117,  117,   20,  117,  117,  117,  117,
 
-        0,    0,    0,    0,  124,    0,    0,    0,    0,    0,
-      125,    0,    0,    0,    0,    0,    0,  117,    0,    0,
-        0,    0,  124,    0,    0,    0,    0,    0,  125,    0,
-        0,    0,    0,    0,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,  116,
-      116,   25,  116,  116,   18,  116,  116,  116,  116,   17,
-      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
-      116,  116,   41,   57,    0,   38,    0,    0,   37,   36,
+      117,  117,  117,  117,  117,  117,  117,   22,  117,  117,
+        0,    0,    0,    0,    0,    0,   44,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  132,  132,  132,  132,  135,   18,  145,   17,
-
-      144,  144,   15,   15,   15,   15,   14,   15,   18,   17,
-        0,    0,    4,    4,    4,    4,   18,   17,    0,    0,
-       18,   17,    0,    0,   18,   17,    0,    0,    3,    3,
-        3,    3,  116,  116,   68,  116,  116,  116,  116,  116,
-      116,  116,  116,   67,  110,  116,  116,  116,   70,  116,
-      116,  116,  116,  116,  116,   51,    0,    0,    0,    0,
-       35,   61,    0,    0,    0,   42,    0,    0,   48,    0,
-        0,  132,  132,   79,   73,  145,  144,  144,   15,   15,
-        0,    0,    4,    4,    0,    0,    0,    0,    0,    0,
-        3,    3,  116,  116,  116,  116,  116,  116,  116,  116,
-
-      116,  116,  116,  116,  116,  116,  116,   53,  116,  116,
-      116,  116,    0,    0,    0,   34,    0,    0,    0,    0,
-       58,    0,   44,  132,  132,  138,  144,  144,   15,   15,
-        0,    0,    4,    4,    0,    0,    0,    0,    0,    0,
-        3,    3,   66,  116,  116,  116,  116,  116,  116,  116,
-      116,  111,  116,   56,  116,  116,  116,  116,   29,   20,
-      116,  116,  116,    0,    0,    0,   45,    0,    0,    0,
-        0,    0,    7,   15,    7,    4,    4,    0,    7,    0,
-        7,    0,    7,    3,    3,  116,  116,  116,   24,  116,
-      116,  116,  116,   28,  116,  116,  116,   26,  116,  116,
-
-       55,    0,    0,   63,   60,   59,   40,    0,    6,    6,
-        6,    6,    6,    3,  116,  116,  116,  116,   33,  116,
-      116,  116,   27,   64,  116,   52,   39,    0,    0,   23,
-      116,  116,   31,   49,  116,  116,   54,   47,   46,  116,
-       32,   50,   69,  109,   30,    0
+        0,  125,    0,    0,  108,    0,  126,    0,    0,    0,
+       72,   75,  133,  133,  133,  133,  140,  146,  146,  146,
+      146,  145,  145,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,    0,
+        0,    0,    0,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    0,  118,    0,    0,    0,    0,  125,
+        0,    0,    0,    0,    0,  126,    0,    0,    0,    0,
+
+        0,    0,  118,    0,    0,    0,    0,  125,    0,    0,
+        0,    0,    0,  126,    0,    0,    0,    0,    0,    0,
+      118,    0,    0,    0,    0,  125,    0,    0,    0,    0,
+        0,  126,    0,    0,    0,    0,    0,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,  117,  117,  117,   26,  117,  117,   18,  117,
+      117,  117,  117,   17,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,   42,   58,    0,   39,
+        0,    0,   38,   37,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  133,  133,  133,  133,
+
+      136,   18,  146,   17,  145,  145,   15,   15,   15,   15,
+       14,   15,   18,   17,    0,    0,    4,    4,    4,    4,
+       18,   17,    0,    0,   18,   17,    0,    0,   18,   17,
+        0,    0,    3,    3,    3,    3,  117,  117,  117,   69,
+      117,  117,  117,  117,  117,  117,  117,  117,   68,  111,
+      117,  117,  117,   71,  117,  117,  117,  117,  117,  117,
+       52,    0,    0,    0,    0,   36,   62,    0,    0,    0,
+       43,    0,    0,   49,    0,    0,  133,  133,   80,   74,
+      146,  145,  145,   15,   15,    0,    0,    4,    4,    0,
+        0,    0,    0,    0,    0,    3,    3,  117,  117,  117,
+
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,   54,  117,  117,  117,  117,    0,    0,
+        0,   35,    0,    0,    0,    0,   59,    0,   45,  133,
+      133,  139,  145,  145,   15,   15,    0,    0,    4,    4,
+        0,    0,    0,    0,    0,    0,    3,    3,   67,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  112,  117,
+       57,  117,  117,  117,  117,   30,   21,  117,  117,  117,
+        0,    0,    0,   46,    0,    0,    0,    0,    0,    7,
+       15,    7,    4,    4,    0,    7,    0,    7,    0,    7,
+        3,    3,   19,  117,  117,  117,   25,  117,  117,  117,
+
+      117,   29,  117,  117,  117,   27,  117,  117,   56,    0,
+        0,   64,   61,   60,   41,    0,    6,    6,    6,    6,
+        6,    3,  117,  117,  117,  117,   34,  117,  117,  117,
+       28,   65,  117,   53,   40,    0,    0,   24,  117,  117,
+       32,   50,  117,  117,   55,   48,   47,  117,   33,   51,
+       70,  110,   31,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -539,278 +540,280 @@
        10,   10,   10,   10,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1204] =
+static yyconst flex_int16_t yy_base[1212] =
     {   0,
-        0, 4200,   65, 4199,  131,   82,  197, 4198,  263,    0,
+        0, 4277,   65, 4276,  131,   82,  197, 4275,  263,    0,
       329,    0,   73,   78,  395,    0,  461,    0,  527,    0,
-      593,    0, 4222, 7506,   99, 7506,  107, 4196,   65, 7506,
-       84, 4195,  103, 4207,   83,  643, 7506,  650,  657,  648,
+      593,    0, 4299, 7506,   99, 7506,  107, 4273,   65, 7506,
+       84, 4272,  103, 4214,   83,  643, 7506,  650,  657,  648,
       705,  733,  738,   49,  101,  655,  714,  753,  724,  748,
       761,  788,  793,  733,  718,  672,  703,  756,  810,  803,
-      828,  776, 4194,  827, 7506, 7506,  830, 7506,  842,  725,
-      821, 4205,  843,  848,    0,  881, 4192,  771,  897,  859,
-      886,  904, 7506,    0, 7506, 4212,  798, 4202,  904,  909,
-      944,  904, 4189, 1007, 1073, 4168, 7506,  930,  915, 1018,
+      828,  776, 4201,  827, 7506, 7506,  830, 7506,  842,  725,
+      821, 4212,  843,  848,    0,  881, 4199,  771,  897,  859,
+      886,  904, 7506,    0, 7506, 4219,  798, 4209,  904,  909,
+      944,  904, 4196, 1007, 1073, 4175, 7506,  930,  915, 1018,
 
-     4188,   83,    0,    0,  941,  972,  949, 1123,  943, 4186,
+     4195,   83,    0,    0,  941,  972,  949, 1123,  943, 4193,
      1186, 1252,  801,  742, 7506,  778,  935,  942, 1024, 1090,
      1316, 1092,  981, 1379, 1445,  845, 7506,  893, 1052,  998,
      1046, 1103, 1509, 1122, 1112, 1572, 1638, 1000, 7506, 1050,
      1123, 1057, 1202, 1280, 1702, 1139, 1204, 1765, 1831,    0,
-     7506, 4206,  844, 4196, 1083, 1194, 1881, 1196, 4183, 1944,
+     7506, 4213,  844, 4203, 1083, 1194, 1881, 1196, 4190, 1944,
      2010, 1225, 1168, 7506, 7506,  870, 7506,    0,    0, 1227,
-     1252, 1260, 1266, 7506, 7506, 7506, 4194, 7506, 7506, 1274,
-     1294, 7506, 7506, 1379, 7506,    0, 4171, 4158,  934, 4150,
-     4151,  685, 4147, 1110,  764,  775,  870, 4153,  895, 4156,
-
-     4147, 4171, 7506, 1391, 1038, 1344, 7506, 1113,    0, 4142,
-     4143, 1018,  980, 1261, 1059,  806, 4139,   17, 4139, 4132,
-     1297, 7506, 7506, 7506, 7506, 1122, 4167, 4166, 1158, 4177,
-     1352, 1406, 1316, 1407, 1333, 1325, 1417, 1408, 1418, 1463,
-     7506, 7506, 7506, 7506, 1229, 4129, 4129, 1190, 4139, 4136,
-     4112, 1127, 4097, 4094,  950, 1478, 7506, 1485, 4130, 1473,
-        0,    0, 4099, 4101, 1247, 1013, 4143, 1481, 1419, 1503,
-     1513,    0, 7506, 1055,    0,    0, 4137, 1500, 1583, 1514,
-     4098, 4097, 1588, 1164, 1537,    0, 1387, 2058, 1231, 2105,
-     2171, 2237, 4086, 4092, 4091, 1649,  936,    0, 1520,    0,
-
-     1545, 1655, 1672, 4090, 4089, 1707, 1198, 1600,    0, 1521,
-     2285, 1298, 2332, 2398, 2464, 1287, 7506, 1326, 1620, 1693,
-     1340, 1350, 1558, 1589, 1695, 2528, 1781, 1521, 1565, 1848,
-     1731, 1793, 1435, 1739, 2572, 1813, 2619, 2685, 2751, 1470,
-     7506, 1473, 1704, 1706, 1495, 1543, 1655, 1678, 1860, 2815,
-     1886, 1736, 1758, 1960, 1855, 1909, 1546, 1918, 2859, 1880,
-     2906, 2972, 3038, 1622, 7506, 1627, 1869, 1968, 1629, 1632,
-     1751, 1930, 1973, 3102, 1983, 1815, 1915, 2027, 2034, 2048,
-     1683, 2039, 3146, 2078, 3193, 3259, 3325,    0, 7506, 1786,
-        0,    0, 4126, 1802, 2116, 2121, 4083, 4082, 2237, 1775,
-
-     2075,    0, 1841, 3373, 1587, 3420, 3486, 3552, 1994, 2105,
-     2133, 2137, 2144, 2250,    0, 4097, 4082, 4078, 4075, 4082,
-     4075, 4066, 4070, 1176, 4060, 4069, 1076, 4077, 4061, 3997,
-     3998, 3990, 4002, 3986, 3985, 4000, 3992, 3995, 7506, 2254,
-     1779, 2259, 2266, 2020,    0, 3986, 3997, 3986, 1939, 3974,
-     3994, 3985, 3975, 3982, 3980, 3985, 3971, 3970, 3970, 3967,
-     3983, 3974, 3981, 1846, 4010, 7506, 7506, 3996, 7506, 1859,
-     3997, 2285, 2300, 2301, 2302, 2343, 2303, 2344, 2475, 2477,
-     2487, 3975, 3976, 3967, 3993, 7506, 2270,    0,    0, 3970,
-     3963, 3970, 3959, 2345, 2355, 3956, 3953, 2343, 1809, 2359,
-
-     2363, 2128, 3600, 1886, 3993, 1907, 3647, 3713, 3945, 3950,
-     3926, 1300, 2492, 3927, 3924, 2498, 1921, 2515, 2519, 2278,
-     3761, 1971, 3808, 3874, 2549, 2041, 2068, 2635, 2553, 2563,
-     2576, 2584, 3938, 2606, 2062, 2775, 3985, 4051, 2647, 2491,
-     2317, 2767, 2780, 2801, 2805, 2827, 4115, 2789, 2157, 2799,
-     4162, 4228, 2837, 2556, 2498, 2922, 2851, 2863, 2871, 2930,
-     4292, 3062, 2383, 3067, 4339, 4405, 2656, 3925, 3922, 2917,
-     2064, 2875, 2934, 2628, 4453, 2092, 3962, 2476, 4500, 4566,
-     2938, 2945, 3932, 3922, 3920, 3912, 3928, 3919, 3923, 3920,
-     3911, 3907,    0, 3910, 3910, 3912, 3896, 3903, 3905, 3909,
-
-     3907, 3907, 3887, 3905,    0, 3894, 3893, 3890, 3822, 3826,
-     3812, 3811, 3815, 7506, 3823, 3814, 3817, 3806, 3818, 3810,
-      633, 3816, 3802, 3803, 3809, 3802, 3814, 2485, 7506,    0,
-     3844, 7506, 2514, 7506,    0, 3832, 3847, 3059, 3063, 3064,
-     3067, 3072, 3068,    0, 3801, 3806, 3805, 3804, 2757, 2778,
-     3038, 3079, 3803, 3801, 2571,    0,    0, 3834, 2601,    0,
-        0, 4632, 3838, 4698, 4764, 2387, 3798, 3797, 1697, 1702,
-     3089, 3108, 3796, 3795, 2574,    0, 4830, 3833, 4896, 4962,
-     3134, 3138, 2840, 2924, 3140, 3174, 2586, 2649, 2670, 2861,
-     3180, 3349, 2676, 2808, 5028, 2865, 5094, 3789, 3142, 3209,
-
-     3089, 3136, 3356, 3364, 2873, 2895, 3167, 3220, 3366, 3371,
-     2958, 3109, 5160, 3218, 5226, 3788, 3223, 3231, 3169, 3341,
-     3373, 3444, 3112, 3130, 3234, 3236, 3449, 3576, 3148, 3182,
-     5292, 3351, 5358, 3787, 3235, 3378, 3790, 3789, 2774,    0,
-        0, 3818, 3078,    0,    0, 5424, 3822, 5490, 5556, 3776,
-     3774,    0, 3765, 3322,    0, 3758, 3760, 3741, 3756,    0,
-     3748, 3747, 3743, 3755, 3737, 3750, 3741, 3734, 3731, 3397,
-     3743, 3741, 7506, 7506, 3740, 7506, 3742, 3672, 7506, 7506,
-     3657, 3660, 3664, 3649, 3660, 3652, 3648, 3660, 3648, 3657,
-     3641, 3649, 3572, 3573, 3577, 3575,    0,    0, 3643,    0,
-
-     1741, 1920,    0,    0, 5622, 5688, 7506, 3679, 7506, 7506,
-      881, 2040,    0,    0, 5754, 5820, 3343, 3358, 5886, 1255,
-     3378, 3404, 3359,  750, 3437, 3446, 3407, 1538,    0,    0,
-     3412, 1604, 3639, 3609,    0, 3599, 3593, 3584, 3585, 3564,
-     3569, 3561, 3549,    0, 3544, 3530, 3500, 3428,    0, 3395,
-     3389, 3357, 3366, 3355, 3346,    0, 3335, 3330, 3330, 3319,
-     7506, 7506, 3300, 3290, 3188, 7506, 3182, 3145, 7506, 3123,
-     3085, 3578, 3581, 3450, 3455, 3463, 3586, 3589, 1390, 1627,
-     1642, 1758, 1842, 2553, 1560, 2088, 1368, 1382, 1760, 2459,
-     2612, 2614, 3065, 3619, 3038, 3008, 3008, 2911, 2904, 2894,
-
-     2882, 2879, 2816, 2800, 2796, 2782, 2755,    0, 2747, 2731,
-     2739, 2721, 2725, 2627, 2587, 7506, 2497, 2504, 2501, 2472,
-     7506, 2458, 7506, 3669, 3670, 3470, 3661, 3675, 2002, 2502,
-     1707, 2492, 2559, 2630, 2093, 3418, 1307, 1459, 2343, 2895,
-     3431, 3563,    0, 2443, 2434, 2421, 2337, 2291, 2288, 2262,
-     2241,    0, 2223,    0, 2214, 2214, 2209, 2189,    0,    0,
-     2114, 2117, 2057, 2002, 1986, 1967, 7506, 1953, 1940, 1933,
-     1928, 1362, 1961, 2845, 1955, 3089, 1899, 3603, 3568, 3633,
-     3664, 3692, 3685, 3242, 1886, 1834, 1791, 1801,    0, 1730,
-     1704, 1577, 1501,    0, 1484, 1433, 1374,    0, 1321, 1281,
-
-        0, 1222, 1117, 7506, 7506, 7506, 7506, 1103, 7506,    0,
-     3473, 3476, 3479,    0, 1078, 1054, 1057, 1036,    0, 1017,
-      993,  984,    0,    0,  970,    0, 7506,  952,  874,    0,
-      836,  810,    0,  784,  707,  602,    0, 7506, 7506,   49,
-        0,    0,    0,    0,    0, 7506, 5952, 5958, 5968, 5976,
-     5980, 5988, 5995, 6006, 6017, 6028, 6039, 6046, 6057, 6068,
-     6079, 6090, 6101, 6112, 6123, 6134, 6145, 6156, 6167, 6178,
-     6189, 6200, 6211, 6222, 6233, 6244, 6255, 6261, 6271, 6277,
-     6283, 6288, 6296, 6305, 6311, 6315, 6321, 6328, 6339, 6350,
-     6361, 6372, 6383, 6394, 6405, 6416, 6427, 6438, 6449, 6460,
-
-     6471, 6482, 6493, 6504, 6515, 6526, 6537, 6548, 6559, 6570,
-     6581, 6587, 6592, 6598, 6607, 6618, 6629, 6636, 6644, 6650,
-     6656, 6662, 6669, 6680, 6691, 6702, 6713, 6724, 6731, 6742,
-     6753, 6764, 6775, 6786, 6797, 6808, 6819, 6830, 6841, 6852,
-     6863, 6874, 6885, 6896, 6907, 6918, 6929, 6940, 6951, 6962,
-     6973, 6984, 6990, 7001, 7012, 7023, 7030, 7038, 7044, 7050,
-     7057, 7068, 7079, 7090, 7101, 7112, 7123, 7130, 7141, 7152,
-     7163, 7174, 7185, 7196, 7207, 7218, 7229, 7240, 7251, 7262,
-     7273, 7284, 7295, 7306, 7317, 7328, 7339, 7350, 7361, 7372,
-     7383, 7394, 7405, 7411, 7419, 7425, 7432, 7443, 7454, 7461,
+     1252, 1260, 1266, 7506, 7506, 7506, 4201, 7506, 7506, 1274,
+     1294, 7506, 7506, 1379, 7506,    0, 4178, 4158, 4164,  934,
+     4156, 4158,  685, 4154, 1110,  764,  775,  870, 4160,  895,
+
+     4163, 4154, 4178, 7506, 1391, 1038, 1344, 7506, 1113,    0,
+     4148, 4149, 1018,  980, 1261, 1059,  806, 4145,   17, 4145,
+     4138, 1297, 7506, 7506, 7506, 7506, 1122, 4173, 4172, 1158,
+     4187, 1352, 1406, 1316, 1407, 1333, 1325, 1417, 1408, 1418,
+     1463, 7506, 7506, 7506, 7506, 1229, 4139, 4139, 1190, 4149,
+     4148, 4145, 1127, 4126, 4123,  950, 1478, 7506, 1485, 4159,
+     1473,    0,    0, 4128, 4128, 1247, 1013, 4149, 1481, 1419,
+     1503, 1513,    0, 7506, 1055,    0,    0, 4143, 1500, 1583,
+     1514, 4104, 4103, 1588, 1164, 1537,    0, 1387, 2058, 1231,
+     2105, 2171, 2237, 4092, 4101, 4100, 1649,  936,    0, 1520,
+
+        0, 1545, 1655, 1672, 4099, 4098, 1707, 1198, 1600,    0,
+     1521, 2285, 1298, 2332, 2398, 2464, 1287, 7506, 1326, 1620,
+     1693, 1340, 1350, 1558, 1589, 1695, 2528, 1781, 1521, 1565,
+     1848, 1731, 1793, 1435, 1739, 2572, 1813, 2619, 2685, 2751,
+     1470, 7506, 1473, 1704, 1706, 1495, 1543, 1655, 1678, 1860,
+     2815, 1886, 1736, 1758, 1960, 1855, 1909, 1546, 1918, 2859,
+     1880, 2906, 2972, 3038, 1622, 7506, 1627, 1869, 1968, 1629,
+     1632, 1751, 1930, 1973, 3102, 1983, 1815, 1915, 2027, 2034,
+     2048, 1683, 2039, 3146, 2078, 3193, 3259, 3325,    0, 7506,
+     1786,    0,    0, 4135, 1802, 2116, 2121, 4096, 4092, 2237,
+
+     1775, 2075,    0, 1841, 3373, 1587, 3420, 3486, 3552, 1994,
+     2105, 2133, 2137, 2144, 2250,    0, 4107, 4087, 4091, 4087,
+     4080, 4087, 4080, 4071, 4075, 1176, 4065, 4074, 1076, 4082,
+     4066, 4072, 4073, 4065, 4077, 4061, 3990, 4005, 3997, 4000,
+     7506, 2254, 1779, 2259, 2266, 2020,    0, 3991, 4002, 3991,
+     1939, 3979, 3999, 3990, 3980, 3987, 3985, 3990, 3976, 3975,
+     3975, 3972, 3988, 3980, 3987, 1846, 4016, 7506, 7506, 4002,
+     7506, 1859, 4003, 2285, 2300, 2301, 2302, 2343, 2303, 2344,
+     2475, 2477, 2487, 3980, 3981, 3972, 3998, 7506, 2270,    0,
+        0, 3975, 3968, 3975, 3964, 2345, 2355, 3965, 3962, 2343,
+
+     1809, 2359, 2363, 2128, 3600, 1886, 4002, 1907, 3647, 3713,
+     3954, 3961, 3954, 1300, 2492, 3955, 3952, 2498, 1921, 2515,
+     2519, 2278, 3761, 1971, 3808, 3874, 2549, 2041, 2068, 2635,
+     2553, 2563, 2576, 2584, 3938, 2606, 2062, 2775, 3985, 4051,
+     2647, 2491, 2317, 2767, 2780, 2801, 2805, 2827, 4115, 2789,
+     2157, 2799, 4162, 4228, 2837, 2556, 2498, 2922, 2851, 2863,
+     2871, 2930, 4292, 3062, 2383, 3067, 4339, 4405, 2656, 3953,
+     3948, 2917, 2064, 2875, 2934, 2628, 4453, 2092, 3967, 2476,
+     4500, 4566, 2938, 2945, 3937, 3923, 3926, 3924, 3916, 3932,
+     3926, 3930, 3927, 3918, 3911,    0, 3918, 3918, 3920, 3904,
+
+     3907, 3909, 3913, 3911, 3911, 3891, 3909,    0, 3898, 3897,
+     3894, 3887, 3899, 3885, 3884, 3827, 7506, 3827, 3818, 3821,
+     3810, 3822, 3814,  633, 3820, 3806, 3807, 3813, 3806, 3818,
+     2485, 7506,    0, 3848, 7506, 2514, 7506,    0, 3836, 3851,
+     3059, 3063, 3064, 3067, 3072, 3068,    0, 3805, 3810, 3809,
+     3808, 2757, 2778, 3038, 3079, 3807, 3806, 2571,    0,    0,
+     3839, 2601,    0,    0, 4632, 3843, 4698, 4764, 2387, 3803,
+     3801, 1697, 1702, 3089, 3108, 3800, 3799, 2574,    0, 4830,
+     3837, 4896, 4962, 3134, 3138, 2840, 2924, 3140, 3174, 2586,
+     2649, 2670, 2861, 3180, 3349, 2676, 2808, 5028, 2865, 5094,
+
+     3793, 3142, 3209, 3089, 3136, 3356, 3364, 2873, 2895, 3167,
+     3220, 3366, 3371, 2958, 3109, 5160, 3218, 5226, 3792, 3223,
+     3231, 3169, 3341, 3373, 3444, 3112, 3130, 3234, 3236, 3449,
+     3576, 3148, 3182, 5292, 3351, 5358, 3791, 3235, 3378, 3794,
+     3793, 2774,    0,    0, 3826, 3078,    0,    0, 5424, 3830,
+     5490, 5556, 3784, 3776, 3777,    0, 3770, 3322,    0, 3771,
+     3785, 3764, 3771,    0, 3751, 3750, 3746, 3758, 3740, 3753,
+     3744, 3737, 3737, 3397, 3749, 3747, 7506, 7506, 3743, 7506,
+     3745, 3742, 7506, 7506, 3731, 3734, 3671, 3652, 3663, 3655,
+     3651, 3663, 3651, 3660, 3644, 3652, 3572, 3573, 3577, 3575,
+
+        0,    0, 3651,    0, 1741, 1920,    0,    0, 5622, 5688,
+     7506, 3698, 7506, 7506,  881, 2040,    0,    0, 5754, 5820,
+     3343, 3358, 5886, 1255, 3378, 3404, 3359,  750, 3437, 3446,
+     3407, 1538,    0,    0, 3412, 1604, 3658, 3652, 3641,    0,
+     3639, 3604, 3591, 3593, 3583, 3586, 3573, 3564,    0, 3562,
+     3555, 3530, 3532,    0, 3495, 3417, 3398, 3396, 3364, 3370,
+        0, 3355, 3335, 3343, 3338, 7506, 7506, 3315, 3313, 3304,
+     7506, 3287, 3177, 7506, 3190, 3163, 3578, 3581, 3450, 3455,
+     3463, 3586, 3589, 1390, 1627, 1642, 1758, 1842, 2553, 1560,
+     2088, 1368, 1382, 1760, 2459, 2612, 2614, 3114, 3072, 3619,
+
+     3069, 3030, 3021, 2996, 2925, 2902, 2887, 2892, 2878, 2818,
+     2800, 2787, 2790,    0, 2750, 2736, 2744, 2734, 2730, 2723,
+     2618, 7506, 2576, 2519, 2504, 2491, 7506, 2483, 7506, 3669,
+     3670, 3470, 3661, 3675, 2002, 2502, 1707, 2492, 2559, 2630,
+     2093, 3418, 1307, 1459, 2343, 2895, 3431, 3563,    0, 2453,
+     2443, 2434, 2421, 2337, 2291, 2288, 2262, 2241,    0, 2223,
+        0, 2214, 2214, 2209, 2189,    0,    0, 2114, 2117, 2057,
+     2002, 1986, 1967, 7506, 1953, 1940, 1933, 1928, 1362, 1961,
+     2845, 1955, 3089, 1899, 3603, 3568, 3633, 3664, 3692, 3685,
+     3242, 1886,    0, 1834, 1791, 1801,    0, 1730, 1704, 1577,
+
+     1501,    0, 1484, 1433, 1374,    0, 1321, 1281,    0, 1222,
+     1117, 7506, 7506, 7506, 7506, 1103, 7506,    0, 3473, 3476,
+     3479,    0, 1078, 1054, 1057, 1036,    0, 1017,  993,  984,
+        0,    0,  970,    0, 7506,  952,  874,    0,  836,  810,
+        0,  784,  707,  602,    0, 7506, 7506,   49,    0,    0,
+        0,    0,    0, 7506, 5952, 5958, 5968, 5976, 5980, 5988,
+     5995, 6006, 6017, 6028, 6039, 6046, 6057, 6068, 6079, 6090,
+     6101, 6112, 6123, 6134, 6145, 6156, 6167, 6178, 6189, 6200,
+     6211, 6222, 6233, 6244, 6255, 6261, 6271, 6277, 6283, 6288,
+     6296, 6305, 6311, 6315, 6321, 6328, 6339, 6350, 6361, 6372,
+
+     6383, 6394, 6405, 6416, 6427, 6438, 6449, 6460, 6471, 6482,
+     6493, 6504, 6515, 6526, 6537, 6548, 6559, 6570, 6581, 6587,
+     6592, 6598, 6607, 6618, 6629, 6636, 6644, 6650, 6656, 6662,
+     6669, 6680, 6691, 6702, 6713, 6724, 6731, 6742, 6753, 6764,
+     6775, 6786, 6797, 6808, 6819, 6830, 6841, 6852, 6863, 6874,
+     6885, 6896, 6907, 6918, 6929, 6940, 6951, 6962, 6973, 6984,
+     6990, 7001, 7012, 7023, 7030, 7038, 7044, 7050, 7057, 7068,
+     7079, 7090, 7101, 7112, 7123, 7130, 7141, 7152, 7163, 7174,
+     7185, 7196, 7207, 7218, 7229, 7240, 7251, 7262, 7273, 7284,
+     7295, 7306, 7317, 7328, 7339, 7350, 7361, 7372, 7383, 7394,
 
-     7472, 7483, 7494
+     7405, 7411, 7419, 7425, 7432, 7443, 7454, 7461, 7472, 7483,
+     7494
     } ;
 
-static yyconst flex_int16_t yy_def[1204] =
+static yyconst flex_int16_t yy_def[1212] =
     {   0,
-     1046,    1,    1,    3, 1046,    5, 1046,    7, 1046,    9,
-     1046,   11,    9,    9, 1046,   15, 1046,   17, 1046,   19,
-     1046,   21, 1046, 1046, 1046, 1046, 1046, 1046, 1047, 1046,
-     1048, 1046, 1046, 1049, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1050, 1050, 1050, 1050,
-     1050, 1050, 1050, 1050, 1046, 1046, 1046, 1046, 1046, 1046,
-       39, 1046, 1046, 1050, 1046, 1046, 1046, 1046, 1046, 1047,
-     1051, 1049, 1046, 1052,   41, 1046, 1046, 1053, 1053, 1053,
-     1046, 1046, 1046, 1054, 1046, 1054, 1055, 1056, 1054, 1054,
-     1054,   91, 1054, 1057, 1057, 1054, 1046, 1046,   41, 1046,
-
-     1058, 1058, 1059, 1059, 1060, 1059, 1059, 1059,  108, 1059,
-     1061, 1061, 1047, 1062, 1046, 1062, 1063, 1064, 1062, 1062,
-     1062,  121, 1062, 1065, 1065, 1066, 1046, 1066, 1067, 1068,
-     1066, 1066, 1066,  133, 1066, 1069, 1069, 1070, 1046, 1070,
-     1071, 1072, 1070, 1070, 1070,  145, 1070, 1073, 1073, 1074,
-     1046, 1074, 1075, 1076, 1074, 1074, 1074,  157, 1074, 1077,
-     1077, 1046, 1046, 1046, 1046, 1047, 1046, 1047, 1078, 1078,
-     1078, 1078, 1078, 1046, 1046, 1046, 1079, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1080, 1080, 1080, 1080, 1080,
-     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
-
-     1080, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1081, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1082, 1083, 1084,
-     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
-     1046, 1046, 1046, 1046, 1046, 1080, 1080, 1080, 1080, 1080,
-     1080, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1085, 1085,
-     1086, 1087, 1087, 1087, 1087, 1088, 1084, 1088, 1088, 1046,
-     1046, 1089, 1046, 1090, 1089, 1090, 1091, 1089, 1089, 1089,
-     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1092,
-     1046, 1092, 1089, 1046, 1046, 1046, 1082, 1093, 1094, 1093,
-
-     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
-     1093, 1093, 1095, 1046, 1095, 1096, 1046, 1096, 1097, 1097,
-     1096, 1097, 1098, 1098, 1096, 1096, 1096, 1096, 1096, 1096,
-     1096, 1096, 1096, 1096, 1096, 1096, 1099, 1046, 1099, 1100,
-     1046, 1100, 1101, 1101, 1100, 1101, 1102, 1102, 1100, 1100,
-     1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,
-     1103, 1046, 1103, 1104, 1046, 1104, 1105, 1105, 1104, 1105,
-     1106, 1106, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
-     1104, 1104, 1104, 1104, 1107, 1046, 1107, 1108, 1046, 1109,
-     1108, 1109, 1110, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
-
-     1108, 1108, 1108, 1108, 1108, 1111, 1046, 1111, 1046, 1112,
-     1112, 1112, 1112, 1046, 1113, 1113, 1113, 1113, 1113, 1113,
-     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
-     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1046, 1046,
-     1046, 1046, 1046, 1046, 1114, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1115, 1116, 1046, 1046, 1046, 1046, 1117,
-     1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
-     1119, 1113, 1113, 1046, 1120, 1046, 1120, 1121, 1122, 1122,
-     1122, 1122, 1122, 1123, 1124, 1124, 1124, 1124, 1124, 1124,
-
-     1124, 1124, 1124, 1125, 1126, 1127, 1128, 1046, 1124, 1046,
-     1046, 1129, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
-     1130, 1131, 1132, 1046, 1133, 1133, 1133, 1133, 1133, 1133,
-     1133, 1133, 1133, 1134, 1135, 1136, 1137, 1046, 1138, 1138,
-     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1139, 1140, 1141,
-     1142, 1046, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
-     1143, 1144, 1145, 1146, 1147, 1046, 1148, 1148, 1148, 1148,
-     1148, 1148, 1148, 1148, 1148, 1149, 1150, 1151, 1152, 1046,
-     1046, 1046, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
-     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
-
-     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1154, 1046, 1154,
-     1155, 1046, 1156, 1046, 1156, 1157, 1046, 1158, 1158, 1158,
-     1158, 1158, 1158, 1159, 1160, 1160, 1160, 1160, 1161, 1161,
-     1162, 1162, 1162, 1162, 1163, 1162, 1163, 1164, 1165, 1162,
-     1165, 1166, 1162, 1167, 1167, 1162, 1046, 1046, 1168, 1168,
-     1169, 1169, 1169, 1169, 1170, 1169, 1171, 1169, 1172, 1172,
-     1173, 1173, 1173, 1173, 1174, 1174, 1173, 1174, 1175, 1175,
-     1176, 1176, 1173, 1176, 1177, 1173, 1046,  697, 1178, 1178,
-
-     1178, 1178, 1179, 1179, 1178, 1179, 1180, 1180, 1181, 1181,
-     1178, 1181, 1182, 1178, 1046,  715, 1183, 1183, 1183, 1183,
-     1184, 1184, 1183, 1184, 1185, 1185, 1186, 1186, 1183, 1186,
-     1187, 1183, 1046,  733, 1188, 1188, 1188, 1188, 1189, 1188,
-     1189, 1190, 1191, 1188, 1191, 1192, 1188, 1193, 1193, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1195, 1195, 1195, 1195, 1196, 1196, 1196, 1196,
-
-     1197, 1197, 1198, 1198, 1199, 1199, 1046, 1198, 1046, 1046,
-     1200, 1200, 1201, 1201, 1202, 1202, 1203, 1203, 1046,  819,
-     1178, 1178,  715,  715, 1183, 1183,  733,  733, 1188, 1188,
-      749,  749, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1195, 1195, 1195, 1195, 1196, 1197, 1197,  806,  806,
-     1200, 1200,  816,  816,  819,  819,  715,  715,  733,  733,
-      749,  749, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1195, 1195, 1046, 1197, 1197,  806,  806,
-     1200, 1200,  816,  816,  819,  819,  715,  715,  733,  733,
-      749,  749, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1198, 1198, 1201, 1201, 1203, 1203, 1178,
-     1178, 1183, 1183, 1188, 1188, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-
-     1194, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1198,
-     1203, 1178, 1183, 1188, 1194, 1194, 1194, 1194, 1194, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1046, 1046, 1046, 1194,
-     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1046, 1046, 1194,
-     1194, 1194, 1194, 1194, 1194,    0, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+     1054,    1,    1,    3, 1054,    5, 1054,    7, 1054,    9,
+     1054,   11,    9,    9, 1054,   15, 1054,   17, 1054,   19,
+     1054,   21, 1054, 1054, 1054, 1054, 1054, 1054, 1055, 1054,
+     1056, 1054, 1054, 1057, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1058, 1058, 1058, 1058,
+     1058, 1058, 1058, 1058, 1054, 1054, 1054, 1054, 1054, 1054,
+       39, 1054, 1054, 1058, 1054, 1054, 1054, 1054, 1054, 1055,
+     1059, 1057, 1054, 1060,   41, 1054, 1054, 1061, 1061, 1061,
+     1054, 1054, 1054, 1062, 1054, 1062, 1063, 1064, 1062, 1062,
+     1062,   91, 1062, 1065, 1065, 1062, 1054, 1054,   41, 1054,
+
+     1066, 1066, 1067, 1067, 1068, 1067, 1067, 1067,  108, 1067,
+     1069, 1069, 1055, 1070, 1054, 1070, 1071, 1072, 1070, 1070,
+     1070,  121, 1070, 1073, 1073, 1074, 1054, 1074, 1075, 1076,
+     1074, 1074, 1074,  133, 1074, 1077, 1077, 1078, 1054, 1078,
+     1079, 1080, 1078, 1078, 1078,  145, 1078, 1081, 1081, 1082,
+     1054, 1082, 1083, 1084, 1082, 1082, 1082,  157, 1082, 1085,
+     1085, 1054, 1054, 1054, 1054, 1055, 1054, 1055, 1086, 1086,
+     1086, 1086, 1086, 1054, 1054, 1054, 1087, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1088, 1088, 1088, 1088, 1088,
+     1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+
+     1088, 1088, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1089,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1090, 1091,
+     1092, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091,
+     1091, 1054, 1054, 1054, 1054, 1054, 1088, 1088, 1088, 1088,
+     1088, 1088, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1093,
+     1093, 1094, 1095, 1095, 1095, 1095, 1096, 1092, 1096, 1096,
+     1054, 1054, 1097, 1054, 1098, 1097, 1098, 1099, 1097, 1097,
+     1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
+     1100, 1054, 1100, 1097, 1054, 1054, 1054, 1090, 1101, 1102,
+
+     1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
+     1101, 1101, 1101, 1103, 1054, 1103, 1104, 1054, 1104, 1105,
+     1105, 1104, 1105, 1106, 1106, 1104, 1104, 1104, 1104, 1104,
+     1104, 1104, 1104, 1104, 1104, 1104, 1104, 1107, 1054, 1107,
+     1108, 1054, 1108, 1109, 1109, 1108, 1109, 1110, 1110, 1108,
+     1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+     1108, 1111, 1054, 1111, 1112, 1054, 1112, 1113, 1113, 1112,
+     1113, 1114, 1114, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+     1112, 1112, 1112, 1112, 1112, 1115, 1054, 1115, 1116, 1054,
+     1117, 1116, 1117, 1118, 1116, 1116, 1116, 1116, 1116, 1116,
+
+     1116, 1116, 1116, 1116, 1116, 1116, 1119, 1054, 1119, 1054,
+     1120, 1120, 1120, 1120, 1054, 1121, 1121, 1121, 1121, 1121,
+     1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
+     1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
+     1054, 1054, 1054, 1054, 1054, 1054, 1122, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1123, 1124, 1054, 1054, 1054,
+     1054, 1125, 1126, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1121, 1121, 1054, 1128, 1054, 1128, 1129,
+     1130, 1130, 1130, 1130, 1130, 1131, 1132, 1132, 1132, 1132,
+
+     1132, 1132, 1132, 1132, 1132, 1133, 1134, 1135, 1136, 1054,
+     1132, 1054, 1054, 1137, 1138, 1138, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1139, 1140, 1054, 1141, 1141, 1141, 1141,
+     1141, 1141, 1141, 1141, 1141, 1142, 1143, 1144, 1145, 1054,
+     1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1147,
+     1148, 1149, 1150, 1054, 1151, 1151, 1151, 1151, 1151, 1151,
+     1151, 1151, 1151, 1152, 1153, 1154, 1155, 1054, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1157, 1158, 1159,
+     1160, 1054, 1054, 1054, 1161, 1161, 1161, 1161, 1161, 1161,
+     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+
+     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1162, 1054, 1162, 1163, 1054, 1164, 1054, 1164, 1165, 1054,
+     1166, 1166, 1166, 1166, 1166, 1166, 1167, 1168, 1168, 1168,
+     1168, 1169, 1169, 1170, 1170, 1170, 1170, 1171, 1170, 1171,
+     1172, 1173, 1170, 1173, 1174, 1170, 1175, 1175, 1170, 1054,
+     1054, 1176, 1176, 1177, 1177, 1177, 1177, 1178, 1177, 1179,
+     1177, 1180, 1180, 1181, 1181, 1181, 1181, 1182, 1182, 1181,
+     1182, 1183, 1183, 1184, 1184, 1181, 1184, 1185, 1181, 1054,
+
+      700, 1186, 1186, 1186, 1186, 1187, 1187, 1186, 1187, 1188,
+     1188, 1189, 1189, 1186, 1189, 1190, 1186, 1054,  718, 1191,
+     1191, 1191, 1191, 1192, 1192, 1191, 1192, 1193, 1193, 1194,
+     1194, 1191, 1194, 1195, 1191, 1054,  736, 1196, 1196, 1196,
+     1196, 1197, 1196, 1197, 1198, 1199, 1196, 1199, 1200, 1196,
+     1201, 1201, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1203, 1203, 1203, 1203,
+
+     1204, 1204, 1204, 1204, 1205, 1205, 1206, 1206, 1207, 1207,
+     1054, 1206, 1054, 1054, 1208, 1208, 1209, 1209, 1210, 1210,
+     1211, 1211, 1054,  823, 1186, 1186,  718,  718, 1191, 1191,
+      736,  736, 1196, 1196,  752,  752, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1203, 1203, 1203, 1203,
+     1204, 1205, 1205,  810,  810, 1208, 1208,  820,  820,  823,
+      823,  718,  718,  736,  736,  752,  752, 1202, 1202, 1202,
+
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1203,
+     1203, 1054, 1205, 1205,  810,  810, 1208, 1208,  820,  820,
+      823,  823,  718,  718,  736,  736,  752,  752, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1206, 1206, 1209, 1209, 1211, 1211, 1186, 1186, 1191, 1191,
+     1196, 1196, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1206, 1211, 1186,
+     1191, 1196, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1054, 1054, 1054, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1054, 1054, 1202, 1202, 1202,
+     1202, 1202, 1202,    0, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
 
-     1046, 1046, 1046
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054
     } ;
 
 static yyconst flex_int16_t yy_nxt[7573] =
@@ -821,14 +824,14 @@
        47,   47,   48,   47,   48,   47,   48,   48,   47,   24,
        47,   47,   47,   47,   47,   47,   47,   49,   47,   50,
        47,   47,   51,   47,   52,   47,   47,   53,   47,   54,
-       47,   47,   47,   47,   55,   56,   58,  460,   59,   58,
-       24,  167,  221,  222,   24,   24,  461,   24,   60,  113,
+       47,   47,   47,   47,   55,   56,   58,  462,   59,   58,
+       24,  167,  222,  223,   24,   24,  463,   24,   60,  113,
        60,   61,   24,   81,  113,   82,   81,   62,   63,   24,
        24,   41,   42,   42,   42,  178,   41,   42,   42,   42,
 
-      162, 1045,  162,  162,  168,  267,   83,  179,  162,  164,
+      162, 1053,  162,  162,  168,  268,   83,  179,  162,  164,
       162,  162,   47,  175,   47,  163,  170,   47,  171,   47,
-      172,  173,   64,  163,   47,  223,  224,  176,  297,   24,
+      172,  173,   64,  163,   47,  224,  225,  176,  298,   24,
        24,   66,   67,   68,   69,   67,   66,   70,   66,   71,
        66,   66,   72,   66,   73,   66,   73,   74,   66,   75,
        76,   76,   76,   66,   77,   66,   66,   78,   78,   78,
@@ -887,767 +890,767 @@
       160,  160,  150,  160,  160,  160,  160,  160,  160,  160,
       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
       161,  160,  160,  160,  160,  160,  160,  150,  150,  180,
-     1044,  181,  181,  181,  181,  202,  180,  182,  181,  181,
-      181,  181,  203,  785,  183,  184,  184,  184,  184,  225,
-      226,  185,  786,  186,  186,  186,  186,  186,  187,  186,
-      186,  186,  186,  186,  186,  186,  243,  186,  186,  188,
-
-      189,  186,  190,  191,  192,  186,  193,  194,  195,  196,
-      186,  197,  186,  198,  199,  200,  186,  186,  186,  186,
-      201,  204,  227,  181,  181,  181,  181,  223,  224,  228,
-      422,  167,  227,  205,  206,  423,  230,  244,  207,  228,
-      208,  227,  241,  209,  317,  318,  230,  205,  228,  204,
-      206,  181,  181,  181,  181,  230,  227,  245,  208,  245,
-      245,  227,  206,  228,  168, 1043,  207,  209,  228,  227,
-      230,  231,  231,  231,  231,  230,  228,  232,  206,  210,
-      317,  318,  242,  230,  211,  240,  228,  212,  213,  214,
-      215,  216,  217,  267,  233,  218,  227,  219,  220,  361,
-
-      234,  227,  888,  228,  275,  428,  235,  167,  228,  429,
-      230,  245,  164,  245,  245,  230,  430,  210,  431,  180,
-      236,  181,  181,  181,  181,  252,  213,  214,  253,  254,
-      217,  256,  257,  258,  256,  227,  220,  276,  238,  237,
-      168, 1042,  228,  256,  257,  258,  256,  341,  342,  230,
-      391,  239, 1046,  260, 1041,  260,  261,  260,  260,  180,
-      457,  181,  181,  181,  181,  458,  184,  184,  184,  184,
-      186,  246,  238,  186,  228,  186,  167,  247,  248,  249,
-      250,  267,  251,  392,  186,  186,  186,  270,  257,  271,
-      270,  186, 1040,  263,  264,  341,  342,  204,  265,  181,
-
-      181,  181,  181,  267,  269,  270,  257,  271,  270,  168,
-      206,  432,  228,  433,  207,  268,  268,  268,  268,  267,
-      278, 1039,  279,  279,  279,  279,  206,  280,  280,  280,
-      280,  881,  272,  296,  296,  296,  296,  317,  320,  272,
-      435,  321,  272,  298,  317,  324,  272,  177,  184,  184,
-      184,  184,  300,  321,  436,  281,  464,  272,  267,  282,
-      283,  465,  279,  279,  279,  279,  272,  303,  303,  303,
-      303,  298,  284,  285,  322,  418,  294,  286,  298,  287,
-      295,  298,  288,  317,  318,  298,  284,  419,  301,  285,
-      302,  302,  302,  302,  512,  304,  298,  287, 1038,  305,
-
-      341,  348,  365,  366,  336,  298,  288,  272,  272,  345,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272, 1037,  272,  272,  450,  317,  318,  228,  291,
-      272,  272,  272,  451,  204,  267,  296,  296,  296,  296,
-      325, 1036,  326,  326,  326,  326,  272,  206,  341,  342,
-     1035,  207,  365,  366,  341,  344,  441,  441,  345,  365,
-      372,  275,  349,  206,  350,  350,  350,  350,  369,  448,
-      449,  272,  272,  272,  272, 1034,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272, 1033,  272,
-      272,  346,  317,  318,  276,  291,  272,  272,  272,  394,
-
-      455,  395,  395,  395,  395,  341,  342, 1032,  327,  327,
-      327,  327,  272, 1031,  341,  342,  456,  595,  292,  596,
-      316,  351,  351,  351,  351,  365,  368,  316, 1030,  369,
-      316,  444,  444,  444,  316,  360,  328,  272,  272,  306,
-      329,  302,  302,  302,  302,  316,  467,  468, 1029,  352,
-      340,  307,  308,  353,  316,  425,  309,  340,  310,  426,
-      340,  311,  370,  427,  340,  307,  227,  364,  308,  409,
-     1028,  409,  409,  228,  364,  340,  310,  364,  448,  484,
-      230,  364,  499,  499,  340,  311,  298,  298,  298,  298,
-      298,  298,  364,  298,  298,  298,  298,  298,  298,  298,
-
-      298,  364,  298,  298,  365,  366,  365,  366,  314,  298,
-      298,  298,  396,  396,  396,  396,  517,  517,  373,  591,
-      374,  374,  374,  374,  388,  298,  162,  384,  162,  162,
-      245,  388,  245,  245,  388,  425,  592,  504,  388,  426,
-      397,  163,  505,  483,  398,  410,  410,  410,  410,  388,
-      298,  298,  298,  298,  298,  298,  298,  298,  388,  298,
-      298,  298,  298,  298,  298,  298,  298, 1027,  298,  298,
-      411,  411,  411,  411,  314,  298,  298,  298,  412,  412,
-      412,  412,  365,  366,  413,  413,  413,  413,  492,  317,
-      318,  298,  184,  184,  184,  184,  493,  315,  375,  375,
-
-      375,  375,  452,  464,  464,  337,  453,  886,  465,  522,
-      204,  980,  181,  181,  181,  181,  298,  298,  317,  318,
-      454,  466,  267,  206,  227, 1026,  376,  207,  317,  318,
-      377,  228,  330,  227,  326,  326,  326,  326,  230,  206,
-      228,  227,  317,  318,  331,  332,  669,  230,  228,  333,
-      670,  334,  317,  320,  335,  230,  361,  442,  331,  442,
-      227,  332,  443,  443,  443,  443,  972,  228, 1009,  334,
-      472,  472,  472,  472,  230,  476,  477, 1025,  335,  316,
-      316,  317,  318,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  475,  316,  316,  184,  184,  184,
-
-      184,  338,  316,  316,  316,  502,  502,  502,  414,  440,
-      440,  440,  440,  937,  227,  227,  227,  361,  316, 1024,
-      414,  228,  228,  228,  414,  227,  227,  938,  230,  230,
-      230,  361,  228,  228,  228,  929,  414,  317,  318,  230,
-      230,  267,  290,  316,  316,  316,  316,  317,  318,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      478,  316,  316,  981,  473,  474,  479,  338,  316,  316,
-      316,  227,  341,  342,  480,  341,  342,  494,  228,  256,
-      257,  258,  256, 1023,  316,  230,  256,  257,  258,  256,
-      339,  487,  487,  487,  487,  486,  228,  341,  342,  268,
-
-      268,  268,  268,  267,  270,  257,  271,  270,  361,  316,
-      316,  341,  342,  481,  270,  257,  271,  270,  280,  280,
-      280,  280,  298,  317,  318,  354,  177,  350,  350,  350,
-      350,  300,  280,  280,  280,  280, 1022,  355,  356,  520,
-      520,  520,  357,  495,  358,  341,  344,  359,  341,  342,
-      500,  355,  500, 1021,  356,  501,  501,  501,  501,  495,
-      317,  324,  358,  303,  303,  303,  303,  317,  318,  321,
-      526,  359,  340,  340,  341,  342,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  385,  340,  340,
-      890,  317,  324,  576,  362,  340,  340,  340,  577,  283,
-
-      321,  279,  279,  279,  279,  935,  498,  498,  498,  498,
-      337,  340,  285,  518,  527,  518,  286,  495,  519,  519,
-      519,  519,  317,  320,  365,  366,  321, 1020,  285,  365,
-      366,  365,  366,  495,  365,  368,  340,  340,  340,  340,
-      341,  342,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  406,  340,  340,  892,  341,  348,  322,
-      362,  340,  340,  340,  267,  204,  345,  296,  296,  296,
-      296,  306,  930,  302,  302,  302,  302,  340,  206,  290,
-      341,  348,  207,  363,  308,  365,  366,  931,  309,  345,
-      303,  303,  303,  303,  206,  317,  320,  317,  318,  321,
-
-      308,  513,  340,  340,  365,  366,  341,  344,  341,  344,
-      345,  972,  345,  327,  327,  327,  327,  513,  378,  267,
-      374,  374,  374,  374,  267,  516,  516,  516,  516,  267,
-      379,  380,  322,  317,  318,  381,  513,  382,  341,  342,
-      383,  317,  318,  346,  379,  346,  811,  380, 1019,  529,
-      529,  812,  513,  365,  372,  382,  228,  532,  532,  532,
-      341,  342,  369,  267,  383,  364,  364,  365,  366,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      267,  364,  364,  317,  318,  540, 1018,  386,  364,  364,
-      364,  877,  391,  571,  571,  317,  318,  441,  441,  327,
+     1052,  181,  181,  181,  181,  203,  180,  182,  181,  181,
+      181,  181,  204,  789,  183,  184,  184,  184,  184,  226,
+      227,  185,  790,  186,  186,  186,  186,  186,  187,  186,
+      186,  186,  186,  186,  186,  186,  244,  186,  188,  189,
+
+      190,  186,  191,  192,  193,  186,  194,  195,  196,  197,
+      186,  198,  186,  199,  200,  201,  186,  186,  186,  186,
+      202,  205,  228,  181,  181,  181,  181,  224,  225,  229,
+      424,  167,  228,  206,  207,  425,  231,  245,  208,  229,
+      209,  228,  242,  210,  318,  319,  231,  206,  229,  205,
+      207,  181,  181,  181,  181,  231,  228,  246,  209,  246,
+      246,  228,  207,  229,  168, 1051,  208,  210,  229,  228,
+      231,  232,  232,  232,  232,  231,  229,  233,  207,  211,
+      318,  319,  243,  231,  212,  241,  229,  213,  214,  215,
+      216,  217,  218,  268,  234,  219,  228,  220,  221,  362,
+
+      235,  228,  893,  229,  276,  430,  236,  167,  229,  431,
+      231,  246,  164,  246,  246,  231,  432,  211,  433,  180,
+      237,  181,  181,  181,  181,  253,  214,  215,  254,  255,
+      218,  257,  258,  259,  257,  228,  221,  277,  239,  238,
+      168, 1050,  229,  257,  258,  259,  257,  342,  343,  231,
+      392,  240, 1054,  261, 1049,  261,  262,  261,  261,  180,
+      459,  181,  181,  181,  181,  460,  184,  184,  184,  184,
+      186,  247,  239,  186,  229,  186,  167,  248,  249,  250,
+      251,  268,  252,  393,  186,  186,  186,  271,  258,  272,
+      271,  186, 1048,  264,  265,  342,  343,  205,  266,  181,
+
+      181,  181,  181,  268,  270,  271,  258,  272,  271,  168,
+      207,  434,  229,  435,  208,  269,  269,  269,  269,  268,
+      279, 1047,  280,  280,  280,  280,  207,  281,  281,  281,
+      281,  886,  273,  297,  297,  297,  297,  318,  321,  273,
+      437,  322,  273,  299,  318,  325,  273,  177,  184,  184,
+      184,  184,  301,  322,  438,  282,  466,  273,  268,  283,
+      284,  467,  280,  280,  280,  280,  273,  304,  304,  304,
+      304,  299,  285,  286,  323,  420,  295,  287,  299,  288,
+      296,  299,  289,  318,  319,  299,  285,  421,  302,  286,
+      303,  303,  303,  303,  514,  305,  299,  288, 1046,  306,
+
+      342,  349,  366,  367,  337,  299,  289,  273,  273,  346,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  273, 1045,  273,  273,  452,  318,  319,  229,  292,
+      273,  273,  273,  453,  205,  268,  297,  297,  297,  297,
+      326, 1044,  327,  327,  327,  327,  273,  207,  342,  343,
+     1043,  208,  366,  367,  342,  345,  443,  443,  346,  366,
+      373,  276,  350,  207,  351,  351,  351,  351,  370,  450,
+      451,  273,  273,  273,  273, 1042,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  273, 1041,  273,
+      273,  347,  318,  319,  277,  292,  273,  273,  273,  395,
+
+      457,  396,  396,  396,  396,  342,  343, 1040,  328,  328,
+      328,  328,  273, 1039,  342,  343,  458,  598,  293,  599,
+      317,  352,  352,  352,  352,  366,  369,  317, 1038,  370,
+      317,  446,  446,  446,  317,  361,  329,  273,  273,  307,
+      330,  303,  303,  303,  303,  317,  469,  470, 1037,  353,
+      341,  308,  309,  354,  317,  427,  310,  341,  311,  428,
+      341,  312,  371,  429,  341,  308,  228,  365,  309,  410,
+     1036,  410,  410,  229,  365,  341,  311,  365,  450,  486,
+      231,  365,  501,  501,  341,  312,  299,  299,  299,  299,
+      299,  299,  365,  299,  299,  299,  299,  299,  299,  299,
+
+      299,  365,  299,  299,  366,  367,  366,  367,  315,  299,
+      299,  299,  397,  397,  397,  397,  519,  519,  374,  594,
+      375,  375,  375,  375,  389,  299,  162,  385,  162,  162,
+      246,  389,  246,  246,  389,  427,  595,  506,  389,  428,
+      398,  163,  507,  485,  399,  411,  411,  411,  411,  389,
+      299,  299,  299,  299,  299,  299,  299,  299,  389,  299,
+      299,  299,  299,  299,  299,  299,  299, 1035,  299,  299,
+      412,  412,  412,  412,  315,  299,  299,  299,  413,  413,
+      413,  413,  366,  367,  414,  414,  414,  414,  494,  318,
+      319,  299,  184,  184,  184,  184,  495,  316,  376,  376,
+
+      376,  376,  454,  466,  466,  338,  455,  891,  467,  524,
+      205,  987,  181,  181,  181,  181,  299,  299,  318,  319,
+      456,  468,  268,  207,  228, 1034,  377,  208,  318,  319,
+      378,  229,  331,  228,  327,  327,  327,  327,  231,  207,
+      229,  228,  318,  319,  332,  333,  672,  231,  229,  334,
+      673,  335,  318,  321,  336,  231,  362,  444,  332,  444,
+      228,  333,  445,  445,  445,  445,  979,  229, 1017,  335,
+      474,  474,  474,  474,  231,  478,  479, 1033,  336,  317,
+      317,  318,  319,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  477,  317,  317,  184,  184,  184,
+
+      184,  339,  317,  317,  317,  504,  504,  504,  415,  442,
+      442,  442,  442,  943,  228,  228,  228,  362,  317, 1032,
+      415,  229,  229,  229,  415,  228,  228,  944,  231,  231,
+      231,  362,  229,  229,  229,  935,  415,  318,  319,  231,
+      231,  268,  291,  317,  317,  317,  317,  318,  319,  317,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      480,  317,  317,  988,  475,  476,  481,  339,  317,  317,
+      317,  228,  342,  343,  482,  342,  343,  496,  229,  257,
+      258,  259,  257, 1031,  317,  231,  257,  258,  259,  257,
+      340,  489,  489,  489,  489,  488,  229,  342,  343,  269,
+
+      269,  269,  269,  268,  271,  258,  272,  271,  362,  317,
+      317,  342,  343,  483,  271,  258,  272,  271,  281,  281,
+      281,  281,  299,  318,  319,  355,  177,  351,  351,  351,
+      351,  301,  281,  281,  281,  281, 1030,  356,  357,  522,
+      522,  522,  358,  497,  359,  342,  345,  360,  342,  343,
+      502,  356,  502, 1029,  357,  503,  503,  503,  503,  497,
+      318,  325,  359,  304,  304,  304,  304,  318,  319,  322,
+      528,  360,  341,  341,  342,  343,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  386,  341,  341,
+      895,  318,  325,  578,  363,  341,  341,  341,  579,  284,
+
+      322,  280,  280,  280,  280,  941,  500,  500,  500,  500,
+      338,  341,  286,  520,  529,  520,  287,  497,  521,  521,
+      521,  521,  318,  321,  366,  367,  322, 1028,  286,  366,
+      367,  366,  367,  497,  366,  369,  341,  341,  341,  341,
+      342,  343,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  407,  341,  341,  897,  342,  349,  323,
+      363,  341,  341,  341,  268,  205,  346,  297,  297,  297,
+      297,  307,  936,  303,  303,  303,  303,  341,  207,  291,
+      342,  349,  208,  364,  309,  366,  367,  937,  310,  346,
+      304,  304,  304,  304,  207,  318,  321,  318,  319,  322,
+
+      309,  515,  341,  341,  366,  367,  342,  345,  342,  345,
+      346,  979,  346,  328,  328,  328,  328,  515,  379,  268,
+      375,  375,  375,  375,  268,  518,  518,  518,  518,  268,
+      380,  381,  323,  318,  319,  382,  515,  383,  342,  343,
+      384,  318,  319,  347,  380,  347,  815,  381, 1027,  531,
+      531,  816,  515,  366,  373,  383,  229,  534,  534,  534,
+      342,  343,  370,  268,  384,  365,  365,  366,  367,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      268,  365,  365,  318,  319,  542, 1026,  387,  365,  365,
+      365,  882,  392,  573,  573,  318,  319,  443,  443,  328,
+
+      328,  328,  328,  938,  365,  945,  532,  543,  532,  386,
+      527,  533,  533,  533,  533,  318,  319,  366,  367,  536,
+      397,  397,  397,  397,  537,  393,  527,  501,  501,  365,
+      365,  365,  365,  366,  367,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365, 1025,  365,  365, 1024,
+      318,  319,  632,  387,  365,  365,  365,  342,  343,  576,
+      576,  576,  342,  343,  556,  637,  530,  530,  530,  530,
+      365,  366,  369,  545,  545,  370,  388,  527,  352,  352,
+      352,  352,  342,  343, 1023,  633,  550,  939,  342,  343,
+      992,  551,  659,  527,  314,  365,  365,  400,  638,  396,
+
+      396,  396,  396,  984,  352,  352,  352,  352,  371,  401,
+      402,  342,  343,  663,  403,  541,  404,  366,  367,  405,
+      342,  343,  546,  401,  546,  660,  402,  547,  547,  547,
+      547,  541,  366,  373,  404,  229,  548,  548,  548,  519,
+      519,  370,  268,  405,  389,  389,  664,  389,  389,  389,
+      389,  389,  389,  389,  389,  389,  389,  389,  389,  982,
+      389,  389,  342,  343,  557,  980,  408,  389,  389,  389,
+      366,  369,  883,  299,  370,  366,  367,  634,  544,  544,
+      544,  544,  679,  389, 1016,  366,  367, 1015,  614,  541,
+     1014,  376,  376,  376,  376,  410,  615,  410,  410,  616,
+
+     1013,  376,  376,  376,  376,  541,  981,  371,  389,  389,
+      389,  389,  555,  389,  389,  389,  389,  389,  389,  389,
+      389,  389,  389,  389,  389, 1012,  389,  389,  555,  366,
+      367, 1011,  408,  389,  389,  389,  366,  367,  446,  446,
+      446,  366,  367,  318,  319,  558,  558,  558,  558,  389,
+      366,  367,  559,  559,  291,  409,  555,  562,  562,  562,
+     1010,  560,  268,  560,  318,  693,  561,  561,  561,  561,
+      318,  319,  555,  690,  389,  389,  505,  505,  505,  505,
+      366,  367,  573,  573,  564,  505,  505,  505,  574,  565,
+      574,  686,  887,  575,  575,  575,  575,  985,  743,  505,
+
+      505,  505,  505,  505,  505,  273,  273, 1009,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      687,  273,  273,  411,  411,  411,  411,  292,  273,  273,
+      273,  744,  400,  942,  396,  396,  396,  396,  338,  397,
+      397,  397,  397,  338,  273,  402,  504,  504,  504,  403,
+      569,  412,  412,  412,  412,  413,  413,  413,  413,  342,
+      711,  402,  414,  414,  414,  414,  569, 1008,  708,  273,
+      273,  273,  273, 1007,  273,  273,  273,  508,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  509,  509,  509,
+
+      509,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+      273,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+      509,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+      509,  509,  509,  509,  509,  273,  273,  273,  273, 1006,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  273, 1005,  273,  273,  572,  572,  572,  572,  292,
+      273,  273,  273,  583, 1004,  583,  569, 1003,  584,  584,
+      584,  584,  442,  442,  442,  442,  273,  445,  445,  445,
+      445, 1002,  569,  415,  445,  445,  445,  445,  489,  489,
+      489,  489,  488,  228, 1001,  510,  522,  522,  522,  415,
+
+      229,  273,  273,  523,  523,  523,  523,  231,  228,  228,
+      228,  228,  523,  523,  523,  229,  229,  229,  229,  342,
+      343, 1000,  231,  231,  231,  231,  523,  523,  523,  523,
+      523,  523,  299,  299,  299,  299,  299,  299,  999,  299,
+      299,  299,  299,  299,  299,  299,  299,  989,  299,  299,
+      998,  228,  228,  641,  315,  299,  299,  299,  229,  229,
+      229,  500,  500,  500,  500,  231,  231,  268,  654,  705,
+      654,  299,  497,  655,  655,  655,  655,  503,  503,  503,
+      503,  503,  503,  503,  503,  366,  729,  997,  497,  811,
+      812,  652,  386,  642,  726,  653,  299,  299,  299,  299,
+
+      299,  299,  299,  299,  472,  299,  299,  299,  299,  299,
+      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
+      299,  299,  299,  299,  525,  525,  525,  525,  525,  525,
+      525,  525,  525,  525,  525,  525,  525,  299,  525,  525,
+      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+      525,  525,  299,  299,  299,  299,  299,  299,  299,  299,
+      996,  299,  299,  299,  299,  299,  299,  299,  299,  995,
+      299,  299,  747,  228,  994,  228,  315,  299,  299,  299,
+      229,  632,  229,  342,  343,  228,  980,  231,  993,  231,
+
+      366,  367,  229,  299,  946,  674,  982,  674,  386,  231,
+      675,  675,  675,  675,  268,  748,  518,  518,  518,  518,
+      637,  643,  526,  978,  633,  644,  645,  515,  299,  299,
+      318,  319,  646,  521,  521,  521,  521,  521,  521,  521,
+      521,  704,  977,  515,  331,  976,  327,  327,  327,  327,
+      723,  318,  319,  638,  291,  318,  319,  333,  366,  367,
+      975,  334,  684,  983,  684,  318,  319,  685,  685,  685,
+      685,  531,  531,  333,  318,  319,  299,  659,  318,  319,
+      634,  533,  533,  533,  533,  679,  318,  319,  318,  319,
+      535,  535,  535,  535,  533,  533,  533,  533,  940,  535,
+
+      535,  535,  534,  534,  534,  314,  722,  663,  318,  689,
+      660,  314,  690,  535,  535,  535,  535,  535,  535,  317,
+      317,  318,  319,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  984,  317,  317,  318,  319,  974,
+      664,  339,  317,  317,  317,  691,  576,  576,  576,  342,
+      343,  318,  689,  530,  530,  530,  530,  947,  317,  948,
+      702,  407,  702,  407,  527,  703,  703,  703,  703,  738,
+      973,  738,  318,  693,  739,  739,  739,  739,  318,  319,
+      527,  690,  314,  317,  317,  317,  317,  318,  319,  317,
+      317,  538,  317,  317,  317,  317,  317,  317,  317,  317,
+
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  317,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  539,  539,  539,  539,  539,  317,
+      317,  317,  317,  318,  319,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  972,  317,  317,  342,
+      343,  971,  229,  339,  317,  317,  317,  318,  695,  268,
+      743,  696,  342,  343,  970,  544,  544,  544,  544,  969,
+      317,  342,  707,  229,  968,  708,  541,  967,  545,  545,
+
+      268,  342,  713,  342,  343,  714,  805,  342,  343,  540,
+      318,  695,  541,  744,  697,  317,  317,  342,  343,  547,
+      547,  547,  547,  547,  547,  547,  547,  806,  709,  342,
+      343,  355,  966,  351,  351,  351,  351,  965,  715,  366,
+      367,  964,  318,  319,  357,  548,  548,  548,  358,  981,
+      720, 1018,  720,  366,  367,  721,  721,  721,  721,  963,
+      357,  342,  343,  318,  693,  366,  367,  318,  319,  559,
+      559,  538,  690,  366,  367,  342,  343,  549,  549,  549,
+      549,  561,  561,  561,  561,  821,  549,  549,  549,  561,
+      561,  561,  561,  575,  575,  575,  575,  342,  707,  990,
+
+      549,  549,  549,  549,  549,  549,  341,  341,  342,  343,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  962,  341,  341,  366,  367,  318,  319,  363,  341,
+      341,  341,  366,  367,  961,  572,  572,  572,  572,  960,
+      558,  558,  558,  558,  386,  341,  569,  959,  562,  562,
+      562,  555,  575,  575,  575,  575,  584,  584,  584,  584,
+      342,  343,  569,  584,  584,  584,  584,  555,  958,  822,
+      341,  341,  341,  341,  342,  343,  341,  341,  552,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  553,  553,
+
+      553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
+      553,  341,  553,  553,  553,  553,  553,  553,  553,  553,
+      553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
+      553,  553,  553,  553,  553,  553,  341,  341,  341,  341,
+      342,  343,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  957,  341,  341,  655,  655,  655,  655,
+      363,  341,  341,  341,  366,  725,  956,  228,  726,  366,
+      731,  228,  228,  732,  229,  228,  228,  341,  229,  229,
+      228,  231,  229,  229,  747,  231,  231,  229,  955,  231,
+      231,  342,  343,  983,  231, 1017,  554,  655,  655,  655,
+
+      655,  727,  341,  341,  366,  367,  733,  675,  675,  675,
+      675,  342,  713,  797,  366,  367,  798,  748,  379,  954,
+      375,  375,  375,  375,  799,  800,  675,  675,  675,  675,
+      950,  381,  366,  725,  825,  382,  318,  319,  342,  343,
+      318,  319,  318,  689,  342,  343,  690,  381,  366,  367,
+      366,  367,  685,  685,  685,  685,  685,  685,  685,  685,
+      703,  703,  703,  703,  563,  563,  563,  563,  949,  342,
+      711,  366,  367,  563,  563,  563,  318,  689,  708,  691,
+      690,  826,  318,  695,  366,  731,  696,  563,  563,  563,
+      563,  563,  563,  365,  365,  366,  367,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  365,  365,  929,  365,
+      365,  342,  343,  691,  829,  387,  365,  365,  365,  697,
+      342,  343,  342,  711,  552,  366,  367,  703,  703,  703,
+      703,  708,  365,  366,  367,  928,  366,  729,  366,  729,
+      927,  721,  721,  721,  721,  726,  991,  726, 1022,  721,
+      721,  721,  721,  739,  739,  739,  739,  365,  365,  365,
+      365,  366,  367,  365,  365,  566,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  365,  567,
+
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      567,  567,  567,  365,  365,  365,  365,  366,  367,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      926,  365,  365,  366,  367,  318,  319,  387,  365,  365,
+      365,  318,  695,  366,  367,  696,  925,  566,  342,  707,
+      318,  319,  708,  924,  365,  841,  342,  707,  342,  713,
+      708,  923,  714,  342,  713,  366,  725,  714,  842,  726,
+      342,  343,  922,  568,  921,  843,  830,  920,  697,  365,
+      365,  577,  577,  577,  577,  709,  739,  739,  739,  739,
+
+      577,  577,  577,  709,  919,  715,  342,  343,  362,  892,
+      715,  918,  727,  917,  577,  577,  577,  577,  577,  577,
+      389,  389,  986,  389,  389,  389,  389,  389,  389,  389,
+      389,  389,  389,  389,  389,  991,  389,  389,  857,  366,
+      367,  916,  408,  389,  389,  389,  366,  725,  366,  367,
+      726,  366,  731,  858,  915,  732,  386,  894,  228,  389,
+      859,  407,  896,  228,  932,  229,  932,  932,  338,  914,
+      229,  932,  231,  932,  932,  318,  319,  231,  342,  343,
+      407,  366,  367,  727,  389,  389,  389,  389,  733,  389,
+      389,  389,  580,  389,  389,  389,  389,  389,  389,  389,
+
+      389,  389,  389,  389,  389,  389,  389,  389,  389,  389,
+      389,  389,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  389,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      389,  389,  389,  389,  913,  389,  389,  389,  389,  389,
+      389,  389,  389,  389,  389,  389,  389,  992,  389,  389,
+      318,  319,  986,  912,  408,  389,  389,  389,  366,  731,
+      228,  228,  732,  228,  911,  228,  228,  229,  229,  228,
+      229,  389,  229,  229,  231,  231,  229,  231,  910,  231,
+
+      231,  229,  909,  231,  229,  318,  319,  985,  268, 1019,
+      582,  268,  407,  908,  907,  733,  389,  389,  505,  505,
+      505,  505,  877,  930,  879,  878,  931,  505,  505,  505,
+      906,  933,  880,  905,  934,  342,  343,  987,  904, 1020,
+      903,  505,  505,  505,  505,  505,  505,  273,  273,  902,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  273,  951,  273,  273,  979,  342,  343,  988,  666,
+      273,  273,  273,  979,  980,  952,  229,  228,  228,  980,
+      901,  900,  953,  268,  229,  229,  273,  366,  367,  990,
+      229,  231,  231,  899,  366,  367,  989,  268, 1021,  898,
+
+      811,  881,  876,  875,  874,  873,  872,  871,  870,  869,
+      868,  273,  273,  273,  273,  867,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  291,  273,
+      273,  291,  291,  291,  291,  292,  273,  273,  273,  291,
+      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+      291,  291,  273,  291,  291,  291,  291,  291,  291,  667,
+      291,  291,  291,  668,  291,  291,  291,  291,  291,  291,
+      291,  291,  291,  291,  291,  291,  291,  273,  273,  523,
+      523,  523,  523,  866,  865,  864,  863,  862,  523,  523,
+      523,  861,  860,  856,  855,  854,  853,  852,  851,  850,
+
+      849,  848,  523,  523,  523,  523,  523,  523,  299,  299,
+      299,  299,  299,  299,  847,  299,  299,  299,  299,  299,
+      299,  299,  299,  846,  299,  299,  845,  844,  840,  839,
+      681,  299,  299,  299,  838,  837,  580,  743,  834,  833,
+      832,  828,  824,  472,  818,  817,  814,  299,  813,  508,
+      659,  808,  807,  804,  803,  802,  801,  472,  640,  632,
+      796,  795,  794,  793,  792,  791,  788,  787,  786,  785,
+      784,  783,  299,  299,  299,  299,  299,  299,  299,  299,
+      782,  299,  299,  299,  299,  299,  299,  299,  299,  314,
+      299,  299,  314,  314,  314,  314,  315,  299,  299,  299,
 
-      327,  327,  327,  932,  364,  939,  530,  541,  530,  385,
-      525,  531,  531,  531,  531,  317,  318,  365,  366,  534,
-      396,  396,  396,  396,  535,  392,  525,  499,  499,  364,
-      364,  364,  364,  365,  366,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364, 1017,  364,  364, 1016,
-      317,  318,  629,  386,  364,  364,  364,  341,  342,  574,
-      574,  574,  341,  342,  554,  634,  528,  528,  528,  528,
-      364,  365,  368,  543,  543,  369,  387,  525,  351,  351,
-      351,  351,  341,  342, 1015,  630,  548,  933,  341,  342,
-      985,  549,  656,  525,  313,  364,  364,  399,  635,  395,
-
-      395,  395,  395,  977,  351,  351,  351,  351,  370,  400,
-      401,  341,  342,  660,  402,  539,  403,  365,  366,  404,
-      341,  342,  544,  400,  544,  657,  401,  545,  545,  545,
-      545,  539,  365,  372,  403,  228,  546,  546,  546,  517,
-      517,  369,  267,  404,  388,  388,  661,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  975,
-      388,  388,  341,  342,  555,  973,  407,  388,  388,  388,
-      365,  368,  878,  298,  369,  365,  366,  631,  542,  542,
-      542,  542,  676,  388, 1008,  365,  366, 1007,  611,  539,
-     1006,  375,  375,  375,  375,  409,  612,  409,  409,  613,
-
-     1005,  375,  375,  375,  375,  539,  974,  370,  388,  388,
-      388,  388,  553,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388, 1004,  388,  388,  553,  365,
-      366, 1003,  407,  388,  388,  388,  365,  366,  444,  444,
-      444,  365,  366,  317,  318,  556,  556,  556,  556,  388,
-      365,  366,  557,  557,  290,  408,  553,  560,  560,  560,
-     1002,  558,  267,  558,  317,  690,  559,  559,  559,  559,
-      317,  318,  553,  687,  388,  388,  503,  503,  503,  503,
-      365,  366,  571,  571,  562,  503,  503,  503,  572,  563,
-      572,  683,  882,  573,  573,  573,  573,  978,  740,  503,
-
-      503,  503,  503,  503,  503,  272,  272, 1001,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      684,  272,  272,  410,  410,  410,  410,  291,  272,  272,
-      272,  741,  399,  936,  395,  395,  395,  395,  337,  396,
-      396,  396,  396,  337,  272,  401,  502,  502,  502,  402,
-      567,  411,  411,  411,  411,  412,  412,  412,  412,  341,
-      708,  401,  413,  413,  413,  413,  567, 1000,  705,  272,
-      272,  272,  272,  999,  272,  272,  272,  506,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  507,  507,  507,
-
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      272,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  272,  272,  272,  272,  998,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  997,  272,  272,  570,  570,  570,  570,  291,
-      272,  272,  272,  581,  996,  581,  567,  995,  582,  582,
-      582,  582,  440,  440,  440,  440,  272,  443,  443,  443,
-      443,  994,  567,  414,  443,  443,  443,  443,  487,  487,
-      487,  487,  486,  227,  993,  508,  520,  520,  520,  414,
-
-      228,  272,  272,  521,  521,  521,  521,  230,  227,  227,
-      227,  227,  521,  521,  521,  228,  228,  228,  228,  341,
-      342,  992,  230,  230,  230,  230,  521,  521,  521,  521,
-      521,  521,  298,  298,  298,  298,  298,  298,  991,  298,
-      298,  298,  298,  298,  298,  298,  298,  982,  298,  298,
-      990,  227,  227,  638,  314,  298,  298,  298,  228,  228,
-      228,  498,  498,  498,  498,  230,  230,  267,  651,  702,
-      651,  298,  495,  652,  652,  652,  652,  501,  501,  501,
-      501,  501,  501,  501,  501,  365,  726,  989,  495,  807,
-      808,  649,  385,  639,  723,  650,  298,  298,  298,  298,
-
-      298,  298,  298,  298,  470,  298,  298,  298,  298,  298,
-      298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
-      298,  298,  298,  298,  523,  523,  523,  523,  523,  523,
-      523,  523,  523,  523,  523,  523,  523,  298,  523,  523,
-      523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
-      523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
-      523,  523,  298,  298,  298,  298,  298,  298,  298,  298,
-      988,  298,  298,  298,  298,  298,  298,  298,  298,  987,
-      298,  298,  744,  227,  986,  227,  314,  298,  298,  298,
-      228,  629,  228,  341,  342,  227,  973,  230,  971,  230,
-
-      365,  366,  228,  298,  940,  671,  975,  671,  385,  230,
-      672,  672,  672,  672,  267,  745,  516,  516,  516,  516,
-      634,  640,  524,  970,  630,  641,  642,  513,  298,  298,
-      317,  318,  643,  519,  519,  519,  519,  519,  519,  519,
-      519,  701,  969,  513,  330,  968,  326,  326,  326,  326,
-      720,  317,  318,  635,  290,  317,  318,  332,  365,  366,
-      967,  333,  681,  976,  681,  317,  318,  682,  682,  682,
-      682,  529,  529,  332,  317,  318,  298,  656,  317,  318,
-      631,  531,  531,  531,  531,  676,  317,  318,  317,  318,
-      533,  533,  533,  533,  531,  531,  531,  531,  934,  533,
-
-      533,  533,  532,  532,  532,  313,  719,  660,  317,  686,
-      657,  313,  687,  533,  533,  533,  533,  533,  533,  316,
-      316,  317,  318,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  977,  316,  316,  317,  318,  966,
-      661,  338,  316,  316,  316,  688,  574,  574,  574,  341,
-      342,  317,  686,  528,  528,  528,  528,  941,  316,  942,
-      699,  406,  699,  406,  525,  700,  700,  700,  700,  735,
-      965,  735,  317,  690,  736,  736,  736,  736,  317,  318,
-      525,  687,  313,  316,  316,  316,  316,  317,  318,  316,
-      316,  536,  316,  316,  316,  316,  316,  316,  316,  316,
-
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  316,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  316,
-      316,  316,  316,  317,  318,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  964,  316,  316,  341,
-      342,  963,  228,  338,  316,  316,  316,  317,  692,  267,
-      740,  693,  341,  342,  962,  542,  542,  542,  542,  961,
-      316,  341,  704,  228,  960,  705,  539,  959,  543,  543,
-
-      267,  341,  710,  341,  342,  711,  801,  341,  342,  538,
-      317,  692,  539,  741,  694,  316,  316,  341,  342,  545,
-      545,  545,  545,  545,  545,  545,  545,  802,  706,  341,
-      342,  354,  958,  350,  350,  350,  350,  957,  712,  365,
-      366,  956,  317,  318,  356,  546,  546,  546,  357,  974,
-      717, 1010,  717,  365,  366,  718,  718,  718,  718,  955,
-      356,  341,  342,  317,  690,  365,  366,  317,  318,  557,
-      557,  536,  687,  365,  366,  341,  342,  547,  547,  547,
-      547,  559,  559,  559,  559,  817,  547,  547,  547,  559,
-      559,  559,  559,  573,  573,  573,  573,  341,  704,  983,
-
-      547,  547,  547,  547,  547,  547,  340,  340,  341,  342,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  954,  340,  340,  365,  366,  317,  318,  362,  340,
-      340,  340,  365,  366,  953,  570,  570,  570,  570,  952,
-      556,  556,  556,  556,  385,  340,  567,  951,  560,  560,
-      560,  553,  573,  573,  573,  573,  582,  582,  582,  582,
-      341,  342,  567,  582,  582,  582,  582,  553,  950,  818,
-      340,  340,  340,  340,  341,  342,  340,  340,  550,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  551,  551,
-
-      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-      551,  340,  551,  551,  551,  551,  551,  551,  551,  551,
-      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-      551,  551,  551,  551,  551,  551,  340,  340,  340,  340,
-      341,  342,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  949,  340,  340,  652,  652,  652,  652,
-      362,  340,  340,  340,  365,  722,  948,  227,  723,  365,
-      728,  227,  227,  729,  228,  227,  227,  340,  228,  228,
-      227,  230,  228,  228,  744,  230,  230,  228,  947,  230,
-      230,  341,  342,  976,  230, 1009,  552,  652,  652,  652,
-
-      652,  724,  340,  340,  365,  366,  730,  672,  672,  672,
-      672,  341,  710,  793,  365,  366,  794,  745,  378,  943,
-      374,  374,  374,  374,  795,  796,  672,  672,  672,  672,
-      923,  380,  365,  722,  821,  381,  317,  318,  341,  342,
-      317,  318,  317,  686,  341,  342,  687,  380,  365,  366,
-      365,  366,  682,  682,  682,  682,  682,  682,  682,  682,
-      700,  700,  700,  700,  561,  561,  561,  561,  922,  341,
-      708,  365,  366,  561,  561,  561,  317,  686,  705,  688,
-      687,  822,  317,  692,  365,  728,  693,  561,  561,  561,
-      561,  561,  561,  364,  364,  365,  366,  364,  364,  364,
-
-      364,  364,  364,  364,  364,  364,  364,  364,  921,  364,
-      364,  341,  342,  688,  825,  386,  364,  364,  364,  694,
-      341,  342,  341,  708,  550,  365,  366,  700,  700,  700,
-      700,  705,  364,  365,  366,  920,  365,  726,  365,  726,
-      919,  718,  718,  718,  718,  723,  984,  723, 1014,  718,
-      718,  718,  718,  736,  736,  736,  736,  364,  364,  364,
-      364,  365,  366,  364,  364,  564,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  364,  565,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  299,  314,  314,  314,  314,  314,  314,
+      682,  314,  314,  314,  683,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  299,  299,
+      318,  319,  781,  780,  779,  778,  777,  776,  775,  774,
+      773,  772,  771,  770,  769,  768,  535,  535,  535,  535,
+      767,  766,  765,  764,  763,  535,  535,  535,  762,  761,
+      760,  759,  758,  757,  756,  755,  754,  753,  743,  535,
+      535,  535,  535,  535,  535,  317,  317,  318,  319,  317,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+
+      741,  317,  317,  740,  677,  676,  671,  699,  317,  317,
+      317,  670,  669,  659,  657,  656,  651,  650,  649,  648,
+      488,  614,  598,  594,  317,  640,  635,  632,  630,  629,
+      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
+      618,  617,  613,  612,  611,  610,  609,  608,  607,  317,
+      317,  317,  317,  318,  319,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  338,  317,  317,  338,
+      338,  338,  338,  339,  317,  317,  317,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      317,  338,  338,  338,  338,  338,  338,  700,  338,  338,
 
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  364,  364,  364,  364,  365,  366,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      918,  364,  364,  365,  366,  317,  318,  386,  364,  364,
-      364,  317,  692,  365,  366,  693,  917,  564,  341,  704,
-      317,  318,  705,  916,  364,  836,  341,  704,  341,  710,
-      705,  915,  711,  341,  710,  365,  722,  711,  837,  723,
-      341,  342,  914,  566,  913,  838,  826,  912,  694,  364,
-      364,  575,  575,  575,  575,  706,  736,  736,  736,  736,
-
-      575,  575,  575,  706,  911,  712,  341,  342,  361,  887,
-      712,  910,  724,  909,  575,  575,  575,  575,  575,  575,
-      388,  388,  979,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  984,  388,  388,  852,  365,
-      366,  908,  407,  388,  388,  388,  365,  722,  365,  366,
-      723,  365,  728,  853,  907,  729,  385,  889,  227,  388,
-      854,  406,  891,  227,  926,  228,  926,  926,  337,  906,
-      228,  926,  230,  926,  926,  317,  318,  230,  341,  342,
-      406,  365,  366,  724,  388,  388,  388,  388,  730,  388,
-      388,  388,  578,  388,  388,  388,  388,  388,  388,  388,
+      338,  701,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  317,  317,  342,  343,  606,
+      605,  604,  603,  602,  601,  600,  597,  596,  593,  592,
+      591,  590,  589,  549,  549,  549,  549,  588,  587,  586,
+      585,  571,  549,  549,  549,  570,  392,  517,  516,  513,
+      512,  511,  499,  498,  276,  472,  549,  549,  549,  549,
+      549,  549,  341,  341,  342,  343,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  493,  341,  341,
+      492,  488,  460,  458,  717,  341,  341,  341,  435,  432,
+      430,  484,  421,  472,  268,  471,  465,  464,  461,  449,
+
+      448,  341,  441,  440,  439,  436,  426,  423,  422,  419,
+      418,  417,  167,  406,  392,  390,  313,  268,  294,  290,
+      276,  274,  256,  167,  256,  167,  341,  341,  341,  341,
+      342,  343,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  362,  341,  341,  362,  362,  362,  362,
+      363,  341,  341,  341,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  341,  362,  362,
+      362,  362,  362,  362,  718,  362,  362,  362,  719,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  341,  341,  366,  367,  174,  165, 1054,   96,
 
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  579,  579,  579,  579,  579,  579,  579,  579,
-      579,  579,  579,  579,  579,  388,  579,  579,  579,  579,
-      579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
-      579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
-      388,  388,  388,  388,  905,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  985,  388,  388,
-      317,  318,  979,  904,  407,  388,  388,  388,  365,  728,
-      227,  227,  729,  227,  903,  227,  227,  228,  228,  227,
-      228,  388,  228,  228,  230,  230,  228,  230,  902,  230,
-
-      230,  228,  901,  230,  228,  317,  318,  978,  267, 1011,
-      580,  267,  406,  900,  899,  730,  388,  388,  503,  503,
-      503,  503,  872,  924,  874,  873,  925,  503,  503,  503,
-      898,  927,  875,  897,  928,  341,  342,  980,  896, 1012,
-      895,  503,  503,  503,  503,  503,  503,  272,  272,  894,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  944,  272,  272,  972,  341,  342,  981,  663,
-      272,  272,  272,  972,  973,  945,  228,  227,  227,  973,
-      893,  807,  946,  267,  228,  228,  272,  365,  366,  983,
-      228,  230,  230,  876,  365,  366,  982,  267, 1013,  871,
-
-      870,  869,  868,  867,  866,  865,  864,  863,  862,  861,
-      860,  272,  272,  272,  272,  859,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  290,  272,
-      272,  290,  290,  290,  290,  291,  272,  272,  272,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      290,  290,  272,  290,  290,  290,  290,  290,  290,  664,
-      290,  290,  290,  665,  290,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  272,  272,  521,
-      521,  521,  521,  858,  857,  856,  855,  851,  521,  521,
-      521,  850,  849,  848,  847,  846,  845,  844,  843,  842,
-
-      841,  840,  521,  521,  521,  521,  521,  521,  298,  298,
-      298,  298,  298,  298,  839,  298,  298,  298,  298,  298,
-      298,  298,  298,  835,  298,  298,  834,  833,  578,  740,
-      678,  298,  298,  298,  830,  829,  828,  824,  820,  470,
-      814,  813,  810,  809,  506,  656,  804,  298,  803,  800,
-      799,  798,  797,  470,  637,  629,  792,  791,  790,  789,
-      788,  787,  784,  783,  782,  781,  780,  779,  778,  777,
-      776,  775,  298,  298,  298,  298,  298,  298,  298,  298,
-      774,  298,  298,  298,  298,  298,  298,  298,  298,  313,
-      298,  298,  313,  313,  313,  313,  314,  298,  298,  298,
-
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  298,  313,  313,  313,  313,  313,  313,
-      679,  313,  313,  313,  680,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  298,  298,
-      317,  318,  773,  772,  771,  770,  769,  768,  767,  766,
-      765,  764,  763,  762,  761,  760,  533,  533,  533,  533,
-      759,  758,  757,  756,  755,  533,  533,  533,  754,  753,
-      752,  751,  750,  740,  738,  737,  674,  673,  668,  533,
-      533,  533,  533,  533,  533,  316,  316,  317,  318,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-
-      667,  316,  316,  666,  656,  654,  653,  696,  316,  316,
-      316,  648,  647,  646,  645,  486,  611,  595,  591,  637,
-      632,  629,  627,  626,  316,  625,  624,  623,  622,  621,
-      620,  619,  618,  617,  616,  615,  614,  610,  609,  608,
-      607,  606,  605,  604,  603,  602,  601,  600,  599,  316,
-      316,  316,  316,  317,  318,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  337,  316,  316,  337,
-      337,  337,  337,  338,  316,  316,  316,  337,  337,  337,
-      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
-      316,  337,  337,  337,  337,  337,  337,  697,  337,  337,
-
-      337,  698,  337,  337,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  337,  337,  316,  316,  341,  342,  598,
-      597,  594,  593,  590,  589,  588,  587,  586,  585,  584,
-      583,  569,  568,  547,  547,  547,  547,  391,  515,  514,
-      511,  510,  547,  547,  547,  509,  497,  496,  275,  470,
-      491,  490,  486,  458,  456,  433,  547,  547,  547,  547,
-      547,  547,  340,  340,  341,  342,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  430,  340,  340,
-      428,  482,  419,  470,  714,  340,  340,  340,  267,  469,
-      463,  462,  459,  447,  446,  439,  438,  437,  434,  424,
-
-      421,  340,  420,  417,  416,  167,  405,  391,  389,  312,
-      267,  293,  289,  275,  273,  255,  167,  255,  167,  174,
-      165, 1046,   96,   65,   57, 1046,  340,  340,  340,  340,
-      341,  342,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  361,  340,  340,  361,  361,  361,  361,
-      362,  340,  340,  340,  361,  361,  361,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  340,  361,  361,
-      361,  361,  361,  361,  715,  361,  361,  361,  716,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
-      361,  361,  340,  340,  365,  366, 1046, 1046, 1046, 1046,
-
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-      561,  561,  561,  561, 1046, 1046, 1046, 1046, 1046,  561,
-      561,  561, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046,  561,  561,  561,  561,  561,  561,  364,
-      364,  365,  366,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364, 1046,  364,  364, 1046, 1046, 1046,
-     1046,  732,  364,  364,  364, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  364, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+       65,   57, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+      563,  563,  563,  563, 1054, 1054, 1054, 1054, 1054,  563,
+      563,  563, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054,  563,  563,  563,  563,  563,  563,  365,
+      365,  366,  367,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365, 1054,  365,  365, 1054, 1054, 1054,
+     1054,  735,  365,  365,  365, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  365, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+
+     1054, 1054, 1054,  365,  365,  365,  365,  366,  367,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      386,  365,  365,  386,  386,  386,  386,  387,  365,  365,
+      365,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  386,  365,  386,  386,  386,  386,  386,
+      386,  736,  386,  386,  386,  737,  386,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  365,
+      365,  577,  577,  577,  577, 1054, 1054, 1054, 1054, 1054,
+      577,  577,  577, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054,  577,  577,  577,  577,  577,  577,
+
+      389,  389, 1054,  389,  389,  389,  389,  389,  389,  389,
+      389,  389,  389,  389,  389, 1054,  389,  389, 1054, 1054,
+     1054, 1054,  750,  389,  389,  389, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  389,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054,  389,  389,  389,  389, 1054,  389,
+      389,  389,  389,  389,  389,  389,  389,  389,  389,  389,
+      389,  407,  389,  389,  407,  407,  407,  407,  408,  389,
+      389,  389,  407,  407,  407,  407,  407,  407,  407,  407,
 
-     1046, 1046, 1046,  364,  364,  364,  364,  365,  366,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      385,  364,  364,  385,  385,  385,  385,  386,  364,  364,
-      364,  385,  385,  385,  385,  385,  385,  385,  385,  385,
-      385,  385,  385,  385,  364,  385,  385,  385,  385,  385,
-      385,  733,  385,  385,  385,  734,  385,  385,  385,  385,
-      385,  385,  385,  385,  385,  385,  385,  385,  385,  364,
-      364,  575,  575,  575,  575, 1046, 1046, 1046, 1046, 1046,
-      575,  575,  575, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046,  575,  575,  575,  575,  575,  575,
-
-      388,  388, 1046,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388, 1046,  388,  388, 1046, 1046,
-     1046, 1046,  747,  388,  388,  388, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  388,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046,  388,  388,  388,  388, 1046,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  406,  388,  388,  406,  406,  406,  406,  407,  388,
-      388,  388,  406,  406,  406,  406,  406,  406,  406,  406,
+      407,  407,  407,  407,  407,  389,  407,  407,  407,  407,
+      407,  407,  751,  407,  407,  407,  752,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
+      389,  389,  273,  273, 1054,  273,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273, 1054,  273,  273,
+     1054, 1054, 1054, 1054,  666,  273,  273,  273, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054,  273, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054,  273,  273,  273,  273,
+
+     1054,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  273,  273, 1054,  273,  273, 1054, 1054, 1054, 1054,
+      292,  273,  273,  273, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054,  273, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054,  809, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054,  273,  273,  273,  273, 1054,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  273, 1054,
+      273,  273, 1054, 1054, 1054, 1054,  292,  273,  273,  273,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+
+     1054, 1054, 1054,  273, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054,  810, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  273,  273,
+      299,  299,  299,  299,  299,  299, 1054,  299,  299,  299,
+      299,  299,  299,  299,  299, 1054,  299,  299, 1054, 1054,
+     1054, 1054,  681,  299,  299,  299, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  299,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054,  299,  299,  299,  299,  299,  299,
+
+      299,  299, 1054,  299,  299,  299,  299,  299,  299,  299,
+      299, 1054,  299,  299, 1054, 1054, 1054, 1054,  315,  299,
+      299,  299, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054,  299, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054,  819, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+      299,  299,  299,  299,  299,  299,  299,  299, 1054,  299,
+      299,  299,  299,  299,  299,  299,  299, 1054,  299,  299,
+     1054, 1054, 1054, 1054,  315,  299,  299,  299, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+
+     1054,  299, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054,  820, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054,  299,  299,  317,  317,
+      318,  319,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  317, 1054,  317,  317, 1054, 1054, 1054, 1054,
+      699,  317,  317,  317, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054,  317, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054,  317,  317,  317,  317,  318,  319,  317,  317,
 
-      406,  406,  406,  406,  406,  388,  406,  406,  406,  406,
-      406,  406,  748,  406,  406,  406,  749,  406,  406,  406,
-      406,  406,  406,  406,  406,  406,  406,  406,  406,  406,
-      388,  388,  272,  272, 1046,  272,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272, 1046,  272,  272,
-     1046, 1046, 1046, 1046,  663,  272,  272,  272, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046,  272, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046,  272,  272,  272,  272,
-
-     1046,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272, 1046,  272,  272, 1046, 1046, 1046, 1046,
-      291,  272,  272,  272, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046,  272, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046,  805, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046,  272,  272,  272,  272, 1046,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272, 1046,
-      272,  272, 1046, 1046, 1046, 1046,  291,  272,  272,  272,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-
-     1046, 1046, 1046,  272, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046,  806, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  272,  272,
-      298,  298,  298,  298,  298,  298, 1046,  298,  298,  298,
-      298,  298,  298,  298,  298, 1046,  298,  298, 1046, 1046,
-     1046, 1046,  678,  298,  298,  298, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  298,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046,  298,  298,  298,  298,  298,  298,
-
-      298,  298, 1046,  298,  298,  298,  298,  298,  298,  298,
-      298, 1046,  298,  298, 1046, 1046, 1046, 1046,  314,  298,
-      298,  298, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046,  298, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046,  815, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-      298,  298,  298,  298,  298,  298,  298,  298, 1046,  298,
-      298,  298,  298,  298,  298,  298,  298, 1046,  298,  298,
-     1046, 1046, 1046, 1046,  314,  298,  298,  298, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-
-     1046,  298, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046,  816, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046,  298,  298,  316,  316,
-      317,  318,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316, 1046,  316,  316, 1046, 1046, 1046, 1046,
-      696,  316,  316,  316, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046,  316, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046,  316,  316,  316,  316,  317,  318,  316,  316,
-
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  337,
-      316,  316,  337,  337,  337,  337,  338,  316,  316,  316,
-      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  316,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  819,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  337,  337,  337,  337,  337,  316,  316,
-      340,  340,  341,  342,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340, 1046,  340,  340, 1046, 1046,
-     1046, 1046,  714,  340,  340,  340, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  340,
-
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046,  340,  340,  340,  340,  341,  342,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  361,  340,  340,  361,  361,  361,  361,  362,  340,
-      340,  340,  361,  361,  361,  361,  361,  361,  361,  361,
-      361,  361,  361,  361,  361,  340,  361,  361,  361,  361,
-      361,  361,  361,  361,  361,  823,  361,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
-      340,  340,  364,  364,  365,  366,  364,  364,  364,  364,
-
-      364,  364,  364,  364,  364,  364,  364, 1046,  364,  364,
-     1046, 1046, 1046, 1046,  732,  364,  364,  364, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046,  364, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046,  364,  364,  364,  364,
-      365,  366,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  385,  364,  364,  385,  385,  385,  385,
-      386,  364,  364,  364,  385,  385,  385,  385,  385,  385,
-      385,  385,  385,  385,  385,  385,  385,  364,  385,  385,
-
-      385,  385,  385,  385,  385,  385,  385,  827,  385,  385,
-      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
-      385,  385,  364,  364,  388,  388, 1046,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388, 1046,
-      388,  388, 1046, 1046, 1046, 1046,  747,  388,  388,  388,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046,  388, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  388,  388,
-      388,  388, 1046,  388,  388,  388,  388,  388,  388,  388,
-
-      388,  388,  388,  388,  388, 1046,  388,  388, 1046, 1046,
-     1046, 1046,  407,  388,  388,  388, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  388,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  831,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046,  388,  388,  388,  388, 1046,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388, 1046,  388,  388, 1046, 1046, 1046, 1046,  407,  388,
-      388,  388, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046,  388, 1046, 1046, 1046, 1046,
-
-     1046, 1046, 1046, 1046, 1046,  832, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-      388,  388,  272,  272, 1046,  272,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272, 1046,  272,  272,
-     1046, 1046, 1046, 1046,  291,  272,  272,  272, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046,  272, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046,  879, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046,  272,  272,  272,  272,
-     1046,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-
-      272,  272,  272, 1046,  272,  272, 1046, 1046, 1046, 1046,
-      291,  272,  272,  272, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046,  272, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-      880, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046,  272,  272,  298,  298,  298,  298,  298,  298,
-     1046,  298,  298,  298,  298,  298,  298,  298,  298, 1046,
-      298,  298, 1046, 1046, 1046, 1046,  314,  298,  298,  298,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046,  298, 1046, 1046, 1046, 1046, 1046, 1046,
-
-     1046, 1046, 1046, 1046,  883, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  298,  298,
-      298,  298,  298,  298,  298,  298, 1046,  298,  298,  298,
-      298,  298,  298,  298,  298, 1046,  298,  298, 1046, 1046,
-     1046, 1046,  314,  298,  298,  298, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  298,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046,  884, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046,  298,  298,  316,  316,  317,  318,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-
-      316,  337,  316,  316,  337,  337,  337,  337,  338,  316,
-      316,  316,  337,  337,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  337,  337,  316,  337,  337,  337,  337,
-      337,  337,  337,  337,  337,  337,  885,  337,  337,  337,
-      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
-      316,  316,  166, 1046,  166,  166,  166,  166,  166,  166,
-      166,  166,  166,  169, 1046, 1046,  169,  169,  177, 1046,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  229,
-      229,  229,  229,  229,  229,  229,  229,  259,  259,  259,
-      259,  262, 1046,  262, 1046,  262,  262,  262,  262,  266,
-
-      266,  266,  266,  266,  266,  266,  272, 1046,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  274, 1046,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  277, 1046,
-      277,  277,  277,  277,  277,  277,  277,  277,  277,  290,
-     1046,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      228,  228,  228,  228,  228,  228,  228,  298,  298, 1046,
-      298,  298,  298,  298,  298,  298,  298,  298,  299,  299,
-      299,  299,  299,  299,  299,  299,  299,  299,  299,  313,
-      313, 1046,  313,  313,  313,  313,  313,  313,  313,  313,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-
-      316,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  323,  323,  323,  323,  323,  323,  323,  323,
-      323,  323,  323,  337,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  337,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  347,  347,  347,  347,
-      347,  347,  347,  347,  347,  347,  347,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-
-      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
-      371,  385,  385,  385,  385,  385,  385,  385,  385,  385,
-      385,  385,  388, 1046,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  390, 1046,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  393, 1046,  393,  393,  393,  393,
-      393,  393,  393,  393,  393,  406, 1046,  406,  406,  406,
-      406,  406,  406,  406,  406,  406,  169, 1046, 1046,  169,
-      169,  177, 1046,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  415, 1046, 1046,  415,  415,  415,  445, 1046,
-     1046,  445,  228,  228,  228,  228,  228,  228,  228,  229,
-
-      229,  229,  229,  229,  229,  229,  229,  471, 1046, 1046,
-     1046, 1046,  471,  471,  471,  471,  485,  485,  485,  485,
-      485,  485,  488,  488,  488,  488,  489, 1046,  489,  489,
-      489,  489,  266,  266,  266,  266,  266,  266,  266,  272,
-     1046,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      274, 1046,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  277, 1046,  277,  277,  277,  277,  277,  277,  277,
-      277,  277,  290, 1046,  290,  290,  290,  290,  290,  290,
-      290,  290,  290,  298,  298, 1046,  298,  298,  298,  298,
-      298,  298,  298,  298,  299,  299,  299,  299,  299,  299,
-
-      299,  299,  299,  299,  299,  313,  313, 1046,  313,  313,
-      313,  313,  313,  313,  313,  313,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  323,  323,
-      323,  323,  323,  323,  323,  323,  323,  323,  323,  337,
-      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  347,  347,  347,  347,  347,  347,  347,  347,
-      347,  347,  347,  361,  361,  361,  361,  361,  361,  361,
-
-      361,  361,  361,  361,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  371,  371,  371,  371,
-      371,  371,  371,  371,  371,  371,  371,  385,  385,  385,
-      385,  385,  385,  385,  385,  385,  385,  385,  388, 1046,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  390,
-     1046,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      393, 1046,  393,  393,  393,  393,  393,  393,  393,  393,
-      393,  406, 1046,  406,  406,  406,  406,  406,  406,  406,
-      406,  406,  169, 1046, 1046,  169,  169,  415, 1046, 1046,
-
-      415,  415,  415,  445, 1046, 1046,  445,  628, 1046,  628,
-      628,  628,  628,  628,  628,  628,  628,  628,  631, 1046,
-      631,  631,  631,  631,  631,  631,  631,  631,  631,  633,
-     1046,  633,  633,  633,  633,  633,  633,  633,  633,  633,
-      636,  636,  636,  636,  636,  636,  636,  229,  229,  229,
-      229,  229,  229,  229,  229,  485,  485,  485,  485,  485,
-      485,  644, 1046,  644,  644,  644,  644,  489, 1046,  489,
-      489,  489,  489,  266,  266,  266,  266,  266,  266,  266,
-      272, 1046,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  655, 1046,  655,  655,  655,  655,  655,  655,  655,
-
-      655,  655,  658, 1046,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  659, 1046,  659,  659,  659,  659,  659,
-      659,  659,  659,  659,  662, 1046,  662,  662,  662,  662,
-      662,  662,  662,  662,  662,  228,  228,  228,  228,  228,
-      228,  228,  298,  298, 1046,  298,  298,  298,  298,  298,
-      298,  298,  298,  675,  675,  675,  675,  675,  675,  675,
-      675,  675,  675,  675,  677,  677, 1046,  677,  677,  677,
-      677,  677,  677,  677,  677,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  685,  685,  685,  685,
-      685,  685,  685,  685,  685,  685,  685,  689,  689,  689,
-
-      689,  689,  689,  689,  689,  689,  689,  689,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  695,
-      695,  695,  695,  695,  695,  695,  695,  695,  695,  695,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  703,  703,  703,  703,  703,  703,  703,  703,  703,
-      703,  703,  707,  707,  707,  707,  707,  707,  707,  707,
-      707,  707,  707,  709,  709,  709,  709,  709,  709,  709,
-      709,  709,  709,  709,  713,  713,  713,  713,  713,  713,
-      713,  713,  713,  713,  713,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  721,  721,  721,  721,
-
-      721,  721,  721,  721,  721,  721,  721,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  727,  727,
-      727,  727,  727,  727,  727,  727,  727,  727,  727,  731,
-      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
-      388, 1046,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  739, 1046,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  742, 1046,  742,  742,  742,  742,  742,  742,
-      742,  742,  742,  743, 1046,  743,  743,  743,  743,  743,
-      743,  743,  743,  743,  746, 1046,  746,  746,  746,  746,
-      746,  746,  746,  746,  746,  415, 1046, 1046,  415,  415,
-
-      415,  628, 1046,  628,  628,  628,  628,  628,  628,  628,
-      628,  628,  631, 1046,  631,  631,  631,  631,  631,  631,
-      631,  631,  631,  633, 1046,  633,  633,  633,  633,  633,
-      633,  633,  633,  633,  636,  636,  636,  636,  636,  636,
-      636,  229,  229,  229,  229,  229,  229,  229,  229,  644,
-     1046,  644,  644,  644,  644,  489, 1046,  489,  489,  489,
-      489,  266,  266,  266,  266,  266,  266,  266,  272, 1046,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  655,
-     1046,  655,  655,  655,  655,  655,  655,  655,  655,  655,
-      658, 1046,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  659, 1046,  659,  659,  659,  659,  659,  659,  659,
-      659,  659,  662, 1046,  662,  662,  662,  662,  662,  662,
-      662,  662,  662,  290, 1046,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  228,  228,  228,  228,  228,  228,
-      228,  298,  298, 1046,  298,  298,  298,  298,  298,  298,
-      298,  298,  675,  675,  675,  675,  675,  675,  675,  675,
-      675,  675,  675,  677,  677, 1046,  677,  677,  677,  677,
-      677,  677,  677,  677,  313,  313, 1046,  313,  313,  313,
-      313,  313,  313,  313,  313,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  685,  685,  685,  685,
-
-      685,  685,  685,  685,  685,  685,  685,  689,  689,  689,
-      689,  689,  689,  689,  689,  689,  689,  689,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  695,
-      695,  695,  695,  695,  695,  695,  695,  695,  695,  695,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  703,  703,  703,  703,  703,  703,  703,  703,  703,
-      703,  703,  707,  707,  707,  707,  707,  707,  707,  707,
-      707,  707,  707,  709,  709,  709,  709,  709,  709,  709,
-      709,  709,  709,  709,  713,  713,  713,  713,  713,  713,
-      713,  713,  713,  713,  713,  364,  364,  364,  364,  364,
-
-      364,  364,  364,  364,  364,  364,  721,  721,  721,  721,
-      721,  721,  721,  721,  721,  721,  721,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  727,  727,
-      727,  727,  727,  727,  727,  727,  727,  727,  727,  731,
-      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
-      388, 1046,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  739, 1046,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  742, 1046,  742,  742,  742,  742,  742,  742,
-      742,  742,  742,  743, 1046,  743,  743,  743,  743,  743,
-      743,  743,  743,  743,  746, 1046,  746,  746,  746,  746,
-
-      746,  746,  746,  746,  746,  406, 1046,  406,  406,  406,
-      406,  406,  406,  406,  406,  406,  415, 1046, 1046,  415,
-      415,  415,  229,  229,  229,  229,  229,  229,  229,  229,
-      489, 1046,  489,  489,  489,  489,  266,  266,  266,  266,
-      266,  266,  266,  272, 1046,  272,  272,  272,  272,  272,
-      272,  272,  272,  272,  290, 1046,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  228,  228,  228,  228,  228,
-      228,  228,  298,  298, 1046,  298,  298,  298,  298,  298,
-      298,  298,  298,  313,  313, 1046,  313,  313,  313,  313,
-      313,  313,  313,  313,  316,  316,  316,  316,  316,  316,
-
-      316,  316,  316,  316,  316,   23, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  338,
+      317,  317,  338,  338,  338,  338,  339,  317,  317,  317,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  317,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  823,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  317,  317,
+      341,  341,  342,  343,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341, 1054,  341,  341, 1054, 1054,
+     1054, 1054,  717,  341,  341,  341, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  341,
+
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054,  341,  341,  341,  341,  342,  343,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  362,  341,  341,  362,  362,  362,  362,  363,  341,
+      341,  341,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  341,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  827,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      341,  341,  365,  365,  366,  367,  365,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  365, 1054,  365,  365,
+     1054, 1054, 1054, 1054,  735,  365,  365,  365, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054,  365, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054,  365,  365,  365,  365,
+      366,  367,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  386,  365,  365,  386,  386,  386,  386,
+      387,  365,  365,  365,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  365,  386,  386,
+
+      386,  386,  386,  386,  386,  386,  386,  831,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  365,  365,  389,  389, 1054,  389,  389,  389,
+      389,  389,  389,  389,  389,  389,  389,  389,  389, 1054,
+      389,  389, 1054, 1054, 1054, 1054,  750,  389,  389,  389,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054,  389, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  389,  389,
+      389,  389, 1054,  389,  389,  389,  389,  389,  389,  389,
+
+      389,  389,  389,  389,  389, 1054,  389,  389, 1054, 1054,
+     1054, 1054,  408,  389,  389,  389, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  389,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  835,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054,  389,  389,  389,  389, 1054,  389,
+      389,  389,  389,  389,  389,  389,  389,  389,  389,  389,
+      389, 1054,  389,  389, 1054, 1054, 1054, 1054,  408,  389,
+      389,  389, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054,  389, 1054, 1054, 1054, 1054,
+
+     1054, 1054, 1054, 1054, 1054,  836, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+      389,  389,  273,  273, 1054,  273,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273, 1054,  273,  273,
+     1054, 1054, 1054, 1054,  292,  273,  273,  273, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054,  273, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054,  884, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054,  273,  273,  273,  273,
+     1054,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+
+      273,  273,  273, 1054,  273,  273, 1054, 1054, 1054, 1054,
+      292,  273,  273,  273, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054,  273, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+      885, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054,  273,  273,  299,  299,  299,  299,  299,  299,
+     1054,  299,  299,  299,  299,  299,  299,  299,  299, 1054,
+      299,  299, 1054, 1054, 1054, 1054,  315,  299,  299,  299,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054,  299, 1054, 1054, 1054, 1054, 1054, 1054,
+
+     1054, 1054, 1054, 1054,  888, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  299,  299,
+      299,  299,  299,  299,  299,  299, 1054,  299,  299,  299,
+      299,  299,  299,  299,  299, 1054,  299,  299, 1054, 1054,
+     1054, 1054,  315,  299,  299,  299, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,  299,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054,  889, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054,  299,  299,  317,  317,  318,  319,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+
+      317,  338,  317,  317,  338,  338,  338,  338,  339,  317,
+      317,  317,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  317,  338,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  890,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      317,  317,  166, 1054,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  169, 1054, 1054,  169,  169,  177, 1054,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  230,
+      230,  230,  230,  230,  230,  230,  230,  260,  260,  260,
+      260,  263, 1054,  263, 1054,  263,  263,  263,  263,  267,
+
+      267,  267,  267,  267,  267,  267,  273, 1054,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  275, 1054,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  278, 1054,
+      278,  278,  278,  278,  278,  278,  278,  278,  278,  291,
+     1054,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+      229,  229,  229,  229,  229,  229,  229,  299,  299, 1054,
+      299,  299,  299,  299,  299,  299,  299,  299,  300,  300,
+      300,  300,  300,  300,  300,  300,  300,  300,  300,  314,
+      314, 1054,  314,  314,  314,  314,  314,  314,  314,  314,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+
+      317,  320,  320,  320,  320,  320,  320,  320,  320,  320,
+      320,  320,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  338,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  348,  348,  348,  348,
+      348,  348,  348,  348,  348,  348,  348,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  389, 1054,  389,  389,  389,  389,  389,  389,
+      389,  389,  389,  391, 1054,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  394, 1054,  394,  394,  394,  394,
+      394,  394,  394,  394,  394,  407, 1054,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  169, 1054, 1054,  169,
+      169,  177, 1054,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  416, 1054, 1054,  416,  416,  416,  447, 1054,
+     1054,  447,  229,  229,  229,  229,  229,  229,  229,  230,
+
+      230,  230,  230,  230,  230,  230,  230,  473, 1054, 1054,
+     1054, 1054,  473,  473,  473,  473,  487,  487,  487,  487,
+      487,  487,  490,  490,  490,  490,  491, 1054,  491,  491,
+      491,  491,  267,  267,  267,  267,  267,  267,  267,  273,
+     1054,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      275, 1054,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  278, 1054,  278,  278,  278,  278,  278,  278,  278,
+      278,  278,  291, 1054,  291,  291,  291,  291,  291,  291,
+      291,  291,  291,  299,  299, 1054,  299,  299,  299,  299,
+      299,  299,  299,  299,  300,  300,  300,  300,  300,  300,
+
+      300,  300,  300,  300,  300,  314,  314, 1054,  314,  314,
+      314,  314,  314,  314,  314,  314,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  320,  320,  320,
+      320,  320,  320,  320,  320,  320,  320,  320,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  348,  348,  348,  348,  348,  348,  348,  348,
+      348,  348,  348,  362,  362,  362,  362,  362,  362,  362,
+
+      362,  362,  362,  362,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  389, 1054,
+      389,  389,  389,  389,  389,  389,  389,  389,  389,  391,
+     1054,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      394, 1054,  394,  394,  394,  394,  394,  394,  394,  394,
+      394,  407, 1054,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  169, 1054, 1054,  169,  169,  416, 1054, 1054,
+
+      416,  416,  416,  447, 1054, 1054,  447,  631, 1054,  631,
+      631,  631,  631,  631,  631,  631,  631,  631,  634, 1054,
+      634,  634,  634,  634,  634,  634,  634,  634,  634,  636,
+     1054,  636,  636,  636,  636,  636,  636,  636,  636,  636,
+      639,  639,  639,  639,  639,  639,  639,  230,  230,  230,
+      230,  230,  230,  230,  230,  487,  487,  487,  487,  487,
+      487,  647, 1054,  647,  647,  647,  647,  491, 1054,  491,
+      491,  491,  491,  267,  267,  267,  267,  267,  267,  267,
+      273, 1054,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  658, 1054,  658,  658,  658,  658,  658,  658,  658,
+
+      658,  658,  661, 1054,  661,  661,  661,  661,  661,  661,
+      661,  661,  661,  662, 1054,  662,  662,  662,  662,  662,
+      662,  662,  662,  662,  665, 1054,  665,  665,  665,  665,
+      665,  665,  665,  665,  665,  229,  229,  229,  229,  229,
+      229,  229,  299,  299, 1054,  299,  299,  299,  299,  299,
+      299,  299,  299,  678,  678,  678,  678,  678,  678,  678,
+      678,  678,  678,  678,  680,  680, 1054,  680,  680,  680,
+      680,  680,  680,  680,  680,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  688,  688,  688,  688,
+      688,  688,  688,  688,  688,  688,  688,  692,  692,  692,
+
+      692,  692,  692,  692,  692,  692,  692,  692,  694,  694,
+      694,  694,  694,  694,  694,  694,  694,  694,  694,  698,
+      698,  698,  698,  698,  698,  698,  698,  698,  698,  698,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  706,  706,  706,  706,  706,  706,  706,  706,  706,
+      706,  706,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  716,  716,  716,  716,  716,  716,
+      716,  716,  716,  716,  716,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  724,  724,  724,  724,
+
+      724,  724,  724,  724,  724,  724,  724,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      389, 1054,  389,  389,  389,  389,  389,  389,  389,  389,
+      389,  742, 1054,  742,  742,  742,  742,  742,  742,  742,
+      742,  742,  745, 1054,  745,  745,  745,  745,  745,  745,
+      745,  745,  745,  746, 1054,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  749, 1054,  749,  749,  749,  749,
+      749,  749,  749,  749,  749,  416, 1054, 1054,  416,  416,
+
+      416,  631, 1054,  631,  631,  631,  631,  631,  631,  631,
+      631,  631,  634, 1054,  634,  634,  634,  634,  634,  634,
+      634,  634,  634,  636, 1054,  636,  636,  636,  636,  636,
+      636,  636,  636,  636,  639,  639,  639,  639,  639,  639,
+      639,  230,  230,  230,  230,  230,  230,  230,  230,  647,
+     1054,  647,  647,  647,  647,  491, 1054,  491,  491,  491,
+      491,  267,  267,  267,  267,  267,  267,  267,  273, 1054,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  658,
+     1054,  658,  658,  658,  658,  658,  658,  658,  658,  658,
+      661, 1054,  661,  661,  661,  661,  661,  661,  661,  661,
+
+      661,  662, 1054,  662,  662,  662,  662,  662,  662,  662,
+      662,  662,  665, 1054,  665,  665,  665,  665,  665,  665,
+      665,  665,  665,  291, 1054,  291,  291,  291,  291,  291,
+      291,  291,  291,  291,  229,  229,  229,  229,  229,  229,
+      229,  299,  299, 1054,  299,  299,  299,  299,  299,  299,
+      299,  299,  678,  678,  678,  678,  678,  678,  678,  678,
+      678,  678,  678,  680,  680, 1054,  680,  680,  680,  680,
+      680,  680,  680,  680,  314,  314, 1054,  314,  314,  314,
+      314,  314,  314,  314,  314,  317,  317,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  688,  688,  688,  688,
+
+      688,  688,  688,  688,  688,  688,  688,  692,  692,  692,
+      692,  692,  692,  692,  692,  692,  692,  692,  694,  694,
+      694,  694,  694,  694,  694,  694,  694,  694,  694,  698,
+      698,  698,  698,  698,  698,  698,  698,  698,  698,  698,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  706,  706,  706,  706,  706,  706,  706,  706,  706,
+      706,  706,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  716,  716,  716,  716,  716,  716,
+      716,  716,  716,  716,  716,  365,  365,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  724,  724,  724,  724,
+      724,  724,  724,  724,  724,  724,  724,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      389, 1054,  389,  389,  389,  389,  389,  389,  389,  389,
+      389,  742, 1054,  742,  742,  742,  742,  742,  742,  742,
+      742,  742,  745, 1054,  745,  745,  745,  745,  745,  745,
+      745,  745,  745,  746, 1054,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  749, 1054,  749,  749,  749,  749,
+
+      749,  749,  749,  749,  749,  407, 1054,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  416, 1054, 1054,  416,
+      416,  416,  230,  230,  230,  230,  230,  230,  230,  230,
+      491, 1054,  491,  491,  491,  491,  267,  267,  267,  267,
+      267,  267,  267,  273, 1054,  273,  273,  273,  273,  273,
+      273,  273,  273,  273,  291, 1054,  291,  291,  291,  291,
+      291,  291,  291,  291,  291,  229,  229,  229,  229,  229,
+      229,  229,  299,  299, 1054,  299,  299,  299,  299,  299,
+      299,  299,  299,  314,  314, 1054,  314,  314,  314,  314,
+      314,  314,  314,  314,  317,  317,  317,  317,  317,  317,
+
+      317,  317,  317,  317,  317,   23, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054
     } ;
 
 static yyconst flex_int16_t yy_chk[7573] =
@@ -1658,12 +1661,12 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    3,  218,    3,    3,
-        3,   29,   44,   44,    3,    3,  218,    3,    3,   13,
+        1,    1,    1,    1,    1,    1,    3,  219,    3,    3,
+        3,   29,   44,   44,    3,    3,  219,    3,    3,   13,
         3,    3,    3,    6,   14,    6,    6,    3,    3,    3,
         3,   13,   13,   13,   13,   35,   14,   14,   14,   14,
 
-       25, 1040,   25,   25,   29,  102,    6,   35,   27,   27,
+       25, 1048,   25,   25,   29,  102,    6,   35,   27,   27,
        27,   27,    3,   33,    3,   25,   31,    3,   31,    3,
        31,   31,    3,   27,    3,   45,   45,   33,  102,    3,
         3,    5,    5,    5,    5,    5,    5,    5,    5,    5,
@@ -1724,767 +1727,767 @@
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   36,
-     1036,   36,   36,   36,   36,   40,   38,   36,   38,   38,
-       38,   38,   40,  621,   38,   39,   39,   39,   39,   46,
-       46,   39,  621,   39,   39,   39,   39,   39,   39,   39,
+     1044,   36,   36,   36,   36,   40,   38,   36,   38,   38,
+       38,   38,   40,  624,   38,   39,   39,   39,   39,   46,
+       46,   39,  624,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   56,   39,   39,   39,
 
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
        39,   41,   47,   41,   41,   41,   41,   57,   57,   47,
-      192,   70,   49,   41,   41,  192,   47,   56,   41,   49,
+      193,   70,   49,   41,   41,  193,   47,   56,   41,   49,
        41,   54,   55,   41,  114,  114,   49,   41,   54,   42,
        41,   42,   42,   42,   42,   54,   50,   58,   41,   58,
-       58,   48,   42,   50,   70, 1035,   42,   41,   48,   51,
+       58,   48,   42,   50,   70, 1043,   42,   41,   48,   51,
        50,   48,   48,   48,   48,   48,   51,   49,   42,   43,
       116,  116,   55,   51,   43,   54,   78,   43,   43,   43,
-       43,   43,   43,   78,   50,   43,   52,   43,   43,  824,
+       43,   43,   43,   78,   50,   43,   52,   43,   43,  828,
 
-       50,   53,  824,   52,   87,  195,   51,  113,   53,  195,
-       52,   59,   59,   59,   59,   53,  196,   62,  196,   60,
+       50,   53,  828,   52,   87,  196,   51,  113,   53,  196,
+       52,   59,   59,   59,   59,   53,  197,   62,  197,   60,
        51,   60,   60,   60,   60,   62,   62,   62,   62,   62,
        62,   67,   67,   67,   67,   64,   62,   87,   53,   52,
-      113, 1034,   64,   69,   69,   69,   69,  126,  126,   64,
-      153,   53,   61,   71, 1032,   71,   74,   71,   71,   73,
-      216,   73,   73,   73,   73,  216,   74,   74,   74,   74,
+      113, 1042,   64,   69,   69,   69,   69,  126,  126,   64,
+      153,   53,   61,   71, 1040,   71,   74,   71,   71,   73,
+      217,   73,   73,   73,   73,  217,   74,   74,   74,   74,
        61,   61,   64,   61,   80,   61,  166,   61,   61,   61,
        61,   80,   61,  153,   61,   61,   61,   81,   81,   81,
-       81,   61, 1031,   74,   74,  128,  128,   76,   74,   76,
+       81,   61, 1039,   74,   74,  128,  128,   76,   74,   76,
 
-       76,   76,   76,  811,   80,   82,   82,   82,   82,  166,
-       76,  197,   79,  197,   76,   79,   79,   79,   79,   79,
-       89, 1029,   89,   89,   89,   89,   76,   90,   90,   90,
-       90,  811,   92,   99,   99,   99,   99,  117,  117,   92,
-      199,  117,   92,  105,  118,  118,   92,  105,   98,   98,
-       98,   98,  105,  118,  199,   90,  255,   92,  297,   90,
-       91,  255,   91,   91,   91,   91,   92,  107,  107,  107,
-      107,  109,   91,   91,  117,  189,   98,   91,  109,   91,
-       98,  109,   91,  123,  123,  109,   91,  189,  106,   91,
-      106,  106,  106,  106,  297,  107,  109,   91, 1028,  107,
+       76,   76,   76,  815,   80,   82,   82,   82,   82,  166,
+       76,  198,   79,  198,   76,   79,   79,   79,   79,   79,
+       89, 1037,   89,   89,   89,   89,   76,   90,   90,   90,
+       90,  815,   92,   99,   99,   99,   99,  117,  117,   92,
+      200,  117,   92,  105,  118,  118,   92,  105,   98,   98,
+       98,   98,  105,  118,  200,   90,  256,   92,  298,   90,
+       91,  256,   91,   91,   91,   91,   92,  107,  107,  107,
+      107,  109,   91,   91,  117,  190,   98,   91,  109,   91,
+       98,  109,   91,  123,  123,  109,   91,  190,  106,   91,
+      106,  106,  106,  106,  298,  107,  109,   91, 1036,  107,
 
       130,  130,  138,  138,  123,  109,   91,   94,   94,  130,
        94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   94, 1025,   94,   94,  213,  119,  119,  266,   94,
-       94,   94,   94,  213,  100,  266,  100,  100,  100,  100,
-      119, 1022,  119,  119,  119,  119,   94,  100,  131,  131,
-     1021,  100,  140,  140,  129,  129,  205,  205,  129,  142,
-      142,  274,  131,  100,  131,  131,  131,  131,  142,  212,
-      212,   94,   94,   95,   95, 1020,   95,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95, 1018,   95,
-       95,  129,  120,  120,  274,   95,   95,   95,   95,  155,
-
-      215,  155,  155,  155,  155,  132,  132, 1017,  120,  120,
-      120,  120,   95, 1016,  135,  135,  215,  427,   95,  427,
-      122,  132,  132,  132,  132,  141,  141,  122, 1015,  141,
-      122,  208,  208,  208,  122,  135,  120,   95,   95,  108,
-      120,  108,  108,  108,  108,  122,  226,  226, 1008,  132,
-      134,  108,  108,  132,  122,  194,  108,  134,  108,  194,
-      134,  108,  141,  194,  134,  108,  229,  146,  108,  163,
-     1003,  163,  163,  229,  146,  134,  108,  146,  252,  252,
-      229,  146,  284,  284,  134,  108,  111,  111,  111,  111,
+       94,   94, 1033,   94,   94,  214,  119,  119,  267,   94,
+       94,   94,   94,  214,  100,  267,  100,  100,  100,  100,
+      119, 1030,  119,  119,  119,  119,   94,  100,  131,  131,
+     1029,  100,  140,  140,  129,  129,  206,  206,  129,  142,
+      142,  275,  131,  100,  131,  131,  131,  131,  142,  213,
+      213,   94,   94,   95,   95, 1028,   95,   95,   95,   95,
+       95,   95,   95,   95,   95,   95,   95,   95, 1026,   95,
+       95,  129,  120,  120,  275,   95,   95,   95,   95,  155,
+
+      216,  155,  155,  155,  155,  132,  132, 1025,  120,  120,
+      120,  120,   95, 1024,  135,  135,  216,  429,   95,  429,
+      122,  132,  132,  132,  132,  141,  141,  122, 1023,  141,
+      122,  209,  209,  209,  122,  135,  120,   95,   95,  108,
+      120,  108,  108,  108,  108,  122,  227,  227, 1016,  132,
+      134,  108,  108,  132,  122,  195,  108,  134,  108,  195,
+      134,  108,  141,  195,  134,  108,  230,  146,  108,  163,
+     1011,  163,  163,  230,  146,  134,  108,  146,  253,  253,
+      230,  146,  285,  285,  134,  108,  111,  111,  111,  111,
       111,  111,  146,  111,  111,  111,  111,  111,  111,  111,
 
       111,  146,  111,  111,  143,  143,  147,  147,  111,  111,
-      111,  111,  156,  156,  156,  156,  307,  307,  143,  424,
+      111,  111,  156,  156,  156,  156,  308,  308,  143,  426,
       143,  143,  143,  143,  158,  111,  162,  147,  162,  162,
-      245,  158,  245,  245,  158,  248,  424,  289,  158,  248,
-      156,  162,  289,  248,  156,  170,  170,  170,  170,  158,
+      246,  158,  246,  246,  158,  249,  426,  290,  158,  249,
+      156,  162,  290,  249,  156,  170,  170,  170,  170,  158,
       111,  111,  112,  112,  112,  112,  112,  112,  158,  112,
-      112,  112,  112,  112,  112,  112,  112, 1002,  112,  112,
+      112,  112,  112,  112,  112,  112,  112, 1010,  112,  112,
       171,  171,  171,  171,  112,  112,  112,  112,  172,  172,
-      172,  172,  144,  144,  173,  173,  173,  173,  265,  316,
-      316,  112,  180,  180,  180,  180,  265,  112,  144,  144,
+      172,  172,  144,  144,  173,  173,  173,  173,  266,  317,
+      317,  112,  180,  180,  180,  180,  266,  112,  144,  144,
 
-      144,  144,  214,  221,  312,  820,  214,  820,  221,  312,
-      181,  937,  181,  181,  181,  181,  112,  112,  121,  121,
-      214,  221,  512,  181,  233, 1000,  144,  181,  318,  318,
-      144,  233,  121,  236,  121,  121,  121,  121,  233,  181,
-      236,  235,  321,  321,  121,  121,  512,  236,  235,  121,
-      512,  121,  322,  322,  121,  235,  937,  206,  121,  206,
-      231,  121,  206,  206,  206,  206,  972,  231,  972,  121,
-      231,  231,  231,  231,  231,  236,  236,  999,  121,  124,
+      144,  144,  215,  222,  313,  824,  215,  824,  222,  313,
+      181,  943,  181,  181,  181,  181,  112,  112,  121,  121,
+      215,  222,  514,  181,  234, 1008,  144,  181,  319,  319,
+      144,  234,  121,  237,  121,  121,  121,  121,  234,  181,
+      237,  236,  322,  322,  121,  121,  514,  237,  236,  121,
+      514,  121,  323,  323,  121,  236,  943,  207,  121,  207,
+      232,  121,  207,  207,  207,  207,  979,  232,  979,  121,
+      232,  232,  232,  232,  232,  237,  237, 1007,  121,  124,
       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  235,  124,  124,  184,  184,  184,
+      124,  124,  124,  124,  236,  124,  124,  184,  184,  184,
 
-      184,  124,  124,  124,  124,  287,  287,  287,  184,  204,
-      204,  204,  204,  887,  232,  234,  238,  887,  124,  997,
-      204,  232,  234,  238,  184,  237,  239,  888,  232,  234,
-      238,  888,  237,  239,  269,  879,  204,  333,  333,  237,
-      239,  269,  879,  124,  124,  125,  125,  125,  125,  125,
+      184,  124,  124,  124,  124,  288,  288,  288,  184,  205,
+      205,  205,  205,  892,  233,  235,  239,  892,  124, 1005,
+      205,  233,  235,  239,  184,  238,  240,  893,  233,  235,
+      239,  893,  238,  240,  270,  884,  205,  334,  334,  238,
+      240,  270,  884,  124,  124,  125,  125,  125,  125,  125,
       125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
-      237,  125,  125,  938,  232,  234,  238,  125,  125,  125,
-      125,  240,  340,  340,  239,  342,  342,  269,  240,  256,
-      256,  256,  256,  996,  125,  240,  258,  258,  258,  258,
-      125,  260,  260,  260,  260,  260,  268,  345,  345,  268,
-
-      268,  268,  268,  268,  270,  270,  270,  270,  938,  125,
-      125,  133,  133,  240,  271,  271,  271,  271,  278,  278,
-      278,  278,  299,  328,  328,  133,  299,  133,  133,  133,
-      133,  299,  280,  280,  280,  280,  995,  133,  133,  310,
-      310,  310,  133,  280,  133,  346,  346,  133,  357,  357,
-      285,  133,  285,  993,  133,  285,  285,  285,  285,  280,
-      323,  323,  133,  301,  301,  301,  301,  329,  329,  323,
-      328,  133,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  136,  136,  136,  136,  136,  136,  828,  136,  136,
-      828,  324,  324,  405,  136,  136,  136,  136,  405,  279,
-
-      324,  279,  279,  279,  279,  885,  283,  283,  283,  283,
-      885,  136,  279,  308,  329,  308,  279,  283,  308,  308,
-      308,  308,  319,  319,  364,  364,  319,  992,  279,  366,
-      366,  369,  369,  283,  370,  370,  136,  136,  137,  137,
+      238,  125,  125,  944,  233,  235,  239,  125,  125,  125,
+      125,  241,  341,  341,  240,  343,  343,  270,  241,  257,
+      257,  257,  257, 1004,  125,  241,  259,  259,  259,  259,
+      125,  261,  261,  261,  261,  261,  269,  346,  346,  269,
+
+      269,  269,  269,  269,  271,  271,  271,  271,  944,  125,
+      125,  133,  133,  241,  272,  272,  272,  272,  279,  279,
+      279,  279,  300,  329,  329,  133,  300,  133,  133,  133,
+      133,  300,  281,  281,  281,  281, 1003,  133,  133,  311,
+      311,  311,  133,  281,  133,  347,  347,  133,  358,  358,
+      286,  133,  286, 1001,  133,  286,  286,  286,  286,  281,
+      324,  324,  133,  302,  302,  302,  302,  330,  330,  324,
+      329,  133,  136,  136,  136,  136,  136,  136,  136,  136,
+      136,  136,  136,  136,  136,  136,  136,  832,  136,  136,
+      832,  325,  325,  406,  136,  136,  136,  136,  406,  280,
+
+      325,  280,  280,  280,  280,  890,  284,  284,  284,  284,
+      890,  136,  280,  309,  330,  309,  280,  284,  309,  309,
+      309,  309,  320,  320,  365,  365,  320, 1000,  280,  367,
+      367,  370,  370,  284,  371,  371,  136,  136,  137,  137,
       137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      137,  137,  137,  832,  137,  137,  832,  347,  347,  319,
-      137,  137,  137,  137,  881,  296,  347,  296,  296,  296,
-      296,  302,  880,  302,  302,  302,  302,  137,  296,  880,
-      348,  348,  296,  137,  302,  381,  381,  881,  302,  348,
-      303,  303,  303,  303,  296,  320,  320,  325,  325,  320,
-
-      302,  303,  137,  137,  145,  145,  343,  343,  344,  344,
-      343,  931,  344,  325,  325,  325,  325,  303,  145,  669,
-      145,  145,  145,  145,  670,  306,  306,  306,  306,  931,
-      145,  145,  320,  331,  331,  145,  306,  145,  352,  352,
-      145,  334,  334,  343,  145,  344,  669,  145,  991,  331,
-      331,  670,  306,  371,  371,  145,  801,  334,  334,  334,
-      353,  353,  371,  801,  145,  148,  148,  148,  148,  148,
+      137,  137,  137,  836,  137,  137,  836,  348,  348,  320,
+      137,  137,  137,  137,  886,  297,  348,  297,  297,  297,
+      297,  303,  885,  303,  303,  303,  303,  137,  297,  885,
+      349,  349,  297,  137,  303,  382,  382,  886,  303,  349,
+      304,  304,  304,  304,  297,  321,  321,  326,  326,  321,
+
+      303,  304,  137,  137,  145,  145,  344,  344,  345,  345,
+      344,  937,  345,  326,  326,  326,  326,  304,  145,  672,
+      145,  145,  145,  145,  673,  307,  307,  307,  307,  937,
+      145,  145,  321,  332,  332,  145,  307,  145,  353,  353,
+      145,  335,  335,  344,  145,  345,  672,  145,  999,  332,
+      332,  673,  307,  372,  372,  145,  805,  335,  335,  335,
+      354,  354,  372,  805,  145,  148,  148,  148,  148,  148,
       148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      882,  148,  148,  327,  327,  352,  990,  148,  148,  148,
-      148,  801,  390,  400,  400,  332,  332,  441,  441,  327,
+      887,  148,  148,  328,  328,  353,  998,  148,  148,  148,
+      148,  805,  391,  401,  401,  333,  333,  443,  443,  328,
 
-      327,  327,  327,  882,  148,  889,  332,  353,  332,  889,
-      327,  332,  332,  332,  332,  336,  336,  376,  376,  336,
-      394,  394,  394,  394,  336,  390,  327,  499,  499,  148,
+      328,  328,  328,  887,  148,  894,  333,  354,  333,  894,
+      328,  333,  333,  333,  333,  337,  337,  377,  377,  337,
+      395,  395,  395,  395,  337,  391,  328,  501,  501,  148,
       148,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  988,  149,  149,  987,
-      330,  330,  464,  149,  149,  149,  149,  355,  355,  403,
-      403,  403,  349,  349,  376,  470,  330,  330,  330,  330,
-      149,  367,  367,  355,  355,  367,  149,  330,  349,  349,
-      349,  349,  360,  360,  986,  464,  360,  883,  351,  351,
-      985,  360,  504,  330,  883,  149,  149,  157,  470,  157,
-
-      157,  157,  157,  977,  351,  351,  351,  351,  367,  157,
-      157,  356,  356,  506,  157,  351,  157,  377,  377,  157,
-      358,  358,  356,  157,  356,  504,  157,  356,  356,  356,
-      356,  351,  372,  372,  157,  802,  358,  358,  358,  517,
-      517,  372,  802,  157,  160,  160,  506,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  975,
-      160,  160,  354,  354,  377,  973,  160,  160,  160,  160,
-      368,  368,  802,  522,  368,  373,  373,  522,  354,  354,
-      354,  354,  522,  160,  971,  375,  375,  970,  449,  354,
-      969,  373,  373,  373,  373,  409,  449,  409,  409,  449,
-
-      968,  375,  375,  375,  375,  354,  929,  368,  160,  160,
-      161,  161,  375,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  966,  161,  161,  375,  378,
-      378,  965,  161,  161,  161,  161,  379,  379,  444,  444,
-      444,  382,  382,  526,  526,  378,  378,  378,  378,  161,
-      380,  380,  379,  379,  929,  161,  378,  382,  382,  382,
-      964,  380,  812,  380,  535,  535,  380,  380,  380,  380,
-      527,  527,  378,  535,  161,  161,  288,  288,  288,  288,
-      384,  384,  571,  571,  384,  288,  288,  288,  401,  384,
-      401,  526,  812,  401,  401,  401,  401,  935,  576,  288,
-
-      288,  288,  288,  288,  288,  290,  290,  963,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      527,  290,  290,  410,  410,  410,  410,  290,  290,  290,
-      290,  576,  395,  886,  395,  395,  395,  395,  886,  396,
-      396,  396,  396,  935,  290,  395,  502,  502,  502,  395,
-      396,  411,  411,  411,  411,  412,  412,  412,  412,  549,
-      549,  395,  413,  413,  413,  413,  396,  962,  549,  290,
-      290,  291,  291,  961,  291,  291,  291,  291,  291,  291,
-      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+      149,  149,  149,  149,  149,  149,  996,  149,  149,  995,
+      331,  331,  466,  149,  149,  149,  149,  356,  356,  404,
+      404,  404,  350,  350,  377,  472,  331,  331,  331,  331,
+      149,  368,  368,  356,  356,  368,  149,  331,  350,  350,
+      350,  350,  361,  361,  994,  466,  361,  888,  352,  352,
+      992,  361,  506,  331,  888,  149,  149,  157,  472,  157,
+
+      157,  157,  157,  984,  352,  352,  352,  352,  368,  157,
+      157,  357,  357,  508,  157,  352,  157,  378,  378,  157,
+      359,  359,  357,  157,  357,  506,  157,  357,  357,  357,
+      357,  352,  373,  373,  157,  806,  359,  359,  359,  519,
+      519,  373,  806,  157,  160,  160,  508,  160,  160,  160,
+      160,  160,  160,  160,  160,  160,  160,  160,  160,  982,
+      160,  160,  355,  355,  378,  980,  160,  160,  160,  160,
+      369,  369,  806,  524,  369,  374,  374,  524,  355,  355,
+      355,  355,  524,  160,  978,  376,  376,  977,  451,  355,
+      976,  374,  374,  374,  374,  410,  451,  410,  410,  451,
+
+      975,  376,  376,  376,  376,  355,  935,  369,  160,  160,
+      161,  161,  376,  161,  161,  161,  161,  161,  161,  161,
+      161,  161,  161,  161,  161,  973,  161,  161,  376,  379,
+      379,  972,  161,  161,  161,  161,  380,  380,  446,  446,
+      446,  383,  383,  528,  528,  379,  379,  379,  379,  161,
+      381,  381,  380,  380,  935,  161,  379,  383,  383,  383,
+      971,  381,  816,  381,  537,  537,  381,  381,  381,  381,
+      529,  529,  379,  537,  161,  161,  289,  289,  289,  289,
+      385,  385,  573,  573,  385,  289,  289,  289,  402,  385,
+      402,  528,  816,  402,  402,  402,  402,  941,  578,  289,
 
+      289,  289,  289,  289,  289,  291,  291,  970,  291,  291,
       291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-      291,  291,  291,  291,  291,  291,  291,  292,  292,  958,
+      529,  291,  291,  411,  411,  411,  411,  291,  291,  291,
+      291,  578,  396,  891,  396,  396,  396,  396,  891,  397,
+      397,  397,  397,  941,  291,  396,  504,  504,  504,  396,
+      397,  412,  412,  412,  412,  413,  413,  413,  413,  551,
+      551,  396,  414,  414,  414,  414,  397,  969,  551,  291,
+      291,  292,  292,  968,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  957,  292,  292,  399,  399,  399,  399,  292,
-      292,  292,  292,  414,  956,  414,  399,  955,  414,  414,
-      414,  414,  440,  440,  440,  440,  292,  442,  442,  442,
-      442,  953,  399,  440,  443,  443,  443,  443,  487,  487,
-      487,  487,  487,  472,  951,  292,  520,  520,  520,  440,
-
-      472,  292,  292,  311,  311,  311,  311,  472,  473,  474,
-      475,  477,  311,  311,  311,  473,  474,  475,  477,  541,
-      541,  950,  473,  474,  475,  477,  311,  311,  311,  311,
-      311,  311,  313,  313,  313,  313,  313,  313,  949,  313,
-      313,  313,  313,  313,  313,  313,  313,  939,  313,  313,
-      948,  476,  478,  473,  313,  313,  313,  313,  476,  478,
-      494,  498,  498,  498,  498,  476,  478,  494,  495,  541,
-      495,  313,  498,  495,  495,  495,  495,  500,  500,  500,
-      500,  501,  501,  501,  501,  563,  563,  947,  498,  666,
-      666,  494,  939,  476,  563,  494,  313,  313,  314,  314,
 
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  315,  315,  315,  315,  315,  315,
-      946,  315,  315,  315,  315,  315,  315,  315,  315,  945,
-      315,  315,  578,  479,  944,  480,  315,  315,  315,  315,
-      479,  628,  480,  540,  540,  481,  932,  479,  922,  480,
-
-      555,  555,  481,  315,  890,  513,  930,  513,  890,  481,
-      513,  513,  513,  513,  932,  578,  516,  516,  516,  516,
-      633,  479,  315,  920,  628,  479,  480,  516,  315,  315,
-      326,  326,  481,  518,  518,  518,  518,  519,  519,  519,
-      519,  540,  919,  516,  326,  918,  326,  326,  326,  326,
-      555,  525,  525,  633,  930,  529,  529,  326,  554,  554,
-      917,  326,  525,  933,  525,  530,  530,  525,  525,  525,
-      525,  529,  529,  326,  335,  335,  675,  655,  531,  531,
-      675,  530,  530,  530,  530,  675,  532,  532,  687,  687,
-      335,  335,  335,  335,  531,  531,  531,  531,  884,  335,
-
-      335,  335,  532,  532,  532,  884,  554,  659,  534,  534,
-      655,  933,  534,  335,  335,  335,  335,  335,  335,  337,
-      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
-      337,  337,  337,  337,  934,  337,  337,  528,  528,  915,
-      659,  337,  337,  337,  337,  534,  574,  574,  574,  539,
-      539,  688,  688,  528,  528,  528,  528,  891,  337,  892,
-      539,  891,  539,  892,  528,  539,  539,  539,  539,  567,
-      914,  567,  689,  689,  567,  567,  567,  567,  693,  693,
-      528,  689,  934,  337,  337,  338,  338,  338,  338,  338,
-      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  293,  293,  965,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  964,  293,  293,  400,  400,  400,  400,  293,
+      293,  293,  293,  415,  963,  415,  400,  962,  415,  415,
+      415,  415,  442,  442,  442,  442,  293,  444,  444,  444,
+      444,  960,  400,  442,  445,  445,  445,  445,  489,  489,
+      489,  489,  489,  474,  958,  293,  522,  522,  522,  442,
+
+      474,  293,  293,  312,  312,  312,  312,  474,  475,  476,
+      477,  479,  312,  312,  312,  475,  476,  477,  479,  543,
+      543,  957,  475,  476,  477,  479,  312,  312,  312,  312,
+      312,  312,  314,  314,  314,  314,  314,  314,  956,  314,
+      314,  314,  314,  314,  314,  314,  314,  945,  314,  314,
+      955,  478,  480,  475,  314,  314,  314,  314,  478,  480,
+      496,  500,  500,  500,  500,  478,  480,  496,  497,  543,
+      497,  314,  500,  497,  497,  497,  497,  502,  502,  502,
+      502,  503,  503,  503,  503,  565,  565,  954,  500,  669,
+      669,  496,  945,  478,  565,  496,  314,  314,  315,  315,
+
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  316,  316,  316,  316,  316,  316,
+      953,  316,  316,  316,  316,  316,  316,  316,  316,  952,
+      316,  316,  580,  481,  951,  482,  316,  316,  316,  316,
+      481,  631,  482,  542,  542,  483,  938,  481,  950,  482,
+
+      557,  557,  483,  316,  895,  515,  936,  515,  895,  483,
+      515,  515,  515,  515,  938,  580,  518,  518,  518,  518,
+      636,  481,  316,  928,  631,  481,  482,  518,  316,  316,
+      327,  327,  483,  520,  520,  520,  520,  521,  521,  521,
+      521,  542,  926,  518,  327,  925,  327,  327,  327,  327,
+      557,  527,  527,  636,  936,  531,  531,  327,  556,  556,
+      924,  327,  527,  939,  527,  532,  532,  527,  527,  527,
+      527,  531,  531,  327,  336,  336,  678,  658,  533,  533,
+      678,  532,  532,  532,  532,  678,  534,  534,  690,  690,
+      336,  336,  336,  336,  533,  533,  533,  533,  889,  336,
 
+      336,  336,  534,  534,  534,  889,  556,  662,  536,  536,
+      658,  939,  536,  336,  336,  336,  336,  336,  336,  338,
       338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
-      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
-      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
-      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
-      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
-      338,  339,  339,  339,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  913,  339,  339,  542,
-      542,  912,  649,  339,  339,  339,  339,  536,  536,  649,
-      739,  536,  543,  543,  911,  542,  542,  542,  542,  910,
-      339,  548,  548,  650,  909,  548,  542,  907,  543,  543,
-
-      650,  550,  550,  544,  544,  550,  649,  545,  545,  339,
-      694,  694,  542,  739,  536,  339,  339,  350,  350,  544,
-      544,  544,  544,  545,  545,  545,  545,  650,  548,  546,
-      546,  350,  906,  350,  350,  350,  350,  905,  550,  553,
-      553,  904,  683,  683,  350,  546,  546,  546,  350,  974,
-      553,  974,  553,  557,  557,  553,  553,  553,  553,  903,
-      350,  359,  359,  690,  690,  558,  558,  696,  696,  557,
-      557,  696,  690,  559,  559,  705,  705,  359,  359,  359,
-      359,  558,  558,  558,  558,  683,  359,  359,  359,  559,
-      559,  559,  559,  572,  572,  572,  572,  706,  706,  940,
-
-      359,  359,  359,  359,  359,  359,  361,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
-      361,  902,  361,  361,  556,  556,  684,  684,  361,  361,
-      361,  361,  560,  560,  901,  570,  570,  570,  570,  900,
-      556,  556,  556,  556,  940,  361,  570,  899,  560,  560,
-      560,  556,  573,  573,  573,  573,  581,  581,  581,  581,
-      711,  711,  570,  582,  582,  582,  582,  556,  898,  684,
-      361,  361,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
+      338,  338,  338,  338,  940,  338,  338,  530,  530,  923,
+      662,  338,  338,  338,  338,  536,  576,  576,  576,  541,
+      541,  691,  691,  530,  530,  530,  530,  896,  338,  897,
+      541,  896,  541,  897,  530,  541,  541,  541,  541,  569,
+      921,  569,  692,  692,  569,  569,  569,  569,  696,  696,
+      530,  692,  940,  338,  338,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  920,  340,  340,  544,
+      544,  919,  652,  340,  340,  340,  340,  538,  538,  652,
+      742,  538,  545,  545,  918,  544,  544,  544,  544,  917,
+      340,  550,  550,  653,  916,  550,  544,  915,  545,  545,
+
+      653,  552,  552,  546,  546,  552,  652,  547,  547,  340,
+      697,  697,  544,  742,  538,  340,  340,  351,  351,  546,
+      546,  546,  546,  547,  547,  547,  547,  653,  550,  548,
+      548,  351,  913,  351,  351,  351,  351,  912,  552,  555,
+      555,  911,  686,  686,  351,  548,  548,  548,  351,  981,
+      555,  981,  555,  559,  559,  555,  555,  555,  555,  910,
+      351,  360,  360,  693,  693,  560,  560,  699,  699,  559,
+      559,  699,  693,  561,  561,  708,  708,  360,  360,  360,
+      360,  560,  560,  560,  560,  686,  360,  360,  360,  561,
+      561,  561,  561,  574,  574,  574,  574,  709,  709,  946,
 
+      360,  360,  360,  360,  360,  360,  362,  362,  362,  362,
       362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  363,  363,
+      362,  909,  362,  362,  558,  558,  687,  687,  362,  362,
+      362,  362,  562,  562,  908,  572,  572,  572,  572,  907,
+      558,  558,  558,  558,  946,  362,  572,  906,  562,  562,
+      562,  558,  575,  575,  575,  575,  583,  583,  583,  583,
+      714,  714,  572,  584,  584,  584,  584,  558,  905,  687,
+      362,  362,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
       363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  897,  363,  363,  651,  651,  651,  651,
-      363,  363,  363,  363,  562,  562,  896,  638,  562,  564,
-      564,  639,  640,  564,  638,  641,  643,  363,  639,  640,
-      642,  638,  641,  643,  743,  639,  640,  642,  895,  641,
-      643,  701,  701,  976,  642,  976,  363,  652,  652,  652,
-
-      652,  562,  363,  363,  374,  374,  564,  671,  671,  671,
-      671,  712,  712,  640,  723,  723,  641,  743,  374,  893,
-      374,  374,  374,  374,  642,  643,  672,  672,  672,  672,
-      871,  374,  724,  724,  701,  374,  681,  681,  702,  702,
-      682,  682,  685,  685,  699,  699,  685,  374,  383,  383,
-      729,  729,  681,  681,  681,  681,  682,  682,  682,  682,
-      699,  699,  699,  699,  383,  383,  383,  383,  870,  707,
-      707,  719,  719,  383,  383,  383,  686,  686,  707,  685,
-      686,  702,  691,  691,  730,  730,  691,  383,  383,  383,
-      383,  383,  383,  385,  385,  385,  385,  385,  385,  385,
-
-      385,  385,  385,  385,  385,  385,  385,  385,  868,  385,
-      385,  700,  700,  686,  719,  385,  385,  385,  385,  691,
-      714,  714,  708,  708,  714,  717,  717,  700,  700,  700,
-      700,  708,  385,  718,  718,  867,  725,  725,  726,  726,
-      865,  717,  717,  717,  717,  725,  984,  726,  984,  718,
-      718,  718,  718,  735,  735,  735,  735,  385,  385,  386,
-      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
-      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
-      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
-      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
 
-      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
-      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
-      386,  386,  386,  386,  386,  387,  387,  387,  387,  387,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  904,  364,  364,  654,  654,  654,  654,
+      364,  364,  364,  364,  564,  564,  903,  641,  564,  566,
+      566,  642,  643,  566,  641,  644,  646,  364,  642,  643,
+      645,  641,  644,  646,  746,  642,  643,  645,  902,  644,
+      646,  704,  704,  983,  645,  983,  364,  655,  655,  655,
+
+      655,  564,  364,  364,  375,  375,  566,  674,  674,  674,
+      674,  715,  715,  643,  726,  726,  644,  746,  375,  901,
+      375,  375,  375,  375,  645,  646,  675,  675,  675,  675,
+      899,  375,  727,  727,  704,  375,  684,  684,  705,  705,
+      685,  685,  688,  688,  702,  702,  688,  375,  384,  384,
+      732,  732,  684,  684,  684,  684,  685,  685,  685,  685,
+      702,  702,  702,  702,  384,  384,  384,  384,  898,  710,
+      710,  722,  722,  384,  384,  384,  689,  689,  710,  688,
+      689,  705,  694,  694,  733,  733,  694,  384,  384,  384,
+      384,  384,  384,  386,  386,  386,  386,  386,  386,  386,
+
+      386,  386,  386,  386,  386,  386,  386,  386,  876,  386,
+      386,  703,  703,  689,  722,  386,  386,  386,  386,  694,
+      717,  717,  711,  711,  717,  720,  720,  703,  703,  703,
+      703,  711,  386,  721,  721,  875,  728,  728,  729,  729,
+      873,  720,  720,  720,  720,  728,  991,  729,  991,  721,
+      721,  721,  721,  738,  738,  738,  738,  386,  386,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
       387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      864,  387,  387,  720,  720,  817,  817,  387,  387,  387,
-      387,  692,  692,  732,  732,  692,  863,  732,  703,  703,
-      818,  818,  703,  860,  387,  754,  704,  704,  709,  709,
-      704,  859,  709,  710,  710,  721,  721,  710,  754,  721,
-      821,  821,  858,  387,  857,  754,  720,  855,  692,  387,
-      387,  404,  404,  404,  404,  703,  736,  736,  736,  736,
-
-      404,  404,  404,  704,  854,  709,  822,  822,  823,  823,
-      710,  853,  721,  852,  404,  404,  404,  404,  404,  404,
-      406,  406,  936,  406,  406,  406,  406,  406,  406,  406,
-      406,  406,  406,  406,  406,  941,  406,  406,  770,  825,
-      825,  851,  406,  406,  406,  406,  722,  722,  826,  826,
-      722,  727,  727,  770,  850,  727,  827,  827,  874,  406,
-      770,  831,  831,  875,  876,  874,  876,  876,  936,  848,
-      875,  926,  874,  926,  926, 1011, 1011,  875, 1012, 1012,
-      941, 1013, 1013,  722,  406,  406,  407,  407,  727,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  408,  408,  847,  408,  408,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  942,  408,  408,
-      979,  979,  979,  846,  408,  408,  408,  408,  728,  728,
-      793,  794,  728,  796,  845,  795,  872,  793,  794,  873,
-      796,  408,  795,  872,  793,  794,  873,  796,  843,  795,
-
-      872,  877,  842,  873,  878,  978,  978,  978,  877,  978,
-      408,  878,  942,  841,  840,  728,  408,  408,  503,  503,
-      503,  503,  793,  872,  795,  794,  873,  503,  503,  503,
-      839,  877,  796,  838,  878,  980,  980,  980,  837,  980,
-      836,  503,  503,  503,  503,  503,  503,  507,  507,  834,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  894,  507,  507,  927,  981,  981,  981,  507,
-      507,  507,  507,  924,  925,  894,  927,  924,  925,  928,
-      833,  808,  894,  927,  924,  925,  507,  983,  983,  983,
-      928,  924,  925,  799,  982,  982,  982,  928,  982,  792,
-
-      791,  790,  789,  788,  787,  786,  785,  784,  783,  782,
-      781,  507,  507,  508,  508,  778,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  508,  521,
-      521,  521,  521,  777,  775,  772,  771,  769,  521,  521,
-      521,  768,  767,  766,  765,  764,  763,  762,  761,  759,
-
-      758,  757,  521,  521,  521,  521,  521,  521,  523,  523,
-      523,  523,  523,  523,  756,  523,  523,  523,  523,  523,
-      523,  523,  523,  753,  523,  523,  751,  750,  747,  742,
-      523,  523,  523,  523,  738,  737,  734,  716,  698,  678,
-      674,  673,  668,  667,  663,  658,  654,  523,  653,  648,
-      647,  646,  645,  637,  636,  631,  627,  626,  625,  624,
-      623,  622,  620,  619,  618,  617,  616,  615,  613,  612,
-      611,  610,  523,  523,  524,  524,  524,  524,  524,  524,
-      609,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
-      533,  533,  608,  607,  606,  604,  603,  602,  601,  600,
-      599,  598,  597,  596,  595,  594,  533,  533,  533,  533,
-      592,  591,  590,  589,  588,  533,  533,  533,  587,  586,
-      585,  584,  583,  577,  569,  568,  515,  514,  511,  533,
-      533,  533,  533,  533,  533,  537,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-
-      510,  537,  537,  509,  505,  497,  496,  537,  537,  537,
-      537,  493,  492,  491,  490,  485,  484,  483,  482,  471,
-      468,  465,  463,  462,  537,  461,  460,  459,  458,  457,
-      456,  455,  454,  453,  452,  451,  450,  448,  447,  446,
-      438,  437,  436,  435,  434,  433,  432,  431,  430,  537,
-      537,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  547,  547,  429,
-      428,  426,  425,  423,  422,  421,  420,  419,  418,  417,
-      416,  398,  397,  547,  547,  547,  547,  393,  305,  304,
-      295,  294,  547,  547,  547,  293,  282,  281,  277,  267,
-      264,  263,  259,  254,  253,  251,  547,  547,  547,  547,
-      547,  547,  551,  551,  551,  551,  551,  551,  551,  551,
-      551,  551,  551,  551,  551,  551,  551,  250,  551,  551,
-      249,  247,  246,  230,  551,  551,  551,  551,  228,  227,
-      220,  219,  217,  211,  210,  202,  201,  200,  198,  193,
-
-      191,  551,  190,  188,  187,  177,  159,  154,  152,  110,
-      101,   96,   93,   88,   86,   77,   72,   63,   34,   32,
-       28,   23,    8,    4,    2,    0,  551,  551,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  561,  561,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      561,  561,  561,  561,    0,    0,    0,    0,    0,  561,
-      561,  561,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  561,  561,  561,  561,  561,  561,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,    0,  565,  565,    0,    0,    0,
-        0,  565,  565,  565,  565,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  565,    0,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      872,  388,  388,  723,  723,  821,  821,  388,  388,  388,
+      388,  695,  695,  735,  735,  695,  870,  735,  706,  706,
+      822,  822,  706,  869,  388,  758,  707,  707,  712,  712,
+      707,  868,  712,  713,  713,  724,  724,  713,  758,  724,
+      825,  825,  865,  388,  864,  758,  723,  863,  695,  388,
+      388,  405,  405,  405,  405,  706,  739,  739,  739,  739,
+
+      405,  405,  405,  707,  862,  712,  826,  826,  827,  827,
+      713,  860,  724,  859,  405,  405,  405,  405,  405,  405,
+      407,  407,  942,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  407,  407,  947,  407,  407,  774,  829,
+      829,  858,  407,  407,  407,  407,  725,  725,  830,  830,
+      725,  730,  730,  774,  857,  730,  831,  831,  879,  407,
+      774,  835,  835,  880,  881,  879,  881,  881,  942,  856,
+      880,  932,  879,  932,  932, 1019, 1019,  880, 1020, 1020,
+      947, 1021, 1021,  725,  407,  407,  408,  408,  730,  408,
+      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+
+      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+      408,  408,  409,  409,  855,  409,  409,  409,  409,  409,
+      409,  409,  409,  409,  409,  409,  409,  948,  409,  409,
+      986,  986,  986,  853,  409,  409,  409,  409,  731,  731,
+      797,  798,  731,  800,  852,  799,  877,  797,  798,  878,
+      800,  409,  799,  877,  797,  798,  878,  800,  851,  799,
+
+      877,  882,  850,  878,  883,  985,  985,  985,  882,  985,
+      409,  883,  948,  848,  847,  731,  409,  409,  505,  505,
+      505,  505,  797,  877,  799,  798,  878,  505,  505,  505,
+      846,  882,  800,  845,  883,  987,  987,  987,  844,  987,
+      843,  505,  505,  505,  505,  505,  505,  509,  509,  842,
+      509,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+      509,  509,  900,  509,  509,  933,  988,  988,  988,  509,
+      509,  509,  509,  930,  931,  900,  933,  930,  931,  934,
+      841,  839,  900,  933,  930,  931,  509,  990,  990,  990,
+      934,  930,  931,  838,  989,  989,  989,  934,  989,  837,
+
+      812,  803,  796,  795,  794,  793,  792,  791,  790,  789,
+      788,  509,  509,  510,  510,  787,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  523,
+      523,  523,  523,  786,  785,  782,  781,  779,  523,  523,
+      523,  776,  775,  773,  772,  771,  770,  769,  768,  767,
+
+      766,  765,  523,  523,  523,  523,  523,  523,  525,  525,
+      525,  525,  525,  525,  763,  525,  525,  525,  525,  525,
+      525,  525,  525,  762,  525,  525,  761,  760,  757,  755,
+      525,  525,  525,  525,  754,  753,  750,  745,  741,  740,
+      737,  719,  701,  681,  677,  676,  671,  525,  670,  666,
+      661,  657,  656,  651,  650,  649,  648,  640,  639,  634,
+      630,  629,  628,  627,  626,  625,  623,  622,  621,  620,
+      619,  618,  525,  525,  526,  526,  526,  526,  526,  526,
+      616,  526,  526,  526,  526,  526,  526,  526,  526,  526,
+      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
+
+      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
+      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
+      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
+      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
+      535,  535,  615,  614,  613,  612,  611,  610,  609,  607,
+      606,  605,  604,  603,  602,  601,  535,  535,  535,  535,
+      600,  599,  598,  597,  595,  535,  535,  535,  594,  593,
+      592,  591,  590,  589,  588,  587,  586,  585,  579,  535,
+      535,  535,  535,  535,  535,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+
+      571,  539,  539,  570,  517,  516,  513,  539,  539,  539,
+      539,  512,  511,  507,  499,  498,  495,  494,  493,  492,
+      487,  486,  485,  484,  539,  473,  470,  467,  465,  464,
+      463,  462,  461,  460,  459,  458,  457,  456,  455,  454,
+      453,  452,  450,  449,  448,  440,  439,  438,  437,  539,
+      539,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  549,  549,  436,
+      435,  434,  433,  432,  431,  430,  428,  427,  425,  424,
+      423,  422,  421,  549,  549,  549,  549,  420,  419,  418,
+      417,  399,  549,  549,  549,  398,  394,  306,  305,  296,
+      295,  294,  283,  282,  278,  268,  549,  549,  549,  549,
+      549,  549,  553,  553,  553,  553,  553,  553,  553,  553,
+      553,  553,  553,  553,  553,  553,  553,  265,  553,  553,
+      264,  260,  255,  254,  553,  553,  553,  553,  252,  251,
+      250,  248,  247,  231,  229,  228,  221,  220,  218,  212,
+
+      211,  553,  203,  202,  201,  199,  194,  192,  191,  189,
+      188,  187,  177,  159,  154,  152,  110,  101,   96,   93,
+       88,   86,   77,   72,   63,   34,  553,  553,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  563,  563,   32,   28,   23,    8,
+
+        4,    2,    0,    0,    0,    0,    0,    0,    0,    0,
+      563,  563,  563,  563,    0,    0,    0,    0,    0,  563,
+      563,  563,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  563,  563,  563,  563,  563,  563,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,    0,  567,  567,    0,    0,    0,
+        0,  567,  567,  567,  567,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  567,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  565,  565,  566,  566,  566,  566,  566,
-      566,  566,  566,  566,  566,  566,  566,  566,  566,  566,
-      566,  566,  566,  566,  566,  566,  566,  566,  566,  566,
-      566,  566,  566,  566,  566,  566,  566,  566,  566,  566,
-      566,  566,  566,  566,  566,  566,  566,  566,  566,  566,
-      566,  566,  566,  566,  566,  566,  566,  566,  566,  566,
-      566,  566,  566,  566,  566,  566,  566,  566,  566,  566,
-      566,  575,  575,  575,  575,    0,    0,    0,    0,    0,
-      575,  575,  575,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  575,  575,  575,  575,  575,  575,
-
-      579,  579,    0,  579,  579,  579,  579,  579,  579,  579,
-      579,  579,  579,  579,  579,    0,  579,  579,    0,    0,
-        0,    0,  579,  579,  579,  579,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  579,
+        0,    0,    0,  567,  567,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  577,  577,  577,  577,    0,    0,    0,    0,    0,
+      577,  577,  577,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  577,  577,  577,  577,  577,  577,
+
+      581,  581,    0,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,    0,  581,  581,    0,    0,
+        0,    0,  581,  581,  581,  581,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  581,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  579,  579,  580,  580,    0,  580,
-      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
-      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
-      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
-
-      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
-      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
-      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
-      580,  580,  662,  662,    0,  662,  662,  662,  662,  662,
-      662,  662,  662,  662,  662,  662,  662,    0,  662,  662,
-        0,    0,    0,    0,  662,  662,  662,  662,    0,    0,
+        0,    0,    0,    0,  581,  581,  582,  582,    0,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
+      582,  582,  665,  665,    0,  665,  665,  665,  665,  665,
+      665,  665,  665,  665,  665,  665,  665,    0,  665,  665,
+        0,    0,    0,    0,  665,  665,  665,  665,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  662,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  665,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  662,  662,  664,  664,
+        0,    0,    0,    0,    0,    0,  665,  665,  667,  667,
 
-        0,  664,  664,  664,  664,  664,  664,  664,  664,  664,
-      664,  664,  664,    0,  664,  664,    0,    0,    0,    0,
-      664,  664,  664,  664,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  664,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  664,    0,    0,
+        0,  667,  667,  667,  667,  667,  667,  667,  667,  667,
+      667,  667,  667,    0,  667,  667,    0,    0,    0,    0,
+      667,  667,  667,  667,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  667,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  667,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  664,  664,  665,  665,    0,  665,  665,  665,
-      665,  665,  665,  665,  665,  665,  665,  665,  665,    0,
-      665,  665,    0,    0,    0,    0,  665,  665,  665,  665,
+        0,    0,  667,  667,  668,  668,    0,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,    0,
+      668,  668,    0,    0,    0,    0,  668,  668,  668,  668,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  665,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  665,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  665,  665,
-      677,  677,  677,  677,  677,  677,    0,  677,  677,  677,
-      677,  677,  677,  677,  677,    0,  677,  677,    0,    0,
-        0,    0,  677,  677,  677,  677,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  677,
+        0,    0,    0,  668,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  668,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  668,  668,
+      680,  680,  680,  680,  680,  680,    0,  680,  680,  680,
+      680,  680,  680,  680,  680,    0,  680,  680,    0,    0,
+        0,    0,  680,  680,  680,  680,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  680,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  677,  677,  679,  679,  679,  679,
+        0,    0,    0,    0,  680,  680,  682,  682,  682,  682,
 
-      679,  679,    0,  679,  679,  679,  679,  679,  679,  679,
-      679,    0,  679,  679,    0,    0,    0,    0,  679,  679,
-      679,  679,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  679,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  679,    0,    0,    0,    0,
+      682,  682,    0,  682,  682,  682,  682,  682,  682,  682,
+      682,    0,  682,  682,    0,    0,    0,    0,  682,  682,
+      682,  682,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  682,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  682,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      679,  679,  680,  680,  680,  680,  680,  680,    0,  680,
-      680,  680,  680,  680,  680,  680,  680,    0,  680,  680,
-        0,    0,    0,    0,  680,  680,  680,  680,    0,    0,
+      682,  682,  683,  683,  683,  683,  683,  683,    0,  683,
+      683,  683,  683,  683,  683,  683,  683,    0,  683,  683,
+        0,    0,    0,    0,  683,  683,  683,  683,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  680,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  680,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  680,  680,  695,  695,
-      695,  695,  695,  695,  695,  695,  695,  695,  695,  695,
-      695,  695,  695,    0,  695,  695,    0,    0,    0,    0,
-      695,  695,  695,  695,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  695,    0,    0,
+        0,  683,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  683,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  683,  683,  698,  698,
+      698,  698,  698,  698,  698,  698,  698,  698,  698,  698,
+      698,  698,  698,    0,  698,  698,    0,    0,    0,    0,
+      698,  698,  698,  698,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  698,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  695,  695,  697,  697,  697,  697,  697,  697,
+        0,    0,  698,  698,  700,  700,  700,  700,  700,  700,
 
-      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
-      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
-      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
-      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
-      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
-      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
-      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
-      713,  713,  713,  713,  713,    0,  713,  713,    0,    0,
-        0,    0,  713,  713,  713,  713,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  713,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+      716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
+      716,  716,  716,  716,  716,    0,  716,  716,    0,    0,
+        0,    0,  716,  716,  716,  716,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  716,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  713,  713,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  731,  731,  731,  731,  731,  731,  731,  731,
+        0,    0,    0,    0,  716,  716,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  734,  734,  734,  734,  734,  734,  734,  734,
 
-      731,  731,  731,  731,  731,  731,  731,    0,  731,  731,
-        0,    0,    0,    0,  731,  731,  731,  731,    0,    0,
+      734,  734,  734,  734,  734,  734,  734,    0,  734,  734,
+        0,    0,    0,    0,  734,  734,  734,  734,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  731,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  734,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  731,  731,  733,  733,
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-      733,  733,  733,  733,  746,  746,    0,  746,  746,  746,
-      746,  746,  746,  746,  746,  746,  746,  746,  746,    0,
-      746,  746,    0,    0,    0,    0,  746,  746,  746,  746,
+        0,    0,    0,    0,    0,    0,  734,  734,  736,  736,
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  749,  749,    0,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,    0,
+      749,  749,    0,    0,    0,    0,  749,  749,  749,  749,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  746,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  749,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  746,  746,
-      748,  748,    0,  748,  748,  748,  748,  748,  748,  748,
+        0,    0,    0,    0,    0,    0,    0,    0,  749,  749,
+      751,  751,    0,  751,  751,  751,  751,  751,  751,  751,
 
-      748,  748,  748,  748,  748,    0,  748,  748,    0,    0,
-        0,    0,  748,  748,  748,  748,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  748,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  748,
+      751,  751,  751,  751,  751,    0,  751,  751,    0,    0,
+        0,    0,  751,  751,  751,  751,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  751,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  751,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  748,  748,  749,  749,    0,  749,
-      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
-      749,    0,  749,  749,    0,    0,    0,    0,  749,  749,
-      749,  749,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  749,    0,    0,    0,    0,
+        0,    0,    0,    0,  751,  751,  752,  752,    0,  752,
+      752,  752,  752,  752,  752,  752,  752,  752,  752,  752,
+      752,    0,  752,  752,    0,    0,    0,    0,  752,  752,
+      752,  752,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  752,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,  749,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  752,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      749,  749,  805,  805,    0,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,    0,  805,  805,
-        0,    0,    0,    0,  805,  805,  805,  805,    0,    0,
+      752,  752,  809,  809,    0,  809,  809,  809,  809,  809,
+      809,  809,  809,  809,  809,  809,  809,    0,  809,  809,
+        0,    0,    0,    0,  809,  809,  809,  809,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  805,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  805,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  805,  805,  806,  806,
-        0,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,    0,  806,  806,    0,    0,    0,    0,
-      806,  806,  806,  806,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  806,    0,    0,
+        0,  809,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  809,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  809,  809,  810,  810,
+        0,  810,  810,  810,  810,  810,  810,  810,  810,  810,
+
+      810,  810,  810,    0,  810,  810,    0,    0,    0,    0,
+      810,  810,  810,  810,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  810,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      806,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  806,  806,  815,  815,  815,  815,  815,  815,
-        0,  815,  815,  815,  815,  815,  815,  815,  815,    0,
-      815,  815,    0,    0,    0,    0,  815,  815,  815,  815,
+      810,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  810,  810,  819,  819,  819,  819,  819,  819,
+        0,  819,  819,  819,  819,  819,  819,  819,  819,    0,
+      819,  819,    0,    0,    0,    0,  819,  819,  819,  819,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  815,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  819,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,  815,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  815,  815,
-      816,  816,  816,  816,  816,  816,    0,  816,  816,  816,
-      816,  816,  816,  816,  816,    0,  816,  816,    0,    0,
-        0,    0,  816,  816,  816,  816,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  816,
+        0,    0,    0,    0,  819,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  819,  819,
+      820,  820,  820,  820,  820,  820,    0,  820,  820,  820,
+      820,  820,  820,  820,  820,    0,  820,  820,    0,    0,
+        0,    0,  820,  820,  820,  820,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  820,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  816,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  816,  816,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819, 1047,    0, 1047, 1047, 1047, 1047, 1047, 1047,
-     1047, 1047, 1047, 1048,    0,    0, 1048, 1048, 1049,    0,
-     1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1050,
-     1050, 1050, 1050, 1050, 1050, 1050, 1050, 1051, 1051, 1051,
-     1051, 1052,    0, 1052,    0, 1052, 1052, 1052, 1052, 1053,
-
-     1053, 1053, 1053, 1053, 1053, 1053, 1054,    0, 1054, 1054,
-     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1055,    0, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1056,    0,
-     1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1057,
-        0, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057,
-     1058, 1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059,    0,
-     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1060, 1060,
-     1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061,
-     1061,    0, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
-
-     1062, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
-     1063, 1063, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
-     1064, 1064, 1064, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
-     1065, 1065, 1065, 1065, 1066, 1066, 1066, 1066, 1066, 1066,
-     1066, 1066, 1066, 1066, 1066, 1067, 1067, 1067, 1067, 1067,
-     1067, 1067, 1067, 1067, 1067, 1067, 1068, 1068, 1068, 1068,
-     1068, 1068, 1068, 1068, 1068, 1068, 1068, 1069, 1069, 1069,
-     1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1070, 1070,
-     1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1071,
-     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
-
-     1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
-     1072, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
-     1073, 1073, 1074,    0, 1074, 1074, 1074, 1074, 1074, 1074,
-     1074, 1074, 1074, 1075,    0, 1075, 1075, 1075, 1075, 1075,
-     1075, 1075, 1075, 1075, 1076,    0, 1076, 1076, 1076, 1076,
-     1076, 1076, 1076, 1076, 1076, 1077,    0, 1077, 1077, 1077,
-     1077, 1077, 1077, 1077, 1077, 1077, 1078,    0,    0, 1078,
-     1078, 1079,    0, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
-     1079, 1079, 1080,    0,    0, 1080, 1080, 1080, 1081,    0,
-        0, 1081, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1083,
-
-     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084,    0,    0,
-        0,    0, 1084, 1084, 1084, 1084, 1085, 1085, 1085, 1085,
-     1085, 1085, 1086, 1086, 1086, 1086, 1087,    0, 1087, 1087,
-     1087, 1087, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1089,
-        0, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
-     1090,    0, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
-     1090, 1091,    0, 1091, 1091, 1091, 1091, 1091, 1091, 1091,
-     1091, 1091, 1092,    0, 1092, 1092, 1092, 1092, 1092, 1092,
-     1092, 1092, 1092, 1093, 1093,    0, 1093, 1093, 1093, 1093,
-     1093, 1093, 1093, 1093, 1094, 1094, 1094, 1094, 1094, 1094,
-
-     1094, 1094, 1094, 1094, 1094, 1095, 1095,    0, 1095, 1095,
-     1095, 1095, 1095, 1095, 1095, 1095, 1096, 1096, 1096, 1096,
-     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1097, 1097, 1097,
-     1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098, 1098,
-     1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,
-     1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
-     1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,
-     1100, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
-     1101, 1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
-     1102, 1102, 1102, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-
-     1103, 1103, 1103, 1103, 1104, 1104, 1104, 1104, 1104, 1104,
-     1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105,
-     1105, 1105, 1105, 1105, 1105, 1105, 1106, 1106, 1106, 1106,
-     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
-     1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108,    0,
-     1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1109,
-        0, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1110,    0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
-     1110, 1111,    0, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
-     1111, 1111, 1112,    0,    0, 1112, 1112, 1113,    0,    0,
+        0,    0,  820,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  820,  820,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823, 1055,    0, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1056,    0,    0, 1056, 1056, 1057,    0,
+     1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058,
+     1058, 1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059, 1059,
+     1059, 1060,    0, 1060,    0, 1060, 1060, 1060, 1060, 1061,
+
+     1061, 1061, 1061, 1061, 1061, 1061, 1062,    0, 1062, 1062,
+     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1063,    0, 1063,
+     1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1064,    0,
+     1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065,
+        0, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
+     1066, 1066, 1066, 1066, 1066, 1066, 1066, 1067, 1067,    0,
+     1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1068, 1068,
+     1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1069,
+     1069,    0, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069,
+     1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+
+     1070, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
+     1071, 1071, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
+     1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+     1073, 1073, 1073, 1073, 1074, 1074, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1075, 1075, 1075, 1075, 1075,
+     1075, 1075, 1075, 1075, 1075, 1075, 1076, 1076, 1076, 1076,
+     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1077, 1077, 1077,
+     1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1078, 1078,
+     1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1079,
+     1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
 
-     1113, 1113, 1113, 1114,    0,    0, 1114, 1115,    0, 1115,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
+     1081, 1081, 1082,    0, 1082, 1082, 1082, 1082, 1082, 1082,
+     1082, 1082, 1082, 1083,    0, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1084,    0, 1084, 1084, 1084, 1084,
+     1084, 1084, 1084, 1084, 1084, 1085,    0, 1085, 1085, 1085,
+     1085, 1085, 1085, 1085, 1085, 1085, 1086,    0,    0, 1086,
+     1086, 1087,    0, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1088,    0,    0, 1088, 1088, 1088, 1089,    0,
+        0, 1089, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1091,
+
+     1091, 1091, 1091, 1091, 1091, 1091, 1091, 1092,    0,    0,
+        0,    0, 1092, 1092, 1092, 1092, 1093, 1093, 1093, 1093,
+     1093, 1093, 1094, 1094, 1094, 1094, 1095,    0, 1095, 1095,
+     1095, 1095, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1097,
+        0, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
+     1098,    0, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+     1098, 1099,    0, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+     1099, 1099, 1100,    0, 1100, 1100, 1100, 1100, 1100, 1100,
+     1100, 1100, 1100, 1101, 1101,    0, 1101, 1101, 1101, 1101,
+     1101, 1101, 1101, 1101, 1102, 1102, 1102, 1102, 1102, 1102,
+
+     1102, 1102, 1102, 1102, 1102, 1103, 1103,    0, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, 1104,
+     1104, 1104, 1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105,
+     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1107,
+     1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
+     1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+     1108, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
+
+     1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112, 1112, 1112,
+     1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114, 1114,
+     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1115, 1115,
      1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1116,    0,
      1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1117,
         0, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
-     1118, 1118, 1118, 1118, 1118, 1118, 1118, 1119, 1119, 1119,
-     1119, 1119, 1119, 1119, 1119, 1120, 1120, 1120, 1120, 1120,
-     1120, 1121,    0, 1121, 1121, 1121, 1121, 1122,    0, 1122,
-     1122, 1122, 1122, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
-     1124,    0, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
-     1124, 1125,    0, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
-
-     1125, 1125, 1126,    0, 1126, 1126, 1126, 1126, 1126, 1126,
-     1126, 1126, 1126, 1127,    0, 1127, 1127, 1127, 1127, 1127,
-     1127, 1127, 1127, 1127, 1128,    0, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1128, 1128, 1129, 1129, 1129, 1129, 1129,
-     1129, 1129, 1130, 1130,    0, 1130, 1130, 1130, 1130, 1130,
+     1118,    0, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
+     1118, 1119,    0, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
+     1119, 1119, 1120,    0,    0, 1120, 1120, 1121,    0,    0,
+
+     1121, 1121, 1121, 1122,    0,    0, 1122, 1123,    0, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1124,    0,
+     1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125,
+        0, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1128, 1128, 1128, 1128, 1128,
+     1128, 1129,    0, 1129, 1129, 1129, 1129, 1130,    0, 1130,
      1130, 1130, 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
-     1131, 1131, 1131, 1131, 1132, 1132,    0, 1132, 1132, 1132,
-     1132, 1132, 1132, 1132, 1132, 1133, 1133, 1133, 1133, 1133,
-     1133, 1133, 1133, 1133, 1133, 1133, 1134, 1134, 1134, 1134,
-     1134, 1134, 1134, 1134, 1134, 1134, 1134, 1135, 1135, 1135,
-
-     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136,
-     1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1137,
-     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
-     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
-     1138, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
-     1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
-     1140, 1140, 1140, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
-     1141, 1141, 1141, 1141, 1142, 1142, 1142, 1142, 1142, 1142,
-     1142, 1142, 1142, 1142, 1142, 1143, 1143, 1143, 1143, 1143,
-     1143, 1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144,
+     1132,    0, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1133,    0, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
 
-     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1145, 1145, 1145,
-     1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1146, 1146,
-     1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1147,
-     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
-     1148,    0, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
-     1148, 1149,    0, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
-     1149, 1149, 1150,    0, 1150, 1150, 1150, 1150, 1150, 1150,
-     1150, 1150, 1150, 1151,    0, 1151, 1151, 1151, 1151, 1151,
-     1151, 1151, 1151, 1151, 1152,    0, 1152, 1152, 1152, 1152,
-     1152, 1152, 1152, 1152, 1152, 1153,    0,    0, 1153, 1153,
-
-     1153, 1154,    0, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
-     1154, 1154, 1155,    0, 1155, 1155, 1155, 1155, 1155, 1155,
-     1155, 1155, 1155, 1156,    0, 1156, 1156, 1156, 1156, 1156,
-     1156, 1156, 1156, 1156, 1157, 1157, 1157, 1157, 1157, 1157,
-     1157, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1159,
-        0, 1159, 1159, 1159, 1159, 1160,    0, 1160, 1160, 1160,
-     1160, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1162,    0,
-     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1163,
-        0, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
-     1164,    0, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
-
-     1164, 1165,    0, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
-     1165, 1165, 1166,    0, 1166, 1166, 1166, 1166, 1166, 1166,
-     1166, 1166, 1166, 1167,    0, 1167, 1167, 1167, 1167, 1167,
-     1167, 1167, 1167, 1167, 1168, 1168, 1168, 1168, 1168, 1168,
-     1168, 1169, 1169,    0, 1169, 1169, 1169, 1169, 1169, 1169,
-     1169, 1169, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
-     1170, 1170, 1170, 1171, 1171,    0, 1171, 1171, 1171, 1171,
-     1171, 1171, 1171, 1171, 1172, 1172,    0, 1172, 1172, 1172,
-     1172, 1172, 1172, 1172, 1172, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1174, 1174, 1174, 1174,
-
-     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1175, 1175, 1175,
-     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1176, 1176,
-     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
-     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
-     1178, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
-     1179, 1179, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
-     1180, 1180, 1180, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
-     1181, 1181, 1181, 1181, 1182, 1182, 1182, 1182, 1182, 1182,
-     1182, 1182, 1182, 1182, 1182, 1183, 1183, 1183, 1183, 1183,
-
-     1183, 1183, 1183, 1183, 1183, 1183, 1184, 1184, 1184, 1184,
-     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1185, 1185, 1185,
-     1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1186, 1186,
-     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1187,
-     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
-     1188,    0, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
-     1188, 1189,    0, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
-     1189, 1189, 1190,    0, 1190, 1190, 1190, 1190, 1190, 1190,
-     1190, 1190, 1190, 1191,    0, 1191, 1191, 1191, 1191, 1191,
-     1191, 1191, 1191, 1191, 1192,    0, 1192, 1192, 1192, 1192,
-
-     1192, 1192, 1192, 1192, 1192, 1193,    0, 1193, 1193, 1193,
-     1193, 1193, 1193, 1193, 1193, 1193, 1194,    0,    0, 1194,
-     1194, 1194, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
-     1196,    0, 1196, 1196, 1196, 1196, 1197, 1197, 1197, 1197,
-     1197, 1197, 1197, 1198,    0, 1198, 1198, 1198, 1198, 1198,
-     1198, 1198, 1198, 1198, 1199,    0, 1199, 1199, 1199, 1199,
-     1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200, 1200, 1200,
-     1200, 1200, 1201, 1201,    0, 1201, 1201, 1201, 1201, 1201,
-     1201, 1201, 1201, 1202, 1202,    0, 1202, 1202, 1202, 1202,
-     1202, 1202, 1202, 1202, 1203, 1203, 1203, 1203, 1203, 1203,
-
-     1203, 1203, 1203, 1203, 1203, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
-     1046, 1046
+     1133, 1133, 1134,    0, 1134, 1134, 1134, 1134, 1134, 1134,
+     1134, 1134, 1134, 1135,    0, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1136,    0, 1136, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1137, 1137, 1137, 1137, 1137,
+     1137, 1137, 1138, 1138,    0, 1138, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1140, 1140,    0, 1140, 1140, 1140,
+     1140, 1140, 1140, 1140, 1140, 1141, 1141, 1141, 1141, 1141,
+     1141, 1141, 1141, 1141, 1141, 1141, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143, 1143,
+
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1144, 1144,
+     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1145,
+     1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
+     1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+     1146, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1151, 1151, 1151, 1151, 1151,
+     1151, 1151, 1151, 1151, 1151, 1151, 1152, 1152, 1152, 1152,
+
+     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1153, 1153,
+     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1155,
+     1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
+     1156,    0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1157,    0, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1157, 1157, 1158,    0, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1158, 1159,    0, 1159, 1159, 1159, 1159, 1159,
+     1159, 1159, 1159, 1159, 1160,    0, 1160, 1160, 1160, 1160,
+     1160, 1160, 1160, 1160, 1160, 1161,    0,    0, 1161, 1161,
+
+     1161, 1162,    0, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1162, 1163,    0, 1163, 1163, 1163, 1163, 1163, 1163,
+     1163, 1163, 1163, 1164,    0, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1167,
+        0, 1167, 1167, 1167, 1167, 1168,    0, 1168, 1168, 1168,
+     1168, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,    0,
+     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1171,
+        0, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+     1172,    0, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+
+     1172, 1173,    0, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
+     1173, 1173, 1174,    0, 1174, 1174, 1174, 1174, 1174, 1174,
+     1174, 1174, 1174, 1175,    0, 1175, 1175, 1175, 1175, 1175,
+     1175, 1175, 1175, 1175, 1176, 1176, 1176, 1176, 1176, 1176,
+     1176, 1177, 1177,    0, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1179, 1179,    0, 1179, 1179, 1179, 1179,
+     1179, 1179, 1179, 1179, 1180, 1180,    0, 1180, 1180, 1180,
+     1180, 1180, 1180, 1180, 1180, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1181, 1181, 1181, 1181, 1182, 1182, 1182, 1182,
+
+     1182, 1182, 1182, 1182, 1182, 1182, 1182, 1183, 1183, 1183,
+     1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1184, 1184,
+     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1185,
+     1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
+     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
+     1186, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+     1188, 1188, 1188, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
+     1189, 1189, 1189, 1189, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1191, 1191, 1191, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1192, 1192, 1192, 1192,
+     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1193, 1193, 1193,
+     1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1195,
+     1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+     1196,    0, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1197,    0, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+     1197, 1197, 1198,    0, 1198, 1198, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1199,    0, 1199, 1199, 1199, 1199, 1199,
+     1199, 1199, 1199, 1199, 1200,    0, 1200, 1200, 1200, 1200,
+
+     1200, 1200, 1200, 1200, 1200, 1201,    0, 1201, 1201, 1201,
+     1201, 1201, 1201, 1201, 1201, 1201, 1202,    0,    0, 1202,
+     1202, 1202, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+     1204,    0, 1204, 1204, 1204, 1204, 1205, 1205, 1205, 1205,
+     1205, 1205, 1205, 1206,    0, 1206, 1206, 1206, 1206, 1206,
+     1206, 1206, 1206, 1206, 1207,    0, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1207, 1208, 1208, 1208, 1208, 1208,
+     1208, 1208, 1209, 1209,    0, 1209, 1209, 1209, 1209, 1209,
+     1209, 1209, 1209, 1210, 1210,    0, 1210, 1210, 1210, 1210,
+     1210, 1210, 1210, 1210, 1211, 1211, 1211, 1211, 1211, 1211,
+
+     1211, 1211, 1211, 1211, 1211, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+     1054, 1054
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2593,7 +2596,7 @@
 
 
 
-#line 2597 "compilers/imcc/imclexer.c"
+#line 2600 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2728,7 +2731,12 @@
     
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -2852,7 +2860,7 @@
             return 0;
         }
 
-#line 2856 "compilers/imcc/imclexer.c"
+#line 2864 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -2906,13 +2914,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 1047 )
+				if ( yy_current_state >= 1055 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 1046 );
+		while ( yy_current_state != 1054 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -3131,456 +3139,461 @@
 case 19:
 YY_RULE_SETUP
 #line 305 "compilers/imcc/imcc.l"
-return LEXICAL;
+return ANNOTATE;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 306 "compilers/imcc/imcc.l"
-return ARG;
+return LEXICAL;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 307 "compilers/imcc/imcc.l"
-return SUB;
+return ARG;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 308 "compilers/imcc/imcc.l"
-return ESUB;
+return SUB;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 309 "compilers/imcc/imcc.l"
-return PCC_BEGIN;
+return ESUB;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 310 "compilers/imcc/imcc.l"
-return PCC_END;
+return PCC_BEGIN;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 311 "compilers/imcc/imcc.l"
-return PCC_CALL;
+return PCC_END;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 312 "compilers/imcc/imcc.l"
-return NCI_CALL;
+return PCC_CALL;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 313 "compilers/imcc/imcc.l"
-return METH_CALL;
+return NCI_CALL;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 314 "compilers/imcc/imcc.l"
-return INVOCANT;
+return METH_CALL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 315 "compilers/imcc/imcc.l"
-return PCC_SUB;
+return INVOCANT;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 316 "compilers/imcc/imcc.l"
-return PCC_BEGIN_RETURN;
+return PCC_SUB;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 317 "compilers/imcc/imcc.l"
-return PCC_END_RETURN;
+return PCC_BEGIN_RETURN;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 318 "compilers/imcc/imcc.l"
-return PCC_BEGIN_YIELD;
+return PCC_END_RETURN;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 319 "compilers/imcc/imcc.l"
-return PCC_END_YIELD;
+return PCC_BEGIN_YIELD;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 321 "compilers/imcc/imcc.l"
-return METHOD;
+#line 320 "compilers/imcc/imcc.l"
+return PCC_END_YIELD;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 322 "compilers/imcc/imcc.l"
-return MULTI;
+return METHOD;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 323 "compilers/imcc/imcc.l"
-return MAIN;
+return MULTI;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 324 "compilers/imcc/imcc.l"
-return LOAD;
+return MAIN;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 325 "compilers/imcc/imcc.l"
-return INIT;
+return LOAD;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 326 "compilers/imcc/imcc.l"
-return IMMEDIATE;
+return INIT;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 327 "compilers/imcc/imcc.l"
-return POSTCOMP;
+return IMMEDIATE;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 328 "compilers/imcc/imcc.l"
-return ANON;
+return POSTCOMP;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 329 "compilers/imcc/imcc.l"
-return OUTER;
+return ANON;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 330 "compilers/imcc/imcc.l"
-return NEED_LEX;
+return OUTER;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 331 "compilers/imcc/imcc.l"
-return VTABLE_METHOD;
+return NEED_LEX;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 332 "compilers/imcc/imcc.l"
-return NS_ENTRY;
+return VTABLE_METHOD;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 333 "compilers/imcc/imcc.l"
-return UNIQUE_REG;
+return NS_ENTRY;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 334 "compilers/imcc/imcc.l"
-return SUB_INSTANCE_OF;
+return UNIQUE_REG;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 335 "compilers/imcc/imcc.l"
-return SUBID;
+return SUB_INSTANCE_OF;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 337 "compilers/imcc/imcc.l"
-return RESULT;
+#line 336 "compilers/imcc/imcc.l"
+return SUBID;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 338 "compilers/imcc/imcc.l"
-return GET_RESULTS;
+return RESULT;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 339 "compilers/imcc/imcc.l"
-return YIELDT;
+return GET_RESULTS;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 340 "compilers/imcc/imcc.l"
-return SET_YIELD;
+return YIELDT;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 341 "compilers/imcc/imcc.l"
-return RETURN;
+return SET_YIELD;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 342 "compilers/imcc/imcc.l"
-return SET_RETURN;
+return RETURN;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 343 "compilers/imcc/imcc.l"
-return TAILCALL;
+return SET_RETURN;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 344 "compilers/imcc/imcc.l"
-return LOADLIB;
+return TAILCALL;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 346 "compilers/imcc/imcc.l"
-return ADV_FLAT;
+#line 345 "compilers/imcc/imcc.l"
+return LOADLIB;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 347 "compilers/imcc/imcc.l"
-return ADV_SLURPY;
+return ADV_FLAT;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 348 "compilers/imcc/imcc.l"
-return ADV_OPTIONAL;
+return ADV_SLURPY;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 349 "compilers/imcc/imcc.l"
-return ADV_OPT_FLAG;
+return ADV_OPTIONAL;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 350 "compilers/imcc/imcc.l"
-return ADV_NAMED;
+return ADV_OPT_FLAG;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 351 "compilers/imcc/imcc.l"
-return ADV_ARROW;
+return ADV_NAMED;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 352 "compilers/imcc/imcc.l"
-return ADV_INVOCANT;
+return ADV_ARROW;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 354 "compilers/imcc/imcc.l"
-return NAMESPACE;
+#line 353 "compilers/imcc/imcc.l"
+return ADV_INVOCANT;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 355 "compilers/imcc/imcc.l"
-return HLL;
+return NAMESPACE;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 356 "compilers/imcc/imcc.l"
-return HLL_MAP;
+return HLL;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 358 "compilers/imcc/imcc.l"
-return LOCAL;
+#line 357 "compilers/imcc/imcc.l"
+return HLL_MAP;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 359 "compilers/imcc/imcc.l"
-return CONST;
+return LOCAL;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 360 "compilers/imcc/imcc.l"
-return GLOBAL_CONST;
+return CONST;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 361 "compilers/imcc/imcc.l"
-return PARAM;
+return GLOBAL_CONST;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 362 "compilers/imcc/imcc.l"
-return GOTO;
+return PARAM;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 363 "compilers/imcc/imcc.l"
-return IF;
+return GOTO;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 364 "compilers/imcc/imcc.l"
-return UNLESS;
+return IF;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 365 "compilers/imcc/imcc.l"
-return PNULL;
+return UNLESS;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 366 "compilers/imcc/imcc.l"
-return INTV;
+return PNULL;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 367 "compilers/imcc/imcc.l"
-return FLOATV;
+return INTV;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 368 "compilers/imcc/imcc.l"
-return NEW;
+return FLOATV;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 369 "compilers/imcc/imcc.l"
-return PMCV;
+return NEW;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 370 "compilers/imcc/imcc.l"
-return STRINGV;
+return PMCV;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 371 "compilers/imcc/imcc.l"
-return SHIFT_LEFT;
+return STRINGV;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 372 "compilers/imcc/imcc.l"
-return SHIFT_RIGHT;
+return SHIFT_LEFT;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 373 "compilers/imcc/imcc.l"
-return SHIFT_RIGHT_U;
+return SHIFT_RIGHT;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 374 "compilers/imcc/imcc.l"
-return LOG_AND;
+return SHIFT_RIGHT_U;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 375 "compilers/imcc/imcc.l"
-return LOG_OR;
+return LOG_AND;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 376 "compilers/imcc/imcc.l"
-return LOG_XOR;
+return LOG_OR;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 377 "compilers/imcc/imcc.l"
-return RELOP_LT;
+return LOG_XOR;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 378 "compilers/imcc/imcc.l"
-return RELOP_LTE;
+return RELOP_LT;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 379 "compilers/imcc/imcc.l"
-return RELOP_GT;
+return RELOP_LTE;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 380 "compilers/imcc/imcc.l"
-return RELOP_GTE;
+return RELOP_GT;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 381 "compilers/imcc/imcc.l"
-return RELOP_EQ;
+return RELOP_GTE;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 382 "compilers/imcc/imcc.l"
-return RELOP_NE;
+return RELOP_EQ;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 383 "compilers/imcc/imcc.l"
-return POW;
+return RELOP_NE;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 385 "compilers/imcc/imcc.l"
-return CONCAT;
+#line 384 "compilers/imcc/imcc.l"
+return POW;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 386 "compilers/imcc/imcc.l"
-return DOT;
+return CONCAT;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 388 "compilers/imcc/imcc.l"
-return PLUS_ASSIGN;
+#line 387 "compilers/imcc/imcc.l"
+return DOT;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 389 "compilers/imcc/imcc.l"
-return MINUS_ASSIGN;
+return PLUS_ASSIGN;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 390 "compilers/imcc/imcc.l"
-return MUL_ASSIGN;
+return MINUS_ASSIGN;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 391 "compilers/imcc/imcc.l"
-return DIV_ASSIGN;
+return MUL_ASSIGN;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 392 "compilers/imcc/imcc.l"
-return MOD_ASSIGN;
+return DIV_ASSIGN;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 393 "compilers/imcc/imcc.l"
-return FDIV;
+return MOD_ASSIGN;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 394 "compilers/imcc/imcc.l"
-return FDIV_ASSIGN;
+return FDIV;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 395 "compilers/imcc/imcc.l"
-return BAND_ASSIGN;
+return FDIV_ASSIGN;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 396 "compilers/imcc/imcc.l"
-return BOR_ASSIGN;
+return BAND_ASSIGN;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 397 "compilers/imcc/imcc.l"
-return BXOR_ASSIGN;
+return BOR_ASSIGN;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 398 "compilers/imcc/imcc.l"
-return SHR_ASSIGN;
+return BXOR_ASSIGN;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 399 "compilers/imcc/imcc.l"
-return SHL_ASSIGN;
+return SHR_ASSIGN;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 400 "compilers/imcc/imcc.l"
-return SHR_U_ASSIGN;
+return SHL_ASSIGN;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 401 "compilers/imcc/imcc.l"
-return CONCAT_ASSIGN;
+return SHR_U_ASSIGN;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
+return CONCAT_ASSIGN;
+	YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 404 "compilers/imcc/imcc.l"
 {
         int c;
         int start_line;
@@ -3611,16 +3624,16 @@
         return MACRO;
     }
 	YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 433 "compilers/imcc/imcc.l"
+#line 434 "compilers/imcc/imcc.l"
 {
         return read_macro(valp, interp, yyscanner);
     }
 	YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 437 "compilers/imcc/imcc.l"
+#line 438 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
         if (c != STRINGC)
@@ -3630,9 +3643,9 @@
         include_file(interp, yytext + 1, yyscanner);
     }
 	YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 446 "compilers/imcc/imcc.l"
+#line 447 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3655,9 +3668,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 468 "compilers/imcc/imcc.l"
+#line 469 "compilers/imcc/imcc.l"
 {
 
         if (valp) {
@@ -3680,14 +3693,14 @@
         return IDENTIFIER;
      }
 	YY_BREAK
-case 114:
+case 115:
 YY_RULE_SETUP
-#line 490 "compilers/imcc/imcc.l"
+#line 491 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 492 "compilers/imcc/imcc.l"
+#line 493 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3698,9 +3711,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 502 "compilers/imcc/imcc.l"
+#line 503 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = yytext + 1;
 
@@ -3710,15 +3723,10 @@
         }
     }
 	YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 513 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, FLOATC);
-	YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 514 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, INTC);
+DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
@@ -3737,7 +3745,12 @@
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 519 "compilers/imcc/imcc.l"
+#line 518 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, INTC);
+	YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 520 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3748,9 +3761,9 @@
         return STRINGC;
     }
 	YY_BREAK
-case 123:
+case 124:
 YY_RULE_SETUP
-#line 529 "compilers/imcc/imcc.l"
+#line 530 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3758,9 +3771,9 @@
         return STRINGC;
     }
 	YY_BREAK
-case 124:
+case 125:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 537 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3789,9 +3802,9 @@
         yy_push_state(heredoc1, yyscanner);
     }
 	YY_BREAK
-case 125:
+case 126:
 YY_RULE_SETUP
-#line 564 "compilers/imcc/imcc.l"
+#line 565 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = str_dup(yytext);
@@ -3800,9 +3813,9 @@
         return USTRINGC;
     }
 	YY_BREAK
-case 126:
+case 127:
 YY_RULE_SETUP
-#line 572 "compilers/imcc/imcc.l"
+#line 573 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3811,9 +3824,9 @@
         return IREG;
     }
 	YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 580 "compilers/imcc/imcc.l"
+#line 581 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3822,9 +3835,9 @@
         return NREG;
     }
 	YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 588 "compilers/imcc/imcc.l"
+#line 589 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3833,9 +3846,9 @@
         return SREG;
     }
 	YY_BREAK
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 596 "compilers/imcc/imcc.l"
+#line 597 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3844,17 +3857,17 @@
         return PREG;
     }
 	YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 604 "compilers/imcc/imcc.l"
+#line 605 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
     }
 	YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 609 "compilers/imcc/imcc.l"
+#line 610 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3866,9 +3879,9 @@
         return REG;
     }
 	YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 620 "compilers/imcc/imcc.l"
+#line 621 "compilers/imcc/imcc.l"
 {
         if (!is_def) {
             SymReg *r = find_sym(interp, yytext);
@@ -3897,21 +3910,21 @@
         return (!is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
     }
 	YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 649 "compilers/imcc/imcc.l"
+#line 650 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 651 "compilers/imcc/imcc.l"
+#line 652 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 656 "compilers/imcc/imcc.l"
+#line 657 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3924,31 +3937,31 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 667 "compilers/imcc/imcc.l"
+#line 668 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 669 "compilers/imcc/imcc.l"
+#line 670 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ENDM);
 	YY_BREAK
-case 136:
-/* rule 136 can match eol */
+case 137:
+/* rule 137 can match eol */
 YY_RULE_SETUP
-#line 671 "compilers/imcc/imcc.l"
+#line 672 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
     }
 	YY_BREAK
-case 137:
+case 138:
 YY_RULE_SETUP
-#line 676 "compilers/imcc/imcc.l"
+#line 677 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
-case 138:
+case 139:
 YY_RULE_SETUP
-#line 678 "compilers/imcc/imcc.l"
+#line 679 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3972,9 +3985,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 701 "compilers/imcc/imcc.l"
+#line 702 "compilers/imcc/imcc.l"
 {
         if (valp) {
             const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 12;
@@ -3989,20 +4002,15 @@
         return IDENTIFIER;
     }
 	YY_BREAK
-case 140:
-YY_RULE_SETUP
-#line 715 "compilers/imcc/imcc.l"
-/* skip leading ws */;
-	YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 716 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, ' ');
+/* skip leading ws */;
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 717 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, REG);
+DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
@@ -4012,28 +4020,33 @@
 case 144:
 YY_RULE_SETUP
 #line 719 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, IDENTIFIER);
+DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 720 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, MACRO);
+DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 721 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, MACRO);
+	YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 722 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 722 "compilers/imcc/imcc.l"
+#line 723 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 147:
+case 148:
 YY_RULE_SETUP
-#line 724 "compilers/imcc/imcc.l"
+#line 725 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 4037 "compilers/imcc/imclexer.c"
+#line 4050 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4336,7 +4349,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 1047 )
+			if ( yy_current_state >= 1055 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4365,11 +4378,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 1047 )
+		if ( yy_current_state >= 1055 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1046);
+	yy_is_jam = (yy_current_state == 1054);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4812,8 +4825,8 @@
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
@@ -5235,7 +5248,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 724 "compilers/imcc/imcc.l"
+#line 725 "compilers/imcc/imcc.l"
 
 
 

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	(original)
+++ trunk/compilers/imcc/imcparser.c	Tue Jan  6 21:35:06 2009
@@ -105,96 +105,97 @@
      LOCAL = 283,
      LEXICAL = 284,
      CONST = 285,
-     INC = 286,
-     DEC = 287,
-     GLOBAL_CONST = 288,
-     PLUS_ASSIGN = 289,
-     MINUS_ASSIGN = 290,
-     MUL_ASSIGN = 291,
-     DIV_ASSIGN = 292,
-     CONCAT_ASSIGN = 293,
-     BAND_ASSIGN = 294,
-     BOR_ASSIGN = 295,
-     BXOR_ASSIGN = 296,
-     FDIV = 297,
-     FDIV_ASSIGN = 298,
-     MOD_ASSIGN = 299,
-     SHR_ASSIGN = 300,
-     SHL_ASSIGN = 301,
-     SHR_U_ASSIGN = 302,
-     SHIFT_LEFT = 303,
-     SHIFT_RIGHT = 304,
-     INTV = 305,
-     FLOATV = 306,
-     STRINGV = 307,
-     PMCV = 308,
-     LOG_XOR = 309,
-     RELOP_EQ = 310,
-     RELOP_NE = 311,
-     RELOP_GT = 312,
-     RELOP_GTE = 313,
-     RELOP_LT = 314,
-     RELOP_LTE = 315,
-     RESULT = 316,
-     RETURN = 317,
-     TAILCALL = 318,
-     YIELDT = 319,
-     GET_RESULTS = 320,
-     POW = 321,
-     SHIFT_RIGHT_U = 322,
-     LOG_AND = 323,
-     LOG_OR = 324,
-     COMMA = 325,
-     ESUB = 326,
-     DOTDOT = 327,
-     PCC_BEGIN = 328,
-     PCC_END = 329,
-     PCC_CALL = 330,
-     PCC_SUB = 331,
-     PCC_BEGIN_RETURN = 332,
-     PCC_END_RETURN = 333,
-     PCC_BEGIN_YIELD = 334,
-     PCC_END_YIELD = 335,
-     NCI_CALL = 336,
-     METH_CALL = 337,
-     INVOCANT = 338,
-     MAIN = 339,
-     LOAD = 340,
-     INIT = 341,
-     IMMEDIATE = 342,
-     POSTCOMP = 343,
-     METHOD = 344,
-     ANON = 345,
-     OUTER = 346,
-     NEED_LEX = 347,
-     MULTI = 348,
-     VTABLE_METHOD = 349,
-     LOADLIB = 350,
-     SUB_INSTANCE_OF = 351,
-     SUBID = 352,
-     NS_ENTRY = 353,
-     UNIQUE_REG = 354,
-     LABEL = 355,
-     EMIT = 356,
-     EOM = 357,
-     IREG = 358,
-     NREG = 359,
-     SREG = 360,
-     PREG = 361,
-     IDENTIFIER = 362,
-     REG = 363,
-     MACRO = 364,
-     ENDM = 365,
-     STRINGC = 366,
-     INTC = 367,
-     FLOATC = 368,
-     USTRINGC = 369,
-     PARROT_OP = 370,
-     VAR = 371,
-     LINECOMMENT = 372,
-     FILECOMMENT = 373,
-     DOT = 374,
-     CONCAT = 375
+     ANNOTATE = 286,
+     INC = 287,
+     DEC = 288,
+     GLOBAL_CONST = 289,
+     PLUS_ASSIGN = 290,
+     MINUS_ASSIGN = 291,
+     MUL_ASSIGN = 292,
+     DIV_ASSIGN = 293,
+     CONCAT_ASSIGN = 294,
+     BAND_ASSIGN = 295,
+     BOR_ASSIGN = 296,
+     BXOR_ASSIGN = 297,
+     FDIV = 298,
+     FDIV_ASSIGN = 299,
+     MOD_ASSIGN = 300,
+     SHR_ASSIGN = 301,
+     SHL_ASSIGN = 302,
+     SHR_U_ASSIGN = 303,
+     SHIFT_LEFT = 304,
+     SHIFT_RIGHT = 305,
+     INTV = 306,
+     FLOATV = 307,
+     STRINGV = 308,
+     PMCV = 309,
+     LOG_XOR = 310,
+     RELOP_EQ = 311,
+     RELOP_NE = 312,
+     RELOP_GT = 313,
+     RELOP_GTE = 314,
+     RELOP_LT = 315,
+     RELOP_LTE = 316,
+     RESULT = 317,
+     RETURN = 318,
+     TAILCALL = 319,
+     YIELDT = 320,
+     GET_RESULTS = 321,
+     POW = 322,
+     SHIFT_RIGHT_U = 323,
+     LOG_AND = 324,
+     LOG_OR = 325,
+     COMMA = 326,
+     ESUB = 327,
+     DOTDOT = 328,
+     PCC_BEGIN = 329,
+     PCC_END = 330,
+     PCC_CALL = 331,
+     PCC_SUB = 332,
+     PCC_BEGIN_RETURN = 333,
+     PCC_END_RETURN = 334,
+     PCC_BEGIN_YIELD = 335,
+     PCC_END_YIELD = 336,
+     NCI_CALL = 337,
+     METH_CALL = 338,
+     INVOCANT = 339,
+     MAIN = 340,
+     LOAD = 341,
+     INIT = 342,
+     IMMEDIATE = 343,
+     POSTCOMP = 344,
+     METHOD = 345,
+     ANON = 346,
+     OUTER = 347,
+     NEED_LEX = 348,
+     MULTI = 349,
+     VTABLE_METHOD = 350,
+     LOADLIB = 351,
+     SUB_INSTANCE_OF = 352,
+     SUBID = 353,
+     NS_ENTRY = 354,
+     UNIQUE_REG = 355,
+     LABEL = 356,
+     EMIT = 357,
+     EOM = 358,
+     IREG = 359,
+     NREG = 360,
+     SREG = 361,
+     PREG = 362,
+     IDENTIFIER = 363,
+     REG = 364,
+     MACRO = 365,
+     ENDM = 366,
+     STRINGC = 367,
+     INTC = 368,
+     FLOATC = 369,
+     USTRINGC = 370,
+     PARROT_OP = 371,
+     VAR = 372,
+     LINECOMMENT = 373,
+     FILECOMMENT = 374,
+     DOT = 375,
+     CONCAT = 376
    };
 #endif
 /* Tokens.  */
@@ -226,96 +227,97 @@
 #define LOCAL 283
 #define LEXICAL 284
 #define CONST 285
-#define INC 286
-#define DEC 287
-#define GLOBAL_CONST 288
-#define PLUS_ASSIGN 289
-#define MINUS_ASSIGN 290
-#define MUL_ASSIGN 291
-#define DIV_ASSIGN 292
-#define CONCAT_ASSIGN 293
-#define BAND_ASSIGN 294
-#define BOR_ASSIGN 295
-#define BXOR_ASSIGN 296
-#define FDIV 297
-#define FDIV_ASSIGN 298
-#define MOD_ASSIGN 299
-#define SHR_ASSIGN 300
-#define SHL_ASSIGN 301
-#define SHR_U_ASSIGN 302
-#define SHIFT_LEFT 303
-#define SHIFT_RIGHT 304
-#define INTV 305
-#define FLOATV 306
-#define STRINGV 307
-#define PMCV 308
-#define LOG_XOR 309
-#define RELOP_EQ 310
-#define RELOP_NE 311
-#define RELOP_GT 312
-#define RELOP_GTE 313
-#define RELOP_LT 314
-#define RELOP_LTE 315
-#define RESULT 316
-#define RETURN 317
-#define TAILCALL 318
-#define YIELDT 319
-#define GET_RESULTS 320
-#define POW 321
-#define SHIFT_RIGHT_U 322
-#define LOG_AND 323
-#define LOG_OR 324
-#define COMMA 325
-#define ESUB 326
-#define DOTDOT 327
-#define PCC_BEGIN 328
-#define PCC_END 329
-#define PCC_CALL 330
-#define PCC_SUB 331
-#define PCC_BEGIN_RETURN 332
-#define PCC_END_RETURN 333
-#define PCC_BEGIN_YIELD 334
-#define PCC_END_YIELD 335
-#define NCI_CALL 336
-#define METH_CALL 337
-#define INVOCANT 338
-#define MAIN 339
-#define LOAD 340
-#define INIT 341
-#define IMMEDIATE 342
-#define POSTCOMP 343
-#define METHOD 344
-#define ANON 345
-#define OUTER 346
-#define NEED_LEX 347
-#define MULTI 348
-#define VTABLE_METHOD 349
-#define LOADLIB 350
-#define SUB_INSTANCE_OF 351
-#define SUBID 352
-#define NS_ENTRY 353
-#define UNIQUE_REG 354
-#define LABEL 355
-#define EMIT 356
-#define EOM 357
-#define IREG 358
-#define NREG 359
-#define SREG 360
-#define PREG 361
-#define IDENTIFIER 362
-#define REG 363
-#define MACRO 364
-#define ENDM 365
-#define STRINGC 366
-#define INTC 367
-#define FLOATC 368
-#define USTRINGC 369
-#define PARROT_OP 370
-#define VAR 371
-#define LINECOMMENT 372
-#define FILECOMMENT 373
-#define DOT 374
-#define CONCAT 375
+#define ANNOTATE 286
+#define INC 287
+#define DEC 288
+#define GLOBAL_CONST 289
+#define PLUS_ASSIGN 290
+#define MINUS_ASSIGN 291
+#define MUL_ASSIGN 292
+#define DIV_ASSIGN 293
+#define CONCAT_ASSIGN 294
+#define BAND_ASSIGN 295
+#define BOR_ASSIGN 296
+#define BXOR_ASSIGN 297
+#define FDIV 298
+#define FDIV_ASSIGN 299
+#define MOD_ASSIGN 300
+#define SHR_ASSIGN 301
+#define SHL_ASSIGN 302
+#define SHR_U_ASSIGN 303
+#define SHIFT_LEFT 304
+#define SHIFT_RIGHT 305
+#define INTV 306
+#define FLOATV 307
+#define STRINGV 308
+#define PMCV 309
+#define LOG_XOR 310
+#define RELOP_EQ 311
+#define RELOP_NE 312
+#define RELOP_GT 313
+#define RELOP_GTE 314
+#define RELOP_LT 315
+#define RELOP_LTE 316
+#define RESULT 317
+#define RETURN 318
+#define TAILCALL 319
+#define YIELDT 320
+#define GET_RESULTS 321
+#define POW 322
+#define SHIFT_RIGHT_U 323
+#define LOG_AND 324
+#define LOG_OR 325
+#define COMMA 326
+#define ESUB 327
+#define DOTDOT 328
+#define PCC_BEGIN 329
+#define PCC_END 330
+#define PCC_CALL 331
+#define PCC_SUB 332
+#define PCC_BEGIN_RETURN 333
+#define PCC_END_RETURN 334
+#define PCC_BEGIN_YIELD 335
+#define PCC_END_YIELD 336
+#define NCI_CALL 337
+#define METH_CALL 338
+#define INVOCANT 339
+#define MAIN 340
+#define LOAD 341
+#define INIT 342
+#define IMMEDIATE 343
+#define POSTCOMP 344
+#define METHOD 345
+#define ANON 346
+#define OUTER 347
+#define NEED_LEX 348
+#define MULTI 349
+#define VTABLE_METHOD 350
+#define LOADLIB 351
+#define SUB_INSTANCE_OF 352
+#define SUBID 353
+#define NS_ENTRY 354
+#define UNIQUE_REG 355
+#define LABEL 356
+#define EMIT 357
+#define EOM 358
+#define IREG 359
+#define NREG 360
+#define SREG 361
+#define PREG 362
+#define IDENTIFIER 363
+#define REG 364
+#define MACRO 365
+#define ENDM 366
+#define STRINGC 367
+#define INTC 368
+#define FLOATC 369
+#define USTRINGC 370
+#define PARROT_OP 371
+#define VAR 372
+#define LINECOMMENT 373
+#define FILECOMMENT 374
+#define DOT 375
+#define CONCAT 376
 
 
 
@@ -1126,7 +1128,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 784 "compilers/imcc/imcc.y"
+#line 785 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;
@@ -1135,7 +1137,7 @@
     Instruction *i;
 }
 /* Line 187 of yacc.c.  */
-#line 1127 "compilers/imcc/imcparser.c"
+#line 1130 "compilers/imcc/imcparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -1148,7 +1150,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 1140 "compilers/imcc/imcparser.c"
+#line 1143 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1363,20 +1365,20 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  33
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   706
+#define YYLAST   703
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  137
+#define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  125
+#define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  341
+#define YYNRULES  343
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  551
+#define YYNSTATES  556
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   375
+#define YYMAXUTOK   376
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1387,16 +1389,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        4,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   127,     2,     2,     2,   133,   134,     2,
-     125,   126,   131,   130,     2,   129,     2,   132,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   136,
-       2,   122,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   128,     2,     2,     2,   134,   135,     2,
+     126,   127,   132,   131,     2,   130,     2,   133,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   137,
+       2,   123,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   123,     2,   124,     2,     2,     2,     2,     2,     2,
+       2,   124,     2,   125,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,   135,     2,   128,     2,     2,     2,
+       2,     2,     2,     2,   136,     2,   129,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1421,7 +1423,7 @@
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121
+     116,   117,   118,   119,   120,   121,   122
 };
 
 #if YYDEBUG
@@ -1430,185 +1432,186 @@
 static const yytype_uint16 yyprhs[] =
 {
        0,     0,     3,     5,     7,    10,    12,    14,    16,    18,
-      21,    23,    25,    27,    30,    34,    40,    44,    47,    52,
-      53,    60,    61,    68,    69,    76,    78,    80,    82,    85,
-      89,    92,    94,    96,    98,   100,   102,   103,   107,   108,
-     113,   116,   121,   122,   124,   125,   130,   131,   133,   137,
-     141,   144,   145,   146,   147,   158,   159,   161,   165,   166,
-     170,   174,   179,   184,   189,   191,   196,   198,   203,   205,
-     210,   215,   217,   222,   223,   227,   229,   231,   233,   235,
-     237,   239,   241,   245,   246,   248,   249,   259,   260,   263,
-     264,   268,   269,   271,   273,   276,   278,   280,   282,   284,
-     286,   288,   290,   292,   294,   296,   298,   300,   302,   304,
-     310,   314,   318,   322,   326,   332,   338,   339,   343,   346,
-     347,   351,   355,   356,   361,   362,   365,   367,   369,   371,
-     373,   378,   380,   381,   387,   389,   390,   396,   397,   400,
-     404,   405,   408,   412,   416,   420,   421,   427,   429,   431,
-     432,   434,   438,   442,   448,   450,   453,   454,   457,   460,
-     462,   464,   466,   467,   469,   472,   474,   476,   480,   483,
-     485,   489,   492,   493,   495,   497,   499,   500,   505,   510,
-     511,   518,   520,   521,   528,   531,   534,   537,   540,   542,
-     544,   546,   548,   549,   551,   553,   555,   557,   559,   563,
-     568,   574,   581,   588,   595,   603,   608,   613,   618,   625,
-     632,   640,   645,   652,   660,   664,   665,   675,   677,   679,
-     681,   685,   687,   689,   691,   693,   695,   697,   699,   701,
-     703,   705,   707,   709,   711,   713,   715,   717,   719,   721,
-     723,   725,   727,   729,   731,   733,   735,   737,   738,   744,
-     748,   750,   752,   754,   756,   758,   760,   762,   764,   766,
-     768,   770,   772,   774,   779,   781,   783,   785,   787,   791,
-     795,   799,   800,   806,   807,   811,   813,   819,   823,   826,
-     827,   830,   832,   834,   839,   842,   846,   852,   854,   858,
-     859,   861,   863,   870,   876,   881,   886,   893,   899,   901,
-     903,   905,   907,   909,   911,   913,   915,   917,   919,   920,
-     922,   926,   928,   930,   935,   939,   941,   943,   945,   947,
-     949,   951,   953,   955,   957,   959,   961,   962,   965,   966,
-     969,   971,   975,   977,   979,   981,   983,   985,   987,   989,
-     991,   993
+      21,    23,    25,    27,    30,    34,    40,    44,    49,    52,
+      57,    58,    65,    66,    73,    74,    81,    83,    85,    87,
+      90,    94,    97,    99,   101,   103,   105,   107,   108,   112,
+     113,   118,   121,   126,   127,   129,   130,   135,   136,   138,
+     142,   146,   149,   150,   151,   152,   163,   164,   166,   170,
+     171,   175,   179,   184,   189,   194,   196,   201,   203,   208,
+     210,   215,   220,   222,   227,   228,   232,   234,   236,   238,
+     240,   242,   244,   246,   250,   251,   253,   254,   264,   265,
+     268,   269,   273,   274,   276,   278,   281,   283,   285,   287,
+     289,   291,   293,   295,   297,   299,   301,   303,   305,   307,
+     309,   315,   319,   323,   327,   331,   337,   343,   344,   348,
+     351,   352,   356,   360,   361,   366,   367,   370,   372,   374,
+     376,   378,   383,   385,   386,   392,   394,   395,   401,   402,
+     405,   409,   410,   413,   417,   421,   425,   426,   432,   434,
+     436,   437,   439,   443,   447,   453,   455,   458,   459,   462,
+     465,   467,   469,   471,   473,   474,   476,   479,   481,   483,
+     487,   490,   492,   496,   499,   500,   502,   504,   506,   507,
+     512,   517,   518,   525,   527,   528,   535,   538,   541,   544,
+     547,   549,   551,   553,   555,   556,   558,   560,   562,   564,
+     566,   570,   575,   581,   588,   595,   602,   610,   615,   620,
+     625,   632,   639,   647,   652,   659,   667,   671,   672,   682,
+     684,   686,   688,   692,   694,   696,   698,   700,   702,   704,
+     706,   708,   710,   712,   714,   716,   718,   720,   722,   724,
+     726,   728,   730,   732,   734,   736,   738,   740,   742,   744,
+     745,   751,   755,   757,   759,   761,   763,   765,   767,   769,
+     771,   773,   775,   777,   779,   781,   786,   788,   790,   792,
+     794,   798,   802,   806,   807,   813,   814,   818,   820,   826,
+     830,   833,   834,   837,   839,   841,   846,   849,   853,   859,
+     861,   865,   866,   868,   870,   877,   883,   888,   893,   900,
+     906,   908,   910,   912,   914,   916,   918,   920,   922,   924,
+     926,   927,   929,   933,   935,   937,   942,   946,   948,   950,
+     952,   954,   956,   958,   960,   962,   964,   966,   968,   969,
+     972,   973,   976,   978,   982,   984,   986,   988,   990,   992,
+     994,   996,   998,  1000
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     138,     0,    -1,   139,    -1,   140,    -1,   139,   140,    -1,
-     159,    -1,   144,    -1,   161,    -1,   156,    -1,   110,     4,
-      -1,   141,    -1,   142,    -1,     4,    -1,   143,     4,    -1,
-      96,   112,     4,    -1,     8,   113,    71,   112,     4,    -1,
-       9,   112,     4,    -1,     6,   112,    -1,     7,   112,   122,
-     112,    -1,    -1,    31,   145,   220,   108,   122,   261,    -1,
-      -1,    31,   147,   113,   252,   122,   149,    -1,    -1,    31,
-     148,   112,   252,   122,   149,    -1,   112,    -1,   115,    -1,
-     151,    -1,   150,   151,    -1,   209,   152,     4,    -1,   110,
-       4,    -1,   119,    -1,   118,    -1,   159,    -1,   146,    -1,
-     141,    -1,    -1,   153,   116,   155,    -1,    -1,    77,   154,
-     183,   101,    -1,    14,   253,    -1,    30,   112,    71,   109,
-      -1,    -1,   246,    -1,    -1,   102,   157,   158,   103,    -1,
-      -1,   150,    -1,    25,   160,     4,    -1,   123,   254,   124,
-      -1,   123,   124,    -1,    -1,    -1,    -1,    27,   162,   249,
-     163,   183,     4,   164,   165,   178,    72,    -1,    -1,     4,
-      -1,   165,   166,     4,    -1,    -1,     5,   167,   168,    -1,
-     220,   108,   192,    -1,    94,   125,   176,   126,    -1,    92,
-     125,   112,   126,    -1,    92,   125,   108,   126,    -1,    95,
-      -1,    95,   125,   112,   126,    -1,    90,    -1,    90,   125,
-     149,   126,    -1,    99,    -1,    99,   125,   149,   126,    -1,
-      97,   125,   112,   126,    -1,    98,    -1,    98,   125,   149,
-     126,    -1,    -1,   176,    71,   177,    -1,   177,    -1,    51,
-      -1,    52,    -1,    54,    -1,    53,    -1,   108,    -1,   112,
-      -1,   123,   254,   124,    -1,    -1,   206,    -1,    -1,    74,
-       4,   180,   187,   182,   186,   181,   189,    75,    -1,    -1,
-     211,     4,    -1,    -1,    84,   253,     4,    -1,    -1,   184,
-      -1,   185,    -1,   184,   185,    -1,    86,    -1,    87,    -1,
-      85,    -1,    88,    -1,    89,    -1,    91,    -1,    93,    -1,
-     169,    -1,   170,    -1,   171,    -1,   172,    -1,   173,    -1,
-     174,    -1,   175,    -1,    76,   253,    71,   253,     4,    -1,
-      76,   253,     4,    -1,    82,   253,     4,    -1,    83,   245,
-       4,    -1,    83,   112,     4,    -1,    83,   245,    71,   253,
-       4,    -1,    83,   112,    71,   253,     4,    -1,    -1,   187,
-     188,     4,    -1,    11,   235,    -1,    -1,   189,   190,     4,
-      -1,    62,   245,   192,    -1,    -1,    29,   191,   220,   214,
-      -1,    -1,   192,   193,    -1,    18,    -1,    19,    -1,    20,
-      -1,    21,    -1,    21,   125,   112,   126,    -1,   100,    -1,
-      -1,    78,     4,   195,   198,    79,    -1,   202,    -1,    -1,
-      80,     4,   197,   199,    81,    -1,    -1,   198,     4,    -1,
-     198,   200,     4,    -1,    -1,   199,     4,    -1,   199,   201,
-       4,    -1,    15,   253,   236,    -1,    16,   253,   236,    -1,
-      -1,   204,   125,   203,   205,   126,    -1,    63,    -1,    65,
-      -1,    -1,   235,    -1,   112,    22,   253,    -1,   205,    71,
-     235,    -1,   205,    71,   112,    22,   253,    -1,   208,    -1,
-     206,   208,    -1,    -1,   207,   212,    -1,   110,     4,    -1,
-     119,    -1,   118,    -1,   142,    -1,    -1,   210,    -1,   210,
-     211,    -1,   211,    -1,   101,    -1,   209,   216,     4,    -1,
-       1,     4,    -1,   214,    -1,   213,    71,   214,    -1,   108,
-     215,    -1,    -1,   100,    -1,   222,    -1,   240,    -1,    -1,
-      29,   217,   220,   213,    -1,    30,   112,    71,   245,    -1,
-      -1,    31,   218,   220,   108,   122,   261,    -1,   146,    -1,
-      -1,    34,   219,   220,   108,   122,   261,    -1,    64,   232,
-      -1,    10,   251,    -1,   116,   246,    -1,    14,   253,    -1,
-     232,    -1,   179,    -1,   194,    -1,   196,    -1,    -1,    51,
-      -1,    52,    -1,    53,    -1,    54,    -1,   108,    -1,   245,
-     122,   253,    -1,   245,   122,   224,   253,    -1,   245,   122,
-     253,   225,   253,    -1,   245,   122,   253,   123,   254,   124,
-      -1,   245,   123,   254,   124,   122,   253,    -1,   245,   122,
-      23,   221,    71,   253,    -1,   245,   122,    23,   221,   123,
-     254,   124,    -1,   245,   122,    23,   221,    -1,   245,   122,
-      23,   253,    -1,   245,   122,    23,   160,    -1,   245,   122,
-      23,   160,    71,   253,    -1,   245,   122,    23,   253,    71,
-     253,    -1,   245,   122,    23,   253,   123,   254,   124,    -1,
-      23,   245,    71,   253,    -1,    23,   245,    71,   253,    71,
-     253,    -1,    23,   245,    71,   253,   123,   254,   124,    -1,
-     245,   122,   232,    -1,    -1,   125,   223,   239,   126,   122,
-     231,   125,   234,   126,    -1,   226,    -1,   228,    -1,   230,
-      -1,   245,   122,    14,    -1,   127,    -1,   128,    -1,   129,
-      -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,   133,
-      -1,    43,    -1,    67,    -1,   121,    -1,    56,    -1,    57,
-      -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,    49,
-      -1,    50,    -1,    68,    -1,    69,    -1,    70,    -1,    55,
-      -1,   134,    -1,   135,    -1,   128,    -1,    -1,    66,   227,
-     125,   239,   126,    -1,   245,   229,   253,    -1,    35,    -1,
-      36,    -1,    37,    -1,    38,    -1,    45,    -1,    44,    -1,
-      39,    -1,    40,    -1,    41,    -1,    42,    -1,    46,    -1,
-      47,    -1,    48,    -1,   245,   122,   116,   155,    -1,   108,
-      -1,   112,    -1,   115,    -1,   245,    -1,   245,   120,   250,
-      -1,   245,   120,   112,    -1,   245,   120,   245,    -1,    -1,
-     231,   233,   125,   234,   126,    -1,    -1,   234,    71,   235,
-      -1,   235,    -1,   234,    71,   112,    22,   253,    -1,   112,
-      22,   253,    -1,   253,   236,    -1,    -1,   236,   237,    -1,
-      17,    -1,    21,    -1,    21,   125,   112,   126,    -1,   245,
-     192,    -1,   239,    71,   238,    -1,   239,    71,   112,    22,
-     245,    -1,   238,    -1,   112,    22,   245,    -1,    -1,   242,
-      -1,   241,    -1,    13,   253,   244,   253,    10,   251,    -1,
-      13,    14,   253,    10,   251,    -1,    13,   253,   243,   251,
-      -1,    12,   253,   243,   251,    -1,    12,   253,   244,   253,
-      10,   251,    -1,    12,    14,   253,    10,   251,    -1,    71,
-      -1,    10,    -1,    56,    -1,    57,    -1,    58,    -1,    59,
-      -1,    60,    -1,    61,    -1,   117,    -1,   260,    -1,    -1,
-     247,    -1,   247,    71,   248,    -1,   248,    -1,   252,    -1,
-     245,   123,   254,   124,    -1,   123,   256,   124,    -1,   250,
-      -1,   112,    -1,   115,    -1,   108,    -1,   116,    -1,   108,
-      -1,   116,    -1,   251,    -1,   253,    -1,   245,    -1,   261,
-      -1,    -1,   255,   258,    -1,    -1,   257,   258,    -1,   259,
-      -1,   258,   136,   259,    -1,   253,    -1,   104,    -1,   105,
-      -1,   106,    -1,   107,    -1,   109,    -1,   113,    -1,   114,
-      -1,   112,    -1,   115,    -1
+     139,     0,    -1,   140,    -1,   141,    -1,   140,   141,    -1,
+     161,    -1,   146,    -1,   163,    -1,   158,    -1,   111,     4,
+      -1,   142,    -1,   143,    -1,     4,    -1,   145,     4,    -1,
+      97,   113,     4,    -1,     8,   114,    72,   113,     4,    -1,
+       9,   113,     4,    -1,    32,   113,    72,   263,    -1,     6,
+     113,    -1,     7,   113,   123,   113,    -1,    -1,    31,   147,
+     222,   109,   123,   263,    -1,    -1,    31,   149,   114,   254,
+     123,   151,    -1,    -1,    31,   150,   113,   254,   123,   151,
+      -1,   113,    -1,   116,    -1,   153,    -1,   152,   153,    -1,
+     211,   154,     4,    -1,   111,     4,    -1,   120,    -1,   119,
+      -1,   161,    -1,   148,    -1,   142,    -1,    -1,   155,   117,
+     157,    -1,    -1,    78,   156,   185,   102,    -1,    14,   255,
+      -1,    30,   113,    72,   110,    -1,    -1,   248,    -1,    -1,
+     103,   159,   160,   104,    -1,    -1,   152,    -1,    25,   162,
+       4,    -1,   124,   256,   125,    -1,   124,   125,    -1,    -1,
+      -1,    -1,    27,   164,   251,   165,   185,     4,   166,   167,
+     180,    73,    -1,    -1,     4,    -1,   167,   168,     4,    -1,
+      -1,     5,   169,   170,    -1,   222,   109,   194,    -1,    95,
+     126,   178,   127,    -1,    93,   126,   113,   127,    -1,    93,
+     126,   109,   127,    -1,    96,    -1,    96,   126,   113,   127,
+      -1,    91,    -1,    91,   126,   151,   127,    -1,   100,    -1,
+     100,   126,   151,   127,    -1,    98,   126,   113,   127,    -1,
+      99,    -1,    99,   126,   151,   127,    -1,    -1,   178,    72,
+     179,    -1,   179,    -1,    52,    -1,    53,    -1,    55,    -1,
+      54,    -1,   109,    -1,   113,    -1,   124,   256,   125,    -1,
+      -1,   208,    -1,    -1,    75,     4,   182,   189,   184,   188,
+     183,   191,    76,    -1,    -1,   213,     4,    -1,    -1,    85,
+     255,     4,    -1,    -1,   186,    -1,   187,    -1,   186,   187,
+      -1,    87,    -1,    88,    -1,    86,    -1,    89,    -1,    90,
+      -1,    92,    -1,    94,    -1,   171,    -1,   172,    -1,   173,
+      -1,   174,    -1,   175,    -1,   176,    -1,   177,    -1,    77,
+     255,    72,   255,     4,    -1,    77,   255,     4,    -1,    83,
+     255,     4,    -1,    84,   247,     4,    -1,    84,   113,     4,
+      -1,    84,   247,    72,   255,     4,    -1,    84,   113,    72,
+     255,     4,    -1,    -1,   189,   190,     4,    -1,    11,   237,
+      -1,    -1,   191,   192,     4,    -1,    63,   247,   194,    -1,
+      -1,    29,   193,   222,   216,    -1,    -1,   194,   195,    -1,
+      18,    -1,    19,    -1,    20,    -1,    21,    -1,    21,   126,
+     113,   127,    -1,   101,    -1,    -1,    79,     4,   197,   200,
+      80,    -1,   204,    -1,    -1,    81,     4,   199,   201,    82,
+      -1,    -1,   200,     4,    -1,   200,   202,     4,    -1,    -1,
+     201,     4,    -1,   201,   203,     4,    -1,    15,   255,   238,
+      -1,    16,   255,   238,    -1,    -1,   206,   126,   205,   207,
+     127,    -1,    64,    -1,    66,    -1,    -1,   237,    -1,   113,
+      22,   255,    -1,   207,    72,   237,    -1,   207,    72,   113,
+      22,   255,    -1,   210,    -1,   208,   210,    -1,    -1,   209,
+     214,    -1,   111,     4,    -1,   120,    -1,   119,    -1,   143,
+      -1,   144,    -1,    -1,   212,    -1,   212,   213,    -1,   213,
+      -1,   102,    -1,   211,   218,     4,    -1,     1,     4,    -1,
+     216,    -1,   215,    72,   216,    -1,   109,   217,    -1,    -1,
+     101,    -1,   224,    -1,   242,    -1,    -1,    29,   219,   222,
+     215,    -1,    30,   113,    72,   247,    -1,    -1,    31,   220,
+     222,   109,   123,   263,    -1,   148,    -1,    -1,    35,   221,
+     222,   109,   123,   263,    -1,    65,   234,    -1,    10,   253,
+      -1,   117,   248,    -1,    14,   255,    -1,   234,    -1,   181,
+      -1,   196,    -1,   198,    -1,    -1,    52,    -1,    53,    -1,
+      54,    -1,    55,    -1,   109,    -1,   247,   123,   255,    -1,
+     247,   123,   226,   255,    -1,   247,   123,   255,   227,   255,
+      -1,   247,   123,   255,   124,   256,   125,    -1,   247,   124,
+     256,   125,   123,   255,    -1,   247,   123,    23,   223,    72,
+     255,    -1,   247,   123,    23,   223,   124,   256,   125,    -1,
+     247,   123,    23,   223,    -1,   247,   123,    23,   255,    -1,
+     247,   123,    23,   162,    -1,   247,   123,    23,   162,    72,
+     255,    -1,   247,   123,    23,   255,    72,   255,    -1,   247,
+     123,    23,   255,   124,   256,   125,    -1,    23,   247,    72,
+     255,    -1,    23,   247,    72,   255,    72,   255,    -1,    23,
+     247,    72,   255,   124,   256,   125,    -1,   247,   123,   234,
+      -1,    -1,   126,   225,   241,   127,   123,   233,   126,   236,
+     127,    -1,   228,    -1,   230,    -1,   232,    -1,   247,   123,
+      14,    -1,   128,    -1,   129,    -1,   130,    -1,   130,    -1,
+     131,    -1,   132,    -1,   133,    -1,   134,    -1,    44,    -1,
+      68,    -1,   122,    -1,    57,    -1,    58,    -1,    59,    -1,
+      60,    -1,    61,    -1,    62,    -1,    50,    -1,    51,    -1,
+      69,    -1,    70,    -1,    71,    -1,    56,    -1,   135,    -1,
+     136,    -1,   129,    -1,    -1,    67,   229,   126,   241,   127,
+      -1,   247,   231,   255,    -1,    36,    -1,    37,    -1,    38,
+      -1,    39,    -1,    46,    -1,    45,    -1,    40,    -1,    41,
+      -1,    42,    -1,    43,    -1,    47,    -1,    48,    -1,    49,
+      -1,   247,   123,   117,   157,    -1,   109,    -1,   113,    -1,
+     116,    -1,   247,    -1,   247,   121,   252,    -1,   247,   121,
+     113,    -1,   247,   121,   247,    -1,    -1,   233,   235,   126,
+     236,   127,    -1,    -1,   236,    72,   237,    -1,   237,    -1,
+     236,    72,   113,    22,   255,    -1,   113,    22,   255,    -1,
+     255,   238,    -1,    -1,   238,   239,    -1,    17,    -1,    21,
+      -1,    21,   126,   113,   127,    -1,   247,   194,    -1,   241,
+      72,   240,    -1,   241,    72,   113,    22,   247,    -1,   240,
+      -1,   113,    22,   247,    -1,    -1,   244,    -1,   243,    -1,
+      13,   255,   246,   255,    10,   253,    -1,    13,    14,   255,
+      10,   253,    -1,    13,   255,   245,   253,    -1,    12,   255,
+     245,   253,    -1,    12,   255,   246,   255,    10,   253,    -1,
+      12,    14,   255,    10,   253,    -1,    72,    -1,    10,    -1,
+      57,    -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,
+      62,    -1,   118,    -1,   262,    -1,    -1,   249,    -1,   249,
+      72,   250,    -1,   250,    -1,   254,    -1,   247,   124,   256,
+     125,    -1,   124,   258,   125,    -1,   252,    -1,   113,    -1,
+     116,    -1,   109,    -1,   117,    -1,   109,    -1,   117,    -1,
+     253,    -1,   255,    -1,   247,    -1,   263,    -1,    -1,   257,
+     260,    -1,    -1,   259,   260,    -1,   261,    -1,   260,   137,
+     261,    -1,   255,    -1,   105,    -1,   106,    -1,   107,    -1,
+     108,    -1,   110,    -1,   114,    -1,   115,    -1,   113,    -1,
+     116,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   878,   878,   882,   883,   887,   888,   889,   895,   901,
-     902,   903,   904,   908,   909,   918,   923,   931,   940,   958,
-     958,   967,   967,   973,   973,   980,   981,   985,   986,   990,
-     991,   992,   993,   994,   995,   996,   999,   999,  1008,  1007,
-    1019,  1023,  1031,  1035,  1039,  1039,  1051,  1053,  1057,  1072,
-    1080,  1085,  1089,  1093,  1084,  1105,  1106,  1107,  1120,  1120,
-    1124,  1138,  1142,  1148,  1157,  1163,  1172,  1178,  1187,  1193,
-    1202,  1210,  1215,  1226,  1229,  1234,  1242,  1243,  1244,  1245,
-    1246,  1257,  1268,  1271,  1273,  1278,  1277,  1310,  1311,  1315,
-    1316,  1320,  1321,  1325,  1326,  1330,  1331,  1332,  1333,  1334,
-    1335,  1336,  1337,  1338,  1339,  1340,  1341,  1342,  1343,  1347,
-    1352,  1356,  1361,  1365,  1369,  1374,  1383,  1384,  1388,  1393,
-    1394,  1402,  1403,  1403,  1418,  1419,  1423,  1424,  1425,  1426,
-    1427,  1428,  1433,  1433,  1436,  1444,  1444,  1450,  1451,  1456,
-    1464,  1465,  1470,  1478,  1482,  1487,  1486,  1499,  1500,  1504,
-    1505,  1515,  1519,  1529,  1537,  1538,  1550,  1554,  1556,  1557,
-    1558,  1559,  1563,  1564,  1568,  1569,  1573,  1582,  1583,  1594,
-    1601,  1610,  1620,  1621,  1626,  1627,  1628,  1628,  1644,  1648,
-    1648,  1655,  1656,  1656,  1662,  1668,  1669,  1681,  1682,  1683,
-    1684,  1685,  1686,  1690,  1691,  1692,  1693,  1697,  1710,  1712,
-    1714,  1716,  1718,  1720,  1722,  1724,  1726,  1728,  1730,  1732,
-    1734,  1738,  1740,  1742,  1745,  1752,  1751,  1760,  1761,  1762,
-    1763,  1771,  1772,  1773,  1777,  1778,  1779,  1780,  1781,  1782,
-    1783,  1784,  1785,  1786,  1787,  1788,  1789,  1790,  1791,  1792,
-    1793,  1794,  1795,  1796,  1797,  1798,  1799,  1805,  1804,  1816,
-    1823,  1824,  1825,  1826,  1827,  1828,  1829,  1830,  1831,  1832,
-    1833,  1834,  1835,  1840,  1851,  1852,  1853,  1854,  1860,  1874,
-    1880,  1886,  1885,  1894,  1895,  1905,  1915,  1921,  1930,  1934,
-    1935,  1939,  1940,  1943,  1947,  1951,  1961,  1966,  1976,  1981,
-    1985,  1986,  1990,  1994,  1998,  2005,  2009,  2013,  2020,  2021,
-    2025,  2026,  2027,  2028,  2029,  2030,  2034,  2035,  2039,  2040,
-    2044,  2045,  2049,  2050,  2057,  2064,  2065,  2066,  2070,  2071,
-    2075,  2076,  2080,  2081,  2085,  2086,  2090,  2090,  2103,  2103,
-    2116,  2117,  2125,  2134,  2135,  2136,  2137,  2138,  2142,  2143,
-    2144,  2145
+       0,   880,   880,   884,   885,   889,   890,   891,   897,   903,
+     904,   905,   906,   910,   911,   920,   925,   932,   944,   953,
+     971,   971,   980,   980,   986,   986,   993,   994,   998,   999,
+    1003,  1004,  1005,  1006,  1007,  1008,  1009,  1012,  1012,  1021,
+    1020,  1032,  1036,  1044,  1048,  1052,  1052,  1064,  1066,  1070,
+    1085,  1093,  1098,  1102,  1106,  1097,  1118,  1119,  1120,  1133,
+    1133,  1137,  1151,  1155,  1161,  1170,  1176,  1185,  1191,  1200,
+    1206,  1215,  1223,  1228,  1239,  1242,  1247,  1255,  1256,  1257,
+    1258,  1259,  1270,  1281,  1284,  1286,  1291,  1290,  1323,  1324,
+    1328,  1329,  1333,  1334,  1338,  1339,  1343,  1344,  1345,  1346,
+    1347,  1348,  1349,  1350,  1351,  1352,  1353,  1354,  1355,  1356,
+    1360,  1365,  1369,  1374,  1378,  1382,  1387,  1396,  1397,  1401,
+    1406,  1407,  1415,  1416,  1416,  1431,  1432,  1436,  1437,  1438,
+    1439,  1440,  1441,  1446,  1446,  1449,  1457,  1457,  1463,  1464,
+    1469,  1477,  1478,  1483,  1491,  1495,  1500,  1499,  1512,  1513,
+    1517,  1518,  1528,  1532,  1542,  1550,  1551,  1563,  1567,  1569,
+    1570,  1571,  1572,  1573,  1577,  1578,  1582,  1583,  1587,  1596,
+    1597,  1608,  1615,  1624,  1634,  1635,  1640,  1641,  1642,  1642,
+    1658,  1662,  1662,  1669,  1670,  1670,  1676,  1682,  1683,  1695,
+    1696,  1697,  1698,  1699,  1700,  1704,  1705,  1706,  1707,  1711,
+    1724,  1726,  1728,  1730,  1732,  1734,  1736,  1738,  1740,  1742,
+    1744,  1746,  1748,  1752,  1754,  1756,  1759,  1766,  1765,  1774,
+    1775,  1776,  1777,  1785,  1786,  1787,  1791,  1792,  1793,  1794,
+    1795,  1796,  1797,  1798,  1799,  1800,  1801,  1802,  1803,  1804,
+    1805,  1806,  1807,  1808,  1809,  1810,  1811,  1812,  1813,  1819,
+    1818,  1830,  1837,  1838,  1839,  1840,  1841,  1842,  1843,  1844,
+    1845,  1846,  1847,  1848,  1849,  1854,  1865,  1866,  1867,  1868,
+    1874,  1888,  1894,  1900,  1899,  1908,  1909,  1919,  1929,  1935,
+    1944,  1948,  1949,  1953,  1954,  1957,  1961,  1965,  1975,  1980,
+    1990,  1995,  1999,  2000,  2004,  2008,  2012,  2019,  2023,  2027,
+    2034,  2035,  2039,  2040,  2041,  2042,  2043,  2044,  2048,  2049,
+    2053,  2054,  2058,  2059,  2063,  2064,  2071,  2078,  2079,  2080,
+    2084,  2085,  2089,  2090,  2094,  2095,  2099,  2100,  2104,  2104,
+    2117,  2117,  2130,  2131,  2139,  2148,  2149,  2150,  2151,  2152,
+    2156,  2157,  2158,  2159
 };
 #endif
 
@@ -1622,7 +1625,7 @@
   "SET_RETURN", "SET_YIELD", "ADV_FLAT", "ADV_SLURPY", "ADV_OPTIONAL",
   "ADV_OPT_FLAG", "ADV_NAMED", "ADV_ARROW", "NEW", "ADV_INVOCANT",
   "NAMESPACE", "DOT_METHOD", "SUB", "SYM", "LOCAL", "LEXICAL", "CONST",
-  "INC", "DEC", "GLOBAL_CONST", "PLUS_ASSIGN", "MINUS_ASSIGN",
+  "ANNOTATE", "INC", "DEC", "GLOBAL_CONST", "PLUS_ASSIGN", "MINUS_ASSIGN",
   "MUL_ASSIGN", "DIV_ASSIGN", "CONCAT_ASSIGN", "BAND_ASSIGN", "BOR_ASSIGN",
   "BXOR_ASSIGN", "FDIV", "FDIV_ASSIGN", "MOD_ASSIGN", "SHR_ASSIGN",
   "SHL_ASSIGN", "SHR_U_ASSIGN", "SHIFT_LEFT", "SHIFT_RIGHT", "INTV",
@@ -1640,27 +1643,28 @@
   "DOT", "CONCAT", "'='", "'['", "']'", "'('", "')'", "'!'", "'~'", "'-'",
   "'+'", "'*'", "'/'", "'%'", "'&'", "'|'", "';'", "$accept", "program",
   "compilation_units", "compilation_unit", "pragma", "location_directive",
-  "hll_def", "constdef", "@1", "pmc_const", "@2", "@3", "any_string",
-  "pasmcode", "pasmline", "pasm_inst", "@4", "@5", "pasm_args", "emit",
-  "@6", "opt_pasmcode", "class_namespace", "maybe_ns", "sub", "@7", "@8",
-  "@9", "sub_params", "sub_param", "@10", "sub_param_type_def", "multi",
-  "outer", "vtable", "method", "ns_entry_name", "instanceof", "subid",
-  "multi_types", "multi_type", "sub_body", "pcc_sub_call", "@11",
-  "opt_label", "opt_invocant", "sub_proto", "sub_proto_list", "proto",
-  "pcc_call", "pcc_args", "pcc_arg", "pcc_results", "pcc_result", "@12",
-  "paramtype_list", "paramtype", "pcc_ret", "@13", "pcc_yield", "@14",
-  "pcc_returns", "pcc_yields", "pcc_return", "pcc_set_yield",
-  "pcc_return_many", "@15", "return_or_yield", "var_returns", "statements",
-  "helper_clear_state", "statement", "labels", "_labels", "label",
-  "instruction", "id_list", "id_list_id", "opt_unique_reg", "labeled_inst",
-  "@16", "@17", "@18", "type", "classname", "assignment", "@19", "un_op",
-  "bin_op", "get_results", "@20", "op_assign", "assign_op", "func_assign",
-  "the_sub", "sub_call", "@21", "arglist", "arg", "argtype_list",
-  "argtype", "result", "targetlist", "conditional_statement",
-  "unless_statement", "if_statement", "comma_or_goto", "relop", "target",
-  "vars", "_vars", "_var_or_i", "sub_label_op_c", "sub_label_op",
-  "label_op", "var_or_i", "var", "keylist", "@22", "keylist_force", "@23",
-  "_keylist", "key", "reg", "const", 0
+  "annotate_directive", "hll_def", "constdef", "@1", "pmc_const", "@2",
+  "@3", "any_string", "pasmcode", "pasmline", "pasm_inst", "@4", "@5",
+  "pasm_args", "emit", "@6", "opt_pasmcode", "class_namespace", "maybe_ns",
+  "sub", "@7", "@8", "@9", "sub_params", "sub_param", "@10",
+  "sub_param_type_def", "multi", "outer", "vtable", "method",
+  "ns_entry_name", "instanceof", "subid", "multi_types", "multi_type",
+  "sub_body", "pcc_sub_call", "@11", "opt_label", "opt_invocant",
+  "sub_proto", "sub_proto_list", "proto", "pcc_call", "pcc_args",
+  "pcc_arg", "pcc_results", "pcc_result", "@12", "paramtype_list",
+  "paramtype", "pcc_ret", "@13", "pcc_yield", "@14", "pcc_returns",
+  "pcc_yields", "pcc_return", "pcc_set_yield", "pcc_return_many", "@15",
+  "return_or_yield", "var_returns", "statements", "helper_clear_state",
+  "statement", "labels", "_labels", "label", "instruction", "id_list",
+  "id_list_id", "opt_unique_reg", "labeled_inst", "@16", "@17", "@18",
+  "type", "classname", "assignment", "@19", "un_op", "bin_op",
+  "get_results", "@20", "op_assign", "assign_op", "func_assign", "the_sub",
+  "sub_call", "@21", "arglist", "arg", "argtype_list", "argtype", "result",
+  "targetlist", "conditional_statement", "unless_statement",
+  "if_statement", "comma_or_goto", "relop", "target", "vars", "_vars",
+  "_var_or_i", "sub_label_op_c", "sub_label_op", "label_op", "var_or_i",
+  "var", "keylist", "@22", "keylist_force", "@23", "_keylist", "key",
+  "reg", "const", 0
 };
 #endif
 
@@ -1681,89 +1685,89 @@
      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
      354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
      364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,    61,    91,    93,    40,    41,    33,   126,    45,
-      43,    42,    47,    37,    38,   124,    59
+     374,   375,   376,    61,    91,    93,    40,    41,    33,   126,
+      45,    43,    42,    47,    37,    38,   124,    59
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   137,   138,   139,   139,   140,   140,   140,   140,   140,
-     140,   140,   140,   141,   141,   142,   142,   143,   143,   145,
-     144,   147,   146,   148,   146,   149,   149,   150,   150,   151,
-     151,   151,   151,   151,   151,   151,   153,   152,   154,   152,
-     152,   152,   152,   155,   157,   156,   158,   158,   159,   160,
-     160,   162,   163,   164,   161,   165,   165,   165,   167,   166,
-     168,   169,   170,   170,   171,   171,   172,   172,   173,   173,
-     174,   175,   175,   176,   176,   176,   177,   177,   177,   177,
-     177,   177,   177,   178,   178,   180,   179,   181,   181,   182,
-     182,   183,   183,   184,   184,   185,   185,   185,   185,   185,
-     185,   185,   185,   185,   185,   185,   185,   185,   185,   186,
-     186,   186,   186,   186,   186,   186,   187,   187,   188,   189,
-     189,   190,   191,   190,   192,   192,   193,   193,   193,   193,
-     193,   193,   195,   194,   194,   197,   196,   198,   198,   198,
-     199,   199,   199,   200,   201,   203,   202,   204,   204,   205,
-     205,   205,   205,   205,   206,   206,   207,   208,   208,   208,
-     208,   208,   209,   209,   210,   210,   211,   212,   212,   213,
-     213,   214,   215,   215,   216,   216,   217,   216,   216,   218,
-     216,   216,   219,   216,   216,   216,   216,   216,   216,   216,
-     216,   216,   216,   220,   220,   220,   220,   221,   222,   222,
-     222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
-     222,   222,   222,   222,   222,   223,   222,   222,   222,   222,
-     222,   224,   224,   224,   225,   225,   225,   225,   225,   225,
-     225,   225,   225,   225,   225,   225,   225,   225,   225,   225,
-     225,   225,   225,   225,   225,   225,   225,   227,   226,   228,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   230,   231,   231,   231,   231,   231,   231,
-     231,   233,   232,   234,   234,   234,   234,   234,   235,   236,
-     236,   237,   237,   237,   238,   239,   239,   239,   239,   239,
-     240,   240,   241,   241,   241,   242,   242,   242,   243,   243,
-     244,   244,   244,   244,   244,   244,   245,   245,   246,   246,
-     247,   247,   248,   248,   248,   249,   249,   249,   250,   250,
-     251,   251,   252,   252,   253,   253,   255,   254,   257,   256,
-     258,   258,   259,   260,   260,   260,   260,   260,   261,   261,
-     261,   261
+       0,   138,   139,   140,   140,   141,   141,   141,   141,   141,
+     141,   141,   141,   142,   142,   143,   143,   144,   145,   145,
+     147,   146,   149,   148,   150,   148,   151,   151,   152,   152,
+     153,   153,   153,   153,   153,   153,   153,   155,   154,   156,
+     154,   154,   154,   154,   157,   159,   158,   160,   160,   161,
+     162,   162,   164,   165,   166,   163,   167,   167,   167,   169,
+     168,   170,   171,   172,   172,   173,   173,   174,   174,   175,
+     175,   176,   177,   177,   178,   178,   178,   179,   179,   179,
+     179,   179,   179,   179,   180,   180,   182,   181,   183,   183,
+     184,   184,   185,   185,   186,   186,   187,   187,   187,   187,
+     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
+     188,   188,   188,   188,   188,   188,   188,   189,   189,   190,
+     191,   191,   192,   193,   192,   194,   194,   195,   195,   195,
+     195,   195,   195,   197,   196,   196,   199,   198,   200,   200,
+     200,   201,   201,   201,   202,   203,   205,   204,   206,   206,
+     207,   207,   207,   207,   207,   208,   208,   209,   210,   210,
+     210,   210,   210,   210,   211,   211,   212,   212,   213,   214,
+     214,   215,   215,   216,   217,   217,   218,   218,   219,   218,
+     218,   220,   218,   218,   221,   218,   218,   218,   218,   218,
+     218,   218,   218,   218,   218,   222,   222,   222,   222,   223,
+     224,   224,   224,   224,   224,   224,   224,   224,   224,   224,
+     224,   224,   224,   224,   224,   224,   224,   225,   224,   224,
+     224,   224,   224,   226,   226,   226,   227,   227,   227,   227,
+     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
+     227,   227,   227,   227,   227,   227,   227,   227,   227,   229,
+     228,   230,   231,   231,   231,   231,   231,   231,   231,   231,
+     231,   231,   231,   231,   231,   232,   233,   233,   233,   233,
+     233,   233,   233,   235,   234,   236,   236,   236,   236,   236,
+     237,   238,   238,   239,   239,   239,   240,   241,   241,   241,
+     241,   241,   242,   242,   243,   243,   243,   244,   244,   244,
+     245,   245,   246,   246,   246,   246,   246,   246,   247,   247,
+     248,   248,   249,   249,   250,   250,   250,   251,   251,   251,
+     252,   252,   253,   253,   254,   254,   255,   255,   257,   256,
+     259,   258,   260,   260,   261,   262,   262,   262,   262,   262,
+     263,   263,   263,   263
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     2,     1,     1,     1,     1,     2,
-       1,     1,     1,     2,     3,     5,     3,     2,     4,     0,
-       6,     0,     6,     0,     6,     1,     1,     1,     2,     3,
-       2,     1,     1,     1,     1,     1,     0,     3,     0,     4,
-       2,     4,     0,     1,     0,     4,     0,     1,     3,     3,
-       2,     0,     0,     0,    10,     0,     1,     3,     0,     3,
-       3,     4,     4,     4,     1,     4,     1,     4,     1,     4,
-       4,     1,     4,     0,     3,     1,     1,     1,     1,     1,
-       1,     1,     3,     0,     1,     0,     9,     0,     2,     0,
-       3,     0,     1,     1,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     5,
-       3,     3,     3,     3,     5,     5,     0,     3,     2,     0,
-       3,     3,     0,     4,     0,     2,     1,     1,     1,     1,
-       4,     1,     0,     5,     1,     0,     5,     0,     2,     3,
-       0,     2,     3,     3,     3,     0,     5,     1,     1,     0,
-       1,     3,     3,     5,     1,     2,     0,     2,     2,     1,
-       1,     1,     0,     1,     2,     1,     1,     3,     2,     1,
-       3,     2,     0,     1,     1,     1,     0,     4,     4,     0,
-       6,     1,     0,     6,     2,     2,     2,     2,     1,     1,
-       1,     1,     0,     1,     1,     1,     1,     1,     3,     4,
-       5,     6,     6,     6,     7,     4,     4,     4,     6,     6,
-       7,     4,     6,     7,     3,     0,     9,     1,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     3,     5,     3,     4,     2,     4,
+       0,     6,     0,     6,     0,     6,     1,     1,     1,     2,
+       3,     2,     1,     1,     1,     1,     1,     0,     3,     0,
+       4,     2,     4,     0,     1,     0,     4,     0,     1,     3,
+       3,     2,     0,     0,     0,    10,     0,     1,     3,     0,
+       3,     3,     4,     4,     4,     1,     4,     1,     4,     1,
+       4,     4,     1,     4,     0,     3,     1,     1,     1,     1,
+       1,     1,     1,     3,     0,     1,     0,     9,     0,     2,
+       0,     3,     0,     1,     1,     2,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     5,     3,
+       5,     3,     3,     3,     3,     5,     5,     0,     3,     2,
+       0,     3,     3,     0,     4,     0,     2,     1,     1,     1,
+       1,     4,     1,     0,     5,     1,     0,     5,     0,     2,
+       3,     0,     2,     3,     3,     3,     0,     5,     1,     1,
+       0,     1,     3,     3,     5,     1,     2,     0,     2,     2,
+       1,     1,     1,     1,     0,     1,     2,     1,     1,     3,
+       2,     1,     3,     2,     0,     1,     1,     1,     0,     4,
+       4,     0,     6,     1,     0,     6,     2,     2,     2,     2,
+       1,     1,     1,     1,     0,     1,     1,     1,     1,     1,
+       3,     4,     5,     6,     6,     6,     7,     4,     4,     4,
+       6,     6,     7,     4,     6,     7,     3,     0,     9,     1,
+       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     4,     1,     1,     1,     1,     3,     3,
-       3,     0,     5,     0,     3,     1,     5,     3,     2,     0,
-       2,     1,     1,     4,     2,     3,     5,     1,     3,     0,
-       1,     1,     6,     5,     4,     4,     6,     5,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-       3,     1,     1,     4,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     2,     0,     2,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       5,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     4,     1,     1,     1,     1,
+       3,     3,     3,     0,     5,     0,     3,     1,     5,     3,
+       2,     0,     2,     1,     1,     4,     2,     3,     5,     1,
+       3,     0,     1,     1,     6,     5,     4,     4,     6,     5,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     1,     3,     1,     1,     4,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     2,
+       0,     2,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1771,378 +1775,378 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,    12,     0,     0,     0,     0,     0,    51,    19,     0,
-      44,     0,     0,     2,     3,    10,    11,     0,     6,     8,
-       5,     7,    17,     0,     0,     0,   326,     0,     0,     0,
-       0,   162,     9,     1,     4,    13,     0,     0,    16,    50,
-       0,     0,    48,   318,   316,   317,   319,    52,   315,   193,
-     194,   195,   196,     0,    14,    21,   166,     0,    32,    31,
-      35,    34,   162,    27,     0,    33,    36,   163,   165,    18,
-       0,    49,   333,   334,   335,   336,   337,   340,   338,   339,
-     341,   306,   324,   332,   327,   330,   307,   325,    91,     0,
-       0,     0,    30,    28,    45,     0,     0,    38,     0,     0,
-     164,    15,     0,    97,    95,    96,    98,    99,    66,   100,
-       0,   101,     0,    64,     0,    71,    68,   102,   103,   104,
-     105,   106,   107,   108,     0,    92,    93,     0,     0,     0,
-      40,     0,    91,    29,   308,   331,     0,     0,    73,     0,
-       0,     0,     0,    53,    94,    20,   320,   321,   322,     0,
-     323,     0,     0,     0,   328,    37,   324,    43,   309,   311,
-     312,    25,    26,     0,     0,     0,    76,    77,    79,    78,
-      80,    81,   326,     0,    75,     0,     0,     0,     0,    55,
-       0,     0,    41,    39,     0,     0,   326,     0,    67,    63,
-      62,     0,     0,    61,    65,    70,    72,    69,    56,   156,
-      22,    24,   314,   329,     0,   310,    82,    74,    58,     0,
-     160,   159,   161,     0,     0,   156,     0,   154,   313,     0,
-     158,    57,    54,   155,     0,   192,   157,    59,     0,   168,
-       0,     0,     0,     0,     0,   176,     0,   179,   182,   147,
-       0,   148,   247,     0,     0,     0,   264,   265,   266,   308,
-     215,   181,   189,   190,   191,   134,     0,     0,   174,   217,
-     218,   219,   271,   188,   175,   291,   290,   267,   124,   185,
-       0,     0,     0,     0,   187,     0,     0,     0,     0,     0,
-     184,   267,     0,    85,   132,   135,   186,   289,   145,   167,
-       0,   250,   251,   252,   253,   256,   257,   258,   259,   255,
-     254,   260,   261,   262,     0,     0,   326,     0,    60,     0,
-     299,   300,   301,   302,   303,   304,   305,   298,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   289,   116,
-     137,   140,     0,   287,     0,   124,   149,   273,   269,   270,
-     268,   220,     0,   340,   341,   308,   221,   222,   223,     0,
-     214,   324,   198,     0,   249,   126,   127,   128,   129,   131,
-     125,     0,   295,     0,     0,   294,     0,   211,   172,   177,
-     169,   178,     0,     0,     0,    89,     0,     0,     0,     0,
-       0,   284,   340,     0,   150,   279,   340,     0,   275,   197,
-     207,   205,   206,   263,   199,   229,   238,   239,   243,   232,
-     233,   234,   235,   236,   237,   230,   240,   241,   242,   231,
-     326,   246,   224,   225,   226,   227,   228,   244,   245,     0,
-       0,     0,   297,     0,   293,     0,     0,   326,   173,   171,
-       0,     0,     0,   248,     0,     0,     0,     0,   138,     0,
-     133,     0,   141,     0,   136,     0,   288,     0,   285,     0,
-       0,     0,   146,   278,     0,     0,   272,     0,     0,   326,
-       0,   326,     0,   200,     0,     0,   296,   292,   212,     0,
-     170,   180,   183,   118,     0,     0,     0,     0,    87,   117,
-     279,   139,   279,   142,     0,     0,   151,   340,   152,   281,
-     282,   280,   277,   340,   274,   208,   203,     0,   209,     0,
-     201,   202,   130,   213,    90,     0,     0,     0,     0,   119,
-       0,   143,   144,   286,   273,     0,     0,     0,   204,   210,
-     110,     0,   111,   113,     0,   112,     0,     0,    88,     0,
-     153,     0,   276,     0,     0,     0,   122,     0,    86,     0,
-     216,   283,   109,   115,   114,     0,   124,   120,     0,   121,
-     123
+       0,    12,     0,     0,     0,     0,     0,    52,    20,     0,
+      45,     0,     0,     2,     3,    10,    11,     0,     6,     8,
+       5,     7,    18,     0,     0,     0,   328,     0,     0,     0,
+       0,   164,     9,     1,     4,    13,     0,     0,    16,    51,
+       0,     0,    49,   320,   318,   319,   321,    53,   317,   195,
+     196,   197,   198,     0,    14,    22,   168,     0,    33,    32,
+      36,    35,   164,    28,     0,    34,    37,   165,   167,    19,
+       0,    50,   335,   336,   337,   338,   339,   342,   340,   341,
+     343,   308,   326,   334,   329,   332,   309,   327,    92,     0,
+       0,     0,    31,    29,    46,     0,     0,    39,     0,     0,
+     166,    15,     0,    98,    96,    97,    99,   100,    67,   101,
+       0,   102,     0,    65,     0,    72,    69,   103,   104,   105,
+     106,   107,   108,   109,     0,    93,    94,     0,     0,     0,
+      41,     0,    92,    30,   310,   333,     0,     0,    74,     0,
+       0,     0,     0,    54,    95,    21,   322,   323,   324,     0,
+     325,     0,     0,     0,   330,    38,   326,    44,   311,   313,
+     314,    26,    27,     0,     0,     0,    77,    78,    80,    79,
+      81,    82,   328,     0,    76,     0,     0,     0,     0,    56,
+       0,     0,    42,    40,     0,     0,   328,     0,    68,    64,
+      63,     0,     0,    62,    66,    71,    73,    70,    57,   157,
+      23,    25,   316,   331,     0,   312,    83,    75,    59,     0,
+       0,   161,   160,   162,   163,     0,     0,   157,     0,   155,
+     315,     0,     0,   159,    58,    55,   156,     0,   194,   158,
+      60,     0,     0,   170,     0,     0,     0,     0,     0,   178,
+       0,   181,   184,   148,     0,   149,   249,     0,     0,     0,
+     266,   267,   268,   310,   217,   183,   191,   192,   193,   135,
+       0,     0,   176,   219,   220,   221,   273,   190,   177,   293,
+     292,   269,   125,    17,   187,     0,     0,     0,     0,   189,
+       0,     0,     0,     0,     0,   186,   269,     0,    86,   133,
+     136,   188,   291,   146,   169,     0,   252,   253,   254,   255,
+     258,   259,   260,   261,   257,   256,   262,   263,   264,     0,
+       0,   328,     0,    61,     0,   301,   302,   303,   304,   305,
+     306,   307,   300,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   291,   117,   138,   141,     0,   289,     0,
+     125,   150,   275,   271,   272,   270,   222,     0,   342,   343,
+     310,   223,   224,   225,     0,   216,   326,   200,     0,   251,
+     127,   128,   129,   130,   132,   126,     0,   297,     0,     0,
+     296,     0,   213,   174,   179,   171,   180,     0,     0,     0,
+      90,     0,     0,     0,     0,     0,   286,   342,     0,   151,
+     281,   342,     0,   277,   199,   209,   207,   208,   265,   201,
+     231,   240,   241,   245,   234,   235,   236,   237,   238,   239,
+     232,   242,   243,   244,   233,   328,   248,   226,   227,   228,
+     229,   230,   246,   247,     0,     0,     0,   299,     0,   295,
+       0,     0,   328,   175,   173,     0,     0,     0,   250,     0,
+       0,     0,     0,   139,     0,   134,     0,   142,     0,   137,
+       0,   290,     0,   287,     0,     0,     0,   147,   280,     0,
+       0,   274,     0,     0,   328,     0,   328,     0,   202,     0,
+       0,   298,   294,   214,     0,   172,   182,   185,   119,     0,
+       0,     0,     0,    88,   118,   281,   140,   281,   143,     0,
+       0,   152,   342,   153,   283,   284,   282,   279,   342,   276,
+     210,   205,     0,   211,     0,   203,   204,   131,   215,    91,
+       0,     0,     0,     0,   120,     0,   144,   145,   288,   275,
+       0,     0,     0,   206,   212,   111,     0,   112,   114,     0,
+     113,     0,     0,    89,     0,   154,     0,   278,     0,     0,
+       0,   123,     0,    87,     0,   218,   285,   110,   116,   115,
+       0,   125,   121,     0,   122,   124
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    12,    13,    14,    15,    16,    17,    18,    29,    61,
-      90,    91,   163,    62,    63,    98,    99,   132,   155,    19,
-      31,    64,    20,    27,    21,    28,    88,   179,   199,   213,
-     219,   227,   117,   118,   119,   120,   121,   122,   123,   173,
-     174,   214,   252,   329,   509,   436,   124,   125,   126,   478,
-     375,   437,   527,   539,   545,   308,   360,   253,   330,   254,
-     331,   376,   377,   441,   445,   255,   336,   256,   383,   215,
-     216,   217,    66,    67,    68,   226,   369,   370,   429,   257,
-     276,   278,   279,    53,   391,   258,   287,   349,   419,   259,
-     282,   260,   307,   261,   262,   263,   290,   387,   388,   453,
-     491,   333,   334,   264,   265,   266,   318,   319,    82,   157,
-     158,   159,    47,    48,   148,   160,   150,    40,    41,   184,
-     185,    84,    85,    86,    87
+      -1,    12,    13,    14,    15,    16,   214,    17,    18,    29,
+      61,    90,    91,   163,    62,    63,    98,    99,   132,   155,
+      19,    31,    64,    20,    27,    21,    28,    88,   179,   199,
+     215,   221,   230,   117,   118,   119,   120,   121,   122,   123,
+     173,   174,   216,   256,   334,   514,   441,   124,   125,   126,
+     483,   380,   442,   532,   544,   550,   313,   365,   257,   335,
+     258,   336,   381,   382,   446,   450,   259,   341,   260,   388,
+     217,   218,   219,    66,    67,    68,   229,   374,   375,   434,
+     261,   281,   283,   284,    53,   396,   262,   292,   354,   424,
+     263,   287,   264,   312,   265,   266,   267,   295,   392,   393,
+     458,   496,   338,   339,   268,   269,   270,   323,   324,    82,
+     157,   158,   159,    47,    48,   148,   160,   150,    40,    41,
+     184,   185,    84,    85,    86,    87
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -444
+#define YYPACT_NINF -429
 static const yytype_int16 yypact[] =
 {
-     177,  -444,   -74,   -67,   -57,   -65,   -19,  -444,  -444,   -54,
-    -444,    76,    82,   177,  -444,  -444,  -444,   127,  -444,  -444,
-    -444,  -444,  -444,    24,    86,   160,    55,   178,   129,   223,
-     185,   120,  -444,  -444,  -444,  -444,    83,   102,  -444,  -444,
-      91,   455,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,   110,  -444,   107,  -444,   221,  -444,  -444,
-    -444,  -444,   261,  -444,   119,  -444,    11,   139,  -444,  -444,
-     224,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,   113,  -444,  -444,  -444,   523,   105,
-     130,   144,  -444,  -444,  -444,   455,   145,  -444,   256,   153,
-    -444,  -444,   455,  -444,  -444,  -444,  -444,  -444,   147,  -444,
-     155,  -444,   158,   159,   163,   164,   172,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,   266,   523,  -444,    85,   519,   519,
-    -444,   214,   523,  -444,   440,  -444,    59,   -27,   182,   186,
-     187,    59,    59,  -444,  -444,  -444,  -444,  -444,  -444,   180,
-    -444,   181,   191,   203,  -444,  -444,   183,  -444,   236,  -444,
-    -444,  -444,  -444,   192,   193,   194,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,   -47,  -444,   195,   202,   208,   210,   333,
-      59,    59,  -444,  -444,   220,   455,  -444,   440,  -444,  -444,
-    -444,   226,   182,  -444,  -444,  -444,  -444,  -444,  -444,    22,
-    -444,  -444,  -444,   113,   235,  -444,  -444,  -444,  -444,   338,
-    -444,  -444,  -444,   356,   291,    44,   426,  -444,  -444,   223,
-    -444,  -444,  -444,  -444,   361,   146,  -444,  -444,   259,  -444,
-     -72,   218,   234,   455,    61,  -444,   257,    17,  -444,  -444,
-     360,  -444,  -444,   364,   366,   368,  -444,  -444,  -444,   440,
-    -444,  -444,  -444,  -444,  -444,  -444,   248,   370,  -444,  -444,
-    -444,  -444,  -444,  -444,  -444,  -444,  -444,    30,  -444,  -444,
-     455,   255,   455,   255,  -444,   304,   223,   305,   223,   223,
-    -444,   262,   252,  -444,  -444,  -444,  -444,   249,  -444,  -444,
-     258,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,   283,     6,  -444,   455,    -8,   371,
-    -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,   -72,   455,
-     374,   -72,   455,   455,   278,    61,   288,   289,   249,  -444,
-    -444,  -444,   379,  -444,   -43,  -444,   533,   547,  -444,  -444,
-    -444,  -444,   484,   279,   281,   440,  -444,  -444,  -444,   455,
-    -444,   -61,   452,   284,  -444,  -444,  -444,  -444,   282,  -444,
-    -444,   -72,  -444,   393,   -72,  -444,   401,   -50,   315,   347,
-    -444,  -444,   298,   299,   -39,     5,    18,    10,    61,   341,
-     300,    -8,   402,   -31,  -444,  -444,   403,   -28,  -444,  -444,
-     355,   -20,   -14,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,   455,
-     306,   317,  -444,   -72,  -444,   -72,   455,  -444,  -444,  -444,
-     278,    85,    85,  -444,   455,   455,   -34,   427,  -444,   455,
-    -444,   428,  -444,   455,  -444,   429,  -444,   415,  -444,   360,
-     455,   561,  -444,   126,   455,   575,  -444,   455,   455,  -444,
-     455,  -444,   318,  -444,   455,   325,  -444,  -444,  -444,   319,
-    -444,  -444,  -444,  -444,   437,   455,   455,   589,   139,  -444,
-    -444,  -444,  -444,  -444,    61,   327,  -444,   422,  -444,  -444,
-     329,  -444,  -444,   439,  -444,  -444,  -444,   335,  -444,   339,
-    -444,  -444,  -444,  -444,  -444,    13,   458,    15,    19,  -444,
-     466,   126,   126,  -444,   547,   455,   359,   455,  -444,  -444,
-    -444,   455,  -444,  -444,   455,  -444,   455,   132,  -444,   -25,
-    -444,   352,  -444,   475,   477,   478,  -444,    61,  -444,   480,
-    -444,  -444,  -444,  -444,  -444,   223,  -444,  -444,   278,    -8,
-    -444
+      86,  -429,   -57,    21,   -67,    36,    -1,  -429,  -429,    40,
+    -429,   153,   158,    86,  -429,  -429,  -429,   155,  -429,  -429,
+    -429,  -429,  -429,    45,   107,   177,    57,   183,   133,   203,
+     186,   214,  -429,  -429,  -429,  -429,    78,    79,  -429,  -429,
+      77,   279,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,    94,  -429,    92,  -429,   204,  -429,  -429,
+    -429,  -429,   234,  -429,   103,  -429,     7,   111,  -429,  -429,
+     210,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,    82,  -429,  -429,  -429,   487,    99,
+     101,   124,  -429,  -429,  -429,   279,   131,  -429,   225,   136,
+    -429,  -429,   279,  -429,  -429,  -429,  -429,  -429,   122,  -429,
+     134,  -429,   135,   141,   142,   147,   156,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,   280,   487,  -429,   164,   483,   483,
+    -429,   216,   487,  -429,   403,  -429,    34,    13,   157,   176,
+     181,    34,    34,  -429,  -429,  -429,  -429,  -429,  -429,   167,
+    -429,   172,   189,   200,  -429,  -429,   179,  -429,   232,  -429,
+    -429,  -429,  -429,   178,   180,   182,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,   -56,  -429,   185,   190,   192,   193,   304,
+      34,    34,  -429,  -429,   196,   279,  -429,   403,  -429,  -429,
+    -429,   198,   157,  -429,  -429,  -429,  -429,  -429,  -429,    35,
+    -429,  -429,  -429,    82,   199,  -429,  -429,  -429,  -429,   197,
+     326,  -429,  -429,  -429,  -429,   331,   266,   143,    22,  -429,
+    -429,   203,   268,  -429,  -429,  -429,  -429,   340,   262,  -429,
+    -429,   237,   164,  -429,   -89,   328,   342,   279,   125,  -429,
+     235,   -45,  -429,  -429,   446,  -429,  -429,   343,   345,   347,
+    -429,  -429,  -429,   403,  -429,  -429,  -429,  -429,  -429,  -429,
+     226,   351,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,   425,  -429,  -429,  -429,   279,   166,   279,   166,  -429,
+     286,   203,   287,   203,   203,  -429,   239,   236,  -429,  -429,
+    -429,  -429,   567,  -429,  -429,   238,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,   553,
+      56,  -429,   279,    55,   353,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,   -89,   279,   355,   -89,   279,   279,   252,
+     125,   257,   264,   567,  -429,  -429,  -429,   352,  -429,   -55,
+    -429,   497,   511,  -429,  -429,  -429,  -429,   423,   250,   251,
+     403,  -429,  -429,  -429,   279,  -429,   -80,   436,   256,  -429,
+    -429,  -429,  -429,   265,  -429,  -429,   -89,  -429,   372,   -89,
+    -429,   386,   -24,   299,   329,  -429,  -429,   281,   282,   -23,
+      -2,     4,     9,   125,   576,   283,    55,   380,   -22,  -429,
+    -429,   387,   -13,  -429,  -429,   336,    -8,    64,  -429,  -429,
+    -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,   279,   288,   300,  -429,   -89,  -429,
+     -89,   279,  -429,  -429,  -429,   252,   164,   164,  -429,   279,
+     279,   116,   408,  -429,   279,  -429,   412,  -429,   279,  -429,
+     416,  -429,   401,  -429,   446,   279,   525,  -429,    12,   279,
+     539,  -429,   279,   279,  -429,   279,  -429,   301,  -429,   279,
+     298,  -429,  -429,  -429,   302,  -429,  -429,  -429,  -429,   426,
+     279,   279,   585,   111,  -429,  -429,  -429,  -429,  -429,   125,
+     303,  -429,   409,  -429,  -429,   306,  -429,  -429,   415,  -429,
+    -429,  -429,   320,  -429,   334,  -429,  -429,  -429,  -429,  -429,
+       8,   447,    10,    26,  -429,   449,    12,    12,  -429,   511,
+     279,   341,   279,  -429,  -429,  -429,   279,  -429,  -429,   279,
+    -429,   279,   104,  -429,   -12,  -429,   348,  -429,   465,   472,
+     473,  -429,   125,  -429,   478,  -429,  -429,  -429,  -429,  -429,
+     203,  -429,  -429,   252,    55,  -429
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -444,  -444,  -444,   473,    74,  -165,  -444,  -444,  -444,   263,
-    -444,  -444,     7,  -444,   425,  -444,  -444,  -444,   148,  -444,
-    -444,  -444,    75,   152,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-     307,  -444,  -444,  -444,  -444,  -444,   365,  -444,   373,  -444,
-    -444,  -444,  -444,  -444,  -444,  -329,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,   290,   280,  -444,   -66,  -444,  -444,  -423,  -444,  -444,
-    -444,  -444,  -444,  -216,  -444,  -444,  -444,  -444,  -444,  -444,
-    -444,  -444,  -444,  -444,    54,  -205,  -444,     0,  -327,  -443,
-    -444,   136,   188,  -444,  -444,  -444,   244,   245,  -132,   274,
-    -444,   337,  -444,   222,  -222,    77,   -41,  -168,  -444,  -444,
-    -444,   340,   434,  -444,  -122
+    -429,  -429,  -429,   470,    -4,  -175,  -429,  -429,  -429,  -429,
+     261,  -429,  -429,  -103,  -429,   422,  -429,  -429,  -429,   149,
+    -429,  -429,  -429,     0,   144,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,   308,  -429,  -429,  -429,  -429,  -429,   369,  -429,   377,
+    -429,  -429,  -429,  -429,  -429,  -429,  -334,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,   297,   285,  -429,   -66,  -429,  -429,  -428,  -429,
+    -429,  -429,  -429,  -429,  -218,  -429,  -429,  -429,  -429,  -429,
+    -429,  -429,  -429,  -429,  -429,    61,  -229,  -429,     3,  -319,
+    -378,  -429,   139,   191,  -429,  -429,  -429,   247,   248,  -132,
+     289,  -429,   356,  -429,   231,  -224,   -10,   -41,  -168,  -429,
+    -429,  -429,   349,   433,  -429,  -122
 };
 
 /* 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 -268
+#define YYTABLE_NINF -270
 static const yytype_int16 yytable[] =
 {
-      83,   100,   156,   228,   191,   145,   381,   470,   269,   384,
-     355,   356,   357,   358,   442,   -42,   434,   520,   204,   523,
-     341,   426,   438,   525,   192,    95,   443,   208,   379,   342,
-       4,     5,   379,   439,   212,   280,   146,   511,    22,   512,
-     451,    96,   475,   455,   147,    23,   455,    25,   476,   477,
-     212,   458,     4,     5,   130,   156,    24,   460,    30,   304,
-     324,    83,   326,   327,  -267,   291,   292,   293,   294,   295,
-     296,   297,   298,   427,   299,   300,   301,   302,   303,   193,
-      32,   164,    33,   380,   521,   165,   524,   433,    97,   435,
-     526,   444,   359,   267,   -83,   452,   362,   440,   456,   365,
-     350,   540,   275,   459,    26,    60,    65,   473,   281,   461,
-      72,    73,    74,    75,   246,    76,   -84,   156,   343,    78,
-      79,   344,   345,    81,   488,   550,     2,     3,   494,   -23,
-     -21,    35,   209,   346,   347,   348,    60,    65,   353,   422,
-     210,   211,   424,   489,    83,     6,    36,   490,   177,   178,
-     304,    55,   305,   306,   209,   335,   230,    37,   231,   232,
-     233,   536,   210,   211,    38,    72,    73,    74,    75,   234,
-      76,   161,   339,   351,   162,   235,   236,   237,    81,    39,
-     238,     1,    42,     2,     3,     4,     5,   200,   201,    54,
-     271,   273,   274,   371,   537,    69,   335,    77,    78,    79,
-      80,   466,     6,   467,     7,   149,   151,   538,     8,   239,
-     240,   241,   242,   156,    70,    71,     9,   549,    89,   -23,
-     243,    56,    94,   -46,   244,    92,   245,   127,   101,   309,
-      57,   320,   270,   166,   167,   168,   169,    43,    58,    59,
-      56,    44,   462,   128,    45,    46,   446,   335,   272,   102,
-      72,    73,    74,    75,   246,    76,   129,   131,   247,   469,
-     133,   248,   249,    81,   352,   310,   354,     2,     3,   134,
-     143,   250,   136,     9,    49,    50,    51,    52,   363,    10,
-     137,   366,   367,   138,   139,   152,     6,    11,   140,   141,
-     170,   497,    55,   499,   171,   385,   385,   142,   175,   176,
-     182,   392,   180,   181,   183,   172,   186,   187,   394,   471,
-     472,   311,   312,   313,   314,   315,   316,   281,   188,   189,
-     190,   194,    72,    73,    74,    75,   317,    76,   195,   548,
-      77,    78,    79,    80,   196,    81,   197,   198,    72,    73,
-      74,    75,   220,    76,   202,   508,    77,    78,    79,    80,
-     206,    81,   513,    72,    73,    74,    75,     9,    76,   218,
-     221,   332,    56,   222,   -47,   229,    81,   268,   283,   277,
-     284,    57,   285,   288,   289,   323,   325,   328,   463,    58,
-      59,   361,   304,   337,   364,   468,   368,    72,    73,    74,
-      75,    43,    76,   385,   474,   338,   372,   373,   480,    46,
-      81,   378,   482,   423,  -265,   546,  -266,   421,   420,   486,
-     385,   425,   510,   492,   385,   428,   495,   496,   430,   498,
-     431,   432,   449,   501,   450,   454,   457,   224,   464,   465,
-    -162,   479,   481,   483,   505,   506,  -162,   484,  -162,  -162,
-    -162,   504,   500,   503,   515,    72,    73,    74,    75,  -162,
-      76,   502,   514,   447,   516,  -162,  -162,  -162,    81,   518,
-    -162,   517,   522,   519,    72,    73,    74,    75,   246,    76,
-     528,   531,   247,   385,   530,   248,   532,    81,   541,   542,
-     533,   543,   544,   534,   547,   535,    34,    93,   251,  -162,
-    -162,  -162,  -162,   393,   390,   395,   225,   153,   144,   207,
-    -162,   396,   397,   485,  -162,   223,  -162,   398,   399,   400,
-     401,   402,   403,   404,   529,   448,   374,   321,   322,   405,
-     406,   407,   408,   286,   205,   203,   340,    56,     0,     0,
-    -162,  -162,  -162,  -162,  -162,  -162,   135,     0,  -162,     0,
-       0,  -162,  -162,  -162,    72,    73,    74,    75,   146,    76,
-       0,  -162,    77,    78,    79,    80,   147,    81,     0,    72,
-      73,    74,    75,   154,    76,     0,     0,    77,    78,    79,
-      80,     0,    81,   409,     0,   410,     0,     0,     0,     0,
-     411,   412,   413,   414,   415,   416,   417,   418,    72,    73,
-      74,    75,   389,    76,     0,     0,    77,    78,    79,    80,
-       0,    81,     0,     0,     0,     0,     0,    26,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,     0,
-     114,   115,   116,    72,    73,    74,    75,   146,    76,     0,
-       0,    77,    78,    79,    80,   147,    81,    72,    73,    74,
-      75,     0,    76,     0,     0,   382,    78,    79,    80,     0,
-      81,    72,    73,    74,    75,     0,    76,     0,     0,   386,
-      78,    79,    80,     0,    81,    72,    73,    74,    75,     0,
-      76,     0,     0,   487,    78,    79,    80,     0,    81,    72,
-      73,    74,    75,     0,    76,     0,     0,   493,    78,    79,
-      80,     0,    81,    72,    73,    74,    75,     0,    76,     0,
-       0,   507,     0,     0,     0,     0,    81
+      83,   100,   156,   231,   191,   145,   386,   475,   443,   439,
+     274,   -43,   525,   447,   528,   285,   192,   384,   204,   444,
+     146,    95,   389,   227,   213,   448,  -164,    60,   147,   494,
+     530,    65,  -164,   495,  -164,  -164,  -164,    96,   177,   178,
+     208,   309,   213,     4,     5,  -164,  -269,    24,   431,   384,
+     456,  -164,  -164,  -164,   130,   156,    22,  -164,    60,   460,
+     460,    83,    65,   329,   463,   331,   332,   209,   -24,   -22,
+     346,   193,   385,   360,   361,   362,   363,   200,   201,   347,
+     526,   355,   529,   440,   445,    97,  -164,  -164,  -164,  -164,
+       1,   449,     2,     3,     4,     5,   271,  -164,   531,   367,
+     432,  -164,   370,  -164,   438,   457,   280,   516,   -84,   517,
+     273,     6,   286,     7,   461,   545,   464,     8,   149,   151,
+     478,   156,   164,    26,    56,   555,   165,  -164,  -164,  -164,
+    -164,  -164,  -164,   541,    23,  -164,   465,   493,  -164,  -164,
+    -164,   499,   427,   358,    83,   429,   210,   161,  -164,    25,
+     162,     4,     5,    30,   211,   212,   364,    32,    33,    35,
+     340,    72,    73,    74,    75,   250,    76,   542,    36,   348,
+      78,    79,   349,   350,    81,   209,   315,   344,   356,    37,
+     543,    38,    39,     9,   351,   352,   353,    42,   466,    10,
+      54,    69,    70,   480,   276,   278,   279,    11,   376,   481,
+     482,   340,    71,    89,   471,   -24,   472,    94,    92,   166,
+     167,   168,   169,    56,   101,   128,   -85,   554,   156,   102,
+       2,     3,   127,   316,   317,   318,   319,   320,   321,   133,
+      72,    73,    74,    75,   314,    76,   325,   129,   322,     6,
+       2,     3,    43,    81,   131,    55,    44,   467,   136,    45,
+      46,   451,   340,   134,   210,    49,    50,    51,    52,     6,
+     137,   138,   211,   212,   474,    55,   170,   139,   140,   357,
+     171,   359,   234,   141,   235,   236,   237,    77,    78,    79,
+      80,   172,   142,   368,   143,   238,   371,   372,   152,   175,
+     180,   239,   240,   241,   176,   181,   502,   242,   504,   182,
+     390,   390,   183,   186,   187,   188,   397,   189,   198,   190,
+     222,     9,   194,   399,   476,   477,    56,   195,   -47,   196,
+     197,   202,   286,   206,   220,    57,   243,   244,   245,   246,
+     223,     9,   553,    58,    59,   224,    56,   247,   -48,   225,
+     232,   248,   275,   249,   233,    57,   272,   288,   282,   289,
+     513,   290,   293,    58,    59,   294,   277,   518,   328,   330,
+     309,   373,   333,   366,   342,   369,   377,    72,    73,    74,
+      75,   250,    76,   378,   383,   251,  -267,  -268,   252,   253,
+      81,   425,   428,   468,    72,    73,    74,    75,   254,    76,
+     473,   426,    77,    78,    79,    80,   430,    81,   390,   479,
+     433,   435,   455,   485,   436,   437,   454,   487,   462,   459,
+     551,   469,   484,   470,   491,   390,   486,   515,   497,   390,
+     488,   500,   501,   489,   503,   507,   505,   508,   506,   519,
+     509,   520,   521,    72,    73,    74,    75,   522,    76,   510,
+     511,    77,    78,    79,    80,   523,    81,    72,    73,    74,
+      75,   527,    76,   533,   536,    77,    78,    79,    80,   524,
+      81,   296,   297,   298,   299,   300,   301,   302,   303,   547,
+     304,   305,   306,   307,   308,   546,   548,   549,   390,   535,
+     400,   537,   552,    34,    93,   538,   401,   402,   539,   255,
+     540,   395,   403,   404,   405,   406,   407,   408,   409,   398,
+     207,   153,   144,   228,   410,   411,   412,   413,    72,    73,
+      74,    75,   146,    76,   226,   490,    77,    78,    79,    80,
+     147,    81,   534,   453,   379,   326,   327,   154,    72,    73,
+      74,    75,   394,    76,   203,   135,    77,    78,    79,    80,
+     345,    81,   291,   205,     0,     0,   309,    26,   310,   311,
+       0,    72,    73,    74,    75,   250,    76,     0,   414,   251,
+     415,     0,   252,     0,    81,   416,   417,   418,   419,   420,
+     421,   422,   423,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,     0,   114,   115,   116,    72,    73,
+      74,    75,   146,    76,     0,     0,    77,    78,    79,    80,
+     147,    81,    72,    73,    74,    75,     0,    76,     0,     0,
+     387,    78,    79,    80,     0,    81,    72,    73,    74,    75,
+       0,    76,     0,     0,   391,    78,    79,    80,     0,    81,
+      72,    73,    74,    75,     0,    76,     0,     0,   492,    78,
+      79,    80,     0,    81,    72,    73,    74,    75,     0,    76,
+       0,     0,   498,    78,    79,    80,     0,    81,    72,    73,
+      74,    75,    43,    76,     0,     0,   343,     0,     0,     0,
+      46,    81,    72,    73,    74,    75,     0,    76,     0,     0,
+     337,    72,    73,    74,    75,    81,    76,     0,     0,   452,
+      72,    73,    74,    75,    81,    76,     0,     0,   512,     0,
+       0,     0,     0,    81
 };
 
 static const yytype_int16 yycheck[] =
 {
-      41,    67,   134,   219,   172,   127,   335,   430,   230,   336,
-      18,    19,    20,    21,     4,     4,    11,     4,   186,     4,
-      14,    71,     4,     4,    71,    14,    16,     5,    71,    23,
-       8,     9,    71,    15,   199,   240,   108,   480,   112,   482,
-      71,    30,    76,    71,   116,   112,    71,   112,    82,    83,
-     215,    71,     8,     9,    95,   187,   113,    71,   112,   120,
-     276,   102,   278,   279,   125,    35,    36,    37,    38,    39,
-      40,    41,    42,   123,    44,    45,    46,    47,    48,   126,
-       4,   108,     0,   126,    71,   112,    71,   126,    77,    84,
-      71,    81,   100,   225,    72,   126,   318,    79,   126,   321,
-     305,   126,   234,   123,   123,    31,    31,   434,   240,   123,
-     104,   105,   106,   107,   108,   109,    72,   249,   112,   113,
-     114,   115,   116,   117,   451,   548,     6,     7,   455,   112,
-     113,     4,   110,   127,   128,   129,    62,    62,   306,   361,
-     118,   119,   364,    17,   185,    25,   122,    21,   141,   142,
-     120,    31,   122,   123,   110,   287,    10,    71,    12,    13,
-      14,    29,   118,   119,     4,   104,   105,   106,   107,    23,
-     109,   112,   304,   305,   115,    29,    30,    31,   117,   124,
-      34,     4,     4,     6,     7,     8,     9,   180,   181,     4,
-     231,   232,   233,   325,    62,   112,   328,   112,   113,   114,
-     115,   423,    25,   425,    27,   128,   129,    75,    31,    63,
-      64,    65,    66,   345,   112,   124,    96,   546,   108,   112,
-      74,   101,   103,   103,    78,     4,    80,   122,     4,   270,
-     110,   272,    14,    51,    52,    53,    54,   108,   118,   119,
-     101,   112,   410,   113,   115,   116,   378,   379,    14,   136,
-     104,   105,   106,   107,   108,   109,   112,   112,   112,   427,
-       4,   115,   116,   117,   305,    10,   307,     6,     7,   116,
-       4,   125,   125,    96,    51,    52,    53,    54,   319,   102,
-     125,   322,   323,   125,   125,    71,    25,   110,   125,   125,
-     108,   459,    31,   461,   112,   336,   337,   125,   112,   112,
-     109,   342,   122,   122,   101,   123,   123,    71,   349,   431,
-     432,    56,    57,    58,    59,    60,    61,   449,   126,   126,
-     126,   126,   104,   105,   106,   107,    71,   109,   126,   545,
-     112,   113,   114,   115,   126,   117,   126,     4,   104,   105,
-     106,   107,     4,   109,   124,   477,   112,   113,   114,   115,
-     124,   117,   484,   104,   105,   106,   107,    96,   109,   124,
-       4,   112,   101,    72,   103,     4,   117,   108,     4,   112,
-       4,   110,     4,   125,     4,    71,    71,   125,   419,   118,
-     119,    10,   120,   125,    10,   426,   108,   104,   105,   106,
-     107,   108,   109,   434,   435,   112,   108,   108,   439,   116,
-     117,    22,   443,    10,   125,   537,   125,   125,   124,   450,
-     451,    10,   478,   454,   455,   100,   457,   458,    71,   460,
-     122,   122,   122,   464,    22,    22,    71,     1,   122,   112,
-       4,     4,     4,     4,   475,   476,    10,    22,    12,    13,
-      14,     4,   124,   124,    22,   104,   105,   106,   107,    23,
-     109,   126,   125,   112,   125,    29,    30,    31,   117,   124,
-      34,    22,     4,   124,   104,   105,   106,   107,   108,   109,
-       4,   112,   112,   514,   515,   115,   517,   117,   126,     4,
-     521,     4,     4,   524,     4,   526,    13,    62,   225,    63,
-      64,    65,    66,   345,   342,    43,   216,   132,   125,   192,
-      74,    49,    50,   449,    78,   215,    80,    55,    56,    57,
-      58,    59,    60,    61,   514,   379,   328,   273,   273,    67,
-      68,    69,    70,   249,   187,   185,   304,   101,    -1,    -1,
-     104,   105,   106,   107,   108,   109,   102,    -1,   112,    -1,
-      -1,   115,   116,   117,   104,   105,   106,   107,   108,   109,
-      -1,   125,   112,   113,   114,   115,   116,   117,    -1,   104,
-     105,   106,   107,   123,   109,    -1,    -1,   112,   113,   114,
-     115,    -1,   117,   121,    -1,   123,    -1,    -1,    -1,    -1,
-     128,   129,   130,   131,   132,   133,   134,   135,   104,   105,
-     106,   107,   108,   109,    -1,    -1,   112,   113,   114,   115,
-      -1,   117,    -1,    -1,    -1,    -1,    -1,   123,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    98,    99,   104,   105,   106,   107,   108,   109,    -1,
-      -1,   112,   113,   114,   115,   116,   117,   104,   105,   106,
-     107,    -1,   109,    -1,    -1,   112,   113,   114,   115,    -1,
-     117,   104,   105,   106,   107,    -1,   109,    -1,    -1,   112,
-     113,   114,   115,    -1,   117,   104,   105,   106,   107,    -1,
-     109,    -1,    -1,   112,   113,   114,   115,    -1,   117,   104,
-     105,   106,   107,    -1,   109,    -1,    -1,   112,   113,   114,
-     115,    -1,   117,   104,   105,   106,   107,    -1,   109,    -1,
-      -1,   112,    -1,    -1,    -1,    -1,   117
+      41,    67,   134,   221,   172,   127,   340,   435,     4,    11,
+     234,     4,     4,     4,     4,   244,    72,    72,   186,    15,
+     109,    14,   341,     1,   199,    16,     4,    31,   117,    17,
+       4,    31,    10,    21,    12,    13,    14,    30,   141,   142,
+       5,   121,   217,     8,     9,    23,   126,   114,    72,    72,
+      72,    29,    30,    31,    95,   187,   113,    35,    62,    72,
+      72,   102,    62,   281,    72,   283,   284,    32,   113,   114,
+      14,   127,   127,    18,    19,    20,    21,   180,   181,    23,
+      72,   310,    72,    85,    80,    78,    64,    65,    66,    67,
+       4,    82,     6,     7,     8,     9,   228,    75,    72,   323,
+     124,    79,   326,    81,   127,   127,   238,   485,    73,   487,
+     232,    25,   244,    27,   127,   127,   124,    31,   128,   129,
+     439,   253,   109,   124,   102,   553,   113,   105,   106,   107,
+     108,   109,   110,    29,   113,   113,    72,   456,   116,   117,
+     118,   460,   366,   311,   185,   369,   111,   113,   126,   113,
+     116,     8,     9,   113,   119,   120,   101,     4,     0,     4,
+     292,   105,   106,   107,   108,   109,   110,    63,   123,   113,
+     114,   115,   116,   117,   118,    32,    10,   309,   310,    72,
+      76,     4,   125,    97,   128,   129,   130,     4,   124,   103,
+       4,   113,   113,    77,   235,   236,   237,   111,   330,    83,
+      84,   333,   125,   109,   428,   113,   430,   104,     4,    52,
+      53,    54,    55,   102,     4,   114,    73,   551,   350,   137,
+       6,     7,   123,    57,    58,    59,    60,    61,    62,     4,
+     105,   106,   107,   108,   275,   110,   277,   113,    72,    25,
+       6,     7,   109,   118,   113,    31,   113,   415,   126,   116,
+     117,   383,   384,   117,   111,    52,    53,    54,    55,    25,
+     126,   126,   119,   120,   432,    31,   109,   126,   126,   310,
+     113,   312,    10,   126,    12,    13,    14,   113,   114,   115,
+     116,   124,   126,   324,     4,    23,   327,   328,    72,   113,
+     123,    29,    30,    31,   113,   123,   464,    35,   466,   110,
+     341,   342,   102,   124,    72,   127,   347,   127,     4,   127,
+     113,    97,   127,   354,   436,   437,   102,   127,   104,   127,
+     127,   125,   454,   125,   125,   111,    64,    65,    66,    67,
+       4,    97,   550,   119,   120,     4,   102,    75,   104,    73,
+      72,    79,    14,    81,     4,   111,   109,     4,   113,     4,
+     482,     4,   126,   119,   120,     4,    14,   489,    72,    72,
+     121,   109,   126,    10,   126,    10,   109,   105,   106,   107,
+     108,   109,   110,   109,    22,   113,   126,   126,   116,   117,
+     118,   125,    10,   424,   105,   106,   107,   108,   126,   110,
+     431,   126,   113,   114,   115,   116,    10,   118,   439,   440,
+     101,    72,    22,   444,   123,   123,   123,   448,    72,    22,
+     542,   123,     4,   113,   455,   456,     4,   483,   459,   460,
+       4,   462,   463,    22,   465,   127,   125,   125,   469,   126,
+       4,    22,   126,   105,   106,   107,   108,    22,   110,   480,
+     481,   113,   114,   115,   116,   125,   118,   105,   106,   107,
+     108,     4,   110,     4,   113,   113,   114,   115,   116,   125,
+     118,    36,    37,    38,    39,    40,    41,    42,    43,     4,
+      45,    46,    47,    48,    49,   127,     4,     4,   519,   520,
+      44,   522,     4,    13,    62,   526,    50,    51,   529,   228,
+     531,   347,    56,    57,    58,    59,    60,    61,    62,   350,
+     192,   132,   125,   218,    68,    69,    70,    71,   105,   106,
+     107,   108,   109,   110,   217,   454,   113,   114,   115,   116,
+     117,   118,   519,   384,   333,   278,   278,   124,   105,   106,
+     107,   108,   109,   110,   185,   102,   113,   114,   115,   116,
+     309,   118,   253,   187,    -1,    -1,   121,   124,   123,   124,
+      -1,   105,   106,   107,   108,   109,   110,    -1,   122,   113,
+     124,    -1,   116,    -1,   118,   129,   130,   131,   132,   133,
+     134,   135,   136,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    -1,    98,    99,   100,   105,   106,
+     107,   108,   109,   110,    -1,    -1,   113,   114,   115,   116,
+     117,   118,   105,   106,   107,   108,    -1,   110,    -1,    -1,
+     113,   114,   115,   116,    -1,   118,   105,   106,   107,   108,
+      -1,   110,    -1,    -1,   113,   114,   115,   116,    -1,   118,
+     105,   106,   107,   108,    -1,   110,    -1,    -1,   113,   114,
+     115,   116,    -1,   118,   105,   106,   107,   108,    -1,   110,
+      -1,    -1,   113,   114,   115,   116,    -1,   118,   105,   106,
+     107,   108,   109,   110,    -1,    -1,   113,    -1,    -1,    -1,
+     117,   118,   105,   106,   107,   108,    -1,   110,    -1,    -1,
+     113,   105,   106,   107,   108,   118,   110,    -1,    -1,   113,
+     105,   106,   107,   108,   118,   110,    -1,    -1,   113,    -1,
+      -1,    -1,    -1,   118
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,     4,     6,     7,     8,     9,    25,    27,    31,    96,
-     102,   110,   138,   139,   140,   141,   142,   143,   144,   156,
-     159,   161,   112,   112,   113,   112,   123,   160,   162,   145,
-     112,   157,     4,     0,   140,     4,   122,    71,     4,   124,
-     254,   255,     4,   108,   112,   115,   116,   249,   250,    51,
-      52,    53,    54,   220,     4,    31,   101,   110,   118,   119,
-     141,   146,   150,   151,   158,   159,   209,   210,   211,   112,
-     112,   124,   104,   105,   106,   107,   109,   112,   113,   114,
-     115,   117,   245,   253,   258,   259,   260,   261,   163,   108,
-     147,   148,     4,   151,   103,    14,    30,    77,   152,   153,
-     211,     4,   136,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    97,    98,    99,   169,   170,   171,
-     172,   173,   174,   175,   183,   184,   185,   122,   113,   112,
-     253,   112,   154,     4,   116,   259,   125,   125,   125,   125,
-     125,   125,   125,     4,   185,   261,   108,   116,   251,   252,
-     253,   252,    71,   183,   123,   155,   245,   246,   247,   248,
-     252,   112,   115,   149,   108,   112,    51,    52,    53,    54,
-     108,   112,   123,   176,   177,   112,   112,   149,   149,   164,
-     122,   122,   109,   101,   256,   257,   123,    71,   126,   126,
-     126,   254,    71,   126,   126,   126,   126,   126,     4,   165,
-     149,   149,   124,   258,   254,   248,   124,   177,     5,   110,
-     118,   119,   142,   166,   178,   206,   207,   208,   124,   167,
-       4,     4,    72,   208,     1,   209,   212,   168,   220,     4,
-      10,    12,    13,    14,    23,    29,    30,    31,    34,    63,
-      64,    65,    66,    74,    78,    80,   108,   112,   115,   116,
-     125,   146,   179,   194,   196,   202,   204,   216,   222,   226,
-     228,   230,   231,   232,   240,   241,   242,   245,   108,   251,
-      14,   253,    14,   253,   253,   245,   217,   112,   218,   219,
-     232,   245,   227,     4,     4,     4,   246,   223,   125,     4,
-     233,    35,    36,    37,    38,    39,    40,    41,    42,    44,
-      45,    46,    47,    48,   120,   122,   123,   229,   192,   253,
-      10,    56,    57,    58,    59,    60,    61,    71,   243,   244,
-     253,   243,   244,    71,   220,    71,   220,   220,   125,   180,
-     195,   197,   112,   238,   239,   245,   203,   125,   112,   245,
-     250,    14,    23,   112,   115,   116,   127,   128,   129,   224,
-     232,   245,   253,   254,   253,    18,    19,    20,    21,   100,
-     193,    10,   251,   253,    10,   251,   253,   253,   108,   213,
-     214,   245,   108,   108,   239,   187,   198,   199,    22,    71,
-     126,   192,   112,   205,   235,   253,   112,   234,   235,   108,
-     160,   221,   253,   155,   253,    43,    49,    50,    55,    56,
-      57,    58,    59,    60,    61,    67,    68,    69,    70,   121,
-     123,   128,   129,   130,   131,   132,   133,   134,   135,   225,
-     124,   125,   251,    10,   251,    10,    71,   123,   100,   215,
-      71,   122,   122,   126,    11,    84,   182,   188,     4,    15,
-      79,   200,     4,    16,    81,   201,   245,   112,   238,   122,
-      22,    71,   126,   236,    22,    71,   126,    71,    71,   123,
-      71,   123,   254,   253,   122,   112,   251,   251,   253,   254,
-     214,   261,   261,   235,   253,    76,    82,    83,   186,     4,
-     253,     4,   253,     4,    22,   231,   253,   112,   235,    17,
-      21,   237,   253,   112,   235,   253,   253,   254,   253,   254,
-     124,   253,   126,   124,     4,   253,   253,   112,   245,   181,
-     211,   236,   236,   245,   125,    22,   125,    22,   124,   124,
-       4,    71,     4,     4,    71,     4,    71,   189,     4,   234,
-     253,   112,   253,   253,   253,   253,    29,    62,    75,   190,
-     126,   126,     4,     4,     4,   191,   245,     4,   220,   192,
-     214
+       0,     4,     6,     7,     8,     9,    25,    27,    31,    97,
+     103,   111,   139,   140,   141,   142,   143,   145,   146,   158,
+     161,   163,   113,   113,   114,   113,   124,   162,   164,   147,
+     113,   159,     4,     0,   141,     4,   123,    72,     4,   125,
+     256,   257,     4,   109,   113,   116,   117,   251,   252,    52,
+      53,    54,    55,   222,     4,    31,   102,   111,   119,   120,
+     142,   148,   152,   153,   160,   161,   211,   212,   213,   113,
+     113,   125,   105,   106,   107,   108,   110,   113,   114,   115,
+     116,   118,   247,   255,   260,   261,   262,   263,   165,   109,
+     149,   150,     4,   153,   104,    14,    30,    78,   154,   155,
+     213,     4,   137,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    98,    99,   100,   171,   172,   173,
+     174,   175,   176,   177,   185,   186,   187,   123,   114,   113,
+     255,   113,   156,     4,   117,   261,   126,   126,   126,   126,
+     126,   126,   126,     4,   187,   263,   109,   117,   253,   254,
+     255,   254,    72,   185,   124,   157,   247,   248,   249,   250,
+     254,   113,   116,   151,   109,   113,    52,    53,    54,    55,
+     109,   113,   124,   178,   179,   113,   113,   151,   151,   166,
+     123,   123,   110,   102,   258,   259,   124,    72,   127,   127,
+     127,   256,    72,   127,   127,   127,   127,   127,     4,   167,
+     151,   151,   125,   260,   256,   250,   125,   179,     5,    32,
+     111,   119,   120,   143,   144,   168,   180,   208,   209,   210,
+     125,   169,   113,     4,     4,    73,   210,     1,   211,   214,
+     170,   222,    72,     4,    10,    12,    13,    14,    23,    29,
+      30,    31,    35,    64,    65,    66,    67,    75,    79,    81,
+     109,   113,   116,   117,   126,   148,   181,   196,   198,   204,
+     206,   218,   224,   228,   230,   232,   233,   234,   242,   243,
+     244,   247,   109,   263,   253,    14,   255,    14,   255,   255,
+     247,   219,   113,   220,   221,   234,   247,   229,     4,     4,
+       4,   248,   225,   126,     4,   235,    36,    37,    38,    39,
+      40,    41,    42,    43,    45,    46,    47,    48,    49,   121,
+     123,   124,   231,   194,   255,    10,    57,    58,    59,    60,
+      61,    62,    72,   245,   246,   255,   245,   246,    72,   222,
+      72,   222,   222,   126,   182,   197,   199,   113,   240,   241,
+     247,   205,   126,   113,   247,   252,    14,    23,   113,   116,
+     117,   128,   129,   130,   226,   234,   247,   255,   256,   255,
+      18,    19,    20,    21,   101,   195,    10,   253,   255,    10,
+     253,   255,   255,   109,   215,   216,   247,   109,   109,   241,
+     189,   200,   201,    22,    72,   127,   194,   113,   207,   237,
+     255,   113,   236,   237,   109,   162,   223,   255,   157,   255,
+      44,    50,    51,    56,    57,    58,    59,    60,    61,    62,
+      68,    69,    70,    71,   122,   124,   129,   130,   131,   132,
+     133,   134,   135,   136,   227,   125,   126,   253,    10,   253,
+      10,    72,   124,   101,   217,    72,   123,   123,   127,    11,
+      85,   184,   190,     4,    15,    80,   202,     4,    16,    82,
+     203,   247,   113,   240,   123,    22,    72,   127,   238,    22,
+      72,   127,    72,    72,   124,    72,   124,   256,   255,   123,
+     113,   253,   253,   255,   256,   216,   263,   263,   237,   255,
+      77,    83,    84,   188,     4,   255,     4,   255,     4,    22,
+     233,   255,   113,   237,    17,    21,   239,   255,   113,   237,
+     255,   255,   256,   255,   256,   125,   255,   127,   125,     4,
+     255,   255,   113,   247,   183,   213,   238,   238,   247,   126,
+      22,   126,    22,   125,   125,     4,    72,     4,     4,    72,
+       4,    72,   191,     4,   236,   255,   113,   255,   255,   255,
+     255,    29,    63,    76,   192,   127,   127,     4,     4,     4,
+     193,   247,     4,   222,   194,   216
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2970,22 +2974,22 @@
   switch (yyn)
     {
         case 2:
-#line 878 "compilers/imcc/imcc.y"
+#line 880 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
-#line 887 "compilers/imcc/imcc.y"
+#line 889 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
-#line 888 "compilers/imcc/imcc.y"
+#line 890 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
-#line 890 "compilers/imcc/imcc.y"
+#line 892 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -2994,7 +2998,7 @@
     break;
 
   case 8:
-#line 896 "compilers/imcc/imcc.y"
+#line 898 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3003,32 +3007,32 @@
     break;
 
   case 9:
-#line 901 "compilers/imcc/imcc.y"
+#line 903 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
-#line 902 "compilers/imcc/imcc.y"
+#line 904 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
-#line 903 "compilers/imcc/imcc.y"
+#line 905 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
-#line 904 "compilers/imcc/imcc.y"
+#line 906 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
-#line 908 "compilers/imcc/imcc.y"
+#line 910 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
-#line 910 "compilers/imcc/imcc.y"
+#line 912 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3037,7 +3041,7 @@
     break;
 
   case 15:
-#line 919 "compilers/imcc/imcc.y"
+#line 921 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            set_filename(interp, (yyvsp[(4) - (5)].s));
@@ -3045,14 +3049,25 @@
     break;
 
   case 16:
-#line 924 "compilers/imcc/imcc.y"
+#line 926 "compilers/imcc/imcc.y"
     {
            set_filename(interp, (yyvsp[(2) - (3)].s));
          }
     break;
 
   case 17:
-#line 932 "compilers/imcc/imcc.y"
+#line 933 "compilers/imcc/imcc.y"
+    {
+          /* We'll want to store an entry while emitting instructions, so just
+           * store annotation like it's an instruction. */
+          SymReg * const key = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
+          (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, ".annotate", 2, key, (yyvsp[(4) - (4)].sr));
+          mem_sys_free((yyvsp[(2) - (4)].s));
+        }
+    break;
+
+  case 18:
+#line 945 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = string_unescape_cstring(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             CONTEXT(interp)->current_HLL =
@@ -3063,8 +3078,8 @@
          }
     break;
 
-  case 18:
-#line 941 "compilers/imcc/imcc.y"
+  case 19:
+#line 954 "compilers/imcc/imcc.y"
     {
             Parrot_Context *ctx           = CONTEXT(interp);
             STRING * const  built_in_name =
@@ -3081,13 +3096,13 @@
          }
     break;
 
-  case 19:
-#line 958 "compilers/imcc/imcc.y"
+  case 20:
+#line 971 "compilers/imcc/imcc.y"
     { is_def = 1; }
     break;
 
-  case 20:
-#line 959 "compilers/imcc/imcc.y"
+  case 21:
+#line 972 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3095,64 +3110,64 @@
          }
     break;
 
-  case 21:
-#line 967 "compilers/imcc/imcc.y"
+  case 22:
+#line 980 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 22:
-#line 968 "compilers/imcc/imcc.y"
+  case 23:
+#line 981 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            is_def = 0;
          }
     break;
 
-  case 23:
-#line 973 "compilers/imcc/imcc.y"
+  case 24:
+#line 986 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 24:
-#line 974 "compilers/imcc/imcc.y"
+  case 25:
+#line 987 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            is_def = 0;
          }
     break;
 
-  case 29:
-#line 990 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  }
-    break;
-
   case 30:
-#line 991 "compilers/imcc/imcc.y"
+#line 1003 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
-#line 992 "compilers/imcc/imcc.y"
+#line 1004 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
-#line 993 "compilers/imcc/imcc.y"
+#line 1005 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
-#line 994 "compilers/imcc/imcc.y"
+#line 1006 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0;  }
+    break;
+
+  case 34:
+#line 1007 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 36:
-#line 999 "compilers/imcc/imcc.y"
+  case 37:
+#line 1012 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
-  case 37:
-#line 1001 "compilers/imcc/imcc.y"
+  case 38:
+#line 1014 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3161,16 +3176,16 @@
          }
     break;
 
-  case 38:
-#line 1008 "compilers/imcc/imcc.y"
+  case 39:
+#line 1021 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
          }
     break;
 
-  case 39:
-#line 1013 "compilers/imcc/imcc.y"
+  case 40:
+#line 1026 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3179,15 +3194,15 @@
          }
     break;
 
-  case 40:
-#line 1020 "compilers/imcc/imcc.y"
+  case 41:
+#line 1033 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
-  case 41:
-#line 1024 "compilers/imcc/imcc.y"
+  case 42:
+#line 1037 "compilers/imcc/imcc.y"
     {
            SymReg *r = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
            set_lexical(interp, r, (yyvsp[(2) - (4)].s));
@@ -3197,18 +3212,18 @@
          }
     break;
 
-  case 42:
-#line 1031 "compilers/imcc/imcc.y"
+  case 43:
+#line 1044 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
-  case 44:
-#line 1039 "compilers/imcc/imcc.y"
+  case 45:
+#line 1052 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
-  case 45:
-#line 1042 "compilers/imcc/imcc.y"
+  case 46:
+#line 1055 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3218,8 +3233,8 @@
          }
     break;
 
-  case 48:
-#line 1058 "compilers/imcc/imcc.y"
+  case 49:
+#line 1071 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3233,8 +3248,8 @@
          }
     break;
 
-  case 49:
-#line 1073 "compilers/imcc/imcc.y"
+  case 50:
+#line 1086 "compilers/imcc/imcc.y"
     {
             if (IMCC_INFO(interp)->in_slice)
                 IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3244,27 +3259,27 @@
         }
     break;
 
-  case 50:
-#line 1080 "compilers/imcc/imcc.y"
+  case 51:
+#line 1093 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 51:
-#line 1085 "compilers/imcc/imcc.y"
+  case 52:
+#line 1098 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
     break;
 
-  case 52:
-#line 1089 "compilers/imcc/imcc.y"
+  case 53:
+#line 1102 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 53:
-#line 1093 "compilers/imcc/imcc.y"
+  case 54:
+#line 1106 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
           if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3274,23 +3289,23 @@
         }
     break;
 
-  case 54:
-#line 1101 "compilers/imcc/imcc.y"
+  case 55:
+#line 1114 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 55:
-#line 1105 "compilers/imcc/imcc.y"
+  case 56:
+#line 1118 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 56:
-#line 1106 "compilers/imcc/imcc.y"
+  case 57:
+#line 1119 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 57:
-#line 1108 "compilers/imcc/imcc.y"
+  case 58:
+#line 1121 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3302,18 +3317,18 @@
          }
     break;
 
-  case 58:
-#line 1120 "compilers/imcc/imcc.y"
+  case 59:
+#line 1133 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 59:
-#line 1120 "compilers/imcc/imcc.y"
+  case 60:
+#line 1133 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); is_def=0; }
     break;
 
-  case 60:
-#line 1125 "compilers/imcc/imcc.y"
+  case 61:
+#line 1138 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_UNIQUE_REG)
                (yyval.sr) = mk_ident_ur(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
@@ -3324,13 +3339,13 @@
           }
     break;
 
-  case 61:
-#line 1138 "compilers/imcc/imcc.y"
+  case 62:
+#line 1151 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 62:
-#line 1143 "compilers/imcc/imcc.y"
+  case 63:
+#line 1156 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3338,8 +3353,8 @@
          }
     break;
 
-  case 63:
-#line 1149 "compilers/imcc/imcc.y"
+  case 64:
+#line 1162 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3347,8 +3362,8 @@
          }
     break;
 
-  case 64:
-#line 1158 "compilers/imcc/imcc.y"
+  case 65:
+#line 1171 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
@@ -3356,8 +3371,8 @@
          }
     break;
 
-  case 65:
-#line 1164 "compilers/imcc/imcc.y"
+  case 66:
+#line 1177 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
@@ -3365,8 +3380,8 @@
          }
     break;
 
-  case 66:
-#line 1173 "compilers/imcc/imcc.y"
+  case 67:
+#line 1186 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
@@ -3374,8 +3389,8 @@
          }
     break;
 
-  case 67:
-#line 1179 "compilers/imcc/imcc.y"
+  case 68:
+#line 1192 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3383,8 +3398,8 @@
          }
     break;
 
-  case 68:
-#line 1188 "compilers/imcc/imcc.y"
+  case 69:
+#line 1201 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
@@ -3392,8 +3407,8 @@
          }
     break;
 
-  case 69:
-#line 1194 "compilers/imcc/imcc.y"
+  case 70:
+#line 1207 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3401,24 +3416,24 @@
          }
     break;
 
-  case 70:
-#line 1203 "compilers/imcc/imcc.y"
+  case 71:
+#line 1216 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
          }
     break;
 
-  case 71:
-#line 1211 "compilers/imcc/imcc.y"
+  case 72:
+#line 1224 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
          }
     break;
 
-  case 72:
-#line 1216 "compilers/imcc/imcc.y"
+  case 73:
+#line 1229 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3427,51 +3442,51 @@
          }
     break;
 
-  case 73:
-#line 1226 "compilers/imcc/imcc.y"
+  case 74:
+#line 1239 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
-  case 74:
-#line 1230 "compilers/imcc/imcc.y"
+  case 75:
+#line 1243 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 75:
-#line 1235 "compilers/imcc/imcc.y"
+  case 76:
+#line 1248 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 76:
-#line 1242 "compilers/imcc/imcc.y"
+  case 77:
+#line 1255 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
-  case 77:
-#line 1243 "compilers/imcc/imcc.y"
+  case 78:
+#line 1256 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
-  case 78:
-#line 1244 "compilers/imcc/imcc.y"
+  case 79:
+#line 1257 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
-  case 79:
-#line 1245 "compilers/imcc/imcc.y"
+  case 80:
+#line 1258 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
-  case 80:
-#line 1247 "compilers/imcc/imcc.y"
+  case 81:
+#line 1260 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3484,8 +3499,8 @@
          }
     break;
 
-  case 81:
-#line 1258 "compilers/imcc/imcc.y"
+  case 82:
+#line 1271 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3498,13 +3513,13 @@
          }
     break;
 
-  case 82:
-#line 1268 "compilers/imcc/imcc.y"
+  case 83:
+#line 1281 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 85:
-#line 1278 "compilers/imcc/imcc.y"
+  case 86:
+#line 1291 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3530,174 +3545,174 @@
          }
     break;
 
-  case 86:
-#line 1306 "compilers/imcc/imcc.y"
+  case 87:
+#line 1319 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 87:
-#line 1310 "compilers/imcc/imcc.y"
+  case 88:
+#line 1323 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
-  case 88:
-#line 1311 "compilers/imcc/imcc.y"
+  case 89:
+#line 1324 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
-  case 89:
-#line 1315 "compilers/imcc/imcc.y"
+  case 90:
+#line 1328 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
-  case 90:
-#line 1316 "compilers/imcc/imcc.y"
+  case 91:
+#line 1329 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 91:
-#line 1320 "compilers/imcc/imcc.y"
+  case 92:
+#line 1333 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 93:
-#line 1325 "compilers/imcc/imcc.y"
+  case 94:
+#line 1338 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
-  case 94:
-#line 1326 "compilers/imcc/imcc.y"
+  case 95:
+#line 1339 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 95:
-#line 1330 "compilers/imcc/imcc.y"
+  case 96:
+#line 1343 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
-  case 96:
-#line 1331 "compilers/imcc/imcc.y"
+  case 97:
+#line 1344 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
-  case 97:
-#line 1332 "compilers/imcc/imcc.y"
+  case 98:
+#line 1345 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
-  case 98:
-#line 1333 "compilers/imcc/imcc.y"
+  case 99:
+#line 1346 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
-  case 99:
-#line 1334 "compilers/imcc/imcc.y"
+  case 100:
+#line 1347 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
-  case 100:
-#line 1335 "compilers/imcc/imcc.y"
+  case 101:
+#line 1348 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
-  case 101:
-#line 1336 "compilers/imcc/imcc.y"
+  case 102:
+#line 1349 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
-  case 109:
-#line 1348 "compilers/imcc/imcc.y"
+  case 110:
+#line 1361 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 110:
-#line 1353 "compilers/imcc/imcc.y"
+  case 111:
+#line 1366 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 111:
-#line 1357 "compilers/imcc/imcc.y"
+  case 112:
+#line 1370 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
          }
     break;
 
-  case 112:
-#line 1362 "compilers/imcc/imcc.y"
+  case 113:
+#line 1375 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 113:
-#line 1366 "compilers/imcc/imcc.y"
+  case 114:
+#line 1379 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
     break;
 
-  case 114:
-#line 1370 "compilers/imcc/imcc.y"
+  case 115:
+#line 1383 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 115:
-#line 1375 "compilers/imcc/imcc.y"
+  case 116:
+#line 1388 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 116:
-#line 1383 "compilers/imcc/imcc.y"
+  case 117:
+#line 1396 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 117:
-#line 1384 "compilers/imcc/imcc.y"
+  case 118:
+#line 1397 "compilers/imcc/imcc.y"
     { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
-  case 118:
-#line 1388 "compilers/imcc/imcc.y"
+  case 119:
+#line 1401 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
-  case 119:
-#line 1393 "compilers/imcc/imcc.y"
+  case 120:
+#line 1406 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 120:
-#line 1395 "compilers/imcc/imcc.y"
+  case 121:
+#line 1408 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 121:
-#line 1402 "compilers/imcc/imcc.y"
+  case 122:
+#line 1415 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 122:
-#line 1403 "compilers/imcc/imcc.y"
+  case 123:
+#line 1416 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 123:
-#line 1404 "compilers/imcc/imcc.y"
+  case 124:
+#line 1417 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -3711,159 +3726,159 @@
          }
     break;
 
-  case 124:
-#line 1418 "compilers/imcc/imcc.y"
+  case 125:
+#line 1431 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 125:
-#line 1419 "compilers/imcc/imcc.y"
+  case 126:
+#line 1432 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 126:
-#line 1423 "compilers/imcc/imcc.y"
+  case 127:
+#line 1436 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
-  case 127:
-#line 1424 "compilers/imcc/imcc.y"
+  case 128:
+#line 1437 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
-  case 128:
-#line 1425 "compilers/imcc/imcc.y"
+  case 129:
+#line 1438 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
-  case 129:
-#line 1426 "compilers/imcc/imcc.y"
+  case 130:
+#line 1439 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 130:
-#line 1427 "compilers/imcc/imcc.y"
+  case 131:
+#line 1440 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 131:
-#line 1428 "compilers/imcc/imcc.y"
+  case 132:
+#line 1441 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
-  case 132:
-#line 1433 "compilers/imcc/imcc.y"
+  case 133:
+#line 1446 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
-  case 133:
-#line 1435 "compilers/imcc/imcc.y"
+  case 134:
+#line 1448 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
-  case 134:
-#line 1437 "compilers/imcc/imcc.y"
+  case 135:
+#line 1450 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
          }
     break;
 
-  case 135:
-#line 1444 "compilers/imcc/imcc.y"
+  case 136:
+#line 1457 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
-  case 136:
-#line 1446 "compilers/imcc/imcc.y"
+  case 137:
+#line 1459 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
-  case 137:
-#line 1450 "compilers/imcc/imcc.y"
+  case 138:
+#line 1463 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 138:
-#line 1452 "compilers/imcc/imcc.y"
+  case 139:
+#line 1465 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
-  case 139:
-#line 1457 "compilers/imcc/imcc.y"
+  case 140:
+#line 1470 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 140:
-#line 1464 "compilers/imcc/imcc.y"
+  case 141:
+#line 1477 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 141:
-#line 1466 "compilers/imcc/imcc.y"
+  case 142:
+#line 1479 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
-  case 142:
-#line 1471 "compilers/imcc/imcc.y"
+  case 143:
+#line 1484 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 143:
-#line 1478 "compilers/imcc/imcc.y"
+  case 144:
+#line 1491 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 144:
-#line 1482 "compilers/imcc/imcc.y"
+  case 145:
+#line 1495 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 145:
-#line 1487 "compilers/imcc/imcc.y"
+  case 146:
+#line 1500 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
         }
     break;
 
-  case 146:
-#line 1492 "compilers/imcc/imcc.y"
+  case 147:
+#line 1505 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
         }
     break;
 
-  case 147:
-#line 1499 "compilers/imcc/imcc.y"
+  case 148:
+#line 1512 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 148:
-#line 1500 "compilers/imcc/imcc.y"
+  case 149:
+#line 1513 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
-  case 149:
-#line 1504 "compilers/imcc/imcc.y"
+  case 150:
+#line 1517 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 150:
-#line 1506 "compilers/imcc/imcc.y"
+  case 151:
+#line 1519 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3875,15 +3890,15 @@
          }
     break;
 
-  case 151:
-#line 1516 "compilers/imcc/imcc.y"
+  case 152:
+#line 1529 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 152:
-#line 1520 "compilers/imcc/imcc.y"
+  case 153:
+#line 1533 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3895,62 +3910,67 @@
          }
     break;
 
-  case 153:
-#line 1530 "compilers/imcc/imcc.y"
+  case 154:
+#line 1543 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 156:
-#line 1550 "compilers/imcc/imcc.y"
-    { clear_state(interp); }
-    break;
-
   case 157:
-#line 1555 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (2)].i); }
+#line 1563 "compilers/imcc/imcc.y"
+    { clear_state(interp); }
     break;
 
   case 158:
-#line 1556 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; }
+#line 1568 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 159:
-#line 1557 "compilers/imcc/imcc.y"
+#line 1569 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 160:
-#line 1558 "compilers/imcc/imcc.y"
+#line 1570 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
-#line 1559 "compilers/imcc/imcc.y"
+#line 1571 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 162:
-#line 1563 "compilers/imcc/imcc.y"
+#line 1572 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
+    break;
+
+  case 163:
+#line 1573 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
+    break;
+
+  case 164:
+#line 1577 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
-  case 166:
-#line 1574 "compilers/imcc/imcc.y"
+  case 168:
+#line 1588 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
          }
     break;
 
-  case 167:
-#line 1582 "compilers/imcc/imcc.y"
+  case 169:
+#line 1596 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
-  case 168:
-#line 1584 "compilers/imcc/imcc.y"
+  case 170:
+#line 1598 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -3960,8 +3980,8 @@
          }
     break;
 
-  case 169:
-#line 1595 "compilers/imcc/imcc.y"
+  case 171:
+#line 1609 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -3969,8 +3989,8 @@
          }
     break;
 
-  case 170:
-#line 1602 "compilers/imcc/imcc.y"
+  case 172:
+#line 1616 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -3978,8 +3998,8 @@
          }
     break;
 
-  case 171:
-#line 1611 "compilers/imcc/imcc.y"
+  case 173:
+#line 1625 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -3988,23 +4008,23 @@
          }
     break;
 
-  case 172:
-#line 1620 "compilers/imcc/imcc.y"
+  case 174:
+#line 1634 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 173:
-#line 1621 "compilers/imcc/imcc.y"
+  case 175:
+#line 1635 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
-  case 176:
-#line 1628 "compilers/imcc/imcc.y"
+  case 178:
+#line 1642 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 177:
-#line 1629 "compilers/imcc/imcc.y"
+  case 179:
+#line 1643 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4022,20 +4042,20 @@
          }
     break;
 
-  case 178:
-#line 1645 "compilers/imcc/imcc.y"
+  case 180:
+#line 1659 "compilers/imcc/imcc.y"
     {
            set_lexical(interp, (yyvsp[(4) - (4)].sr), (yyvsp[(2) - (4)].s)); (yyval.i) = 0;
          }
     break;
 
-  case 179:
-#line 1648 "compilers/imcc/imcc.y"
+  case 181:
+#line 1662 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 180:
-#line 1649 "compilers/imcc/imcc.y"
+  case 182:
+#line 1663 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            is_def=0;
@@ -4043,13 +4063,13 @@
          }
     break;
 
-  case 182:
-#line 1656 "compilers/imcc/imcc.y"
+  case 184:
+#line 1670 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 183:
-#line 1657 "compilers/imcc/imcc.y"
+  case 185:
+#line 1671 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            is_def=0;
@@ -4057,8 +4077,8 @@
          }
     break;
 
-  case 184:
-#line 1663 "compilers/imcc/imcc.y"
+  case 186:
+#line 1677 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4066,13 +4086,13 @@
          }
     break;
 
-  case 185:
-#line 1668 "compilers/imcc/imcc.y"
+  case 187:
+#line 1682 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
-  case 186:
-#line 1670 "compilers/imcc/imcc.y"
+  case 188:
+#line 1684 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4086,48 +4106,48 @@
          }
     break;
 
-  case 187:
-#line 1681 "compilers/imcc/imcc.y"
+  case 189:
+#line 1695 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
-  case 188:
-#line 1682 "compilers/imcc/imcc.y"
+  case 190:
+#line 1696 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 189:
-#line 1683 "compilers/imcc/imcc.y"
+  case 191:
+#line 1697 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 192:
-#line 1686 "compilers/imcc/imcc.y"
+  case 194:
+#line 1700 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
-  case 193:
-#line 1690 "compilers/imcc/imcc.y"
+  case 195:
+#line 1704 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
-  case 194:
-#line 1691 "compilers/imcc/imcc.y"
+  case 196:
+#line 1705 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
-  case 195:
-#line 1692 "compilers/imcc/imcc.y"
+  case 197:
+#line 1706 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
-  case 196:
-#line 1693 "compilers/imcc/imcc.y"
+  case 198:
+#line 1707 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
-  case 197:
-#line 1698 "compilers/imcc/imcc.y"
+  case 199:
+#line 1712 "compilers/imcc/imcc.y"
     {
            /* there'd normally be a str_dup() here, but the lexer already
             * copied the string, so it's safe to use directly */
@@ -4139,88 +4159,88 @@
          }
     break;
 
-  case 198:
-#line 1711 "compilers/imcc/imcc.y"
+  case 200:
+#line 1725 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
-  case 199:
-#line 1713 "compilers/imcc/imcc.y"
+  case 201:
+#line 1727 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
-  case 200:
-#line 1715 "compilers/imcc/imcc.y"
+  case 202:
+#line 1729 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));  }
     break;
 
-  case 201:
-#line 1717 "compilers/imcc/imcc.y"
+  case 203:
+#line 1731 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
-  case 202:
-#line 1719 "compilers/imcc/imcc.y"
+  case 204:
+#line 1733 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 203:
-#line 1721 "compilers/imcc/imcc.y"
+  case 205:
+#line 1735 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].s), (yyvsp[(6) - (6)].sr), 1); }
     break;
 
-  case 204:
-#line 1723 "compilers/imcc/imcc.y"
+  case 206:
+#line 1737 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
     break;
 
-  case 205:
-#line 1725 "compilers/imcc/imcc.y"
+  case 207:
+#line 1739 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].s), NULL, 1); }
     break;
 
-  case 206:
-#line 1727 "compilers/imcc/imcc.y"
+  case 208:
+#line 1741 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
-  case 207:
-#line 1729 "compilers/imcc/imcc.y"
+  case 209:
+#line 1743 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
-  case 208:
-#line 1731 "compilers/imcc/imcc.y"
+  case 210:
+#line 1745 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 209:
-#line 1733 "compilers/imcc/imcc.y"
+  case 211:
+#line 1747 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 210:
-#line 1735 "compilers/imcc/imcc.y"
+  case 212:
+#line 1749 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
     break;
 
-  case 211:
-#line 1739 "compilers/imcc/imcc.y"
+  case 213:
+#line 1753 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
-  case 212:
-#line 1741 "compilers/imcc/imcc.y"
+  case 214:
+#line 1755 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 213:
-#line 1743 "compilers/imcc/imcc.y"
+  case 215:
+#line 1757 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
     break;
 
-  case 214:
-#line 1746 "compilers/imcc/imcc.y"
+  case 216:
+#line 1760 "compilers/imcc/imcc.y"
     {
            add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4228,160 +4248,160 @@
          }
     break;
 
-  case 215:
-#line 1752 "compilers/imcc/imcc.y"
+  case 217:
+#line 1766 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
     break;
 
-  case 216:
-#line 1756 "compilers/imcc/imcc.y"
+  case 218:
+#line 1770 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
          }
     break;
 
-  case 220:
-#line 1764 "compilers/imcc/imcc.y"
+  case 222:
+#line 1778 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
     break;
 
-  case 221:
-#line 1771 "compilers/imcc/imcc.y"
+  case 223:
+#line 1785 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
-  case 222:
-#line 1772 "compilers/imcc/imcc.y"
+  case 224:
+#line 1786 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
-  case 223:
-#line 1773 "compilers/imcc/imcc.y"
+  case 225:
+#line 1787 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
-  case 224:
-#line 1777 "compilers/imcc/imcc.y"
+  case 226:
+#line 1791 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
-  case 225:
-#line 1778 "compilers/imcc/imcc.y"
+  case 227:
+#line 1792 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
-  case 226:
-#line 1779 "compilers/imcc/imcc.y"
+  case 228:
+#line 1793 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
-  case 227:
-#line 1780 "compilers/imcc/imcc.y"
+  case 229:
+#line 1794 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
-  case 228:
-#line 1781 "compilers/imcc/imcc.y"
+  case 230:
+#line 1795 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
-  case 229:
-#line 1782 "compilers/imcc/imcc.y"
+  case 231:
+#line 1796 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
-  case 230:
-#line 1783 "compilers/imcc/imcc.y"
+  case 232:
+#line 1797 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
-  case 231:
-#line 1784 "compilers/imcc/imcc.y"
+  case 233:
+#line 1798 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
-  case 232:
-#line 1785 "compilers/imcc/imcc.y"
+  case 234:
+#line 1799 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
-  case 233:
-#line 1786 "compilers/imcc/imcc.y"
+  case 235:
+#line 1800 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
-  case 234:
-#line 1787 "compilers/imcc/imcc.y"
+  case 236:
+#line 1801 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
-  case 235:
-#line 1788 "compilers/imcc/imcc.y"
+  case 237:
+#line 1802 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
-  case 236:
-#line 1789 "compilers/imcc/imcc.y"
+  case 238:
+#line 1803 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
-  case 237:
-#line 1790 "compilers/imcc/imcc.y"
+  case 239:
+#line 1804 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
-  case 238:
-#line 1791 "compilers/imcc/imcc.y"
+  case 240:
+#line 1805 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
-  case 239:
-#line 1792 "compilers/imcc/imcc.y"
+  case 241:
+#line 1806 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
-  case 240:
-#line 1793 "compilers/imcc/imcc.y"
+  case 242:
+#line 1807 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
-  case 241:
-#line 1794 "compilers/imcc/imcc.y"
+  case 243:
+#line 1808 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
-  case 242:
-#line 1795 "compilers/imcc/imcc.y"
+  case 244:
+#line 1809 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
-  case 243:
-#line 1796 "compilers/imcc/imcc.y"
+  case 245:
+#line 1810 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
-  case 244:
-#line 1797 "compilers/imcc/imcc.y"
+  case 246:
+#line 1811 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
-  case 245:
-#line 1798 "compilers/imcc/imcc.y"
+  case 247:
+#line 1812 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
-  case 246:
-#line 1799 "compilers/imcc/imcc.y"
+  case 248:
+#line 1813 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
-  case 247:
-#line 1805 "compilers/imcc/imcc.y"
+  case 249:
+#line 1819 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -4389,85 +4409,85 @@
          }
     break;
 
-  case 248:
-#line 1810 "compilers/imcc/imcc.y"
+  case 250:
+#line 1824 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
-  case 249:
-#line 1817 "compilers/imcc/imcc.y"
+  case 251:
+#line 1831 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 250:
-#line 1823 "compilers/imcc/imcc.y"
+  case 252:
+#line 1837 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
-  case 251:
-#line 1824 "compilers/imcc/imcc.y"
+  case 253:
+#line 1838 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
-  case 252:
-#line 1825 "compilers/imcc/imcc.y"
+  case 254:
+#line 1839 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
-  case 253:
-#line 1826 "compilers/imcc/imcc.y"
+  case 255:
+#line 1840 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
-  case 254:
-#line 1827 "compilers/imcc/imcc.y"
+  case 256:
+#line 1841 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
-  case 255:
-#line 1828 "compilers/imcc/imcc.y"
+  case 257:
+#line 1842 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
-  case 256:
-#line 1829 "compilers/imcc/imcc.y"
+  case 258:
+#line 1843 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
-  case 257:
-#line 1830 "compilers/imcc/imcc.y"
+  case 259:
+#line 1844 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
-  case 258:
-#line 1831 "compilers/imcc/imcc.y"
+  case 260:
+#line 1845 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
-  case 259:
-#line 1832 "compilers/imcc/imcc.y"
+  case 261:
+#line 1846 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
-  case 260:
-#line 1833 "compilers/imcc/imcc.y"
+  case 262:
+#line 1847 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
-  case 261:
-#line 1834 "compilers/imcc/imcc.y"
+  case 263:
+#line 1848 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
-  case 262:
-#line 1835 "compilers/imcc/imcc.y"
+  case 264:
+#line 1849 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
-  case 263:
-#line 1841 "compilers/imcc/imcc.y"
+  case 265:
+#line 1855 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -4477,23 +4497,23 @@
        }
     break;
 
-  case 264:
-#line 1851 "compilers/imcc/imcc.y"
+  case 266:
+#line 1865 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 265:
-#line 1852 "compilers/imcc/imcc.y"
+  case 267:
+#line 1866 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 266:
-#line 1853 "compilers/imcc/imcc.y"
+  case 268:
+#line 1867 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 267:
-#line 1855 "compilers/imcc/imcc.y"
+  case 269:
+#line 1869 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4501,8 +4521,8 @@
          }
     break;
 
-  case 268:
-#line 1861 "compilers/imcc/imcc.y"
+  case 270:
+#line 1875 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4518,8 +4538,8 @@
         }
     break;
 
-  case 269:
-#line 1875 "compilers/imcc/imcc.y"
+  case 271:
+#line 1889 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -4527,31 +4547,31 @@
          }
     break;
 
-  case 270:
-#line 1880 "compilers/imcc/imcc.y"
+  case 272:
+#line 1894 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
-  case 271:
-#line 1886 "compilers/imcc/imcc.y"
+  case 273:
+#line 1900 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 272:
-#line 1890 "compilers/imcc/imcc.y"
+  case 274:
+#line 1904 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
-  case 273:
-#line 1894 "compilers/imcc/imcc.y"
+  case 275:
+#line 1908 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 274:
-#line 1896 "compilers/imcc/imcc.y"
+  case 276:
+#line 1910 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4563,8 +4583,8 @@
          }
     break;
 
-  case 275:
-#line 1906 "compilers/imcc/imcc.y"
+  case 277:
+#line 1920 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4576,8 +4596,8 @@
          }
     break;
 
-  case 276:
-#line 1916 "compilers/imcc/imcc.y"
+  case 278:
+#line 1930 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
@@ -4585,8 +4605,8 @@
          }
     break;
 
-  case 277:
-#line 1922 "compilers/imcc/imcc.y"
+  case 279:
+#line 1936 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
@@ -4594,43 +4614,43 @@
          }
     break;
 
-  case 278:
-#line 1930 "compilers/imcc/imcc.y"
+  case 280:
+#line 1944 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 279:
-#line 1934 "compilers/imcc/imcc.y"
+  case 281:
+#line 1948 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 280:
-#line 1935 "compilers/imcc/imcc.y"
+  case 282:
+#line 1949 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 281:
-#line 1939 "compilers/imcc/imcc.y"
+  case 283:
+#line 1953 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT; }
     break;
 
-  case 282:
-#line 1940 "compilers/imcc/imcc.y"
+  case 284:
+#line 1954 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 283:
-#line 1943 "compilers/imcc/imcc.y"
+  case 285:
+#line 1957 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 284:
-#line 1947 "compilers/imcc/imcc.y"
+  case 286:
+#line 1961 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 285:
-#line 1952 "compilers/imcc/imcc.y"
+  case 287:
+#line 1966 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4642,16 +4662,16 @@
          }
     break;
 
-  case 286:
-#line 1962 "compilers/imcc/imcc.y"
+  case 288:
+#line 1976 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
            mem_sys_free((yyvsp[(3) - (5)].s));
          }
     break;
 
-  case 287:
-#line 1967 "compilers/imcc/imcc.y"
+  case 289:
+#line 1981 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4663,133 +4683,133 @@
          }
     break;
 
-  case 288:
-#line 1977 "compilers/imcc/imcc.y"
+  case 290:
+#line 1991 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 289:
-#line 1981 "compilers/imcc/imcc.y"
+  case 291:
+#line 1995 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 290:
-#line 1985 "compilers/imcc/imcc.y"
+  case 292:
+#line 1999 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 291:
-#line 1986 "compilers/imcc/imcc.y"
+  case 293:
+#line 2000 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 292:
-#line 1991 "compilers/imcc/imcc.y"
+  case 294:
+#line 2005 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 293:
-#line 1995 "compilers/imcc/imcc.y"
+  case 295:
+#line 2009 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 294:
-#line 1999 "compilers/imcc/imcc.y"
+  case 296:
+#line 2013 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 295:
-#line 2006 "compilers/imcc/imcc.y"
+  case 297:
+#line 2020 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 296:
-#line 2010 "compilers/imcc/imcc.y"
+  case 298:
+#line 2024 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 297:
-#line 2014 "compilers/imcc/imcc.y"
+  case 299:
+#line 2028 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 298:
-#line 2020 "compilers/imcc/imcc.y"
+  case 300:
+#line 2034 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 299:
-#line 2021 "compilers/imcc/imcc.y"
+  case 301:
+#line 2035 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 300:
-#line 2025 "compilers/imcc/imcc.y"
+  case 302:
+#line 2039 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
-  case 301:
-#line 2026 "compilers/imcc/imcc.y"
+  case 303:
+#line 2040 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
-  case 302:
-#line 2027 "compilers/imcc/imcc.y"
+  case 304:
+#line 2041 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
-  case 303:
-#line 2028 "compilers/imcc/imcc.y"
+  case 305:
+#line 2042 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
-  case 304:
-#line 2029 "compilers/imcc/imcc.y"
+  case 306:
+#line 2043 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 305:
-#line 2030 "compilers/imcc/imcc.y"
+  case 307:
+#line 2044 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
-  case 308:
-#line 2039 "compilers/imcc/imcc.y"
+  case 310:
+#line 2053 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 309:
-#line 2040 "compilers/imcc/imcc.y"
+  case 311:
+#line 2054 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 310:
-#line 2044 "compilers/imcc/imcc.y"
+  case 312:
+#line 2058 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 312:
-#line 2049 "compilers/imcc/imcc.y"
+  case 314:
+#line 2063 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 313:
-#line 2051 "compilers/imcc/imcc.y"
+  case 315:
+#line 2065 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -4798,54 +4818,54 @@
          }
     break;
 
-  case 314:
-#line 2058 "compilers/imcc/imcc.y"
+  case 316:
+#line 2072 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 316:
-#line 2065 "compilers/imcc/imcc.y"
+  case 318:
+#line 2079 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 317:
-#line 2066 "compilers/imcc/imcc.y"
+  case 319:
+#line 2080 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 318:
-#line 2070 "compilers/imcc/imcc.y"
+  case 320:
+#line 2084 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 319:
-#line 2071 "compilers/imcc/imcc.y"
+  case 321:
+#line 2085 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 320:
-#line 2075 "compilers/imcc/imcc.y"
+  case 322:
+#line 2089 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 321:
-#line 2076 "compilers/imcc/imcc.y"
+  case 323:
+#line 2090 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 326:
-#line 2090 "compilers/imcc/imcc.y"
+  case 328:
+#line 2104 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 327:
-#line 2095 "compilers/imcc/imcc.y"
+  case 329:
+#line 2109 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -4853,16 +4873,16 @@
          }
     break;
 
-  case 328:
-#line 2103 "compilers/imcc/imcc.y"
+  case 330:
+#line 2117 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 329:
-#line 2108 "compilers/imcc/imcc.y"
+  case 331:
+#line 2122 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -4870,21 +4890,21 @@
          }
     break;
 
-  case 330:
-#line 2116 "compilers/imcc/imcc.y"
+  case 332:
+#line 2130 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 331:
-#line 2118 "compilers/imcc/imcc.y"
+  case 333:
+#line 2132 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 332:
-#line 2126 "compilers/imcc/imcc.y"
+  case 334:
+#line 2140 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->in_slice)
                (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -4892,54 +4912,54 @@
          }
     break;
 
-  case 333:
-#line 2134 "compilers/imcc/imcc.y"
+  case 335:
+#line 2148 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
-  case 334:
-#line 2135 "compilers/imcc/imcc.y"
+  case 336:
+#line 2149 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
-  case 335:
-#line 2136 "compilers/imcc/imcc.y"
+  case 337:
+#line 2150 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
-  case 336:
-#line 2137 "compilers/imcc/imcc.y"
+  case 338:
+#line 2151 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
-  case 337:
-#line 2138 "compilers/imcc/imcc.y"
+  case 339:
+#line 2152 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 338:
-#line 2142 "compilers/imcc/imcc.y"
+  case 340:
+#line 2156 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 339:
-#line 2143 "compilers/imcc/imcc.y"
+  case 341:
+#line 2157 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 340:
-#line 2144 "compilers/imcc/imcc.y"
+  case 342:
+#line 2158 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 341:
-#line 2145 "compilers/imcc/imcc.y"
+  case 343:
+#line 2159 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 4931 "compilers/imcc/imcparser.c"
+#line 4952 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5153,7 +5173,7 @@
 }
 
 
-#line 2151 "compilers/imcc/imcc.y"
+#line 2165 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: trunk/compilers/imcc/imcparser.h
==============================================================================
--- trunk/compilers/imcc/imcparser.h	(original)
+++ trunk/compilers/imcc/imcparser.h	Tue Jan  6 21:35:06 2009
@@ -78,96 +78,97 @@
      LOCAL = 283,
      LEXICAL = 284,
      CONST = 285,
-     INC = 286,
-     DEC = 287,
-     GLOBAL_CONST = 288,
-     PLUS_ASSIGN = 289,
-     MINUS_ASSIGN = 290,
-     MUL_ASSIGN = 291,
-     DIV_ASSIGN = 292,
-     CONCAT_ASSIGN = 293,
-     BAND_ASSIGN = 294,
-     BOR_ASSIGN = 295,
-     BXOR_ASSIGN = 296,
-     FDIV = 297,
-     FDIV_ASSIGN = 298,
-     MOD_ASSIGN = 299,
-     SHR_ASSIGN = 300,
-     SHL_ASSIGN = 301,
-     SHR_U_ASSIGN = 302,
-     SHIFT_LEFT = 303,
-     SHIFT_RIGHT = 304,
-     INTV = 305,
-     FLOATV = 306,
-     STRINGV = 307,
-     PMCV = 308,
-     LOG_XOR = 309,
-     RELOP_EQ = 310,
-     RELOP_NE = 311,
-     RELOP_GT = 312,
-     RELOP_GTE = 313,
-     RELOP_LT = 314,
-     RELOP_LTE = 315,
-     RESULT = 316,
-     RETURN = 317,
-     TAILCALL = 318,
-     YIELDT = 319,
-     GET_RESULTS = 320,
-     POW = 321,
-     SHIFT_RIGHT_U = 322,
-     LOG_AND = 323,
-     LOG_OR = 324,
-     COMMA = 325,
-     ESUB = 326,
-     DOTDOT = 327,
-     PCC_BEGIN = 328,
-     PCC_END = 329,
-     PCC_CALL = 330,
-     PCC_SUB = 331,
-     PCC_BEGIN_RETURN = 332,
-     PCC_END_RETURN = 333,
-     PCC_BEGIN_YIELD = 334,
-     PCC_END_YIELD = 335,
-     NCI_CALL = 336,
-     METH_CALL = 337,
-     INVOCANT = 338,
-     MAIN = 339,
-     LOAD = 340,
-     INIT = 341,
-     IMMEDIATE = 342,
-     POSTCOMP = 343,
-     METHOD = 344,
-     ANON = 345,
-     OUTER = 346,
-     NEED_LEX = 347,
-     MULTI = 348,
-     VTABLE_METHOD = 349,
-     LOADLIB = 350,
-     SUB_INSTANCE_OF = 351,
-     SUBID = 352,
-     NS_ENTRY = 353,
-     UNIQUE_REG = 354,
-     LABEL = 355,
-     EMIT = 356,
-     EOM = 357,
-     IREG = 358,
-     NREG = 359,
-     SREG = 360,
-     PREG = 361,
-     IDENTIFIER = 362,
-     REG = 363,
-     MACRO = 364,
-     ENDM = 365,
-     STRINGC = 366,
-     INTC = 367,
-     FLOATC = 368,
-     USTRINGC = 369,
-     PARROT_OP = 370,
-     VAR = 371,
-     LINECOMMENT = 372,
-     FILECOMMENT = 373,
-     DOT = 374,
-     CONCAT = 375
+     ANNOTATE = 286,
+     INC = 287,
+     DEC = 288,
+     GLOBAL_CONST = 289,
+     PLUS_ASSIGN = 290,
+     MINUS_ASSIGN = 291,
+     MUL_ASSIGN = 292,
+     DIV_ASSIGN = 293,
+     CONCAT_ASSIGN = 294,
+     BAND_ASSIGN = 295,
+     BOR_ASSIGN = 296,
+     BXOR_ASSIGN = 297,
+     FDIV = 298,
+     FDIV_ASSIGN = 299,
+     MOD_ASSIGN = 300,
+     SHR_ASSIGN = 301,
+     SHL_ASSIGN = 302,
+     SHR_U_ASSIGN = 303,
+     SHIFT_LEFT = 304,
+     SHIFT_RIGHT = 305,
+     INTV = 306,
+     FLOATV = 307,
+     STRINGV = 308,
+     PMCV = 309,
+     LOG_XOR = 310,
+     RELOP_EQ = 311,
+     RELOP_NE = 312,
+     RELOP_GT = 313,
+     RELOP_GTE = 314,
+     RELOP_LT = 315,
+     RELOP_LTE = 316,
+     RESULT = 317,
+     RETURN = 318,
+     TAILCALL = 319,
+     YIELDT = 320,
+     GET_RESULTS = 321,
+     POW = 322,
+     SHIFT_RIGHT_U = 323,
+     LOG_AND = 324,
+     LOG_OR = 325,
+     COMMA = 326,
+     ESUB = 327,
+     DOTDOT = 328,
+     PCC_BEGIN = 329,
+     PCC_END = 330,
+     PCC_CALL = 331,
+     PCC_SUB = 332,
+     PCC_BEGIN_RETURN = 333,
+     PCC_END_RETURN = 334,
+     PCC_BEGIN_YIELD = 335,
+     PCC_END_YIELD = 336,
+     NCI_CALL = 337,
+     METH_CALL = 338,
+     INVOCANT = 339,
+     MAIN = 340,
+     LOAD = 341,
+     INIT = 342,
+     IMMEDIATE = 343,
+     POSTCOMP = 344,
+     METHOD = 345,
+     ANON = 346,
+     OUTER = 347,
+     NEED_LEX = 348,
+     MULTI = 349,
+     VTABLE_METHOD = 350,
+     LOADLIB = 351,
+     SUB_INSTANCE_OF = 352,
+     SUBID = 353,
+     NS_ENTRY = 354,
+     UNIQUE_REG = 355,
+     LABEL = 356,
+     EMIT = 357,
+     EOM = 358,
+     IREG = 359,
+     NREG = 360,
+     SREG = 361,
+     PREG = 362,
+     IDENTIFIER = 363,
+     REG = 364,
+     MACRO = 365,
+     ENDM = 366,
+     STRINGC = 367,
+     INTC = 368,
+     FLOATC = 369,
+     USTRINGC = 370,
+     PARROT_OP = 371,
+     VAR = 372,
+     LINECOMMENT = 373,
+     FILECOMMENT = 374,
+     DOT = 375,
+     CONCAT = 376
    };
 #endif
 /* Tokens.  */
@@ -199,103 +200,104 @@
 #define LOCAL 283
 #define LEXICAL 284
 #define CONST 285
-#define INC 286
-#define DEC 287
-#define GLOBAL_CONST 288
-#define PLUS_ASSIGN 289
-#define MINUS_ASSIGN 290
-#define MUL_ASSIGN 291
-#define DIV_ASSIGN 292
-#define CONCAT_ASSIGN 293
-#define BAND_ASSIGN 294
-#define BOR_ASSIGN 295
-#define BXOR_ASSIGN 296
-#define FDIV 297
-#define FDIV_ASSIGN 298
-#define MOD_ASSIGN 299
-#define SHR_ASSIGN 300
-#define SHL_ASSIGN 301
-#define SHR_U_ASSIGN 302
-#define SHIFT_LEFT 303
-#define SHIFT_RIGHT 304
-#define INTV 305
-#define FLOATV 306
-#define STRINGV 307
-#define PMCV 308
-#define LOG_XOR 309
-#define RELOP_EQ 310
-#define RELOP_NE 311
-#define RELOP_GT 312
-#define RELOP_GTE 313
-#define RELOP_LT 314
-#define RELOP_LTE 315
-#define RESULT 316
-#define RETURN 317
-#define TAILCALL 318
-#define YIELDT 319
-#define GET_RESULTS 320
-#define POW 321
-#define SHIFT_RIGHT_U 322
-#define LOG_AND 323
-#define LOG_OR 324
-#define COMMA 325
-#define ESUB 326
-#define DOTDOT 327
-#define PCC_BEGIN 328
-#define PCC_END 329
-#define PCC_CALL 330
-#define PCC_SUB 331
-#define PCC_BEGIN_RETURN 332
-#define PCC_END_RETURN 333
-#define PCC_BEGIN_YIELD 334
-#define PCC_END_YIELD 335
-#define NCI_CALL 336
-#define METH_CALL 337
-#define INVOCANT 338
-#define MAIN 339
-#define LOAD 340
-#define INIT 341
-#define IMMEDIATE 342
-#define POSTCOMP 343
-#define METHOD 344
-#define ANON 345
-#define OUTER 346
-#define NEED_LEX 347
-#define MULTI 348
-#define VTABLE_METHOD 349
-#define LOADLIB 350
-#define SUB_INSTANCE_OF 351
-#define SUBID 352
-#define NS_ENTRY 353
-#define UNIQUE_REG 354
-#define LABEL 355
-#define EMIT 356
-#define EOM 357
-#define IREG 358
-#define NREG 359
-#define SREG 360
-#define PREG 361
-#define IDENTIFIER 362
-#define REG 363
-#define MACRO 364
-#define ENDM 365
-#define STRINGC 366
-#define INTC 367
-#define FLOATC 368
-#define USTRINGC 369
-#define PARROT_OP 370
-#define VAR 371
-#define LINECOMMENT 372
-#define FILECOMMENT 373
-#define DOT 374
-#define CONCAT 375
+#define ANNOTATE 286
+#define INC 287
+#define DEC 288
+#define GLOBAL_CONST 289
+#define PLUS_ASSIGN 290
+#define MINUS_ASSIGN 291
+#define MUL_ASSIGN 292
+#define DIV_ASSIGN 293
+#define CONCAT_ASSIGN 294
+#define BAND_ASSIGN 295
+#define BOR_ASSIGN 296
+#define BXOR_ASSIGN 297
+#define FDIV 298
+#define FDIV_ASSIGN 299
+#define MOD_ASSIGN 300
+#define SHR_ASSIGN 301
+#define SHL_ASSIGN 302
+#define SHR_U_ASSIGN 303
+#define SHIFT_LEFT 304
+#define SHIFT_RIGHT 305
+#define INTV 306
+#define FLOATV 307
+#define STRINGV 308
+#define PMCV 309
+#define LOG_XOR 310
+#define RELOP_EQ 311
+#define RELOP_NE 312
+#define RELOP_GT 313
+#define RELOP_GTE 314
+#define RELOP_LT 315
+#define RELOP_LTE 316
+#define RESULT 317
+#define RETURN 318
+#define TAILCALL 319
+#define YIELDT 320
+#define GET_RESULTS 321
+#define POW 322
+#define SHIFT_RIGHT_U 323
+#define LOG_AND 324
+#define LOG_OR 325
+#define COMMA 326
+#define ESUB 327
+#define DOTDOT 328
+#define PCC_BEGIN 329
+#define PCC_END 330
+#define PCC_CALL 331
+#define PCC_SUB 332
+#define PCC_BEGIN_RETURN 333
+#define PCC_END_RETURN 334
+#define PCC_BEGIN_YIELD 335
+#define PCC_END_YIELD 336
+#define NCI_CALL 337
+#define METH_CALL 338
+#define INVOCANT 339
+#define MAIN 340
+#define LOAD 341
+#define INIT 342
+#define IMMEDIATE 343
+#define POSTCOMP 344
+#define METHOD 345
+#define ANON 346
+#define OUTER 347
+#define NEED_LEX 348
+#define MULTI 349
+#define VTABLE_METHOD 350
+#define LOADLIB 351
+#define SUB_INSTANCE_OF 352
+#define SUBID 353
+#define NS_ENTRY 354
+#define UNIQUE_REG 355
+#define LABEL 356
+#define EMIT 357
+#define EOM 358
+#define IREG 359
+#define NREG 360
+#define SREG 361
+#define PREG 362
+#define IDENTIFIER 363
+#define REG 364
+#define MACRO 365
+#define ENDM 366
+#define STRINGC 367
+#define INTC 368
+#define FLOATC 369
+#define USTRINGC 370
+#define PARROT_OP 371
+#define VAR 372
+#define LINECOMMENT 373
+#define FILECOMMENT 374
+#define DOT 375
+#define CONCAT 376
 
 
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 784 "compilers/imcc/imcc.y"
+#line 785 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;
@@ -304,7 +306,7 @@
     Instruction *i;
 }
 /* Line 1489 of yacc.c.  */
-#line 297 "compilers/imcc/imcparser.h"
+#line 299 "compilers/imcc/imcparser.h"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1

Modified: trunk/compilers/imcc/parser_util.c
==============================================================================
--- trunk/compilers/imcc/parser_util.c	(original)
+++ trunk/compilers/imcc/parser_util.c	Tue Jan  6 21:35:06 2009
@@ -378,6 +378,14 @@
     op_info_t   *op_info;
     char fullname[64], format[128];
 
+    if (STREQ(name, ".annotate")) {
+        ins = _mk_instruction(name, "", n, r, 0);
+        if (emit)
+            return emitb(interp, unit, ins);
+        else
+            return ins;
+    }
+
     if ((STREQ(name, "set_args"))
     ||  (STREQ(name, "get_results"))
     ||  (STREQ(name, "get_params"))

Modified: trunk/compilers/imcc/pbc.c
==============================================================================
--- trunk/compilers/imcc/pbc.c	(original)
+++ trunk/compilers/imcc/pbc.c	Tue Jan  6 21:35:06 2009
@@ -723,7 +723,12 @@
         if (ins->type & ITLABEL)
             ins->symregs[0]->color = code_size;
 
-        if (ins->opname && *ins->opname) {
+        if (ins->opname && STREQ(ins->opname, ".annotate")) {
+            /* Annotations contribute nothing to code size, since they do not
+             * end up in bytecode segment. */
+            (*src_lines)++;
+        }
+        else if (ins->opname && *ins->opname) {
             (*src_lines)++;
             if (ins->opnum < 0)
                 IMCC_fatal(interp, 1, "get_codesize: "
@@ -2123,8 +2128,7 @@
                 (size_t)IMCC_INFO(interp)->ins_line + ins_size + 1);
 
             Parrot_debug_add_mapping(interp, IMCC_INFO(interp)->debug_seg,
-                IMCC_INFO(interp)->ins_line,
-                PF_DEBUGMAPPINGTYPE_FILENAME, sourcefile, 0);
+                IMCC_INFO(interp)->ins_line, sourcefile);
         }
         else
             IMCC_INFO(interp)->debug_seg = NULL;
@@ -2158,7 +2162,45 @@
             IMCC_INFO(interp)->npc);
     }
 
-    if (ins->opname && *ins->opname) {
+    if (ins->opname && strcmp(ins->opname, ".annotate") == 0) {
+        /* It's an annotation. */
+        int annotation_type;
+
+        /* Add annotations seg if we're missing one. */
+        if (!interp->code->annotations) {
+            /* Create segment. */
+            char *name = mem_sys_allocate(strlen(interp->code->base.name) + 5);
+            strcpy(name, interp->code->base.name);
+            strcpy(name + strlen(name), "_ANN");
+            interp->code->annotations = PackFile_Segment_new_seg(interp, interp->code->base.dir,
+                    PF_ANNOTATIONS_SEG, name, 1);
+            interp->code->annotations->code = interp->code;
+
+            /* Create initial group. */
+            PackFile_Annotations_add_group(interp, interp->code->annotations,
+                    IMCC_INFO(interp)->pc - interp->code->base.data);
+        }
+
+        /* Add annotation. */
+        switch (ins->symregs[1]->set) {
+            case 'I':
+                annotation_type = PF_ANNOTATION_KEY_TYPE_INT;
+                break;
+            case 'N':
+                annotation_type = PF_ANNOTATION_KEY_TYPE_NUM;
+                break;
+            case 'S':
+                annotation_type = PF_ANNOTATION_KEY_TYPE_STR;
+                break;
+            default:
+                IMCC_fatal(interp, 1, "e_pbc_emit:"
+                        "invalid type for annotation value\n");
+        }
+        PackFile_Annotations_add_entry(interp, interp->code->annotations,
+                    IMCC_INFO(interp)->pc - interp->code->base.data,
+                    ins->symregs[0]->color, annotation_type, ins->symregs[1]->color);
+    }
+    else if (ins->opname && *ins->opname) {
         SymReg  *addr, *r;
         opcode_t last_label = 1;
 

Modified: trunk/include/parrot/packfile.h
==============================================================================
--- trunk/include/parrot/packfile.h	(original)
+++ trunk/include/parrot/packfile.h	Tue Jan  6 21:35:06 2009
@@ -75,15 +75,6 @@
     } u;
 } PackFile_Constant;
 
-typedef struct PackFile_DebugMapping {
-    opcode_t offset;
-    opcode_t mapping_type;
-    union {
-        opcode_t filename;
-        opcode_t source_seg; /* XXX Source segments currently unimplemented. */
-    } u;
-} PackFile_DebugMapping;
-
 /*
 ** PackFile Segment:
 *    The base type of every section
@@ -124,6 +115,7 @@
     PF_CONST_SEG,
     PF_BYTEC_SEG,
     PF_DEBUG_SEG,
+    PF_ANNOTATIONS_SEG,
 
     PF_MAX_SEG
 } pack_file_types;
@@ -204,21 +196,54 @@
     struct PackFile_Debug *debugs;
     PackFile_ConstTable   *const_table;
     PackFile_FixupTable   *fixups;
+    struct PackFile_Annotations *annotations;
 };
 
-enum PF_DEBUGMAPPINGTYPE {
-    PF_DEBUGMAPPINGTYPE_NONE = 0,
-    PF_DEBUGMAPPINGTYPE_FILENAME,
-    PF_DEBUGMAPPINGTYPE_SOURCESEG
-};
+typedef struct PackFile_DebugFilenameMapping {
+    opcode_t offset;
+    opcode_t filename;
+} PackFile_DebugFilenameMapping;
 
 typedef struct PackFile_Debug {
     PackFile_Segment        base;
     opcode_t                num_mappings;
-    PackFile_DebugMapping **mappings;
+    PackFile_DebugFilenameMapping **mappings;
     PackFile_ByteCode      *code;   /* where this segment belongs to */
 } PackFile_Debug;
 
+
+/* Key types for annotation segment. */
+#define PF_ANNOTATION_KEY_TYPE_INT 0
+#define PF_ANNOTATION_KEY_TYPE_STR 1
+#define PF_ANNOTATION_KEY_TYPE_NUM 2
+
+typedef struct PackFile_Annotations_Key {
+    opcode_t name;
+    opcode_t type;
+} PackFile_Annotations_Key;
+
+typedef struct PackFile_Annotations_Group {
+    opcode_t bytecode_offset;
+    opcode_t entries_offset;
+} PackFile_Annotations_Group;
+
+typedef struct PackFile_Annotations_Entry {
+    opcode_t bytecode_offset;
+    opcode_t key;
+    opcode_t value;
+} PackFile_Annotations_Entry;
+
+typedef struct PackFile_Annotations {
+    PackFile_Segment            base;
+    opcode_t                    num_keys;
+    PackFile_Annotations_Key    **keys;
+    opcode_t                    num_groups;
+    PackFile_Annotations_Group  **groups;
+    opcode_t                    num_entries;
+    PackFile_Annotations_Entry  **entries;
+    PackFile_ByteCode           *code;
+} PackFile_Annotations;
+
 typedef struct PackFile_Directory {
     PackFile_Segment   base;
     size_t             num_segments;
@@ -599,12 +624,10 @@
 void Parrot_debug_add_mapping(PARROT_INTERP,
     ARGMOD(PackFile_Debug *debug),
     opcode_t offset,
-    int mapping_type,
-    ARGIN(const char *filename),
-    int source_seg)
+    ARGIN(const char *filename))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*debug);
 
 PARROT_EXPORT
@@ -663,6 +686,72 @@
 void mark_const_subs(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+void PackFile_Annotations_add_entry(PARROT_INTERP,
+    ARGMOD(struct PackFile_Annotations *self),
+    opcode_t offset,
+    opcode_t key,
+    opcode_t type,
+    opcode_t value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+void PackFile_Annotations_add_group(PARROT_INTERP,
+    ARGMOD(struct PackFile_Annotations *self),
+    opcode_t offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+void PackFile_Annotations_destroy(SHIM_INTERP,
+    ARGMOD(struct PackFile_Segment *seg))
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*seg);
+
+void PackFile_Annotations_dump(PARROT_INTERP,
+    ARGIN(struct PackFile_Segment *seg))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+PMC * PackFile_Annotations_lookup(PARROT_INTERP,
+    ARGIN(struct PackFile_Annotations *self),
+    opcode_t offset,
+    ARGIN_NULLOK(STRING *key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+PackFile_Segment * PackFile_Annotations_new(PARROT_INTERP,
+    ARGIN(struct PackFile *pf),
+    SHIM(const char *name),
+    NULLOK(int add))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+opcode_t * PackFile_Annotations_pack(PARROT_INTERP,
+    ARGIN(struct PackFile_Segment *seg),
+    ARGMOD(opcode_t *cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*cursor);
+
+size_t PackFile_Annotations_packed_size(PARROT_INTERP,
+    ARGIN(struct PackFile_Segment *seg))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+const opcode_t * PackFile_Annotations_unpack(PARROT_INTERP,
+    ARGMOD(PackFile_Segment *seg),
+    ARGIN(const opcode_t *cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*seg);
+
 #define ASSERT_ARGS_do_sub_pragmas __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(self)
@@ -779,6 +868,37 @@
     || PARROT_ASSERT_ARG(self)
 #define ASSERT_ARGS_mark_const_subs __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_PackFile_Annotations_add_entry \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(self)
+#define ASSERT_ARGS_PackFile_Annotations_add_group \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(self)
+#define ASSERT_ARGS_PackFile_Annotations_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(seg)
+#define ASSERT_ARGS_PackFile_Annotations_dump __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(seg)
+#define ASSERT_ARGS_PackFile_Annotations_lookup __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(self)
+#define ASSERT_ARGS_PackFile_Annotations_new __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(pf)
+#define ASSERT_ARGS_PackFile_Annotations_pack __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(seg) \
+    || PARROT_ASSERT_ARG(cursor)
+#define ASSERT_ARGS_PackFile_Annotations_packed_size \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(seg)
+#define ASSERT_ARGS_PackFile_Annotations_unpack __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(seg) \
+    || PARROT_ASSERT_ARG(cursor)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/packfile.c */
 

Modified: trunk/src/atomic/gcc_x86.c
==============================================================================
--- trunk/src/atomic/gcc_x86.c	(original)
+++ trunk/src/atomic/gcc_x86.c	Tue Jan  6 21:35:06 2009
@@ -34,7 +34,7 @@
  */
 /*
 
-=item C<void * parrot_i386_cmpxchg (ptr, expect, update)>
+=item C<void * parrot_i386_cmpxchg>
 
 The CMPXCHG assembly instruction is a single cycle x86 instruction
 that compares C<expect> and C<*ptr>. If they are equal, sets

Modified: trunk/src/embed.c
==============================================================================
--- trunk/src/embed.c	(original)
+++ trunk/src/embed.c	Tue Jan  6 21:35:06 2009
@@ -1077,7 +1077,7 @@
         if (debugs && curr_mapping < num_mappings) {
             if (op_code_seq_num == interp->code->debugs->mappings[curr_mapping]->offset) {
                 const int filename_const_offset =
-                    interp->code->debugs->mappings[curr_mapping]->u.filename;
+                    interp->code->debugs->mappings[curr_mapping]->filename;
                 Parrot_io_printf(interp, "Current Source Filename %Ss\n",
                         interp->code->const_table->constants[filename_const_offset]->u.string);
                 curr_mapping++;

Modified: trunk/src/packfile.c
==============================================================================
--- trunk/src/packfile.c	(original)
+++ trunk/src/packfile.c	Tue Jan  6 21:35:06 2009
@@ -228,6 +228,14 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
+PARROT_CANNOT_RETURN_NULL
+static PMC * make_annotation_value_pmc(PARROT_INTERP,
+    ARGIN(struct PackFile_Annotations *self),
+    INTVAL type,
+    opcode_t value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 static void make_code_pointers(ARGMOD(PackFile_Segment *seg))
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*seg);
@@ -394,6 +402,9 @@
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(seg) \
     || PARROT_ASSERT_ARG(cursor)
+#define ASSERT_ARGS_make_annotation_value_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(self)
 #define ASSERT_ARGS_make_code_pointers __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(seg)
 #define ASSERT_ARGS_mark_1_seg __attribute__unused__ int _ASSERT_ARGS_CHECK = \
@@ -1522,12 +1533,23 @@
         pf_debug_unpack,
         pf_debug_dump
     };
-    PackFile_funcs_register(interp, pf, PF_DIR_SEG,     dirf);
-    PackFile_funcs_register(interp, pf, PF_UNKNOWN_SEG, defaultf);
-    PackFile_funcs_register(interp, pf, PF_FIXUP_SEG,   fixupf);
-    PackFile_funcs_register(interp, pf, PF_CONST_SEG,   constf);
-    PackFile_funcs_register(interp, pf, PF_BYTEC_SEG,   bytef);
-    PackFile_funcs_register(interp, pf, PF_DEBUG_SEG,   debugf);
+
+    const PackFile_funcs annotationf = {
+        PackFile_Annotations_new,
+        PackFile_Annotations_destroy,
+        PackFile_Annotations_packed_size,
+        PackFile_Annotations_pack,
+        PackFile_Annotations_unpack,
+        PackFile_Annotations_dump
+    };
+
+    PackFile_funcs_register(interp, pf, PF_DIR_SEG,         dirf);
+    PackFile_funcs_register(interp, pf, PF_UNKNOWN_SEG,     defaultf);
+    PackFile_funcs_register(interp, pf, PF_FIXUP_SEG,       fixupf);
+    PackFile_funcs_register(interp, pf, PF_CONST_SEG,       constf);
+    PackFile_funcs_register(interp, pf, PF_BYTEC_SEG,       bytef);
+    PackFile_funcs_register(interp, pf, PF_DEBUG_SEG,       debugf);
+    PackFile_funcs_register(interp, pf, PF_ANNOTATIONS_SEG, annotationf);
 
     return;
 }
@@ -2412,7 +2434,7 @@
     ASSERT_ARGS(pf_debug_new)
     PackFile_Debug * const debug = mem_allocate_zeroed_typed(PackFile_Debug);
 
-    debug->mappings              = mem_allocate_typed(PackFile_DebugMapping *);
+    debug->mappings              = mem_allocate_typed(PackFile_DebugFilenameMapping *);
     debug->mappings[0]           = NULL;
 
     return (PackFile_Segment *)debug;
@@ -2442,19 +2464,8 @@
 
     /* Size of entries in mappings list. */
     for (i = 0; i < debug->num_mappings; i++) {
-        /* Bytecode offset and mapping type */
+        /* Bytecode offset and filename */
         size += 2;
-
-        /* Mapping specific stuff. */
-        switch (debug->mappings[i]->mapping_type) {
-            case PF_DEBUGMAPPINGTYPE_FILENAME:
-            case PF_DEBUGMAPPINGTYPE_SOURCESEG:
-                size += 1;
-                break;
-            case PF_DEBUGMAPPINGTYPE_NONE:
-            default:
-                break;
-        }
     }
 
     return size;
@@ -2485,22 +2496,9 @@
 
     /* Now store each mapping. */
     for (i = 0; i < n; i++) {
-        /* Bytecode offset and mapping type */
+        /* Bytecode offset and filename. */
         *cursor++ = debug->mappings[i]->offset;
-        *cursor++ = debug->mappings[i]->mapping_type;
-
-        /* Mapping specific stuff. */
-        switch (debug->mappings[i]->mapping_type) {
-            case PF_DEBUGMAPPINGTYPE_FILENAME:
-                *cursor++ = debug->mappings[i]->u.filename;
-                break;
-            case PF_DEBUGMAPPINGTYPE_SOURCESEG:
-                *cursor++ = debug->mappings[i]->u.source_seg;
-                break;
-            case PF_DEBUGMAPPINGTYPE_NONE:
-            default:
-                break;
-        }
+        *cursor++ = debug->mappings[i]->filename;
     }
 
     return cursor;
@@ -2537,29 +2535,14 @@
     debug->num_mappings = PF_fetch_opcode(self->pf, &cursor);
 
     /* Allocate space for mappings vector. */
-    mem_realloc_n_typed(debug->mappings, debug->num_mappings+1, PackFile_DebugMapping *);
+    mem_realloc_n_typed(debug->mappings, debug->num_mappings+1, PackFile_DebugFilenameMapping *);
 
     /* Read in each mapping. */
     for (i = 0; i < debug->num_mappings; i++) {
-        /* Allocate struct and get offset and mapping type. */
-        debug->mappings[i] = mem_allocate_typed(PackFile_DebugMapping);
+        /* Allocate struct and get offset and filename type. */
+        debug->mappings[i] = mem_allocate_typed(PackFile_DebugFilenameMapping);
         debug->mappings[i]->offset = PF_fetch_opcode(self->pf, &cursor);
-        debug->mappings[i]->mapping_type = PF_fetch_opcode(self->pf, &cursor);
-
-        /* Read mapping specific stuff. */
-        switch (debug->mappings[i]->mapping_type) {
-            case PF_DEBUGMAPPINGTYPE_FILENAME:
-                debug->mappings[i]->u.filename =
-                    PF_fetch_opcode(self->pf, &cursor);
-                break;
-            case PF_DEBUGMAPPINGTYPE_SOURCESEG:
-                debug->mappings[i]->u.source_seg =
-                    PF_fetch_opcode(self->pf, &cursor);
-                break;
-            case PF_DEBUGMAPPINGTYPE_NONE:
-            default:
-                break;
-        }
+        debug->mappings[i]->filename = PF_fetch_opcode(self->pf, &cursor);
     }
 
     /*
@@ -2607,32 +2590,13 @@
 
     Parrot_io_printf(interp, "\n  mappings => [\n");
     for (i = 0; i < debug->num_mappings; i++) {
+        char *filename = string_to_cstring(interp, PF_CONST(debug->code,
+                   debug->mappings[i]->filename)->u.string);;
         Parrot_io_printf(interp, "    #%d\n    [\n", i);
         Parrot_io_printf(interp, "        OFFSET => %d,\n",
                    debug->mappings[i]->offset);
-        switch (debug->mappings[i]->mapping_type) {
-            case PF_DEBUGMAPPINGTYPE_NONE:
-                Parrot_io_printf(interp, "        MAPPINGTYPE => NONE\n");
-                break;
-            case PF_DEBUGMAPPINGTYPE_FILENAME:
-                {
-                char *filename;
-
-                Parrot_io_printf(interp, "        MAPPINGTYPE => FILENAME,\n");
-                filename = string_to_cstring(interp, PF_CONST(debug->code,
-                           debug->mappings[i]->u.filename)->u.string);
-                Parrot_io_printf(interp, "        FILENAME => %s\n", filename);
-                string_cstring_free(filename);
-                }
-                break;
-            case PF_DEBUGMAPPINGTYPE_SOURCESEG:
-                Parrot_io_printf(interp, "        MAPPINGTYPE => SOURCESEG,\n");
-                Parrot_io_printf(interp, "        SOURCESEG => %d\n",
-                           debug->mappings[i]->u.source_seg);
-                break;
-            default:
-                break;
-        }
+        Parrot_io_printf(interp, "        FILENAME => %s\n", filename);
+        string_cstring_free(filename);
         Parrot_io_printf(interp, "    ],\n");
     }
 
@@ -2703,11 +2667,7 @@
 
 =item C<void Parrot_debug_add_mapping>
 
-Add a bytecode offset to filename/source segment mapping. mapping_type may be
-one of PF_DEBUGMAPPINGTYPE_NONE (in which case the last two parameters are
-ignored), PF_DEBUGMAPPINGTYPE_FILENAME (in which case filename must be given)
-or PF_DEBUGMAPPINGTYPE_SOURCESEG (in which case source_seg should contains the
-number of the source segment in question).
+Add a bytecode offset to filename mapping.
 
 =cut
 
@@ -2716,16 +2676,16 @@
 PARROT_EXPORT
 void
 Parrot_debug_add_mapping(PARROT_INTERP, ARGMOD(PackFile_Debug *debug),
-                         opcode_t offset, int mapping_type,
-                         ARGIN(const char *filename), int source_seg)
+                         opcode_t offset, ARGIN(const char *filename))
 {
     ASSERT_ARGS(Parrot_debug_add_mapping)
-    PackFile_DebugMapping *mapping;
+    PackFile_DebugFilenameMapping *mapping;
     PackFile_ConstTable * const ct = debug->code->const_table;
     int insert_pos = 0;
+    PackFile_Constant *fnconst;
 
     /* Allocate space for the extra entry. */
-    mem_realloc_n_typed(debug->mappings, debug->num_mappings+1, PackFile_DebugMapping *);
+    mem_realloc_n_typed(debug->mappings, debug->num_mappings+1, PackFile_DebugFilenameMapping *);
 
     /* Can it just go on the end? */
     if (debug->num_mappings == 0 ||
@@ -2746,35 +2706,20 @@
         }
     }
 
+    /* Need to put filename in constants table. */
+    ct->const_count = ct->const_count + 1;
+    mem_realloc_n_typed(ct->constants, ct->const_count, PackFile_Constant *);
+    fnconst = PackFile_Constant_new(interp);
+    fnconst->type = PFC_STRING;
+    fnconst->u.string = string_make_direct(interp, filename,
+        strlen(filename), PARROT_DEFAULT_ENCODING,
+        PARROT_DEFAULT_CHARSET, PObj_constant_FLAG);
+    ct->constants[ct->const_count - 1] = fnconst;
+
     /* Set up new entry and insert it. */
-    mapping               = mem_allocate_typed(PackFile_DebugMapping);
+    mapping               = mem_allocate_typed(PackFile_DebugFilenameMapping);
     mapping->offset       = offset;
-    mapping->mapping_type = mapping_type;
-
-    switch (mapping_type) {
-        case PF_DEBUGMAPPINGTYPE_FILENAME:
-            {
-            PackFile_Constant *fnconst;
-
-            /* Need to put filename in constants table. */
-            ct->const_count = ct->const_count + 1;
-            mem_realloc_n_typed(ct->constants, ct->const_count, PackFile_Constant *);
-            fnconst = PackFile_Constant_new(interp);
-            fnconst->type = PFC_STRING;
-            fnconst->u.string = string_make_direct(interp, filename,
-                strlen(filename), PARROT_DEFAULT_ENCODING,
-                PARROT_DEFAULT_CHARSET, PObj_constant_FLAG);
-            ct->constants[ct->const_count - 1] = fnconst;
-            mapping->u.filename = ct->const_count - 1;
-            }
-            break;
-        case PF_DEBUGMAPPINGTYPE_SOURCESEG:
-            mapping->u.source_seg = source_seg;
-            break;
-        case PF_DEBUGMAPPINGTYPE_NONE:
-        default:
-            break;
-    }
+    mapping->filename     = ct->const_count - 1;
 
     debug->mappings[insert_pos] = mapping;
     debug->num_mappings         = debug->num_mappings + 1;
@@ -2808,17 +2753,8 @@
             (debug->mappings[i]->offset <= pc &&
              debug->mappings[i+1]->offset > pc))
         {
-            switch (debug->mappings[i]->mapping_type) {
-                case PF_DEBUGMAPPINGTYPE_NONE:
-                    return string_from_literal(interp, "(unknown file)");
-                case PF_DEBUGMAPPINGTYPE_FILENAME:
-                    return PF_CONST(debug->code,
-                        debug->mappings[i]->u.filename)->u.string;
-                case PF_DEBUGMAPPINGTYPE_SOURCESEG:
-                    return string_from_literal(interp, "(unknown file)");
-                default:
-                    continue;
-            }
+            return PF_CONST(debug->code,
+                    debug->mappings[i]->filename)->u.string;
         }
     }
 
@@ -3898,6 +3834,511 @@
     return cursor;
 }
 
+
+/*
+
+=item C<PackFile_Segment * PackFile_Annotations_new>
+
+Creates a new annotations segment structure. Ignores the parameters C<name>
+and C<add>.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PackFile_Segment *
+PackFile_Annotations_new(PARROT_INTERP, ARGIN(struct PackFile *pf),
+        SHIM(const char *name), SHIM(int add))
+{
+    ASSERT_ARGS(PackFile_Annotations_new)
+
+    /* Allocate annotations structure; create it all zeroed, and we will
+     * allocate memory for each of the arrays on demand. */
+    PackFile_Annotations *seg = mem_allocate_zeroed_typed(PackFile_Annotations);
+    return (PackFile_Segment *) seg;
+}
+
+
+/*
+
+=item C<void PackFile_Annotations_destroy>
+
+Frees all memory associated with an annotations segment.
+
+=cut
+
+*/
+
+void
+PackFile_Annotations_destroy(SHIM_INTERP, ARGMOD(struct PackFile_Segment *seg))
+{
+    ASSERT_ARGS(PackFile_Annotations_destroy)
+    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    INTVAL i;
+
+    /* Free any keys. */
+    if (self->keys) {
+        for (i = 0; i < self->num_keys; i++)
+            mem_sys_free(self->keys[i]);
+        mem_sys_free(self->keys);
+    }
+
+    /* Free any groups. */
+    if (self->groups) {
+        for (i = 0; i < self->num_groups; i++)
+            mem_sys_free(self->groups[i]);
+        mem_sys_free(self->groups);
+    }
+
+    /* Free any entries. */
+    if (self->entries) {
+        for (i = 0; i < self->num_entries; i++)
+            mem_sys_free(self->entries[i]);
+        mem_sys_free(self->entries);
+    }
+}
+
+
+/*
+
+=item C<size_t PackFile_Annotations_packed_size>
+
+Computes the number of opcode_ts we'll need to store the passed annotations
+segment.
+
+=cut
+
+*/
+
+size_t
+PackFile_Annotations_packed_size(PARROT_INTERP, ARGIN(struct PackFile_Segment *seg))
+{
+    ASSERT_ARGS(PackFile_Annotations_packed_size)
+    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    return 3                      /* Counts. */
+         + self->num_keys    * 2  /* Keys. */
+         + self->num_groups  * 2  /* Groups. */
+         + self->num_entries * 3; /* Entries. */
+}
+
+
+/*
+
+=item C<opcode_t * PackFile_Annotations_pack>
+
+Packs this segment into bytecode.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+opcode_t *
+PackFile_Annotations_pack(PARROT_INTERP, ARGIN(struct PackFile_Segment *seg),
+        ARGMOD(opcode_t *cursor))
+{
+    ASSERT_ARGS(PackFile_Annotations_pack)
+    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    INTVAL i;
+
+    /* Write key count and any keys. */
+    *cursor++ = self->num_keys;
+    for (i = 0; i < self->num_keys; i++) {
+        *cursor++ = self->keys[i]->name;
+        *cursor++ = self->keys[i]->type;
+    }
+
+    /* Write group count and any groups. */
+    *cursor++ = self->num_groups;
+    for (i = 0; i < self->num_groups; i++) {
+        *cursor++ = self->groups[i]->bytecode_offset;
+        *cursor++ = self->groups[i]->entries_offset;
+    }
+
+    /* Write entry count and any entries. */
+    *cursor++ = self->num_entries;
+    for (i = 0; i < self->num_entries; i++) {
+        *cursor++ = self->entries[i]->bytecode_offset;
+        *cursor++ = self->entries[i]->key;
+        *cursor++ = self->entries[i]->value;
+    }
+
+    return cursor;
+}
+
+
+/*
+
+=item C<const opcode_t * PackFile_Annotations_unpack>
+
+Unpacks this segment from the bytecode.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+const opcode_t *
+PackFile_Annotations_unpack(PARROT_INTERP, ARGMOD(PackFile_Segment *seg),
+        ARGIN(const opcode_t *cursor))
+{
+    ASSERT_ARGS(PackFile_Annotations_unpack)
+    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    INTVAL               i, str_len;
+    PackFile_ByteCode    *code;
+    char                 *code_name;
+
+    /* Unpack keys. */
+    self->num_keys = PF_fetch_opcode(seg->pf, &cursor);
+    self->keys     = mem_allocate_n_typed(self->num_keys, PackFile_Annotations_Key *);
+    for (i = 0; i < self->num_keys; i++) {
+        self->keys[i]       = mem_allocate_typed(PackFile_Annotations_Key);
+        self->keys[i]->name = PF_fetch_opcode(seg->pf, &cursor);
+        self->keys[i]->type = PF_fetch_opcode(seg->pf, &cursor);
+    }
+
+    /* Unpack groups. */
+    self->num_groups = PF_fetch_opcode(seg->pf, &cursor);
+    self->groups     = mem_allocate_n_typed(self->num_groups, PackFile_Annotations_Group *);
+    for (i = 0; i < self->num_groups; i++) {
+        self->groups[i]                  = mem_allocate_typed(PackFile_Annotations_Group);
+        self->groups[i]->bytecode_offset = PF_fetch_opcode(seg->pf, &cursor);
+        self->groups[i]->entries_offset  = PF_fetch_opcode(seg->pf, &cursor);
+    }
+
+    /* Unpack entries. */
+    self->num_entries = PF_fetch_opcode(seg->pf, &cursor);
+    self->entries     = mem_allocate_n_typed(self->num_entries, PackFile_Annotations_Entry *);
+    for (i = 0; i < self->num_entries; i++) {
+        self->entries[i]                  = mem_allocate_typed(PackFile_Annotations_Entry);
+        self->entries[i]->bytecode_offset = PF_fetch_opcode(seg->pf, &cursor);
+        self->entries[i]->key             = PF_fetch_opcode(seg->pf, &cursor);
+        self->entries[i]->value           = PF_fetch_opcode(seg->pf, &cursor);
+    }
+
+    /* Need to associate this segment with the applicable code segment. */
+    code_name = str_dup(self->base.name);
+    str_len = strlen(code_name);
+    code_name[str_len - 4] = 0;
+    code = (PackFile_ByteCode *)PackFile_find_segment(interp,
+            self->base.dir, code_name, 0);
+    if (!code || code->base.type != PF_BYTEC_SEG) {
+        Parrot_ex_throw_from_c_args(interp, NULL, 1,
+            "Code '%s' not found for annotations segment '%s'\n",
+            code_name, self->base.name);
+    }
+    self->code = code;
+    code->annotations = self;
+    mem_sys_free(code_name);
+
+    return cursor;
+}
+
+
+/*
+
+=item C<void PackFile_Annotations_dump>
+
+Produces a dump of the annotations segment.
+
+=cut
+
+*/
+
+void
+PackFile_Annotations_dump(PARROT_INTERP, ARGIN(struct PackFile_Segment *seg))
+{
+    ASSERT_ARGS(PackFile_Annotations_dump)
+    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    INTVAL i;
+
+    default_dump_header(interp, (PackFile_Segment *)self);
+
+    /* Dump keys. */
+    Parrot_io_printf(interp, "\n  keys => [\n");
+    for (i = 0; i < self->num_keys; i++) {
+        char *key_name = string_to_cstring(interp, PF_CONST(self->code,
+               self->keys[i]->name)->u.string);
+        Parrot_io_printf(interp, "    #%d\n    [\n", i);
+        Parrot_io_printf(interp, "        NAME => %s\n", key_name);
+        Parrot_io_printf(interp, "        TYPE => %s\n",
+                self->keys[i]->type == PF_ANNOTATION_KEY_TYPE_INT ? "integer" :
+                self->keys[i]->type == PF_ANNOTATION_KEY_TYPE_STR ? "string" :
+                self->keys[i]->type == PF_ANNOTATION_KEY_TYPE_NUM ? "number" :
+                "PMC");
+        Parrot_io_printf(interp, "    ],\n");
+        string_cstring_free(key_name);
+    }
+    Parrot_io_printf(interp, "  ],\n");
+
+    /* Dump groups. */
+    Parrot_io_printf(interp, "\n  groups => [\n");
+    for (i = 0; i < self->num_groups; i++) {
+        Parrot_io_printf(interp, "    #%d\n    [\n", i);
+        Parrot_io_printf(interp, "        BYTECODE_OFFSET => %d\n",
+                self->groups[i]->bytecode_offset);
+        Parrot_io_printf(interp, "        ENTRIES_OFFSET => %d\n",
+                self->groups[i]->entries_offset);
+        Parrot_io_printf(interp, "    ],\n");
+    }
+    Parrot_io_printf(interp, "  ],\n");
+
+    /* Dump entries. */
+    Parrot_io_printf(interp, "\n  entries => [\n");
+    for (i = 0; i < self->num_entries; i++) {
+        Parrot_io_printf(interp, "    #%d\n    [\n", i);
+        Parrot_io_printf(interp, "        BYTECODE_OFFSET => %d\n",
+                self->entries[i]->bytecode_offset);
+        Parrot_io_printf(interp, "        KEY => %d\n",
+                self->entries[i]->key);
+        Parrot_io_printf(interp, "        VALUE => %d\n",
+                self->entries[i]->value);
+        Parrot_io_printf(interp, "    ],\n");
+    }
+    Parrot_io_printf(interp, "  ],\n");
+
+    Parrot_io_printf(interp, "],\n");
+}
+
+
+/*
+
+=item C<void PackFile_Annotations_add_group>
+
+Starts a new bytecode annotation group. Takes the offset in the bytecode where
+the new annotations group starts.
+
+=cut
+
+*/
+
+void
+PackFile_Annotations_add_group(PARROT_INTERP, ARGMOD(struct PackFile_Annotations *self),
+        opcode_t offset)
+{
+    ASSERT_ARGS(PackFile_Annotations_add_group)
+
+    /* Allocate extra space for the group in the groups array. */
+    if (self->groups)
+        self->groups = (PackFile_Annotations_Group **)mem_sys_realloc(self->groups, (1 + self->num_groups) *
+                sizeof(PackFile_Annotations_Group *));
+    else
+        self->groups = mem_allocate_n_typed(self->num_groups + 1, PackFile_Annotations_Group *);
+    
+    /* Store details. */
+    self->groups[self->num_groups] = mem_allocate_typed(PackFile_Annotations_Group);
+    self->groups[self->num_groups]->bytecode_offset = offset;
+    self->groups[self->num_groups]->entries_offset = self->num_entries;
+
+    /* Increment group count. */
+    self->num_groups++;
+}
+
+
+/*
+
+=item C<void PackFile_Annotations_add_entry>
+
+Adds a new bytecode annotation entry. Takes the annotations segment to add the
+entry to, the current bytecode offset (assumed to be the greatest one so far
+in the currently active group), the annotation key (as an index into the constats
+table), the annotation value type (one of PF_ANNOTATION_KEY_TYPE_INT,
+PF_ANNOTATION_KEY_TYPE_STR or PF_ANNOTATION_KEY_TYPE_NUM) and the value. The value
+will be an integer literal in the case of type being PF_ANNOTATION_KEY_TYPE_INT, or
+an index into the constants table otherwise.
+
+=cut
+
+*/
+
+void
+PackFile_Annotations_add_entry(PARROT_INTERP, ARGMOD(struct PackFile_Annotations *self),
+        opcode_t offset, opcode_t key, opcode_t type, opcode_t value)
+{
+    ASSERT_ARGS(PackFile_Annotations_add_entry)
+    INTVAL i;
+    opcode_t key_id = -1;
+
+    /* See if we already have this key. */
+    STRING *key_name = PF_CONST(self->code, key)->u.string;
+    for (i = 0; i < self->num_keys; i++) {
+        STRING *test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
+        if (string_equal(interp, test_key, key_name) == 0) {
+            key_id = i;
+            break;
+        }
+    }
+    if (key_id == -1) {
+        /* We do nee have it. Add key entry. */
+        if (self->keys)
+            self->keys = (PackFile_Annotations_Key **)mem_sys_realloc(self->keys, (1 + self->num_keys) *
+                    sizeof(PackFile_Annotations_Key *));
+        else
+            self->keys = mem_allocate_n_typed(self->num_keys + 1, PackFile_Annotations_Key *);
+        key_id = self->num_keys;
+        self->keys[key_id] = mem_allocate_typed(PackFile_Annotations_Key);
+        self->num_keys++;
+
+        /* Populate it. */
+        self->keys[key_id]->name = key;
+        self->keys[key_id]->type = type;
+    }
+    else {
+        /* Ensure key types are compatible. */
+        if (self->keys[key_id]->type != type)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+                    "Annotations with different types of value used for key '%S'\n",
+                    key_name);
+    }
+
+    /* Add annotations entry. */
+    if (self->entries)
+            self->entries = (PackFile_Annotations_Entry **)mem_sys_realloc(self->entries, (1 + self->num_entries) *
+                    sizeof(PackFile_Annotations_Entry *));
+        else
+            self->entries = mem_allocate_n_typed(self->num_entries + 1, PackFile_Annotations_Entry *);
+    self->entries[self->num_entries] = mem_allocate_typed(PackFile_Annotations_Entry);
+    self->entries[self->num_entries]->bytecode_offset = offset;
+    self->entries[self->num_entries]->key = key_id;
+    self->entries[self->num_entries]->value = value;
+    self->num_entries++;
+}
+
+
+/*
+
+=item C<static PMC * make_annotation_value_pmc>
+
+Helper for PackFile_Annotations_lookup that makes a PMC of the right type
+holding the value.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static PMC *
+make_annotation_value_pmc(PARROT_INTERP, ARGIN(struct PackFile_Annotations *self),
+        INTVAL type, opcode_t value)
+{
+    ASSERT_ARGS(make_annotation_value_pmc)
+    PMC *result;
+    switch (type) {
+        case PF_ANNOTATION_KEY_TYPE_INT:
+            result = pmc_new(interp, enum_class_Integer);
+            VTABLE_set_integer_native(interp, result, value);
+            break;
+        case PF_ANNOTATION_KEY_TYPE_NUM:
+            result = pmc_new(interp, enum_class_Float);
+            VTABLE_set_number_native(interp, result,
+                    PF_CONST(self->code, value)->u.number);
+            break;
+        default:
+            result = pmc_new(interp, enum_class_String);
+            VTABLE_set_string_native(interp, result,
+                    PF_CONST(self->code, value)->u.string);
+    }
+    return result;
+}
+
+
+/*
+
+=item C<PMC * PackFile_Annotations_lookup>
+
+Looks up the annotation(s) in force at the given bytecode offset. If just one
+particular annotation is required, it can be passed as key, and the value will
+be returned (or a NULL PMC if no annotation of that name is in force). Otherwise,
+a Hash will be returned of the all annotations. If there are none in force, an
+empty hash will be returned.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PMC *
+PackFile_Annotations_lookup(PARROT_INTERP, ARGIN(struct PackFile_Annotations *self),
+        opcode_t offset, ARGIN_NULLOK(STRING *key))
+{
+    ASSERT_ARGS(PackFile_Annotations_lookup)
+    INTVAL i;
+    INTVAL start_entry = 0;
+    PMC *  result;
+
+    /* If we have a key, look up its ID; if we don't find one. */
+    opcode_t key_id = -1;
+    if (key != NULL) {
+        for (i = 0; i < self->num_keys; i++) {
+            STRING *test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
+            if (string_equal(interp, test_key, key) == 0) {
+                key_id = i;
+                break;
+            }
+        }
+        if (key_id == -1)
+            return PMCNULL;
+    }
+
+    /* Use groups to find search start point. */
+    for (i = 0; i < self->num_groups; i++)
+        if (offset < self->groups[i]->bytecode_offset)
+            break;
+        else
+            start_entry = self->groups[i]->entries_offset;
+    
+    if (key_id == -1) {
+        /* Look through entries, storing what we find by key and tracking those
+         * that we have values for. */
+        opcode_t *latest_values = mem_allocate_n_zeroed_typed(self->num_keys, opcode_t);
+        opcode_t *have_values   = mem_allocate_n_zeroed_typed(self->num_keys, opcode_t);
+        for (i = start_entry; i < self->num_entries; i++) {
+            if (self->entries[i]->bytecode_offset >= offset)
+                break;
+            latest_values[self->entries[i]->key] = self->entries[i]->value;
+            have_values[self->entries[i]->key]   = 1;
+        }
+
+        /* Create hash of values we have. */
+        result = pmc_new(interp, enum_class_Hash);
+        for (i = 0; i < self->num_keys; i++) {
+            if (have_values[i]) {
+                STRING *key_name = PF_CONST(self->code, self->keys[i]->name)->u.string;
+                VTABLE_set_pmc_keyed_str(interp, result, key_name,
+                        make_annotation_value_pmc(interp, self, self->keys[i]->type,
+                                latest_values[i]));
+            }
+        }
+
+        mem_sys_free(latest_values);
+        mem_sys_free(have_values);
+    }
+    else {
+        /* Look for latest applicable value of the key. */
+        opcode_t latest_value = 0;
+        opcode_t found_value  = 0;
+        for (i = start_entry; i < self->num_entries; i++) {
+            if (self->entries[i]->bytecode_offset >= offset)
+                break;
+            if (self->entries[i]->key == key_id) {
+                latest_value = self->entries[i]->value;
+                found_value  = 1;
+            }
+        }
+
+        /* Did we find anything? */
+        if (!found_value)
+            result = PMCNULL;
+        else
+            result = make_annotation_value_pmc(interp, self,
+                    self->keys[key_id]->type, latest_value);
+    }
+
+    return result;
+}
+
+
 /*
 
 =item C<static PackFile * PackFile_append_pbc>

Modified: trunk/src/pbc_merge.c
==============================================================================
--- trunk/src/pbc_merge.c	(original)
+++ trunk/src/pbc_merge.c	Tue Jan  6 21:35:06 2009
@@ -593,8 +593,8 @@
     int i, j;
     PackFile_Debug *debug_seg;
     opcode_t *lines                  = mem_allocate_typed(opcode_t);
-    PackFile_DebugMapping **mappings =
-        mem_allocate_typed(PackFile_DebugMapping *);
+    PackFile_DebugFilenameMapping **mappings =
+        mem_allocate_typed(PackFile_DebugFilenameMapping *);
     opcode_t num_mappings = 0;
     opcode_t num_lines    = 0;
 
@@ -615,16 +615,15 @@
             in_seg->base.size * sizeof (opcode_t));
 
         /* Concatenate mappings. */
-        mappings = (PackFile_DebugMapping **)mem_sys_realloc(mappings,
+        mappings = (PackFile_DebugFilenameMapping **)mem_sys_realloc(mappings,
                    (num_mappings + in_seg->num_mappings) *
                    sizeof (Parrot_Pointer));
         for (j = 0; j < in_seg->num_mappings; j++) {
-            PackFile_DebugMapping *mapping = mem_allocate_typed(
-                PackFile_DebugMapping);
+            PackFile_DebugFilenameMapping *mapping = mem_allocate_typed(
+                PackFile_DebugFilenameMapping);
             STRUCT_COPY(mapping, in_seg->mappings[j]);
             mapping->offset += num_lines;
-            if (mapping->mapping_type == PF_DEBUGMAPPINGTYPE_FILENAME)
-                mapping->u.filename += inputs[i]->const_start;
+            mapping->filename += inputs[i]->const_start;
             mappings[num_mappings + j] = mapping;
         }
 

Modified: trunk/src/pmc/exception.pmc
==============================================================================
--- trunk/src/pmc/exception.pmc	(original)
+++ trunk/src/pmc/exception.pmc	Tue Jan  6 21:35:06 2009
@@ -695,6 +695,40 @@
         return shared_self;
     }
 
+
+/*
+
+=item C<PMC *annotations>
+
+Gets any bytecode annotations in force at the point where the exception was
+thrown. If the optional name of an annotation is specified, gets just that
+annotation. If not, returns a Hash of all of them.
+
+=cut
+
+*/
+
+    METHOD PMC *annotations(STRING *name :optional, INTVAL have_name :opt_flag) {
+        PMC *resume;
+        PMC *result = PMCNULL;
+
+        /* Get resume continuation, to find location we failed at. */
+        GET_ATTR_resume(interp, SELF, resume);
+        if (!PMC_IS_NULL(resume)) {
+            Parrot_cont *cont = PMC_cont(resume);
+            if (cont->seg != NULL && cont->seg->annotations != NULL)
+                result = PackFile_Annotations_lookup(interp, cont->seg->annotations,
+                        cont->address - cont->seg->base.data, name);
+        }
+
+        /* If we didn't have a key specified and we found no annotations to
+         * return, should return an empty hash. */
+        if (!have_name && PMC_IS_NULL(result))
+            result = pmc_new(interp, enum_class_Hash);
+
+        RETURN(PMC *result);
+    }
+
 /*
 
 =back

Added: trunk/t/op/annotate.t
==============================================================================
--- (empty file)
+++ trunk/t/op/annotate.t	Tue Jan  6 21:35:06 2009
@@ -0,0 +1,79 @@
+#! parrot
+# Copyright (C) 2009, The Perl Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/annotate.t - Test .annotate directive
+
+=head1 SYNOPSIS
+
+    % prove t/op/annotate.t
+
+=head1 DESCRIPTION
+
+Test various use cases of the annotate directive.
+
+=cut
+
+.sub main :main
+    .include 'include/test_more.pir'
+
+    plan(9)
+
+    'no_annotations'()
+    'annotations_exception'()
+.end
+
+
+.sub 'no_annotations'
+    push_eh failed
+    die "OH NOES!"
+
+  failed:
+    .local pmc exception
+    .get_results (exception)
+    $P0 = exception.'annotations'()
+    isa_ok ($P0, 'Hash', 'annotations gives back hash')
+    $I0 = elements $P0
+    is ($I0, 0, 'annotations hash empty when none in effect')
+    $P0 = exception.'annotations'('line')
+    $I0 = isnull $P0
+    ok ($I0, 'get null PMC when no annotation in effect')
+.end
+
+
+.sub 'annotations_exception'
+    .annotate "file", "foo.p6"
+    .annotate "line", 1
+    push_eh failed
+    .annotate "line", 2
+    $S0 = "OMGWTFBBQ"
+    die $S0
+    .annotate "line", 3
+
+  failed:
+    .local pmc exception
+    .get_results (exception)
+
+    $P0 = exception.'annotations'('file')
+    is ($P0, 'foo.p6', "file annotation got OK")
+    $P0 = exception.'annotations'('line')
+    is ($P0, 2, "line annotation got OK")
+
+    $P0 = exception.'annotations'()
+    isa_ok ($P0, 'Hash', 'annotations gives back hash')
+    $I0 = elements $P0
+    is ($I0, 2, 'annotations hash is right size')
+    $P1 = $P0["file"]
+    is ($P1, 'foo.p6', "file annotation got OK from hash")
+    $P1 = $P0["line"]
+    is ($P1, 2, "line annotation got OK from hash")
+.end
+
+
+# Local Variables:
+#   mode: pir 
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About