Correctly handle NOT operator in window style definitions.
Modified: trunk/reactos/tools/wrc/parser.y
Modified: trunk/reactos/tools/wrc/y.tab.c
Modified: trunk/reactos/tools/wrc/y.tab.h

Modified: trunk/reactos/tools/wrc/parser.y
--- trunk/reactos/tools/wrc/parser.y	2005-06-04 19:21:15 UTC (rev 15787)
+++ trunk/reactos/tools/wrc/parser.y	2005-06-04 19:44:50 UTC (rev 15788)
@@ -345,7 +345,7 @@
 %type <lan>	opt_language
 %type <chars>	opt_characts
 %type <ver>	opt_version
-%type <num>	expr xpr
+%type <num>	expr xpr xpr_no_not
 %type <iptr>	e_expr
 %type <tlbar>	toolbar
 %type <tlbarItems>	toolbar_items
@@ -1002,8 +1002,8 @@
 style
 	: style '|' style	{ $$ = new_style($1->or_mask | $3->or_mask, $1->and_mask | $3->and_mask); free($1); free($3);}
 	| '(' style ')'		{ $$ = $2; }
-        | xpr       		{ $$ = new_style($1, 0); }
-        | tNOT xpr		{ $$ = new_style(0, $2); }
+        | xpr_no_not    	{ $$ = new_style($1, 0); }
+        | tNOT xpr_no_not	{ $$ = new_style(0, $2); }
         ;
 
 ctlclass
@@ -1823,18 +1823,22 @@
 expr	: xpr	{ $$ = ($1); }
 	;
 
-xpr	: xpr '+' xpr	{ $$ = ($1) + ($3); }
-	| xpr '-' xpr	{ $$ = ($1) - ($3); }
-	| xpr '|' xpr	{ $$ = ($1) | ($3); }
-	| xpr '&' xpr	{ $$ = ($1) & ($3); }
-	| xpr '*' xpr	{ $$ = ($1) * ($3); }
-	| xpr '/' xpr	{ $$ = ($1) / ($3); }
-	| xpr '^' xpr	{ $$ = ($1) ^ ($3); }
-	| '~' xpr	{ $$ = ~($2); }
-	| '-' xpr %prec pUPM	{ $$ = -($2); }
-	| '+' xpr %prec pUPM	{ $$ = $2; }
-	| '(' xpr ')'	{ $$ = $2; }
-	| any_num	{ $$ = $1; }
+xpr_no_not	: xpr '+' xpr	{ $$ = ($1) + ($3); }
+		| xpr '-' xpr	{ $$ = ($1) - ($3); }
+		| xpr '|' xpr	{ $$ = ($1) | ($3); }
+		| xpr '&' xpr	{ $$ = ($1) & ($3); }
+		| xpr '*' xpr	{ $$ = ($1) * ($3); }
+		| xpr '/' xpr	{ $$ = ($1) / ($3); }
+		| xpr '^' xpr	{ $$ = ($1) ^ ($3); }
+		| '~' xpr	{ $$ = ~($2); }
+		| '-' xpr %prec pUPM	{ $$ = -($2); }
+		| '+' xpr %prec pUPM	{ $$ = $2; }
+		| '(' xpr ')'	{ $$ = $2; }
+		| any_num	{ $$ = $1; }
+		;
+
+
+xpr	: xpr_no_not	{ $$ = ($1); }
 	| tNOT any_num	{ $$ = ~($2); }
 	;
 

Modified: trunk/reactos/tools/wrc/y.tab.c
--- trunk/reactos/tools/wrc/y.tab.c	2005-06-04 19:21:15 UTC (rev 15787)
+++ trunk/reactos/tools/wrc/y.tab.c	2005-06-04 19:44:50 UTC (rev 15788)
@@ -1,7 +1,7 @@
-/* A Bison parser, made by GNU Bison 1.875b.  */
+/* A Bison parser, made by GNU Bison 1.875.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -523,7 +523,7 @@
 	ani_any_t	*ani;
 } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 527 "y.tab.c"
+#line 526 "y.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -535,7 +535,7 @@
 
 
 /* Line 214 of yacc.c.  */
-#line 539 "y.tab.c"
+#line 538 "y.tab.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -634,16 +634,16 @@
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   669
+#define YYLAST   738
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  96
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  82
+#define YYNNTS  83
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  256
+#define YYNRULES  257
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  570
+#define YYNSTATES  571
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -721,7 +721,7 @@
      876,   879,   884,   887,   890,   895,   897,   899,   902,   904,
      907,   909,   913,   917,   922,   926,   931,   935,   937,   939,
      940,   942,   944,   948,   952,   956,   960,   964,   968,   972,
-     975,   978,   981,   985,   987,   990,   992
+     975,   978,   981,   985,   987,   989,   992,   994
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -821,12 +821,12 @@
      154,     9,    -1,   172,   154,     4,    -1,   172,   154,    87,
        4,    -1,   172,   154,     5,    -1,   172,   154,    87,     5,
       -1,   172,   154,     6,    -1,   105,    -1,   171,    -1,    -1,
-     175,    -1,   176,    -1,   176,    86,   176,    -1,   176,    87,
-     176,    -1,   176,    83,   176,    -1,   176,    85,   176,    -1,
-     176,    88,   176,    -1,   176,    89,   176,    -1,   176,    84,
-     176,    -1,    90,   176,    -1,    87,   176,    -1,    86,   176,
-      -1,    94,   176,    95,    -1,   177,    -1,    91,   177,    -1,
-       4,    -1,     5,    -1
+     175,    -1,   177,    -1,   177,    86,   177,    -1,   177,    87,
+     177,    -1,   177,    83,   177,    -1,   177,    85,   177,    -1,
+     177,    88,   177,    -1,   177,    89,   177,    -1,   177,    84,
+     177,    -1,    90,   177,    -1,    87,   177,    -1,    86,   177,
+      -1,    94,   177,    95,    -1,   178,    -1,   176,    -1,    91,
+     178,    -1,     4,    -1,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -857,7 +857,7 @@
     1747,  1765,  1772,  1776,  1780,  1795,  1796,  1797,  1798,  1799,
     1800,  1801,  1802,  1803,  1804,  1805,  1806,  1810,  1811,  1818,
     1819,  1823,  1826,  1827,  1828,  1829,  1830,  1831,  1832,  1833,
-    1834,  1835,  1836,  1837,  1838,  1841,  1842
+    1834,  1835,  1836,  1837,  1841,  1842,  1845,  1846
 };
 #endif
 
@@ -897,7 +897,8 @@
   "ver_block", "ver_values", "ver_value", "ver_words", "toolbar", 
   "toolbar_items", "loadmemopts", "lamo", "lama", "opt_lvc", 
   "opt_language", "opt_characts", "opt_version", "raw_data", 
-  "raw_elements", "file_raw", "e_expr", "expr", "xpr", "any_num", 0
+  "raw_elements", "file_raw", "e_expr", "expr", "xpr_no_not", "xpr", 
+  "any_num", 0
 };
 #endif
 
@@ -947,7 +948,7 @@
      167,   168,   169,   170,   171,   172,   172,   172,   172,   172,
      172,   172,   172,   172,   172,   172,   172,   173,   173,   174,
      174,   175,   176,   176,   176,   176,   176,   176,   176,   176,
-     176,   176,   176,   176,   176,   177,   177
+     176,   176,   176,   176,   177,   177,   178,   178
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -978,7 +979,7 @@
        2,     4,     2,     2,     4,     1,     1,     2,     1,     2,
        1,     3,     3,     4,     3,     4,     3,     1,     1,     0,
        1,     1,     3,     3,     3,     3,     3,     3,     3,     2,
-       2,     2,     3,     1,     2,     1,     1
+       2,     2,     3,     1,     1,     2,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -986,302 +987,318 @@
    means the default is an error.  */
 static const unsigned short yydefact[] =
 {
-       3,     0,     2,     1,     5,   255,   256,    11,   207,     9,
-       0,     0,     0,     0,     0,     4,     8,     0,    11,   241,
-     253,     0,   217,     0,   251,   250,   249,   254,     0,   180,
-       0,     0,     0,     0,     0,     0,     0,     0,    44,    45,
-     207,   207,   207,   207,   207,   207,   207,   207,   207,   207,
-     207,   207,   207,   207,   207,     7,    17,    18,    24,    22,
-      23,    27,    28,    21,    30,   207,    16,    19,    20,    25,
-      26,    31,    29,   213,   216,   212,   214,   210,   215,   211,
-     208,   209,   179,     0,   252,     0,     6,   244,   248,   245,
-     242,   243,   246,   247,   217,   217,   217,     0,     0,   217,
-     217,   217,   217,   185,   217,   217,   217,     0,   217,   217,
-       0,     0,     0,   218,   219,   220,     0,   178,   182,     0,
-      34,    33,    32,   237,     0,   238,    35,    36,     0,     0,
-       0,     0,    40,    41,     0,    38,    39,    37,     0,    42,
-      43,   222,   223,     0,    10,   183,     0,    47,     0,     0,
-       0,   152,   150,   165,   163,     0,     0,     0,     0,     0,
-       0,     0,   193,     0,     0,   181,     0,   226,   228,   230,
-     225,     0,   182,     0,     0,     0,     0,     0,     0,   189,
-     190,   191,   188,   192,     0,   217,   221,     0,    46,     0,
-     227,   229,   224,     0,     0,     0,     0,     0,   151,     0,
-       0,   164,     0,     0,     0,   184,   194,     0,     0,     0,
-     232,   234,   236,   231,     0,     0,     0,   182,   154,   182,
-     169,   167,   173,     0,     0,     0,   204,    50,    50,   233,
-     235,     0,     0,     0,     0,     0,   239,   166,   239,     0,
-       0,     0,   196,     0,     0,    48,    49,    61,   145,   182,
-     155,   182,   182,   182,   182,   182,   182,     0,   170,     0,
-     174,   168,     0,     0,     0,   206,     0,   203,    56,    55,
-      57,    58,    59,    54,    51,    52,     0,     0,   109,   153,
-     158,   157,   160,   161,   162,   159,   239,   239,     0,     0,
-       0,   195,   198,   197,   205,     0,     0,     0,     0,     0,
-       0,     0,    71,    65,    68,    69,    70,   146,     0,   182,
-     240,     0,   175,   186,   187,     0,    53,    13,    67,    12,
-       0,    15,    14,    66,    64,     0,     0,    63,   104,    62,
-       0,     0,     0,     0,     0,     0,     0,   120,   113,   114,
-     117,   118,   119,   183,   171,   239,     0,     0,   105,   253,
+       3,     0,     2,     1,     5,   256,   257,    11,   207,     9,
+       0,     0,     0,     0,     0,     4,     8,     0,    11,   254,
+     241,   253,     0,   217,     0,   251,   250,   249,   255,     0,
+     180,     0,     0,     0,     0,     0,     0,     0,     0,    44,
+      45,   207,   207,   207,   207,   207,   207,   207,   207,   207,
+     207,   207,   207,   207,   207,   207,     7,    17,    18,    24,
+      22,    23,    27,    28,    21,    30,   207,    16,    19,    20,
+      25,    26,    31,    29,   213,   216,   212,   214,   210,   215,
+     211,   208,   209,   179,     0,   252,     0,     6,   244,   248,
+     245,   242,   243,   246,   247,   217,   217,   217,     0,     0,
+     217,   217,   217,   217,   185,   217,   217,   217,     0,   217,
+     217,     0,     0,     0,   218,   219,   220,     0,   178,   182,
+       0,    34,    33,    32,   237,     0,   238,    35,    36,     0,
+       0,     0,     0,    40,    41,     0,    38,    39,    37,     0,
+      42,    43,   222,   223,     0,    10,   183,     0,    47,     0,
+       0,     0,   152,   150,   165,   163,     0,     0,     0,     0,
+       0,     0,     0,   193,     0,     0,   181,     0,   226,   228,
+     230,   225,     0,   182,     0,     0,     0,     0,     0,     0,
+     189,   190,   191,   188,   192,     0,   217,   221,     0,    46,
+       0,   227,   229,   224,     0,     0,     0,     0,     0,   151,
+       0,     0,   164,     0,     0,     0,   184,   194,     0,     0,
+       0,   232,   234,   236,   231,     0,     0,     0,   182,   154,
+     182,   169,   167,   173,     0,     0,     0,   204,    50,    50,
+     233,   235,     0,     0,     0,     0,     0,   239,   166,   239,
+       0,     0,     0,   196,     0,     0,    48,    49,    61,   145,
+     182,   155,   182,   182,   182,   182,   182,   182,     0,   170,
+       0,   174,   168,     0,     0,     0,   206,     0,   203,    56,
+      55,    57,    58,    59,    54,    51,    52,     0,     0,   109,
+     153,   158,   157,   160,   161,   162,   159,   239,   239,     0,
+       0,     0,   195,   198,   197,   205,     0,     0,     0,     0,
+       0,     0,     0,    71,    65,    68,    69,    70,   146,     0,
+     182,   240,     0,   175,   186,   187,     0,    53,    13,    67,
+      12,     0,    15,    14,    66,    64,     0,     0,    63,   104,
+       0,    62,     0,     0,     0,     0,     0,     0,     0,   120,
+     113,   114,   117,   118,   119,   183,   171,   239,     0,     0,
+     105,   253,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    60,   116,     0,   115,   112,   111,   110,     0,
+     172,     0,   176,   199,   200,   201,    98,   103,   102,   182,
+     182,    82,    84,    85,    77,    78,    80,    81,    83,    79,
+      75,     0,    74,    76,   182,    72,    73,    88,    87,    86,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    60,   116,     0,   115,   112,   111,   110,     0,   172,
-       0,   176,   199,   200,   201,    98,   103,   102,   182,   182,
-      82,    84,    85,    77,    78,    80,    81,    83,    79,    75,
-       0,    74,    76,   182,    72,    73,    88,    87,    86,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   108,
+       0,     0,     0,     0,     0,     0,    98,   182,   182,   131,
+     133,   134,   126,   127,   129,   130,   132,   128,   124,     0,
+     123,   125,   182,   121,   122,   137,   136,   135,   177,   202,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   108,     0,
-       0,     0,     0,     0,     0,    98,   182,   182,   131,   133,
-     134,   126,   127,   129,   130,   132,   128,   124,     0,   123,
-     125,   182,   121,   122,   137,   136,   135,   177,   202,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     107,     0,   106,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   148,     0,     0,     0,     0,    92,     0,     0,
-       0,     0,   147,     0,     0,     0,     0,     0,    89,     0,
-       0,     0,   149,    92,     0,     0,     0,     0,     0,    99,
-       0,   138,     0,     0,     0,     0,     0,     0,    91,     0,
-       0,    99,     0,    93,    99,   100,     0,     0,   145,     0,
-       0,    90,     0,     0,    99,   143,     0,    94,   101,     0,
-     145,   142,   144,     0,     0,     0,   143,     0,    95,    97,
-     141,     0,     0,   143,    96,     0,   140,   145,   143,   139
+       0,   107,     0,   106,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   148,     0,     0,     0,     0,    92,     0,
+       0,     0,     0,   147,     0,     0,     0,     0,     0,    89,
+       0,     0,     0,   149,    92,     0,     0,     0,     0,     0,
+      99,     0,   138,     0,     0,     0,     0,     0,     0,    91,
+       0,     0,    99,     0,    93,    99,   100,     0,     0,   145,
+       0,     0,    90,     0,     0,    99,   143,     0,    94,   101,
+       0,   145,   142,   144,     0,     0,     0,   143,     0,    95,
+      97,   141,     0,     0,   143,    96,     0,   140,   145,   143,
+     139
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short yydefgoto[] =
 {
-      -1,     1,     2,    15,    23,    21,   322,   323,    55,   123,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,   166,   245,   274,   275,    67,   276,   330,   390,   399,
-     508,   404,   303,   528,   327,   481,    68,   308,   378,   452,
-     438,   447,   551,   278,   339,   502,    69,   152,   175,   234,
-      70,   154,   176,   237,   239,    16,    17,    85,   235,    71,
-     134,   184,   206,   264,   293,   383,    72,   243,    22,    80,
-      81,   124,   113,   114,   115,   125,   172,   126,   257,   319,
-      19,    20
+      -1,     1,     2,    15,    24,    22,   323,   324,    56,   124,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,   167,   246,   275,   276,    68,   277,   332,   391,   400,
+     509,   405,   304,   529,   328,   482,    69,   309,   379,   453,
+     439,   448,   552,   279,   341,   503,    70,   153,   176,   235,
+      71,   155,   177,   238,   240,    16,    17,    86,   236,    72,
+     135,   185,   207,   265,   294,   384,    73,   244,    23,    81,
+      82,   125,   114,   115,   116,   126,   173,   127,   258,   320,
+      19,    20,    21
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -399
+#define YYPACT_NINF -487
 static const short yypact[] =
 {
-    -399,    11,    13,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-     207,   207,   207,    37,   207,  -399,  -399,   -66,  -399,   351,
-    -399,   363,   612,   207,  -399,  -399,  -399,  -399,   564,  -399,
-     363,   207,   207,   207,   207,   207,   207,   207,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,   361,   -46,  -399,   108,  -399,   445,   469,   311,
-      49,    49,  -399,  -399,   612,   282,   282,    33,    33,   612,
-     612,   282,   282,   612,   282,   282,   282,    33,   282,   282,
-     207,   207,   207,  -399,  -399,  -399,   207,  -399,   -15,    38,
-    -399,  -399,  -399,  -399,   182,  -399,  -399,  -399,     1,    28,
-     236,   243,  -399,  -399,   448,  -399,  -399,  -399,    42,  -399,
-    -399,  -399,  -399,    51,  -399,  -399,    75,  -399,    58,   207,
-     207,  -399,  -399,  -399,  -399,   207,   207,   207,   207,   207,
-     207,   207,  -399,   207,   207,  -399,    87,  -399,  -399,  -399,
-    -399,   138,   -21,    70,    74,   -62,    41,    98,   103,  -399,
-    -399,  -399,  -399,  -399,    30,  -399,  -399,   115,  -399,   117,
-    -399,  -399,  -399,    64,   207,   207,    -1,   209,  -399,     0,
-     213,  -399,   207,   207,   222,  -399,  -399,   268,   207,   207,
-    -399,  -399,  -399,  -399,   167,   123,   142,   -15,  -399,   -57,
-     144,  -399,   151,   159,   168,   100,  -399,   170,   170,  -399,
-    -399,   207,   207,   207,   194,   178,   207,  -399,   207,   200,
-     207,   207,  -399,    60,   500,  -399,  -399,  -399,   190,   276,
-    -399,   398,   398,   398,   398,   398,   398,   198,   217,   224,
-     217,  -399,   231,   234,   -33,  -399,   207,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,   249,  -399,   332,   207,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,   207,   207,   207,   207,
-     296,  -399,  -399,  -399,  -399,   500,   127,   207,    39,   305,
-     228,   228,  -399,  -399,  -399,  -399,  -399,  -399,   343,   419,
-    -399,   256,   217,  -399,  -399,   259,  -399,  -399,  -399,  -399,
-     261,  -399,  -399,  -399,  -399,   207,   228,   246,   351,   246,
-     563,   127,   207,    39,   354,   228,   228,  -399,  -399,  -399,
-    -399,  -399,  -399,   207,  -399,   207,   179,   360,   445,  -399,
-      93,   564,   228,    39,   362,   362,   362,   362,   362,   362,
-     362,   362,   362,   207,   207,   207,    39,   207,   362,   362,
-     362,  -399,  -399,   266,  -399,  -399,   246,   246,   581,  -399,
-     278,   217,  -399,   290,  -399,  -399,  -399,  -399,   -15,   -15,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-     294,  -399,  -399,   -15,  -399,  -399,  -399,  -399,  -399,   382,
-      39,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     207,   207,   207,    39,   207,   383,   383,   383,  -399,   207,
-     207,   207,   207,   207,   207,   317,   -15,   -15,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   321,  -399,
-    -399,   -15,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   322,
-     333,   349,   350,   207,   207,   207,   207,   207,   207,   207,
-     207,   218,   377,   387,   396,   397,   399,   402,   403,   404,
-    -399,   405,  -399,   207,   207,   207,   207,   218,   207,   207,
-     207,   228,   411,   413,   417,   432,   446,   447,   449,   455,
-     165,   207,  -399,   207,   207,   207,   228,   207,  -399,   207,
-     207,   207,  -399,   447,   456,   459,   166,   468,   478,   479,
-     480,  -399,   207,   207,   207,   207,   207,   228,  -399,   207,
-     482,   479,   486,   487,   479,   174,   488,   207,   190,   207,
-     228,  -399,   228,   207,   479,   353,   490,   188,   246,   491,
-     190,  -399,  -399,   207,   228,   207,   353,   538,   246,   539,
-    -399,   207,   228,    86,   246,   228,  -399,   189,   353,  -399
+    -487,     6,    43,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+      30,    30,    30,   215,    30,  -487,  -487,   -60,  -487,  -487,
+     636,  -487,   434,   675,    30,  -487,  -487,  -487,  -487,   623,
+    -487,   434,    30,    30,    30,    30,    30,    30,    30,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+    -487,  -487,  -487,   310,   -62,  -487,   131,  -487,   563,   195,
+     232,   213,   213,  -487,  -487,   675,   533,   533,    87,    87,
+     675,   675,   533,   533,   675,   533,   533,   533,    87,   533,
+     533,    30,    30,    30,  -487,  -487,  -487,    30,  -487,   -48,
+     136,  -487,  -487,  -487,  -487,   163,  -487,  -487,  -487,   -44,
+     -25,   199,   231,  -487,  -487,   410,  -487,  -487,  -487,    -3,
+    -487,  -487,  -487,  -487,     5,  -487,  -487,    67,  -487,    21,
+      30,    30,  -487,  -487,  -487,  -487,    30,    30,    30,    30,
+      30,    30,    30,  -487,    30,    30,  -487,    89,  -487,  -487,
+    -487,  -487,   334,   -19,    26,    32,   259,   284,    34,    38,
+    -487,  -487,  -487,  -487,  -487,   -24,  -487,  -487,    57,  -487,
+      68,  -487,  -487,  -487,    60,    30,    30,    -4,   161,  -487,
+       3,   176,  -487,    30,    30,   191,  -487,  -487,   308,    30,
+      30,  -487,  -487,  -487,  -487,   356,   113,   116,   -48,  -487,
+     -70,   118,  -487,   135,   140,   143,   144,  -487,   145,   145,
+    -487,  -487,    30,    30,    30,   168,   278,    30,  -487,    30,
+     173,    30,    30,  -487,    47,   512,  -487,  -487,  -487,   167,
+     171,  -487,    71,    71,    71,    71,    71,    71,   185,   200,
+     210,   200,  -487,   217,   220,   -29,  -487,    30,  -487,  -487,
+    -487,  -487,  -487,  -487,  -487,   243,  -487,   354,    30,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,    30,    30,    30,
+      30,   251,  -487,  -487,  -487,  -487,   512,   164,    30,   293,
+     318,   312,   312,  -487,  -487,  -487,  -487,  -487,  -487,   514,
+     254,  -487,   261,   200,  -487,  -487,   274,  -487,  -487,  -487,
+    -487,   283,  -487,  -487,  -487,  -487,    30,   312,   294,   649,
+     636,   294,   572,   164,    30,   293,   338,   312,   312,  -487,
+    -487,  -487,  -487,  -487,  -487,    30,  -487,    30,   262,   372,
+     649,  -487,    17,   312,   293,   375,   375,   375,   375,   375,
+     375,   375,   375,   375,    30,    30,    30,   293,    30,   375,
+     375,   375,  -487,  -487,   289,  -487,  -487,   294,   294,   590,
+    -487,   292,   200,  -487,   298,  -487,  -487,  -487,  -487,   -48,
+     -48,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+    -487,   299,  -487,  -487,   -48,  -487,  -487,  -487,  -487,  -487,
+     380,   293,   389,   389,   389,   389,   389,   389,   389,   389,
+     389,    30,    30,    30,   293,    30,   389,   389,   389,  -487,
+      30,    30,    30,    30,    30,    30,   307,   -48,   -48,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,   316,
+    -487,  -487,   -48,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+     317,   329,   332,   333,    30,    30,    30,    30,    30,    30,
+      30,    30,   303,   342,   347,   349,   350,   361,   365,   366,
+     367,  -487,   368,  -487,    30,    30,    30,    30,   303,    30,
+      30,    30,   312,   378,   379,   381,   398,   399,   400,   401,
+     402,   -72,    30,  -487,    30,    30,    30,   312,    30,  -487,
+      30,    30,    30,  -487,   400,   404,   405,   -16,   406,   408,
+     412,   414,  -487,    30,    30,    30,    30,    30,   312,  -487,
+      30,   420,   412,   421,   422,   412,    39,   424,    30,   167,
+      30,   312,  -487,   312,    30,   412,   344,   425,   112,   294,
+     426,   167,  -487,  -487,    30,   312,    30,   344,   427,   294,
+     433,  -487,    30,   312,    25,   294,   312,  -487,   121,   344,
+    -487
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-    -399,  -399,  -399,  -399,  -399,   426,  -292,  -163,   508,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,   248,  -399,   335,  -399,  -399,  -399,   208,    44,
-     121,  -399,   346,  -291,  -286,   153,  -399,  -399,  -399,  -399,
-     210,    53,  -381,  -398,  -399,  -399,  -399,   421,  -399,  -227,
-    -399,   418,  -399,  -399,  -399,  -399,  -399,  -399,  -111,  -399,
-    -399,  -399,   392,  -399,  -399,  -399,  -399,  -399,   406,  -399,
-    -399,   -20,  -273,  -211,  -148,  -359,  -399,   537,  -228,    -2,
-      20,   -12
+    -487,  -487,  -487,  -487,  -487,   383,  -278,  -182,   374,  -487,
+    -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,  -487,
+    -487,  -487,   182,  -487,   100,  -487,  -487,  -487,   304,   -95,
+     -87,  -487,   218,  -431,  -251,   -15,  -487,  -487,  -487,  -487,
+     263,    14,  -486,  -469,  -487,  -487,  -487,   295,  -487,   -66,
+    -487,   291,  -487,  -487,  -487,  -487,  -487,  -487,  -115,  -487,
+    -487,  -487,   268,  -487,  -487,  -487,  -487,  -487,   591,  -487,
+    -487,   -20,  -253,  -249,  -248,  -354,  -487,   595,  -234,    -2,
+    -294,     4,   -12
 };
 
 /* 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 -241
+#define YYTABLE_NINF -255
 static const short yytable[] =
 {
-      18,    27,    82,   304,   318,   217,   220,   146,   204,   290,
-     259,     3,   196,   197,    29,   329,     4,     5,     6,   198,
-       7,    83,   279,  -156,   280,   281,   282,   283,   284,   285,
-      24,    25,    26,     8,    28,   340,   145,     5,     6,   372,
-     350,     5,     6,     5,     6,   321,   317,   116,   291,   376,
-     377,    87,    88,    89,    90,    91,    92,    93,   309,   311,
-     192,   193,   167,   168,   169,   305,   387,   170,   210,   211,
-     212,   204,   145,   213,   119,   218,   221,     9,   145,   130,
-     131,   165,   344,   118,    73,    74,    75,    76,    77,    78,
-      79,     5,     6,   187,   149,   128,   129,   341,   110,    10,
-      11,   111,   112,    12,    13,   138,   233,    14,   141,   142,
-     143,   205,     5,     6,   144,   199,   200,   380,   147,    10,
-      11,   150,   201,    12,    13,    10,    11,    14,   306,    12,
-      13,     5,     6,    14,   317,   163,   265,    36,    37,   266,
-     545,   267,   190,   191,   164,   171,  -217,   173,   174,  -217,
-    -217,   214,   556,   177,   178,   179,   180,   181,   182,   183,
-     342,   185,   186,   194,   189,   207,  -217,   195,   188,   568,
-     374,   229,   230,    10,    11,   560,   352,    12,    13,   565,
-     242,    14,   566,     5,     6,   382,   552,   569,   386,   117,
-     388,   202,   215,   216,    10,    11,   203,   552,    12,    13,
-     223,   224,    14,   403,   552,   500,   227,   228,   208,   552,
-     209,     5,     6,    10,    11,   219,   231,    12,    13,   222,
-     516,    14,     5,     6,   480,   251,   252,   253,   225,   247,
-     248,   249,     5,     6,   258,   232,   260,   236,   262,   263,
-     538,   535,   110,   541,   238,   111,   112,   436,   352,   352,
-     254,   255,   240,   550,   547,   256,   548,   352,   511,   524,
-     451,   241,   148,   244,   294,    10,    11,   542,   558,    12,
-      13,   352,   352,    14,   151,   307,   564,   431,   432,   567,
-     153,   554,   277,   277,   310,   312,   313,   314,   120,   121,
-     122,   286,   434,    10,    11,   320,   110,    12,    13,   111,
-     112,    14,   315,   110,    10,    11,   111,   112,    12,    13,
-    -240,   324,    14,   349,    10,    11,   151,   287,    12,   325,
-     328,   328,   326,   153,   288,   464,   465,   289,   110,   352,
-     373,   111,   112,    73,    74,    75,    76,    77,    78,    79,
-     467,   379,   295,   381,   384,   348,   351,   296,   226,   345,
-    -156,  -156,   346,   297,   347,   328,   328,  -156,   331,   409,
-     375,   400,   400,   400,   332,   400,   385,    38,   389,   145,
-      39,   429,   328,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,   430,    50,    51,    52,   433,   435,   437,
-     298,   299,   110,   300,   301,   111,   112,    34,    35,    36,
-      37,   333,   334,   110,   335,   336,   111,   112,   401,   402,
-     463,   405,   302,  -217,   466,   468,  -217,  -217,   448,   448,
-     448,   110,   448,   337,   111,   112,   469,   457,   458,   459,
-     460,   461,   462,  -217,    31,    32,    33,    34,    35,    36,
-      37,    53,   470,   471,    30,    54,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   472,   473,   474,   475,   476,   477,   478,   479,   482,
-     483,   109,  -156,  -156,   449,   450,   246,   453,  -156,  -156,
-     484,   492,   493,   494,   495,   482,   497,   498,   499,   485,
-     486,   145,   487,  -156,  -156,   488,   489,   490,   491,   512,
-    -156,   513,   514,   515,   501,   517,   503,   518,   519,   520,
-     504,   328,   343,   155,   156,   157,   158,   159,   160,   161,
-     530,   531,   532,   533,   534,   505,   328,   536,   162,    32,
-      33,    34,    35,    36,    37,   544,   268,   546,    86,   506,
-     507,   549,   509,   269,   270,   271,   272,   328,   510,   522,
-     273,   557,   523,   559,    33,    34,    35,    36,    37,   563,
-     328,   525,   328,   391,   392,   393,   394,   395,   396,   397,
-     398,   526,   527,   529,   328,   537,   406,   407,   408,   539,
-     540,   543,   328,   553,   555,   328,   353,   354,   355,   356,
-     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
-     367,   368,   369,   370,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
-     426,   427,   439,   440,   441,   442,   443,   444,   445,   446,
-     316,   561,   562,   127,   521,   454,   455,   456,   132,   133,
-     496,   135,   136,   137,   371,   139,   140,    31,    32,    33,
-      34,    35,    36,    37,   338,   250,   292,   261,     0,    84,
-       0,     0,   428,    73,    74,    75,    76,    77,    78,    79
+      18,    28,   218,    83,   147,   260,     3,   329,   329,   221,
+    -156,   353,   205,   291,    25,    26,    27,   205,    29,   319,
+      30,   512,    84,   146,   305,   168,   169,   170,   306,   307,
+     171,   117,   350,   329,     5,     6,    88,    89,    90,    91,
+      92,    93,    94,   329,   329,   146,     4,     5,     6,   150,
+       7,   331,   292,   310,   312,   373,   342,   206,   194,   329,
+     343,   344,   193,     8,   211,   212,   213,   353,   151,   214,
+     546,   561,   219,   166,   146,   120,   352,   525,   567,   222,
+     131,   132,   557,   570,   119,  -217,   377,   378,  -217,  -217,
+     164,     5,     6,     5,     6,   188,   129,   130,   165,   569,
+     353,   539,   388,   234,   542,  -217,   139,     9,   172,   142,
+     143,   144,   387,   381,   551,   145,    10,    11,   566,   195,
+      12,    13,   353,   266,    14,   196,   267,   203,   268,    10,
+      11,   204,   543,    12,    13,     5,     6,    14,    74,    75,
+      76,    77,    78,    79,    80,  -156,  -156,   215,   174,   175,
+     209,  -156,  -156,   375,   178,   179,   180,   181,   182,   183,
+     184,   210,   186,   187,   146,   190,   208,   220,     5,     6,
+     189,   318,   389,    10,    11,    10,    11,    12,    13,    12,
+      13,    14,   223,    14,   280,   404,   281,   282,   283,   284,
+     285,   286,   553,   216,   217,   353,   111,   226,   329,   112,
+     113,   224,   225,   553,   353,   555,   232,   228,   229,   233,
+     553,   237,   118,   329,   278,   553,   148,    10,    11,     5,
+       6,    12,    13,   111,   243,    14,   112,   113,   239,   437,
+     248,   249,   250,   241,   329,   259,   242,   261,   245,   263,
+     264,   501,   452,   149,   346,  -156,  -156,   329,   152,   329,
+      10,    11,  -156,   154,    12,    13,   517,   316,    14,   111,
+     278,   329,   112,   113,   146,   295,     5,     6,   383,   329,
+     402,   403,   329,   406,   432,   433,   308,   536,   287,   152,
+      34,    35,    36,    37,    38,   311,   313,   314,   315,   435,
+     548,   111,   549,  -240,   112,   113,   321,     5,     6,   322,
+     318,    37,    38,   288,   559,   330,   330,     5,     6,   481,
+     289,   154,   565,   290,   351,   568,     5,     6,    35,    36,
+      37,    38,   465,   466,   325,   252,   253,   254,  -156,  -156,
+     330,    29,   374,   197,   198,  -156,   296,   468,   191,   192,
+     199,   330,   330,   380,   376,   382,   385,   345,    10,    11,
+     255,   256,    12,    13,   347,   257,    14,   330,   200,   201,
+     230,   231,   401,   401,   401,   202,   401,   348,   111,   297,
+     111,   112,   113,   112,   113,   298,   349,   353,   386,    10,
+      11,   390,   410,    12,    13,   430,   436,    14,   227,    10,
+      11,   431,   434,    12,    13,   438,   317,    14,    10,    11,
+     464,    31,    12,   326,  -217,    87,   327,  -217,  -217,   467,
+     469,   247,   299,   300,   111,   301,   302,   112,   113,   449,
+     449,   449,   470,   449,  -217,   471,   472,   522,   458,   459,
+     460,   461,   462,   463,   303,   484,   450,   451,    39,   454,
+     485,    40,   486,   487,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,   488,    51,    52,    53,   489,   490,
+     491,   492,   473,   474,   475,   476,   477,   478,   479,   480,
+     483,   502,   504,   497,   505,   156,   157,   158,   159,   160,
+     161,   162,   493,   494,   495,   496,   483,   498,   499,   500,
+     163,   506,   507,   508,   510,   511,   330,   523,   524,   526,
+     513,   527,   514,   515,   516,   528,   518,   530,   519,   520,
+     521,   330,    54,   538,   540,   541,    55,   544,   554,   556,
+     562,   531,   532,   533,   534,   535,   563,   340,   537,   333,
+     251,   262,   330,   293,     0,   334,   545,     0,   547,   121,
+     122,   123,   550,     0,     0,   330,     0,   330,   269,     0,
+       0,     0,   558,     0,   560,   270,   271,   272,   273,   330,
+     564,     0,   274,     0,     0,     0,     0,   330,     0,     0,
+     330,     0,   335,   336,   111,   337,   338,   112,   113,     0,
+       0,     0,     0,     0,    74,    75,    76,    77,    78,    79,
+      80,     0,     0,     0,   339,   354,   355,   356,   357,   358,
+     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
+     369,   370,   371,   411,   412,   413,   414,   415,   416,   417,
+     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
+     428,     0,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,    33,    34,    35,
+      36,    37,    38,   372,     0,     0,     0,   110,     0,     0,
+     392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+       0,   429,     0,   407,   408,   409,   440,   441,   442,   443,
+     444,   445,   446,   447,     0,     0,     0,     0,     0,   455,
+     456,   457,   128,     0,     0,     0,     0,   133,   134,     0,
+     136,   137,   138,     0,   140,   141,    32,    33,    34,    35,
+      36,    37,    38,     0,     0,     0,     0,     0,    85,    32,
+      33,    34,    35,    36,    37,    38,    74,    75,    76,    77,
+      78,    79,    80,  -254,  -254,  -254,  -254,  -254,  -254
 };
 
 static const short yycheck[] =
 {
-       2,    13,    22,   276,   296,     6,     6,   118,    41,    42,
-     238,     0,    74,    75,    80,   301,     3,     4,     5,    81,
-       7,    23,   249,    80,   251,   252,   253,   254,   255,   256,
-      10,    11,    12,    20,    14,   308,    93,     4,     5,   331,
-     326,     4,     5,     4,     5,     6,     7,    93,    81,   335,
-     336,    31,    32,    33,    34,    35,    36,    37,   286,   287,
-      81,   172,     4,     5,     6,   276,   352,     9,     4,     5,
-       6,    41,    93,     9,    94,    76,    76,    64,    93,    99,
-     100,     6,   309,    85,    51,    52,    53,    54,    55,    56,
-      57,     4,     5,     6,    93,    97,    98,   308,    60,    86,
-      87,    63,    64,    90,    91,   107,   217,    94,   110,   111,
-     112,    81,     4,     5,   116,    74,    75,   345,    80,    86,
-      87,    93,    81,    90,    91,    86,    87,    94,   276,    90,
-      91,     4,     5,    94,     7,    93,    76,    88,    89,    79,
-     538,    81,     4,     5,    93,    87,    60,   149,   150,    63,
-      64,    87,   550,   155,   156,   157,   158,   159,   160,   161,
-     308,   163,   164,    93,   166,   185,    80,    93,    81,   567,
-     333,     4,     5,    86,    87,   556,    83,    90,    91,    93,
-      80,    94,   563,     4,     5,     6,   545,   568,    95,    81,
-     353,    93,   194,   195,    86,    87,    93,   556,    90,    91,
-     202,   203,    94,   366,   563,   491,   208,   209,    93,   568,
-      93,     4,     5,    86,    87,     6,    93,    90,    91,     6,
-     506,    94,     4,     5,     6,    47,    48,    49,     6,   231,
-     232,   233,     4,     5,   236,    93,   238,    93,   240,   241,
-     531,   527,    60,   534,    93,    63,    64,   410,    83,    83,
-      72,    73,    93,   544,   540,    77,   542,    83,    93,    93,
-     423,    93,    80,    93,   266,    86,    87,    93,   554,    90,
-      91,    83,    83,    94,    80,   277,   562,   388,   389,   565,
-      80,    93,    93,    93,   286,   287,   288,   289,     6,     7,
-       8,    93,   403,    86,    87,   297,    60,    90,    91,    63,
-      64,    94,     6,    60,    86,    87,    63,    64,    90,    91,
-      93,     6,    94,   325,    86,    87,    80,    93,    90,    91,
-     300,   301,    94,    80,    93,   436,   437,    93,    60,    83,
-     332,    63,    64,    51,    52,    53,    54,    55,    56,    57,
-     451,   343,    93,   345,   346,   325,   326,    15,    80,    93,
-      74,    75,    93,    21,    93,   335,   336,    81,    15,    93,
-       6,   363,   364,   365,    21,   367,     6,     4,     6,    93,
-       7,    93,   352,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    93,    21,    22,    23,    93,     6,     6,
-      58,    59,    60,    61,    62,    63,    64,    86,    87,    88,
-      89,    58,    59,    60,    61,    62,    63,    64,   364,   365,
-      93,   367,    80,    60,    93,    93,    63,    64,   420,   421,
-     422,    60,   424,    80,    63,    64,    93,   429,   430,   431,
-     432,   433,   434,    80,    83,    84,    85,    86,    87,    88,
-      89,    78,    93,    93,    18,    82,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,   463,   464,   465,   466,   467,   468,   469,   470,   471,
-      93,    65,    74,    75,   421,   422,   228,   424,    80,    81,
-      93,   483,   484,   485,   486,   487,   488,   489,   490,    93,
-      93,    93,    93,    74,    75,    93,    93,    93,    93,   501,
-      81,   503,   504,   505,    93,   507,    93,   509,   510,   511,
-      93,   491,    93,    65,    66,    67,    68,    69,    70,    71,
-     522,   523,   524,   525,   526,    93,   506,   529,    80,    84,
-      85,    86,    87,    88,    89,   537,    36,   539,    30,    93,
-      93,   543,    93,    43,    44,    45,    46,   527,    93,    93,
-      50,   553,    93,   555,    85,    86,    87,    88,    89,   561,
-     540,    93,   542,   355,   356,   357,   358,   359,   360,   361,
-     362,    93,    93,    93,   554,    93,   368,   369,   370,    93,
-      93,    93,   562,    93,    93,   565,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,   412,   413,   414,   415,   416,   417,   418,   419,
-     295,    93,    93,    96,   513,   425,   426,   427,   101,   102,
-     487,   104,   105,   106,    81,   108,   109,    83,    84,    85,
-      86,    87,    88,    89,   308,   234,   264,   239,    -1,    95,
-      -1,    -1,    81,    51,    52,    53,    54,    55,    56,    57
+       2,    13,     6,    23,   119,   239,     0,   301,   302,     6,
+      80,    83,    41,    42,    10,    11,    12,    41,    14,   297,
+      80,    93,    24,    93,   277,     4,     5,     6,   277,   277,
+       9,    93,   326,   327,     4,     5,    32,    33,    34,    35,
+      36,    37,    38,   337,   338,    93,     3,     4,     5,    93,
+       7,   302,    81,   287,   288,   333,   309,    81,   173,   353,
+     309,   309,    81,    20,     4,     5,     6,    83,    93,     9,
+     539,   557,    76,     6,    93,    95,   327,    93,   564,    76,
+     100,   101,   551,   569,    86,    60,   337,   338,    63,    64,
+      93,     4,     5,     4,     5,     6,    98,    99,    93,   568,
+      83,   532,   353,   218,   535,    80,   108,    64,    87,   111,
+     112,   113,    95,   347,   545,   117,    86,    87,    93,    93,
+      90,    91,    83,    76,    94,    93,    79,    93,    81,    86,
+      87,    93,    93,    90,    91,     4,     5,    94,    51,    52,
+      53,    54,    55,    56,    57,    74,    75,    87,   150,   151,
+      93,    80,    81,   335,   156,   157,   158,   159,   160,   161,
+     162,    93,   164,   165,    93,   167,   186,     6,     4,     5,
+      81,     7,   354,    86,    87,    86,    87,    90,    91,    90,
+      91,    94,     6,    94,   250,   367,   252,   253,   254,   255,
+     256,   257,   546,   195,   196,    83,    60,     6,   492,    63,
+      64,   203,   204,   557,    83,    93,    93,   209,   210,    93,
+     564,    93,    81,   507,    93,   569,    80,    86,    87,     4,
+       5,    90,    91,    60,    80,    94,    63,    64,    93,   411,
+     232,   233,   234,    93,   528,   237,    93,   239,    93,   241,
+     242,   492,   424,    80,   310,    74,    75,   541,    80,   543,
+      86,    87,    81,    80,    90,    91,   507,     6,    94,    60,
+      93,   555,    63,    64,    93,   267,     4,     5,     6,   563,
+     365,   366,   566,   368,   389,   390,   278,   528,    93,    80,
+      85,    86,    87,    88,    89,   287,   288,   289,   290,   404,
+     541,    60,   543,    93,    63,    64,   298,     4,     5,     6,
+       7,    88,    89,    93,   555,   301,   302,     4,     5,     6,
+      93,    80,   563,    93,   326,   566,     4,     5,    86,    87,
+      88,    89,   437,   438,     6,    47,    48,    49,    74,    75,
+     326,   327,   334,    74,    75,    81,    93,   452,     4,     5,
+      81,   337,   338,   345,     6,   347,   348,    93,    86,    87,
+      72,    73,    90,    91,    93,    77,    94,   353,    74,    75,
+       4,     5,   364,   365,   366,    81,   368,    93,    60,    15,
+      60,    63,    64,    63,    64,    21,    93,    83,     6,    86,
+      87,     6,    93,    90,    91,    93,     6,    94,    80,    86,
+      87,    93,    93,    90,    91,     6,   296,    94,    86,    87,
+      93,    18,    90,    91,    60,    31,    94,    63,    64,    93,
+      93,   229,    58,    59,    60,    61,    62,    63,    64,   421,
+     422,   423,    93,   425,    80,    93,    93,   514,   430,   431,
+     432,   433,   434,   435,    80,    93,   422,   423,     4,   425,
+      93,     7,    93,    93,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    93,    21,    22,    23,    93,    93,
+      93,    93,   464,   465,   466,   467,   468,   469,   470,   471,
+     472,    93,    93,   488,    93,    65,    66,    67,    68,    69,
+      70,    71,   484,   485,   486,   487,   488,   489,   490,   491,
+      80,    93,    93,    93,    93,    93,   492,    93,    93,    93,
+     502,    93,   504,   505,   506,    93,   508,    93,   510,   511,
+     512,   507,    78,    93,    93,    93,    82,    93,    93,    93,
+      93,   523,   524,   525,   526,   527,    93,   309,   530,    15,
+     235,   240,   528,   265,    -1,    21,   538,    -1,   540,     6,
+       7,     8,   544,    -1,    -1,   541,    -1,   543,    36,    -1,
+      -1,    -1,   554,    -1,   556,    43,    44,    45,    46,   555,
+     562,    -1,    50,    -1,    -1,    -1,    -1,   563,    -1,    -1,
+     566,    -1,    58,    59,    60,    61,    62,    63,    64,    -1,
+      -1,    -1,    -1,    -1,    51,    52,    53,    54,    55,    56,
+      57,    -1,    -1,    -1,    80,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    84,    85,    86,
+      87,    88,    89,    81,    -1,    -1,    -1,    66,    -1,    -1,
+     356,   357,   358,   359,   360,   361,   362,   363,    -1,    -1,
+      -1,    81,    -1,   369,   370,   371,   413,   414,   415,   416,
+     417,   418,   419,   420,    -1,    -1,    -1,    -1,    -1,   426,
+     427,   428,    97,    -1,    -1,    -1,    -1,   102,   103,    -1,
+     105,   106,   107,    -1,   109,   110,    83,    84,    85,    86,
+      87,    88,    89,    -1,    -1,    -1,    -1,    -1,    95,    83,
+      84,    85,    86,    87,    88,    89,    51,    52,    53,    54,
+      55,    56,    57,    84,    85,    86,    87,    88,    89
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1290,61 +1307,62 @@
 {
        0,    97,    98,     0,     3,     4,     5,     7,    20,    64,
       86,    87,    90,    91,    94,    99,   151,   152,   175,   176,
-     177,   101,   164,   100,   176,   176,   176,   177,   176,    80,
-     101,    83,    84,    85,    86,    87,    88,    89,     4,     7,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      21,    22,    23,    78,    82,   104,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   121,   132,   142,
-     146,   155,   162,    51,    52,    53,    54,    55,    56,    57,
-     165,   166,   167,   175,    95,   153,   104,   176,   176,   176,
-     176,   176,   176,   176,   164,   164,   164,   164,   164,   164,
+     177,   178,   101,   164,   100,   177,   177,   177,   178,   177,
+      80,   101,    83,    84,    85,    86,    87,    88,    89,     4,
+       7,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    21,    22,    23,    78,    82,   104,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   121,   132,
+     142,   146,   155,   162,    51,    52,    53,    54,    55,    56,
+      57,   165,   166,   167,   175,    95,   153,   104,   177,   177,
+     177,   177,   177,   177,   177,   164,   164,   164,   164,   164,
      164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
-      60,    63,    64,   168,   169,   170,    93,    81,   175,   167,
-       6,     7,     8,   105,   167,   171,   173,   173,   175,   175,
-     167,   167,   173,   173,   156,   173,   173,   173,   175,   173,
-     173,   175,   175,   175,   175,    93,   154,    80,    80,    93,
-      93,    80,   143,    80,   147,    65,    66,    67,    68,    69,
-      70,    71,    80,    93,    93,     6,   117,     4,     5,     6,
-       9,    87,   172,   175,   175,   144,   148,   175,   175,   175,
-     175,   175,   175,   175,   157,   175,   175,     6,    81,   175,
-       4,     5,    81,   154,    93,    93,    74,    75,    81,    74,
-      75,    81,    93,    93,    41,    81,   158,   167,    93,    93,
-       4,     5,     6,     9,    87,   175,   175,     6,    76,     6,
-       6,    76,     6,   175,   175,     6,    80,   175,   175,     4,
-       5,    93,    93,   154,   145,   154,    93,   149,    93,   150,
-      93,    93,    80,   163,    93,   118,   118,   175,   175,   175,
-     143,    47,    48,    49,    72,    73,    77,   174,   175,   174,
-     175,   147,   175,   175,   159,    76,    79,    81,    36,    43,
-      44,    45,    46,    50,   119,   120,   122,    93,   139,   145,
-     145,   145,   145,   145,   145,   145,    93,    93,    93,    93,
-      42,    81,   158,   160,   175,    93,    15,    21,    58,    59,
-      61,    62,    80,   128,   168,   169,   170,   175,   133,   174,
-     175,   174,   175,   175,   175,     6,   120,     7,   102,   175,
-     175,     6,   102,   103,     6,    91,    94,   130,   176,   130,
-     123,    15,    21,    58,    59,    61,    62,    80,   128,   140,
-     168,   169,   170,    93,   145,    93,    93,    93,   176,   177,
-     130,   176,    83,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    81,   102,   175,   103,     6,   130,   130,   134,   175,
-     174,   175,     6,   161,   175,     6,    95,   130,   103,     6,
-     124,   124,   124,   124,   124,   124,   124,   124,   124,   125,
-     175,   125,   125,   103,   127,   125,   124,   124,   124,    93,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    81,    93,
-      93,   154,   154,    93,   154,     6,   103,     6,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   137,   175,   137,
-     137,   103,   135,   137,   136,   136,   136,   175,   175,   175,
-     175,   175,   175,    93,   154,   154,    93,   154,    93,    93,
-      93,    93,   175,   175,   175,   175,   175,   175,   175,   175,
-       6,   131,   175,    93,    93,    93,    93,    93,    93,    93,
-      93,    93,   175,   175,   175,   175,   131,   175,   175,   175,
-     130,    93,   141,    93,    93,    93,    93,    93,   126,    93,
-      93,    93,   175,   175,   175,   175,   130,   175,   175,   175,
-     175,   126,    93,    93,    93,    93,    93,    93,   129,    93,
-     175,   175,   175,   175,   175,   130,   175,    93,   129,    93,
-      93,   129,    93,    93,   175,   139,   175,   130,   130,   175,
-     129,   138,   171,    93,    93,    93,   139,   175,   130,   175,
-     138,    93,    93,   175,   130,    93,   138,   130,   139,   138
+     164,    60,    63,    64,   168,   169,   170,    93,    81,   175,
+     167,     6,     7,     8,   105,   167,   171,   173,   173,   175,
+     175,   167,   167,   173,   173,   156,   173,   173,   173,   175,
+     173,   173,   175,   175,   175,   175,    93,   154,    80,    80,
+      93,    93,    80,   143,    80,   147,    65,    66,    67,    68,
+      69,    70,    71,    80,    93,    93,     6,   117,     4,     5,
+       6,     9,    87,   172,   175,   175,   144,   148,   175,   175,
+     175,   175,   175,   175,   175,   157,   175,   175,     6,    81,
+     175,     4,     5,    81,   154,    93,    93,    74,    75,    81,
+      74,    75,    81,    93,    93,    41,    81,   158,   167,    93,
+      93,     4,     5,     6,     9,    87,   175,   175,     6,    76,
+       6,     6,    76,     6,   175,   175,     6,    80,   175,   175,
+       4,     5,    93,    93,   154,   145,   154,    93,   149,    93,
+     150,    93,    93,    80,   163,    93,   118,   118,   175,   175,
+     175,   143,    47,    48,    49,    72,    73,    77,   174,   175,
+     174,   175,   147,   175,   175,   159,    76,    79,    81,    36,
+      43,    44,    45,    46,    50,   119,   120,   122,    93,   139,
+     145,   145,   145,   145,   145,   145,   145,    93,    93,    93,
+      93,    42,    81,   158,   160,   175,    93,    15,    21,    58,
+      59,    61,    62,    80,   128,   168,   169,   170,   175,   133,
+     174,   175,   174,   175,   175,   175,     6,   120,     7,   102,
+     175,   175,     6,   102,   103,     6,    91,    94,   130,   176,
+     177,   130,   123,    15,    21,    58,    59,    61,    62,    80,
+     128,   140,   168,   169,   170,    93,   145,    93,    93,    93,
+     176,   178,   130,    83,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    81,   102,   175,   103,     6,   130,   130,   134,
+     175,   174,   175,     6,   161,   175,     6,    95,   130,   103,
+       6,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     125,   175,   125,   125,   103,   127,   125,   124,   124,   124,
+      93,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    81,
+      93,    93,   154,   154,    93,   154,     6,   103,     6,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   137,   175,
+     137,   137,   103,   135,   137,   136,   136,   136,   175,   175,
+     175,   175,   175,   175,    93,   154,   154,    93,   154,    93,
+      93,    93,    93,   175,   175,   175,   175,   175,   175,   175,
+     175,     6,   131,   175,    93,    93,    93,    93,    93,    93,
+      93,    93,    93,   175,   175,   175,   175,   131,   175,   175,
+     175,   130,    93,   141,    93,    93,    93,    93,    93,   126,
+      93,    93,    93,   175,   175,   175,   175,   130,   175,   175,
+     175,   175,   126,    93,    93,    93,    93,    93,    93,   129,
+      93,   175,   175,   175,   175,   175,   130,   175,    93,   129,
+      93,    93,   129,    93,    93,   175,   139,   175,   130,   130,
+     175,   129,   138,   171,    93,    93,    93,   139,   175,   130,
+     175,   138,    93,    93,   175,   130,    93,   138,   130,   139,
+     138
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -1372,7 +1390,6 @@
 #define YYABORT		goto yyabortlab
 #define YYERROR		goto yyerrlab1
 
-
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
    Once GCC version 2 has supplanted version 1, this can go.  */
@@ -1493,9 +1510,9 @@
 #endif
 {
   int yyi;
-  unsigned int yylno = yyrline[yyrule];
+  unsigned int yylineno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
-             yyrule - 1, yylno);
+             yyrule - 1, yylineno);
   /* Print the symbols being reduced, and their result.  */
   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
@@ -4107,25 +4124,30 @@
     break;
 
   case 254:
-#line 1838 "parser.y"
-    { yyval.num = ~(yyvsp[0].num); ;}
+#line 1841 "parser.y"
+    { yyval.num = (yyvsp[0].num); ;}
     break;
 
   case 255:
-#line 1841 "parser.y"
-    { yyval.num = yyvsp[0].num; ;}
+#line 1842 "parser.y"
+    { yyval.num = ~(yyvsp[0].num); ;}
     break;
 
   case 256:
-#line 1842 "parser.y"
+#line 1845 "parser.y"
     { yyval.num = yyvsp[0].num; ;}
     break;
 
+  case 257:
+#line 1846 "parser.y"
+    { yyval.num = yyvsp[0].num; ;}
+    break;
 
+
     }
 
-/* Line 999 of yacc.c.  */
-#line 4129 "y.tab.c"
+/* Line 991 of yacc.c.  */
+#line 4150 "y.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4166,33 +4188,18 @@
 	{
 	  YYSIZE_T yysize = 0;
 	  int yytype = YYTRANSLATE (yychar);
-	  const char* yyprefix;
 	  char *yymsg;
-	  int yyx;
+	  int yyx, yycount;
 
+	  yycount = 0;
 	  /* Start YYX at -YYN if negative to avoid negative indexes in
 	     YYCHECK.  */
-	  int yyxbegin = yyn < 0 ? -yyn : 0;
-
-	  /* Stay within bounds of both yycheck and yytname.  */
-	  int yychecklim = YYLAST - yyn;
-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-	  int yycount = 0;
-
-	  yyprefix = ", expecting ";
-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	  for (yyx = yyn < 0 ? -yyn : 0;
+	       yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	      {
-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
-		yycount += 1;
-		if (yycount == 5)
-		  {
-		    yysize = 0;
-		    break;
-		  }
-	      }
-	  yysize += (sizeof ("syntax error, unexpected ")
-		     + yystrlen (yytname[yytype]));
+	      yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+	  yysize += yystrlen ("syntax error, unexpected ") + 1;
+	  yysize += yystrlen (yytname[yytype]);
 	  yymsg = (char *) YYSTACK_ALLOC (yysize);
 	  if (yymsg != 0)
 	    {
@@ -4201,13 +4208,16 @@
 
 	      if (yycount < 5)
 		{
-		  yyprefix = ", expecting ";
-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+		  yycount = 0;
+		  for (yyx = yyn < 0 ? -yyn : 0;
+		       yyx < (int) (sizeof (yytname) / sizeof (char *));
+		       yyx++)
 		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
 		      {
-			yyp = yystpcpy (yyp, yyprefix);
+			const char *yyq = ! yycount ? ", expecting " : " or ";
+			yyp = yystpcpy (yyp, yyq);
 			yyp = yystpcpy (yyp, yytname[yyx]);
-			yyprefix = " or ";
+			yycount++;
 		      }
 		}
 	      yyerror (yymsg);
@@ -4251,13 +4261,28 @@
 
   /* Else will try to reuse lookahead token after shifting the error
[truncated at 1000 lines; 61 more skipped]