glsl: Regenerate files changes by previous commit
[mesa.git] / src / glsl / glsl_parser.cpp
index 92937fdf9ee205e8315dd9956d72abbe2022aa85..c876f39e4e75c49f3238720b085e913b54e35f2a 100644 (file)
    enum yytokentype {
      ATTRIBUTE = 258,
      CONST_TOK = 259,
-     BOOL = 260,
-     FLOAT = 261,
-     INT = 262,
-     UINT = 263,
+     BOOL_TOK = 260,
+     FLOAT_TOK = 261,
+     INT_TOK = 262,
+     UINT_TOK = 263,
      BREAK = 264,
      CONTINUE = 265,
      DO = 266,
      VEC2 = 284,
      VEC3 = 285,
      VEC4 = 286,
-     MAT2 = 287,
-     MAT3 = 288,
-     MAT4 = 289,
-     CENTROID = 290,
-     IN = 291,
-     OUT = 292,
-     INOUT = 293,
-     UNIFORM = 294,
-     VARYING = 295,
-     NOPERSPECTIVE = 296,
-     FLAT = 297,
-     SMOOTH = 298,
-     MAT2X2 = 299,
-     MAT2X3 = 300,
-     MAT2X4 = 301,
-     MAT3X2 = 302,
-     MAT3X3 = 303,
-     MAT3X4 = 304,
-     MAT4X2 = 305,
-     MAT4X3 = 306,
-     MAT4X4 = 307,
-     SAMPLER1D = 308,
-     SAMPLER2D = 309,
-     SAMPLER3D = 310,
-     SAMPLERCUBE = 311,
-     SAMPLER1DSHADOW = 312,
-     SAMPLER2DSHADOW = 313,
-     SAMPLERCUBESHADOW = 314,
-     SAMPLER1DARRAY = 315,
-     SAMPLER2DARRAY = 316,
-     SAMPLER1DARRAYSHADOW = 317,
-     SAMPLER2DARRAYSHADOW = 318,
-     ISAMPLER1D = 319,
-     ISAMPLER2D = 320,
-     ISAMPLER3D = 321,
-     ISAMPLERCUBE = 322,
-     ISAMPLER1DARRAY = 323,
-     ISAMPLER2DARRAY = 324,
-     USAMPLER1D = 325,
-     USAMPLER2D = 326,
-     USAMPLER3D = 327,
-     USAMPLERCUBE = 328,
-     USAMPLER1DARRAY = 329,
-     USAMPLER2DARRAY = 330,
-     STRUCT = 331,
-     VOID = 332,
-     WHILE = 333,
-     IDENTIFIER = 334,
-     FLOATCONSTANT = 335,
-     INTCONSTANT = 336,
-     UINTCONSTANT = 337,
-     BOOLCONSTANT = 338,
-     FIELD_SELECTION = 339,
-     LEFT_OP = 340,
-     RIGHT_OP = 341,
-     INC_OP = 342,
-     DEC_OP = 343,
-     LE_OP = 344,
-     GE_OP = 345,
-     EQ_OP = 346,
-     NE_OP = 347,
-     AND_OP = 348,
-     OR_OP = 349,
-     XOR_OP = 350,
-     MUL_ASSIGN = 351,
-     DIV_ASSIGN = 352,
-     ADD_ASSIGN = 353,
-     MOD_ASSIGN = 354,
-     LEFT_ASSIGN = 355,
-     RIGHT_ASSIGN = 356,
-     AND_ASSIGN = 357,
-     XOR_ASSIGN = 358,
-     OR_ASSIGN = 359,
-     SUB_ASSIGN = 360,
-     INVARIANT = 361,
-     LOWP = 362,
-     MEDIUMP = 363,
-     HIGHP = 364,
-     SUPERP = 365,
-     PRECISION = 366,
-     VERSION = 367,
-     EXTENSION = 368,
-     LINE = 369,
-     PRAGMA = 370,
-     COLON = 371,
-     EOL = 372,
-     INTERFACE = 373,
-     OUTPUT = 374,
+     CENTROID = 287,
+     IN_TOK = 288,
+     OUT_TOK = 289,
+     INOUT_TOK = 290,
+     UNIFORM = 291,
+     VARYING = 292,
+     NOPERSPECTIVE = 293,
+     FLAT = 294,
+     SMOOTH = 295,
+     MAT2X2 = 296,
+     MAT2X3 = 297,
+     MAT2X4 = 298,
+     MAT3X2 = 299,
+     MAT3X3 = 300,
+     MAT3X4 = 301,
+     MAT4X2 = 302,
+     MAT4X3 = 303,
+     MAT4X4 = 304,
+     SAMPLER1D = 305,
+     SAMPLER2D = 306,
+     SAMPLER3D = 307,
+     SAMPLERCUBE = 308,
+     SAMPLER1DSHADOW = 309,
+     SAMPLER2DSHADOW = 310,
+     SAMPLERCUBESHADOW = 311,
+     SAMPLER1DARRAY = 312,
+     SAMPLER2DARRAY = 313,
+     SAMPLER1DARRAYSHADOW = 314,
+     SAMPLER2DARRAYSHADOW = 315,
+     ISAMPLER1D = 316,
+     ISAMPLER2D = 317,
+     ISAMPLER3D = 318,
+     ISAMPLERCUBE = 319,
+     ISAMPLER1DARRAY = 320,
+     ISAMPLER2DARRAY = 321,
+     USAMPLER1D = 322,
+     USAMPLER2D = 323,
+     USAMPLER3D = 324,
+     USAMPLERCUBE = 325,
+     USAMPLER1DARRAY = 326,
+     USAMPLER2DARRAY = 327,
+     STRUCT = 328,
+     VOID_TOK = 329,
+     WHILE = 330,
+     IDENTIFIER = 331,
+     FLOATCONSTANT = 332,
+     INTCONSTANT = 333,
+     UINTCONSTANT = 334,
+     BOOLCONSTANT = 335,
+     FIELD_SELECTION = 336,
+     LEFT_OP = 337,
+     RIGHT_OP = 338,
+     INC_OP = 339,
+     DEC_OP = 340,
+     LE_OP = 341,
+     GE_OP = 342,
+     EQ_OP = 343,
+     NE_OP = 344,
+     AND_OP = 345,
+     OR_OP = 346,
+     XOR_OP = 347,
+     MUL_ASSIGN = 348,
+     DIV_ASSIGN = 349,
+     ADD_ASSIGN = 350,
+     MOD_ASSIGN = 351,
+     LEFT_ASSIGN = 352,
+     RIGHT_ASSIGN = 353,
+     AND_ASSIGN = 354,
+     XOR_ASSIGN = 355,
+     OR_ASSIGN = 356,
+     SUB_ASSIGN = 357,
+     INVARIANT = 358,
+     LOWP = 359,
+     MEDIUMP = 360,
+     HIGHP = 361,
+     SUPERP = 362,
+     PRECISION = 363,
+     VERSION = 364,
+     EXTENSION = 365,
+     LINE = 366,
+     COLON = 367,
+     EOL = 368,
+     INTERFACE = 369,
+     OUTPUT = 370,
+     PRAGMA_DEBUG_ON = 371,
+     PRAGMA_DEBUG_OFF = 372,
+     PRAGMA_OPTIMIZE_ON = 373,
+     PRAGMA_OPTIMIZE_OFF = 374,
      LAYOUT_TOK = 375,
      ASM = 376,
      CLASS = 377,
      TYPEDEF = 380,
      TEMPLATE = 381,
      THIS = 382,
-     PACKED = 383,
+     PACKED_TOK = 383,
      GOTO = 384,
      INLINE_TOK = 385,
      NOINLINE = 386,
      STATIC = 389,
      EXTERN = 390,
      EXTERNAL = 391,
-     LONG = 392,
-     SHORT = 393,
-     DOUBLE = 394,
+     LONG_TOK = 392,
+     SHORT_TOK = 393,
+     DOUBLE_TOK = 394,
      HALF = 395,
-     FIXED = 396,
+     FIXED_TOK = 396,
      UNSIGNED = 397,
-     INPUT = 398,
+     INPUT_TOK = 398,
      OUPTUT = 399,
      HVEC2 = 400,
      HVEC3 = 401,
@@ -339,38 +339,40 @@ typedef union YYSTYPE
 {
 
 /* Line 214 of yacc.c  */
-#line 53 "glsl_parser.ypp"
+#line 52 "glsl_parser.ypp"
 
    int n;
    float real;
    char *identifier;
 
-   union {
-      struct ast_type_qualifier q;
-      unsigned i;
-   } type_qualifier;
-
-   struct ast_node *node;
-   struct ast_type_specifier *type_specifier;
-   struct ast_fully_specified_type *fully_specified_type;
-   struct ast_function *function;
-   struct ast_parameter_declarator *parameter_declarator;
-   struct ast_function_definition *function_definition;
-   struct ast_compound_statement *compound_statement;
-   struct ast_expression *expression;
-   struct ast_declarator_list *declarator_list;
-   struct ast_struct_specifier *struct_specifier;
-   struct ast_declaration *declaration;
+   struct ast_type_qualifier type_qualifier;
+
+   ast_node *node;
+   ast_type_specifier *type_specifier;
+   ast_fully_specified_type *fully_specified_type;
+   ast_function *function;
+   ast_parameter_declarator *parameter_declarator;
+   ast_function_definition *function_definition;
+   ast_compound_statement *compound_statement;
+   ast_expression *expression;
+   ast_declarator_list *declarator_list;
+   ast_struct_specifier *struct_specifier;
+   ast_declaration *declaration;
 
    struct {
-      struct ast_node *cond;
-      struct ast_expression *rest;
+      ast_node *cond;
+      ast_expression *rest;
    } for_rest_statement;
 
+   struct {
+      ast_node *then_statement;
+      ast_node *else_statement;
+   } selection_rest_statement;
+
 
 
 /* Line 214 of yacc.c  */
-#line 374 "glsl_parser.cpp"
+#line 376 "glsl_parser.cpp"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -395,7 +397,7 @@ typedef struct YYLTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 399 "glsl_parser.cpp"
+#line 401 "glsl_parser.cpp"
 
 #ifdef short
 # undef short
@@ -612,14 +614,14 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4389
+#define YYLAST   3692
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  215
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  89
+#define YYNNTS  87
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  276
+#define YYNRULES  278
 /* YYNRULES -- Number of states.  */
 #define YYNSTATES  413
 
@@ -685,152 +687,152 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     4,     9,    10,    14,    15,    18,    24,
-      26,    29,    31,    33,    35,    37,    39,    41,    45,    47,
-      52,    54,    58,    61,    64,    66,    68,    70,    74,    77,
-      80,    83,    85,    88,    92,    95,    97,    99,   101,   103,
-     106,   109,   112,   114,   116,   118,   120,   122,   126,   130,
-     134,   136,   140,   144,   146,   150,   154,   156,   160,   164,
-     168,   172,   174,   178,   182,   184,   188,   190,   194,   196,
-     200,   202,   206,   208,   212,   214,   218,   220,   226,   228,
-     232,   234,   236,   238,   240,   242,   244,   246,   248,   250,
-     252,   254,   256,   260,   262,   265,   268,   273,   276,   278,
-     280,   283,   287,   291,   294,   300,   304,   307,   311,   314,
-     315,   317,   319,   321,   323,   325,   329,   335,   342,   350,
-     359,   365,   367,   370,   375,   381,   388,   396,   401,   404,
-     406,   409,   410,   412,   417,   419,   423,   425,   427,   429,
-     431,   433,   435,   438,   441,   443,   445,   448,   451,   454,
-     456,   459,   462,   464,   466,   469,   471,   475,   480,   482,
-     484,   486,   488,   490,   492,   494,   496,   498,   500,   502,
-     504,   506,   508,   510,   512,   514,   516,   518,   520,   522,
-     524,   526,   528,   530,   532,   534,   536,   538,   540,   542,
-     544,   546,   548,   550,   552,   554,   556,   558,   560,   562,
-     564,   566,   568,   570,   572,   574,   576,   578,   580,   582,
-     584,   586,   588,   590,   592,   594,   596,   598,   600,   606,
-     611,   613,   616,   620,   622,   626,   628,   633,   635,   637,
-     639,   641,   643,   645,   647,   649,   651,   653,   655,   657,
-     659,   661,   664,   668,   670,   672,   675,   679,   681,   684,
-     686,   689,   697,   703,   709,   717,   719,   724,   730,   734,
-     737,   743,   751,   758,   760,   762,   764,   765,   768,   772,
-     775,   778,   781,   785,   788,   790,   792
+       0,     0,     3,     4,     9,    10,    14,    17,    20,    23,
+      26,    27,    30,    36,    38,    41,    43,    45,    47,    49,
+      51,    53,    57,    59,    64,    66,    70,    73,    76,    78,
+      80,    82,    86,    89,    92,    95,    97,   100,   104,   107,
+     109,   111,   113,   115,   118,   121,   124,   126,   128,   130,
+     132,   134,   138,   142,   146,   148,   152,   156,   158,   162,
+     166,   168,   172,   176,   180,   184,   186,   190,   194,   196,
+     200,   202,   206,   208,   212,   214,   218,   220,   224,   226,
+     230,   232,   238,   240,   244,   246,   248,   250,   252,   254,
+     256,   258,   260,   262,   264,   266,   268,   272,   274,   277,
+     280,   285,   288,   290,   292,   295,   299,   303,   306,   312,
+     316,   319,   323,   326,   327,   329,   331,   333,   335,   337,
+     341,   347,   354,   362,   371,   377,   379,   382,   387,   393,
+     400,   408,   413,   416,   418,   421,   426,   428,   432,   434,
+     438,   440,   442,   444,   446,   448,   450,   453,   455,   458,
+     461,   465,   467,   469,   471,   473,   476,   478,   480,   483,
+     486,   488,   490,   493,   495,   499,   504,   506,   508,   510,
+     512,   514,   516,   518,   520,   522,   524,   526,   528,   530,
+     532,   534,   536,   538,   540,   542,   544,   546,   548,   550,
+     552,   554,   556,   558,   560,   562,   564,   566,   568,   570,
+     572,   574,   576,   578,   580,   582,   584,   586,   588,   590,
+     592,   594,   596,   598,   600,   602,   604,   606,   608,   610,
+     612,   614,   616,   618,   624,   629,   631,   634,   638,   640,
+     644,   646,   651,   653,   655,   657,   659,   661,   663,   665,
+     667,   669,   671,   673,   676,   680,   682,   684,   687,   691,
+     693,   696,   698,   701,   707,   711,   713,   715,   720,   726,
+     730,   733,   739,   747,   754,   756,   758,   760,   761,   764,
+     768,   771,   774,   777,   781,   784,   786,   788,   790
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     216,     0,    -1,    -1,   218,   219,   217,   221,    -1,    -1,
-     112,    81,   117,    -1,    -1,   219,   220,    -1,   113,    79,
-     116,    79,   117,    -1,   302,    -1,   221,   302,    -1,    79,
-      -1,   222,    -1,    81,    -1,    82,    -1,    80,    -1,    83,
-      -1,   191,   249,   192,    -1,   223,    -1,   224,   193,   225,
-     194,    -1,   226,    -1,   224,   195,    79,    -1,   224,    87,
-      -1,   224,    88,    -1,   249,    -1,   227,    -1,   228,    -1,
-     224,   195,   228,    -1,   230,   192,    -1,   229,   192,    -1,
-     231,    77,    -1,   231,    -1,   231,   247,    -1,   230,   196,
-     247,    -1,   232,   191,    -1,   271,    -1,    79,    -1,    84,
-      -1,   224,    -1,    87,   233,    -1,    88,   233,    -1,   234,
-     233,    -1,   197,    -1,   198,    -1,   199,    -1,   200,    -1,
-     233,    -1,   235,   201,   233,    -1,   235,   202,   233,    -1,
-     235,   203,   233,    -1,   235,    -1,   236,   197,   235,    -1,
-     236,   198,   235,    -1,   236,    -1,   237,    85,   236,    -1,
-     237,    86,   236,    -1,   237,    -1,   238,   204,   237,    -1,
-     238,   205,   237,    -1,   238,    89,   237,    -1,   238,    90,
-     237,    -1,   238,    -1,   239,    91,   238,    -1,   239,    92,
-     238,    -1,   239,    -1,   240,   206,   239,    -1,   240,    -1,
-     241,   207,   240,    -1,   241,    -1,   242,   208,   241,    -1,
-     242,    -1,   243,    93,   242,    -1,   243,    -1,   244,    95,
-     243,    -1,   244,    -1,   245,    94,   244,    -1,   245,    -1,
-     245,   209,   249,   210,   247,    -1,   246,    -1,   233,   248,
-     247,    -1,   211,    -1,    96,    -1,    97,    -1,    99,    -1,
-      98,    -1,   105,    -1,   100,    -1,   101,    -1,   102,    -1,
-     103,    -1,   104,    -1,   247,    -1,   249,   196,   247,    -1,
-     246,    -1,   252,   212,    -1,   260,   212,    -1,   111,   275,
-     272,   212,    -1,   253,   192,    -1,   255,    -1,   254,    -1,
-     255,   257,    -1,   254,   196,   257,    -1,   262,    79,   191,
-      -1,   271,    79,    -1,   271,    79,   193,   250,   194,    -1,
-     268,   258,   256,    -1,   258,   256,    -1,   268,   258,   259,
-      -1,   258,   259,    -1,    -1,    36,    -1,    37,    -1,    38,
-      -1,   271,    -1,   261,    -1,   260,   196,    79,    -1,   260,
-     196,    79,   193,   194,    -1,   260,   196,    79,   193,   250,
-     194,    -1,   260,   196,    79,   193,   194,   211,   281,    -1,
-     260,   196,    79,   193,   250,   194,   211,   281,    -1,   260,
-     196,    79,   211,   281,    -1,   262,    -1,   262,    79,    -1,
-     262,    79,   193,   194,    -1,   262,    79,   193,   250,   194,
-      -1,   262,    79,   193,   194,   211,   281,    -1,   262,    79,
-     193,   250,   194,   211,   281,    -1,   262,    79,   211,   281,
-      -1,   106,    79,    -1,   271,    -1,   269,   271,    -1,    -1,
-     264,    -1,   120,   191,   265,   192,    -1,   266,    -1,   265,
-     196,   266,    -1,    79,    -1,    43,    -1,    42,    -1,    41,
-      -1,     4,    -1,   270,    -1,   267,   269,    -1,   106,   269,
-      -1,     4,    -1,     3,    -1,   263,    40,    -1,    35,    40,
-      -1,   263,    36,    -1,    37,    -1,    35,    36,    -1,    35,
-      37,    -1,    39,    -1,   272,    -1,   275,   272,    -1,   273,
-      -1,   273,   193,   194,    -1,   273,   193,   250,   194,    -1,
-     274,    -1,   276,    -1,    79,    -1,    77,    -1,     6,    -1,
-       7,    -1,     8,    -1,     5,    -1,    29,    -1,    30,    -1,
-      31,    -1,    20,    -1,    21,    -1,    22,    -1,    23,    -1,
-      24,    -1,    25,    -1,    26,    -1,    27,    -1,    28,    -1,
-      32,    -1,    33,    -1,    34,    -1,    44,    -1,    45,    -1,
-      46,    -1,    47,    -1,    48,    -1,    49,    -1,    50,    -1,
-      51,    -1,    52,    -1,    53,    -1,    54,    -1,   154,    -1,
-      55,    -1,    56,    -1,    57,    -1,    58,    -1,   156,    -1,
-      59,    -1,    60,    -1,    61,    -1,    62,    -1,    63,    -1,
-      64,    -1,    65,    -1,    66,    -1,    67,    -1,    68,    -1,
-      69,    -1,    70,    -1,    71,    -1,    72,    -1,    73,    -1,
-      74,    -1,    75,    -1,   109,    -1,   108,    -1,   107,    -1,
-      76,    79,   213,   277,   214,    -1,    76,   213,   277,   214,
-      -1,   278,    -1,   277,   278,    -1,   271,   279,   212,    -1,
-     280,    -1,   279,   196,   280,    -1,    79,    -1,    79,   193,
-     250,   194,    -1,   247,    -1,   251,    -1,   284,    -1,   285,
-      -1,   287,    -1,   286,    -1,   293,    -1,   282,    -1,   291,
-      -1,   292,    -1,   295,    -1,   296,    -1,   297,    -1,   301,
-      -1,   213,   214,    -1,   213,   290,   214,    -1,   289,    -1,
-     286,    -1,   213,   214,    -1,   213,   290,   214,    -1,   283,
-      -1,   290,   283,    -1,   212,    -1,   249,   212,    -1,    14,
-     191,   249,   192,   284,    12,   284,    -1,    14,   191,   249,
-     192,   284,    -1,    14,   191,   249,   192,   285,    -1,    14,
-     191,   249,   192,   284,    12,   285,    -1,   249,    -1,   262,
-      79,   211,   281,    -1,    17,   191,   249,   192,   287,    -1,
-      18,   249,   210,    -1,    19,   210,    -1,    78,   191,   294,
-     192,   288,    -1,    11,   283,    78,   191,   249,   192,   212,
-      -1,    13,   191,   298,   300,   192,   288,    -1,   291,    -1,
-     282,    -1,   294,    -1,    -1,   299,   212,    -1,   299,   212,
-     249,    -1,    10,   212,    -1,     9,   212,    -1,    16,   212,
-      -1,    16,   249,   212,    -1,    15,   212,    -1,   303,    -1,
-     251,    -1,   252,   289,    -1
+     216,     0,    -1,    -1,   218,   220,   217,   222,    -1,    -1,
+     109,    78,   113,    -1,   116,   113,    -1,   117,   113,    -1,
+     118,   113,    -1,   119,   113,    -1,    -1,   220,   221,    -1,
+     110,    76,   112,    76,   113,    -1,   300,    -1,   222,   300,
+      -1,    76,    -1,   223,    -1,    78,    -1,    79,    -1,    77,
+      -1,    80,    -1,   191,   250,   192,    -1,   224,    -1,   225,
+     193,   226,   194,    -1,   227,    -1,   225,   195,    76,    -1,
+     225,    84,    -1,   225,    85,    -1,   250,    -1,   228,    -1,
+     229,    -1,   225,   195,   229,    -1,   231,   192,    -1,   230,
+     192,    -1,   232,    74,    -1,   232,    -1,   232,   248,    -1,
+     231,   196,   248,    -1,   233,   191,    -1,   271,    -1,    76,
+      -1,    81,    -1,   225,    -1,    84,   234,    -1,    85,   234,
+      -1,   235,   234,    -1,   197,    -1,   198,    -1,   199,    -1,
+     200,    -1,   234,    -1,   236,   201,   234,    -1,   236,   202,
+     234,    -1,   236,   203,   234,    -1,   236,    -1,   237,   197,
+     236,    -1,   237,   198,   236,    -1,   237,    -1,   238,    82,
+     237,    -1,   238,    83,   237,    -1,   238,    -1,   239,   204,
+     238,    -1,   239,   205,   238,    -1,   239,    86,   238,    -1,
+     239,    87,   238,    -1,   239,    -1,   240,    88,   239,    -1,
+     240,    89,   239,    -1,   240,    -1,   241,   206,   240,    -1,
+     241,    -1,   242,   207,   241,    -1,   242,    -1,   243,   208,
+     242,    -1,   243,    -1,   244,    90,   243,    -1,   244,    -1,
+     245,    92,   244,    -1,   245,    -1,   246,    91,   245,    -1,
+     246,    -1,   246,   209,   250,   210,   248,    -1,   247,    -1,
+     234,   249,   248,    -1,   211,    -1,    93,    -1,    94,    -1,
+      96,    -1,    95,    -1,   102,    -1,    97,    -1,    98,    -1,
+      99,    -1,   100,    -1,   101,    -1,   248,    -1,   250,   196,
+     248,    -1,   247,    -1,   253,   212,    -1,   261,   212,    -1,
+     108,   275,   272,   212,    -1,   254,   192,    -1,   256,    -1,
+     255,    -1,   256,   258,    -1,   255,   196,   258,    -1,   263,
+      76,   191,    -1,   271,    76,    -1,   271,    76,   193,   251,
+     194,    -1,   268,   259,   257,    -1,   259,   257,    -1,   268,
+     259,   260,    -1,   259,   260,    -1,    -1,    33,    -1,    34,
+      -1,    35,    -1,   271,    -1,   262,    -1,   261,   196,    76,
+      -1,   261,   196,    76,   193,   194,    -1,   261,   196,    76,
+     193,   251,   194,    -1,   261,   196,    76,   193,   194,   211,
+     281,    -1,   261,   196,    76,   193,   251,   194,   211,   281,
+      -1,   261,   196,    76,   211,   281,    -1,   263,    -1,   263,
+      76,    -1,   263,    76,   193,   194,    -1,   263,    76,   193,
+     251,   194,    -1,   263,    76,   193,   194,   211,   281,    -1,
+     263,    76,   193,   251,   194,   211,   281,    -1,   263,    76,
+     211,   281,    -1,   103,    76,    -1,   271,    -1,   269,   271,
+      -1,   120,   191,   265,   192,    -1,   266,    -1,   265,   196,
+     266,    -1,    76,    -1,    76,   211,    78,    -1,    40,    -1,
+      39,    -1,    38,    -1,     4,    -1,   270,    -1,   264,    -1,
+     264,   270,    -1,   267,    -1,   267,   270,    -1,   103,   270,
+      -1,   103,   267,   270,    -1,   103,    -1,     4,    -1,     3,
+      -1,    37,    -1,    32,    37,    -1,    33,    -1,    34,    -1,
+      32,    33,    -1,    32,    34,    -1,    36,    -1,   272,    -1,
+     275,   272,    -1,   273,    -1,   273,   193,   194,    -1,   273,
+     193,   251,   194,    -1,   274,    -1,   276,    -1,    76,    -1,
+      74,    -1,     6,    -1,     7,    -1,     8,    -1,     5,    -1,
+      29,    -1,    30,    -1,    31,    -1,    20,    -1,    21,    -1,
+      22,    -1,    23,    -1,    24,    -1,    25,    -1,    26,    -1,
+      27,    -1,    28,    -1,    41,    -1,    42,    -1,    43,    -1,
+      44,    -1,    45,    -1,    46,    -1,    47,    -1,    48,    -1,
+      49,    -1,    50,    -1,    51,    -1,   154,    -1,    52,    -1,
+      53,    -1,    54,    -1,    55,    -1,   156,    -1,    56,    -1,
+      57,    -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,
+      62,    -1,    63,    -1,    64,    -1,    65,    -1,    66,    -1,
+      67,    -1,    68,    -1,    69,    -1,    70,    -1,    71,    -1,
+      72,    -1,   106,    -1,   105,    -1,   104,    -1,    73,    76,
+     213,   277,   214,    -1,    73,   213,   277,   214,    -1,   278,
+      -1,   277,   278,    -1,   271,   279,   212,    -1,   280,    -1,
+     279,   196,   280,    -1,    76,    -1,    76,   193,   251,   194,
+      -1,   248,    -1,   252,    -1,   285,    -1,   284,    -1,   282,
+      -1,   289,    -1,   290,    -1,   293,    -1,   294,    -1,   295,
+      -1,   299,    -1,   213,   214,    -1,   213,   288,   214,    -1,
+     287,    -1,   284,    -1,   213,   214,    -1,   213,   288,   214,
+      -1,   283,    -1,   288,   283,    -1,   212,    -1,   250,   212,
+      -1,    14,   191,   250,   192,   291,    -1,   283,    12,   283,
+      -1,   283,    -1,   250,    -1,   263,    76,   211,   281,    -1,
+      17,   191,   250,   192,   285,    -1,    18,   250,   210,    -1,
+      19,   210,    -1,    75,   191,   292,   192,   286,    -1,    11,
+     283,    75,   191,   250,   192,   212,    -1,    13,   191,   296,
+     298,   192,   286,    -1,   289,    -1,   282,    -1,   292,    -1,
+      -1,   297,   212,    -1,   297,   212,   250,    -1,    10,   212,
+      -1,     9,   212,    -1,    16,   212,    -1,    16,   250,   212,
+      -1,    15,   212,    -1,   301,    -1,   252,    -1,   219,    -1,
+     253,   287,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   210,   210,   209,   218,   221,   238,   240,   244,   253,
-     261,   272,   276,   283,   290,   297,   304,   311,   318,   319,
-     325,   329,   336,   342,   351,   355,   359,   360,   369,   370,
-     374,   375,   379,   385,   397,   401,   407,   414,   425,   426,
-     432,   438,   448,   449,   450,   451,   455,   456,   462,   468,
-     477,   478,   484,   493,   494,   500,   509,   510,   516,   522,
-     528,   537,   538,   544,   553,   554,   563,   564,   573,   574,
-     583,   584,   593,   594,   603,   604,   613,   614,   623,   624,
-     633,   634,   635,   636,   637,   638,   639,   640,   641,   642,
-     643,   647,   651,   667,   671,   675,   679,   693,   697,   698,
-     702,   707,   715,   726,   736,   751,   758,   763,   774,   786,
-     787,   788,   789,   793,   797,   798,   807,   816,   825,   834,
-     843,   856,   867,   876,   885,   894,   903,   912,   921,   935,
-     942,   953,   954,   958,   965,   966,   973,  1007,  1008,  1009,
-    1013,  1017,  1018,  1022,  1030,  1031,  1032,  1033,  1034,  1035,
-    1036,  1037,  1038,  1042,  1043,  1051,  1052,  1058,  1067,  1073,
-    1079,  1088,  1089,  1090,  1091,  1092,  1093,  1094,  1095,  1096,
-    1097,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,  1106,
-    1107,  1108,  1109,  1110,  1111,  1112,  1113,  1114,  1115,  1116,
-    1117,  1118,  1119,  1120,  1121,  1122,  1123,  1124,  1125,  1126,
-    1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,
-    1137,  1138,  1139,  1140,  1141,  1145,  1156,  1167,  1181,  1187,
-    1196,  1201,  1209,  1224,  1229,  1237,  1243,  1252,  1256,  1262,
-    1263,  1267,  1268,  1272,  1276,  1277,  1278,  1279,  1280,  1281,
-    1282,  1286,  1292,  1301,  1302,  1306,  1312,  1321,  1331,  1343,
-    1349,  1358,  1367,  1373,  1379,  1388,  1392,  1406,  1410,  1411,
-    1415,  1422,  1429,  1439,  1440,  1444,  1446,  1452,  1457,  1466,
-    1472,  1478,  1484,  1490,  1499,  1500,  1504
+       0,   211,   211,   210,   217,   219,   239,   240,   241,   242,
+     245,   247,   251,   260,   268,   279,   283,   290,   297,   304,
+     311,   318,   325,   326,   332,   336,   343,   349,   358,   362,
+     366,   367,   376,   377,   381,   382,   386,   392,   404,   408,
+     414,   421,   432,   433,   439,   445,   455,   456,   457,   458,
+     462,   463,   469,   475,   484,   485,   491,   500,   501,   507,
+     516,   517,   523,   529,   535,   544,   545,   551,   560,   561,
+     570,   571,   580,   581,   590,   591,   600,   601,   610,   611,
+     620,   621,   630,   631,   640,   641,   642,   643,   644,   645,
+     646,   647,   648,   649,   650,   654,   658,   674,   678,   682,
+     686,   700,   704,   705,   709,   714,   722,   733,   743,   758,
+     765,   770,   781,   794,   797,   802,   807,   816,   820,   821,
+     830,   839,   848,   857,   866,   879,   890,   899,   908,   917,
+     926,   935,   944,   958,   965,   976,   983,   984,  1003,  1032,
+    1073,  1078,  1083,  1091,  1099,  1100,  1101,  1106,  1107,  1112,
+    1117,  1123,  1131,  1136,  1141,  1146,  1152,  1157,  1162,  1167,
+    1172,  1180,  1181,  1189,  1190,  1196,  1205,  1211,  1217,  1226,
+    1227,  1228,  1229,  1230,  1231,  1232,  1233,  1234,  1235,  1236,
+    1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,  1246,
+    1247,  1248,  1249,  1250,  1251,  1252,  1253,  1254,  1255,  1256,
+    1257,  1258,  1259,  1260,  1261,  1262,  1263,  1264,  1265,  1266,
+    1267,  1268,  1269,  1270,  1271,  1272,  1273,  1274,  1275,  1276,
+    1280,  1291,  1302,  1316,  1322,  1331,  1336,  1344,  1359,  1364,
+    1372,  1378,  1387,  1391,  1397,  1398,  1402,  1403,  1404,  1405,
+    1406,  1407,  1408,  1412,  1418,  1427,  1428,  1432,  1438,  1447,
+    1457,  1469,  1475,  1484,  1493,  1498,  1506,  1510,  1524,  1528,
+    1529,  1533,  1540,  1547,  1557,  1558,  1562,  1564,  1570,  1575,
+    1584,  1590,  1596,  1602,  1608,  1617,  1618,  1619,  1623
 };
 #endif
 
@@ -839,11 +841,11 @@ static const yytype_uint16 yyrline[] =
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "ATTRIBUTE", "CONST_TOK", "BOOL",
-  "FLOAT", "INT", "UINT", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
-  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "BVEC2", "BVEC3",
-  "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3", "UVEC4", "VEC2",
-  "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", "IN", "OUT", "INOUT",
+  "$end", "error", "$undefined", "ATTRIBUTE", "CONST_TOK", "BOOL_TOK",
+  "FLOAT_TOK", "INT_TOK", "UINT_TOK", "BREAK", "CONTINUE", "DO", "ELSE",
+  "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "BVEC2",
+  "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3", "UVEC4",
+  "VEC2", "VEC3", "VEC4", "CENTROID", "IN_TOK", "OUT_TOK", "INOUT_TOK",
   "UNIFORM", "VARYING", "NOPERSPECTIVE", "FLAT", "SMOOTH", "MAT2X2",
   "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
   "MAT4X4", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE",
@@ -852,30 +854,32 @@ static const char *const yytname[] =
   "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
   "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
   "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
-  "USAMPLER2DARRAY", "STRUCT", "VOID", "WHILE", "IDENTIFIER",
+  "USAMPLER2DARRAY", "STRUCT", "VOID_TOK", "WHILE", "IDENTIFIER",
   "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
   "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
   "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
   "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
   "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT",
   "LOWP", "MEDIUMP", "HIGHP", "SUPERP", "PRECISION", "VERSION",
-  "EXTENSION", "LINE", "PRAGMA", "COLON", "EOL", "INTERFACE", "OUTPUT",
-  "LAYOUT_TOK", "ASM", "CLASS", "UNION", "ENUM", "TYPEDEF", "TEMPLATE",
-  "THIS", "PACKED", "GOTO", "INLINE_TOK", "NOINLINE", "VOLATILE",
-  "PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL", "LONG", "SHORT", "DOUBLE",
-  "HALF", "FIXED", "UNSIGNED", "INPUT", "OUPTUT", "HVEC2", "HVEC3",
-  "HVEC4", "DVEC2", "DVEC3", "DVEC4", "FVEC2", "FVEC3", "FVEC4",
-  "SAMPLER2DRECT", "SAMPLER3DRECT", "SAMPLER2DRECTSHADOW", "SIZEOF",
-  "CAST", "NAMESPACE", "USING", "ERROR_TOK", "COMMON", "PARTITION",
-  "ACTIVE", "SAMPLERBUFFER", "FILTER", "IMAGE1D", "IMAGE2D", "IMAGE3D",
-  "IMAGECUBE", "IMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE1D", "IIMAGE2D",
-  "IIMAGE3D", "IIMAGECUBE", "IIMAGE1DARRAY", "IIMAGE2DARRAY", "UIMAGE1D",
-  "UIMAGE2D", "UIMAGE3D", "UIMAGECUBE", "UIMAGE1DARRAY", "UIMAGE2DARRAY",
-  "IMAGE1DSHADOW", "IMAGE2DSHADOW", "IMAGEBUFFER", "IIMAGEBUFFER",
-  "UIMAGEBUFFER", "ROW_MAJOR", "'('", "')'", "'['", "']'", "'.'", "','",
-  "'+'", "'-'", "'!'", "'~'", "'*'", "'/'", "'%'", "'<'", "'>'", "'&'",
-  "'^'", "'|'", "'?'", "':'", "'='", "';'", "'{'", "'}'", "$accept",
-  "translation_unit", "$@1", "version_statement",
+  "EXTENSION", "LINE", "COLON", "EOL", "INTERFACE", "OUTPUT",
+  "PRAGMA_DEBUG_ON", "PRAGMA_DEBUG_OFF", "PRAGMA_OPTIMIZE_ON",
+  "PRAGMA_OPTIMIZE_OFF", "LAYOUT_TOK", "ASM", "CLASS", "UNION", "ENUM",
+  "TYPEDEF", "TEMPLATE", "THIS", "PACKED_TOK", "GOTO", "INLINE_TOK",
+  "NOINLINE", "VOLATILE", "PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL",
+  "LONG_TOK", "SHORT_TOK", "DOUBLE_TOK", "HALF", "FIXED_TOK", "UNSIGNED",
+  "INPUT_TOK", "OUPTUT", "HVEC2", "HVEC3", "HVEC4", "DVEC2", "DVEC3",
+  "DVEC4", "FVEC2", "FVEC3", "FVEC4", "SAMPLER2DRECT", "SAMPLER3DRECT",
+  "SAMPLER2DRECTSHADOW", "SIZEOF", "CAST", "NAMESPACE", "USING",
+  "ERROR_TOK", "COMMON", "PARTITION", "ACTIVE", "SAMPLERBUFFER", "FILTER",
+  "IMAGE1D", "IMAGE2D", "IMAGE3D", "IMAGECUBE", "IMAGE1DARRAY",
+  "IMAGE2DARRAY", "IIMAGE1D", "IIMAGE2D", "IIMAGE3D", "IIMAGECUBE",
+  "IIMAGE1DARRAY", "IIMAGE2DARRAY", "UIMAGE1D", "UIMAGE2D", "UIMAGE3D",
+  "UIMAGECUBE", "UIMAGE1DARRAY", "UIMAGE2DARRAY", "IMAGE1DSHADOW",
+  "IMAGE2DSHADOW", "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER",
+  "ROW_MAJOR", "'('", "')'", "'['", "']'", "'.'", "','", "'+'", "'-'",
+  "'!'", "'~'", "'*'", "'/'", "'%'", "'<'", "'>'", "'&'", "'^'", "'|'",
+  "'?'", "':'", "'='", "';'", "'{'", "'}'", "$accept", "translation_unit",
+  "$@1", "version_statement", "pragma_statement",
   "extension_statement_list", "extension_statement",
   "external_declaration_list", "variable_identifier", "primary_expression",
   "postfix_expression", "integer_expression", "function_call",
@@ -894,18 +898,17 @@ static const char *const yytname[] =
   "function_header", "parameter_declarator", "parameter_declaration",
   "parameter_qualifier", "parameter_type_specifier",
   "init_declarator_list", "single_declaration", "fully_specified_type",
-  "opt_layout_qualifier", "layout_qualifier", "layout_qualifier_id_list",
-  "layout_qualifier_id", "interpolation_qualifier",
-  "parameter_type_qualifier", "type_qualifier", "storage_qualifier",
-  "type_specifier", "type_specifier_no_prec", "type_specifier_nonarray",
-  "basic_type_specifier_nonarray", "precision_qualifier",
-  "struct_specifier", "struct_declaration_list", "struct_declaration",
-  "struct_declarator_list", "struct_declarator", "initializer",
-  "declaration_statement", "statement", "statement_matched",
-  "statement_unmatched", "simple_statement", "compound_statement",
-  "statement_no_new_scope", "compound_statement_no_new_scope",
-  "statement_list", "expression_statement", "selection_statement_matched",
-  "selection_statement_unmatched", "condition", "switch_statement",
+  "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
+  "interpolation_qualifier", "parameter_type_qualifier", "type_qualifier",
+  "storage_qualifier", "type_specifier", "type_specifier_no_prec",
+  "type_specifier_nonarray", "basic_type_specifier_nonarray",
+  "precision_qualifier", "struct_specifier", "struct_declaration_list",
+  "struct_declaration", "struct_declarator_list", "struct_declarator",
+  "initializer", "declaration_statement", "statement", "simple_statement",
+  "compound_statement", "statement_no_new_scope",
+  "compound_statement_no_new_scope", "statement_list",
+  "expression_statement", "selection_statement",
+  "selection_rest_statement", "condition", "switch_statement",
   "case_label", "iteration_statement", "for_init_statement",
   "conditionopt", "for_rest_statement", "jump_statement",
   "external_declaration", "function_definition", 0
@@ -945,67 +948,67 @@ static const yytype_uint16 yytoknum[] =
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   215,   217,   216,   218,   218,   219,   219,   220,   221,
-     221,   222,   223,   223,   223,   223,   223,   223,   224,   224,
-     224,   224,   224,   224,   225,   226,   227,   227,   228,   228,
-     229,   229,   230,   230,   231,   232,   232,   232,   233,   233,
+       0,   215,   217,   216,   218,   218,   219,   219,   219,   219,
+     220,   220,   221,   222,   222,   223,   224,   224,   224,   224,
+     224,   224,   225,   225,   225,   225,   225,   225,   226,   227,
+     228,   228,   229,   229,   230,   230,   231,   231,   232,   233,
      233,   233,   234,   234,   234,   234,   235,   235,   235,   235,
-     236,   236,   236,   237,   237,   237,   238,   238,   238,   238,
-     238,   239,   239,   239,   240,   240,   241,   241,   242,   242,
-     243,   243,   244,   244,   245,   245,   246,   246,   247,   247,
-     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
-     248,   249,   249,   250,   251,   251,   251,   252,   253,   253,
-     254,   254,   255,   256,   256,   257,   257,   257,   257,   258,
-     258,   258,   258,   259,   260,   260,   260,   260,   260,   260,
-     260,   261,   261,   261,   261,   261,   261,   261,   261,   262,
-     262,   263,   263,   264,   265,   265,   266,   267,   267,   267,
-     268,   269,   269,   269,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   271,   271,   272,   272,   272,   273,   273,
-     273,   274,   274,   274,   274,   274,   274,   274,   274,   274,
+     236,   236,   236,   236,   237,   237,   237,   238,   238,   238,
+     239,   239,   239,   239,   239,   240,   240,   240,   241,   241,
+     242,   242,   243,   243,   244,   244,   245,   245,   246,   246,
+     247,   247,   248,   248,   249,   249,   249,   249,   249,   249,
+     249,   249,   249,   249,   249,   250,   250,   251,   252,   252,
+     252,   253,   254,   254,   255,   255,   256,   257,   257,   258,
+     258,   258,   258,   259,   259,   259,   259,   260,   261,   261,
+     261,   261,   261,   261,   261,   262,   262,   262,   262,   262,
+     262,   262,   262,   263,   263,   264,   265,   265,   266,   266,
+     267,   267,   267,   268,   269,   269,   269,   269,   269,   269,
+     269,   269,   270,   270,   270,   270,   270,   270,   270,   270,
+     270,   271,   271,   272,   272,   272,   273,   273,   273,   274,
+     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
      274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
      274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
      274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
      274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   275,   275,   275,   276,   276,
-     277,   277,   278,   279,   279,   280,   280,   281,   282,   283,
-     283,   284,   284,   285,   286,   286,   286,   286,   286,   286,
-     286,   287,   287,   288,   288,   289,   289,   290,   290,   291,
-     291,   292,   293,   293,   293,   294,   294,   295,   296,   296,
-     297,   297,   297,   298,   298,   299,   299,   300,   300,   301,
-     301,   301,   301,   301,   302,   302,   303
+     275,   275,   275,   276,   276,   277,   277,   278,   279,   279,
+     280,   280,   281,   282,   283,   283,   284,   284,   284,   284,
+     284,   284,   284,   285,   285,   286,   286,   287,   287,   288,
+     288,   289,   289,   290,   291,   291,   292,   292,   293,   294,
+     294,   295,   295,   295,   296,   296,   297,   297,   298,   298,
+     299,   299,   299,   299,   299,   300,   300,   300,   301
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     0,     4,     0,     3,     0,     2,     5,     1,
-       2,     1,     1,     1,     1,     1,     1,     3,     1,     4,
-       1,     3,     2,     2,     1,     1,     1,     3,     2,     2,
-       2,     1,     2,     3,     2,     1,     1,     1,     1,     2,
-       2,     2,     1,     1,     1,     1,     1,     3,     3,     3,
-       1,     3,     3,     1,     3,     3,     1,     3,     3,     3,
-       3,     1,     3,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     1,     3,     1,     3,     1,     5,     1,     3,
+       0,     2,     0,     4,     0,     3,     2,     2,     2,     2,
+       0,     2,     5,     1,     2,     1,     1,     1,     1,     1,
+       1,     3,     1,     4,     1,     3,     2,     2,     1,     1,
+       1,     3,     2,     2,     2,     1,     2,     3,     2,     1,
+       1,     1,     1,     2,     2,     2,     1,     1,     1,     1,
+       1,     3,     3,     3,     1,     3,     3,     1,     3,     3,
+       1,     3,     3,     3,     3,     1,     3,     3,     1,     3,
+       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     5,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     2,     2,
+       4,     2,     1,     1,     2,     3,     3,     2,     5,     3,
+       2,     3,     2,     0,     1,     1,     1,     1,     1,     3,
+       5,     6,     7,     8,     5,     1,     2,     4,     5,     6,
+       7,     4,     2,     1,     2,     4,     1,     3,     1,     3,
+       1,     1,     1,     1,     1,     1,     2,     1,     2,     2,
+       3,     1,     1,     1,     1,     2,     1,     1,     2,     2,
+       1,     1,     2,     1,     3,     4,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     1,     2,     2,     4,     2,     1,     1,
-       2,     3,     3,     2,     5,     3,     2,     3,     2,     0,
-       1,     1,     1,     1,     1,     3,     5,     6,     7,     8,
-       5,     1,     2,     4,     5,     6,     7,     4,     2,     1,
-       2,     0,     1,     4,     1,     3,     1,     1,     1,     1,
-       1,     1,     2,     2,     1,     1,     2,     2,     2,     1,
-       2,     2,     1,     1,     2,     1,     3,     4,     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,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     5,     4,
-       1,     2,     3,     1,     3,     1,     4,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     3,     1,     1,     2,     3,     1,     2,     1,
-       2,     7,     5,     5,     7,     1,     4,     5,     3,     2,
-       5,     7,     6,     1,     1,     1,     0,     2,     3,     2,
-       2,     2,     3,     2,     1,     1,     2
+       1,     1,     1,     5,     4,     1,     2,     3,     1,     3,
+       1,     4,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     3,     1,     1,     2,     3,     1,
+       2,     1,     2,     5,     3,     1,     1,     4,     5,     3,
+       2,     5,     7,     6,     1,     1,     1,     0,     2,     3,
+       2,     2,     2,     3,     2,     1,     1,     1,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1013,629 +1016,601 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       4,     0,     0,     6,     0,     1,     2,     5,     0,   131,
-       7,     0,   145,   144,   165,   162,   163,   164,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   166,   167,   168,
-     178,   179,   180,     0,   149,   152,   139,   138,   137,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     193,   194,   195,   196,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,     0,   161,   160,   131,   217,   216,   215,     0,     0,
-     192,   197,   131,   275,     0,     0,    99,   109,     0,   114,
-     121,     0,   132,   131,     0,   141,   129,   153,   155,   158,
-       0,   159,     9,   274,     0,   150,   151,   147,     0,     0,
-     128,   131,   143,     0,     0,    10,    94,   131,   276,    97,
-     109,   140,   110,   111,   112,   100,     0,   109,     0,    95,
-     122,   148,   146,   142,   130,     0,   154,     0,     0,     0,
-       0,   220,     0,   136,     0,   134,     0,     0,   131,     0,
-       0,     0,     0,     0,     0,     0,     0,    11,    15,    13,
-      14,    16,    37,     0,     0,     0,    42,    43,    44,    45,
-     249,   131,   245,    12,    18,    38,    20,    25,    26,     0,
-       0,    31,     0,    46,     0,    50,    53,    56,    61,    64,
-      66,    68,    70,    72,    74,    76,    78,    91,     0,   228,
-       0,   129,   234,   247,   229,   230,   232,   231,   131,   235,
-     236,   233,   237,   238,   239,   240,   101,   106,   108,   113,
-       0,   115,   102,     0,     0,   156,    46,    93,     0,    35,
-       8,     0,   225,     0,   223,   219,   221,    96,   133,     0,
-     270,   269,     0,   131,     0,   273,   271,     0,     0,     0,
-     259,   131,    39,    40,     0,   241,   131,    22,    23,     0,
-       0,    29,    28,     0,   161,    32,    34,    81,    82,    84,
-      83,    86,    87,    88,    89,    90,    85,    80,     0,    41,
+       4,     0,     0,    10,     0,     1,     2,     5,     0,     0,
+      11,     0,   153,   152,   173,   170,   171,   172,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   174,   175,   176,
+       0,   156,   157,   160,   154,   142,   141,   140,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   198,
+     199,   200,   201,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+       0,   169,   168,   151,   222,   221,   220,     0,     0,     0,
+       0,     0,     0,   197,   202,   277,     3,   276,     0,     0,
+     103,   113,     0,   118,   125,   145,   147,     0,   144,   133,
+     161,   163,   166,     0,   167,    13,   275,     0,   158,   159,
+     155,     0,     0,   132,     0,   149,     0,     6,     7,     8,
+       9,     0,    14,    98,     0,   278,   101,   113,   143,   114,
+     115,   116,   104,     0,   113,     0,    99,   126,   146,   148,
+     134,     0,   162,     0,     0,     0,     0,   225,   150,     0,
+     138,     0,   136,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    15,    19,    17,    18,    20,    41,
+       0,     0,     0,    46,    47,    48,    49,   251,     0,   247,
+      16,    22,    42,    24,    29,    30,     0,     0,    35,     0,
+      50,     0,    54,    57,    60,    65,    68,    70,    72,    74,
+      76,    78,    80,    82,    95,     0,   233,     0,   133,   236,
+     249,   235,   234,     0,   237,   238,   239,   240,   241,   242,
+     105,   110,   112,   117,     0,   119,   106,     0,     0,   164,
+      50,    97,     0,    39,    12,     0,   230,     0,   228,   224,
+     226,   100,     0,   135,     0,   271,   270,     0,     0,     0,
+     274,   272,     0,     0,     0,   260,     0,    43,    44,     0,
+     243,     0,    26,    27,     0,     0,    33,    32,     0,   169,
+      36,    38,    85,    86,    88,    87,    90,    91,    92,    93,
+      94,    89,    84,     0,    45,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   250,   246,   248,   103,   105,   107,     0,     0,   123,
-       0,   227,   127,   157,   218,     0,     0,   222,   135,     0,
-     264,   263,   131,     0,   272,     0,   258,   255,     0,     0,
-      17,   242,     0,    24,    21,    27,    33,    79,    47,    48,
-      49,    51,    52,    54,    55,    59,    60,    57,    58,    62,
-      63,    65,    67,    69,    71,    73,    75,     0,    92,     0,
-     116,     0,   120,     0,   124,     0,   224,     0,   265,     0,
-       0,   131,     0,     0,   131,    19,     0,     0,     0,   117,
-     125,     0,   226,     0,   267,   131,   252,   253,   257,     0,
-       0,   244,   260,   243,    77,   104,   118,     0,   126,     0,
-     268,   262,   131,   256,     0,   119,   261,   251,   254,     0,
-     131,     0,   131
+       0,     0,     0,     0,     0,     0,   252,   248,   250,   107,
+     109,   111,     0,     0,   127,     0,   232,   131,   165,   223,
+       0,     0,   227,   139,   137,     0,   265,   264,   267,     0,
+     273,     0,   259,   151,   256,     0,     0,    21,   244,     0,
+      28,    25,    31,    37,    83,    51,    52,    53,    55,    56,
+      58,    59,    63,    64,    61,    62,    66,    67,    69,    71,
+      73,    75,    77,    79,     0,    96,     0,   120,     0,   124,
+       0,   128,     0,   229,     0,   266,     0,     0,     0,     0,
+       0,     0,    23,     0,     0,     0,   121,   129,     0,   231,
+       0,   268,     0,   255,   253,   258,     0,   246,   261,   245,
+      81,   108,   122,     0,   130,     0,   269,   263,     0,   257,
+     123,   262,   254
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     9,     3,     6,    10,    82,   173,   174,   175,
-     332,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   278,   198,   228,   199,   200,    85,    86,
-      87,   217,   125,   126,   218,    88,    89,    90,    91,    92,
-     144,   145,    93,   127,    94,    95,   229,    97,    98,    99,
-     100,   101,   140,   141,   233,   234,   312,   202,   203,   204,
-     205,   206,   207,   392,   393,   208,   209,   210,   211,   329,
-     212,   213,   214,   322,   369,   370,   215,   102,   103
+      -1,     2,     9,     3,    85,     6,    10,    86,   180,   181,
+     182,   339,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   283,   205,   232,   206,   207,    89,
+      90,    91,   221,   132,   133,   222,    92,    93,    94,    95,
+     151,   152,    96,   134,    97,    98,   233,   100,   101,   102,
+     103,   104,   146,   147,   237,   238,   317,   209,   210,   211,
+     212,   398,   399,   213,   214,   215,   394,   336,   216,   217,
+     218,   328,   376,   377,   219,   105,   106
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -361
+#define YYPACT_NINF -360
 static const yytype_int16 yypact[] =
 {
-     -51,   -15,    81,  -361,   -34,  -361,   -24,  -361,    25,  3891,
-    -361,   -19,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,    69,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,   -78,  -361,  -361,     8,  -361,  -361,  -361,    49,   -80,
-    -361,  -361,  3773,  -361,  -177,   -79,   -55,     2,  -168,  -361,
-      70,    56,  -361,    28,  4120,  -361,  -361,  -361,   -39,  -361,
-    4233,  -361,  -361,  -361,    80,  -361,  -361,  -361,   -67,  4120,
-    -361,    28,  -361,  4233,    95,  -361,  -361,   401,  -361,  -361,
-      18,  -361,  -361,  -361,  -361,  -361,  4120,   176,   116,  -361,
-    -113,  -361,  -361,  -361,  -361,  2868,  -361,    86,  4120,   126,
-    2263,  -361,     9,  -361,   -89,  -361,    17,    24,  1249,    46,
-      47,    27,  2489,    52,  3411,    30,    53,   -70,  -361,  -361,
-    -361,  -361,  -361,  3411,  3411,  3411,  -361,  -361,  -361,  -361,
-    -361,   613,  -361,  -361,  -361,   -69,  -361,  -361,  -361,    54,
-     -76,  3592,    59,    67,  3411,    22,     0,   115,   -82,   125,
-      39,    44,    45,   159,   161,   -90,  -361,  -361,  -159,  -361,
-      48,    66,  -361,  -361,  -361,  -361,  -361,  -361,   825,  -361,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,   179,
-    4120,  -170,  -361,  3049,  3411,  -361,  -361,  -361,    65,  -361,
-    -361,  2376,    68,  -122,  -361,  -361,  -361,  -361,  -361,    95,
-    -361,  -361,   184,  1869,  3411,  -361,  -361,  -121,  3411,  -162,
-    -361,  2687,  -361,  -361,   -60,  -361,  1037,  -361,  -361,  3411,
-    4007,  -361,  -361,  3411,    71,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  3411,  -361,
-    3411,  3411,  3411,  3411,  3411,  3411,  3411,  3411,  3411,  3411,
-    3411,  3411,  3411,  3411,  3411,  3411,  3411,  3411,  3411,  3411,
-    3411,  -361,  -361,  -361,    72,  -361,  -361,  3230,  3411,    55,
-      73,  -361,  -361,  -361,  -361,  3411,   126,  -361,  -361,    77,
-    -361,  -361,  2067,   -59,  -361,   -52,  -361,    74,   185,    79,
-    -361,  -361,    75,    74,    82,  -361,  -361,  -361,  -361,  -361,
-    -361,    22,    22,     0,     0,   115,   115,   115,   115,   -82,
-     -82,   125,    39,    44,    45,   159,   161,  -128,  -361,  3411,
-      61,    83,  -361,  3411,    63,    85,  -361,  3411,  -361,    64,
-      88,  1249,    62,    76,  1460,  -361,  3411,    87,  3411,    78,
-    -361,  3411,  -361,   -49,  3411,  1460,   270,  -361,  -361,  3411,
-      92,  -361,  -361,  -361,  -361,  -361,  -361,  3411,  -361,    84,
-      74,  -361,  1249,  -361,  3411,  -361,  -361,  -361,  -361,   -41,
-    1671,   272,  1671
+     -54,   -53,    37,  -360,   -26,  -360,    -5,  -360,    73,  3276,
+    -360,    63,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+     105,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+     -69,  -360,  -360,    42,  -360,  -360,  -360,   -74,    65,    79,
+      83,    85,    16,  -360,  -360,  -360,  3276,  -360,   -99,     9,
+      13,     5,  -152,  -360,   134,    17,    17,  3464,  -360,  -360,
+    -360,    18,  -360,  3536,  -360,  -360,  -360,   136,  -360,  -360,
+    -360,     0,  3464,  -360,    17,  -360,  3536,  -360,  -360,  -360,
+    -360,   138,  -360,  -360,   387,  -360,  -360,    24,  -360,  -360,
+    -360,  -360,  -360,  3464,   149,   141,  -360,  -150,  -360,  -360,
+    -360,  2371,  -360,   106,  3464,   144,  1760,  -360,  -360,    11,
+      14,  -144,  -360,    12,    20,  1235,    30,    31,    22,  1992,
+      38,  2914,    26,    46,   -59,  -360,  -360,  -360,  -360,  -360,
+    2914,  2914,  2914,  -360,  -360,  -360,  -360,  -360,   599,  -360,
+    -360,  -360,   -70,  -360,  -360,  -360,    36,   -56,  3095,    47,
+     -30,  2914,    -8,  -113,    39,   -76,    45,    34,    23,    35,
+     154,   153,   -79,  -360,  -360,  -123,  -360,    41,    55,  -360,
+    -360,  -360,  -360,   811,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,   172,  3464,  -164,  -360,  2552,  2914,  -360,
+    -360,  -360,    56,  -360,  -360,  1876,    58,  -110,  -360,  -360,
+    -360,  -360,   171,  -360,   138,  -360,  -360,   179,  1644,  2914,
+    -360,  -360,  -101,  2914,   -90,  -360,  2190,  -360,  -360,   -51,
+    -360,  1023,  -360,  -360,  2914,  3392,  -360,  -360,  2914,    64,
+    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,  2914,  -360,  2914,  2914,  2914,  2914,  2914,
+    2914,  2914,  2914,  2914,  2914,  2914,  2914,  2914,  2914,  2914,
+    2914,  2914,  2914,  2914,  2914,  2914,  -360,  -360,  -360,    62,
+    -360,  -360,  2733,  2914,    48,    66,  -360,  -360,  -360,  -360,
+    2914,   144,  -360,  -360,  -360,    67,  -360,  -360,  2190,   -49,
+    -360,   -22,  -360,   238,    68,   187,    74,  -360,  -360,    71,
+      68,    76,  -360,  -360,  -360,  -360,  -360,  -360,    -8,    -8,
+    -113,  -113,    39,    39,    39,    39,   -76,   -76,    45,    34,
+      23,    35,   154,   153,   -84,  -360,  2914,    57,    75,  -360,
+    2914,    69,    87,  -360,  2914,  -360,    70,    91,  1235,    72,
+      78,  1446,  -360,  2914,    90,  2914,    81,  -360,  2914,  -360,
+     -16,  2914,  1446,   267,  -360,  -360,  2914,  -360,  -360,  -360,
+    -360,  -360,  -360,  2914,  -360,    82,    68,  -360,  1235,  -360,
+    -360,  -360,  -360
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
-    -361,  -361,  -361,    26,  -361,  -361,  -361,  -361,  -105,  -361,
-     -64,   -54,   -81,   -65,    -8,    -6,    -5,    -4,    -3,    -7,
-    -361,  -111,  -148,  -361,  -149,  -221,     6,    11,  -361,  -361,
-    -361,    89,   173,   168,    90,  -361,  -361,  -238,  -361,  -361,
-    -361,    58,  -361,  -361,   -47,  -361,    -9,   -71,  -361,  -361,
-     220,  -361,   162,  -130,  -361,   -17,  -236,    60,  -131,  -350,
-    -345,  -360,   -68,   -84,   218,   134,    91,  -361,  -361,   -16,
-    -361,  -361,  -361,  -361,  -361,  -361,  -361,   225,  -361
+    -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,  -360,
+    -360,  -360,  -360,  -360,    25,  -360,  -360,  -360,  -360,  -135,
+    -360,   -89,   -88,  -104,   -91,   -11,    -6,    -4,    -3,    -7,
+      -2,  -360,  -133,   -97,  -360,  -156,  -193,     4,    10,  -360,
+    -360,  -360,    80,   170,   166,    84,  -360,  -360,  -229,  -360,
+    -360,    59,   -71,  -360,  -360,   -72,    -9,     1,  -360,  -360,
+     225,  -360,   161,  -128,  -360,   -14,  -287,    61,  -151,  -359,
+     -68,   -82,   224,   135,    77,  -360,  -360,   -13,  -360,  -360,
+    -360,  -360,  -360,  -360,  -360,   228,  -360
 };
 
 /* 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 -267
+#define YYTABLE_NINF -169
 static const yytype_int16 yytable[] =
 {
-      96,   108,   310,   247,   298,   249,   121,   287,   288,  -160,
-     236,    12,    13,   328,   391,    83,   254,   242,   257,   258,
-      84,   386,   121,   307,   227,   391,   387,   112,   128,   136,
-     226,    12,    13,   265,   300,   116,   117,   300,   122,   123,
-     124,   308,   142,    33,   129,    34,   133,    35,   326,    36,
-      37,    38,   407,   301,   122,   123,   124,   408,   252,   253,
-     411,     1,   407,    33,   112,    34,     4,    35,   300,    36,
-      37,    38,   362,    96,   316,   300,   311,   303,   222,   279,
-     223,     5,   376,     7,   328,   134,   361,   110,    83,     8,
-     317,   324,   131,    84,   365,   323,   132,   104,   224,   325,
-     139,   236,   327,   238,    11,   105,   106,   239,   201,   107,
-     333,   114,   227,   119,   111,   336,   262,   219,   226,   299,
-     263,   -36,   289,   290,   259,   303,   260,   380,    79,   139,
-     337,   139,   330,   371,   111,   109,   300,   300,   377,   201,
-     372,   120,   396,   399,   300,   398,   138,   300,    79,   130,
-     357,   410,   358,   403,   135,   300,    75,    76,    77,   137,
-     311,   405,   201,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   327,   143,   338,   339,   340,   226,   226,
-     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
-     226,   226,   226,   226,   -98,   221,   227,   283,   284,   201,
-     285,   286,   226,   230,   227,   232,   345,   346,   347,   348,
-     226,   219,   122,   123,   124,   311,   291,   292,   383,   341,
-     342,   237,   139,   280,   281,   282,   349,   350,   394,   240,
-     311,   343,   344,   311,   201,   400,   241,   243,   244,   245,
-     250,   311,   201,   248,   251,   293,   261,   201,   227,   311,
-     266,   294,   296,   295,   226,   409,   297,   -35,   304,   313,
-     116,   315,   319,   -30,   373,   359,   363,   364,   367,   375,
-     300,   374,   378,   -36,   381,   171,   384,   379,   277,   382,
-     385,   395,   402,   404,   412,   351,   335,   389,   352,   397,
-     353,   356,   354,   216,   355,   220,   406,   318,   113,   366,
-     231,   401,   118,   320,   388,   256,   368,   115,     0,   305,
-     306,     0,     0,   201,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   201,     0,     0,   201,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   201,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   201,     0,     0,     0,     0,     0,     0,
-       0,   201,     0,   201,    12,    13,    14,    15,    16,    17,
-     146,   147,   148,     0,   149,   150,   151,   152,   153,   154,
-     155,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,     0,    34,     0,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,   156,
-     157,   158,   159,   160,   161,   162,     0,     0,   163,   164,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    74,    75,    76,
-      77,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-       0,    79,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      99,   115,   114,   252,   247,   254,   230,   111,   231,   128,
+     292,   293,   303,    87,   262,   263,   259,  -168,   240,    88,
+      12,    13,   397,   138,   139,     4,   369,   335,   128,   312,
+      74,    75,    76,   397,   315,   257,   258,     5,   129,   130,
+     131,   226,   148,   227,   135,    12,    13,   313,   243,    30,
+      31,    32,   244,    33,    34,     1,   284,   129,   130,   131,
+     136,   228,   308,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   305,    30,    31,    32,    99,    33,    34,
+      35,    36,    37,   387,   288,   289,   321,     7,   140,   306,
+      87,   270,   230,   329,   231,   305,    88,   331,   402,   335,
+     334,   404,   322,   145,   142,     8,   305,   240,   340,   409,
+     308,   330,   305,   123,   124,   208,   410,   149,   113,   368,
+     332,   290,   291,   264,   223,   265,   383,   372,   294,   295,
+     304,   316,   -40,   296,   297,   145,   267,   145,   108,   109,
+     268,   337,   110,   378,   112,   305,   208,   305,   364,    11,
+     345,   346,   347,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   208,
+     379,   343,   334,   384,   305,   107,   405,   230,   117,   231,
+     305,   282,   129,   130,   131,   230,   344,   231,   352,   353,
+     354,   355,   118,   285,   286,   287,   119,  -102,   120,   348,
+     349,   126,   350,   351,   208,   356,   357,   121,   365,   127,
+     137,   141,   143,   144,   150,   223,   316,   225,   390,   234,
+     236,   248,   249,   241,   245,   242,   145,   393,   266,   253,
+     299,   230,   246,   231,   250,   406,   255,   256,   271,   208,
+     298,    12,    13,   300,   301,   302,   -39,   208,   309,   323,
+     318,   320,   208,   123,   325,   366,   -34,   412,   374,   370,
+     371,   115,   114,   380,   305,   382,   381,   -40,   385,   386,
+      30,    31,    32,   316,    33,    34,    35,    36,    37,   408,
+     388,   389,   391,   392,   401,   178,   400,   358,   316,   396,
+     342,   316,   403,   359,   411,   362,   360,   220,   361,   316,
+     224,   363,   116,   324,   310,   235,   316,   373,   311,   326,
+     407,   395,   125,   261,   122,   375,     0,     0,     0,   208,
+       0,     0,     0,     0,     0,   327,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    80,     0,    81,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   165,     0,     0,     0,     0,     0,   166,   167,
-     168,   169,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   170,   171,   172,    12,    13,    14,    15,
-      16,    17,   146,   147,   148,     0,   149,   150,   151,   152,
-     153,   154,   155,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,     0,
-      34,     0,    35,     0,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,   156,   157,   158,   159,   160,   161,   162,     0,     0,
-     163,   164,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-      75,    76,    77,     0,    78,     0,     0,     0,     0,     0,
-       0,     0,     0,    79,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    80,     0,    81,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   165,     0,     0,     0,     0,     0,
-     166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   170,   171,   255,    12,    13,
-      14,    15,    16,    17,   146,   147,   148,     0,   149,   150,
-     151,   152,   153,   154,   155,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,     0,    34,     0,    35,     0,    36,    37,    38,    39,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   208,
+       0,     0,   208,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   208,     0,     0,     0,     0,     0,     0,
+      12,    13,    14,    15,    16,    17,   153,   154,   155,   208,
+     156,   157,   158,   159,   160,   161,   162,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,     0,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,   156,   157,   158,   159,   160,   161,   162,
-       0,     0,   163,   164,     0,     0,     0,     0,     0,     0,
+      70,    71,   163,   164,   165,   166,   167,   168,   169,     0,
+       0,   170,   171,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    74,    75,    76,    77,     0,    78,     0,     0,     0,
-       0,     0,     0,     0,     0,    79,     0,     0,     0,     0,
+      73,    74,    75,    76,     0,    77,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    82,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    80,
-       0,    81,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    83,     0,    84,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   165,     0,     0,     0,
-       0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   170,   171,   302,
-      12,    13,    14,    15,    16,    17,   146,   147,   148,     0,
-     149,   150,   151,   152,   153,   154,   155,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,     0,    34,     0,    35,     0,    36,    37,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
+       0,     0,     0,     0,   173,   174,   175,   176,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   177,
+     178,   179,    12,    13,    14,    15,    16,    17,   153,   154,
+     155,     0,   156,   157,   158,   159,   160,   161,   162,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,   156,   157,   158,   159,   160,
-     161,   162,     0,     0,   163,   164,     0,     0,     0,     0,
+      68,    69,    70,    71,   163,   164,   165,   166,   167,   168,
+     169,     0,     0,   170,   171,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,    76,    77,     0,    78,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
+       0,     0,    73,    74,    75,    76,     0,    77,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    82,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    80,     0,    81,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    83,     0,    84,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   165,     0,
-       0,     0,     0,     0,   166,   167,   168,   169,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
-     171,   331,    12,    13,    14,    15,    16,    17,   146,   147,
-     148,     0,   149,   150,   151,   152,   153,   154,   155,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,     0,    34,     0,    35,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     172,     0,     0,     0,     0,     0,   173,   174,   175,   176,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   177,   178,   260,    12,    13,    14,    15,    16,    17,
+     153,   154,   155,     0,   156,   157,   158,   159,   160,   161,
+     162,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,     0,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,   156,   157,   158,
-     159,   160,   161,   162,     0,     0,   163,   164,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    74,    75,    76,    77,     0,
-      78,     0,     0,     0,     0,     0,     0,     0,     0,    79,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,    81,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      66,    67,    68,    69,    70,    71,   163,   164,   165,   166,
+     167,   168,   169,     0,     0,   170,   171,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     165,     0,     0,     0,     0,     0,   166,   167,   168,   169,
+       0,     0,     0,     0,    73,    74,    75,    76,     0,    77,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   170,   171,    12,    13,    14,    15,    16,    17,   146,
-     147,   148,     0,   149,   390,   151,   152,   153,   154,   155,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,     0,    34,     0,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,   156,   157,
-     158,   159,   160,   161,   162,     0,     0,   163,   164,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    74,    75,    76,    77,
-       0,    78,     0,     0,     0,     0,     0,     0,     0,     0,
-      79,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    82,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    80,     0,    81,     0,     0,     0,
+       0,     0,     0,     0,     0,    83,     0,    84,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   165,     0,     0,     0,     0,     0,   166,   167,   168,
-     169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   170,   117,    12,    13,    14,    15,    16,    17,
-     146,   147,   148,     0,   149,   390,   151,   152,   153,   154,
-     155,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,     0,    34,     0,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
+       0,     0,   172,     0,     0,     0,     0,     0,   173,   174,
+     175,   176,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   177,   178,   307,    12,    13,    14,    15,
+      16,    17,   153,   154,   155,     0,   156,   157,   158,   159,
+     160,   161,   162,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,     0,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,   156,
-     157,   158,   159,   160,   161,   162,     0,     0,   163,   164,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    74,    75,    76,
-      77,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-       0,    79,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    80,     0,    81,     0,     0,
+      64,    65,    66,    67,    68,    69,    70,    71,   163,   164,
+     165,   166,   167,   168,   169,     0,     0,   170,   171,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    73,    74,    75,    76,
+       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    82,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   165,     0,     0,     0,     0,     0,   166,   167,
-     168,   169,    12,    13,    14,    15,    16,    17,     0,     0,
-       0,     0,     0,   170,   171,     0,     0,     0,     0,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,     0,    34,     0,    35,     0,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,     0,   157,   158,
-     159,   160,   161,   162,     0,     0,   163,   164,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    83,     0,    84,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    74,    75,    76,    77,     0,
-      78,     0,     0,     0,     0,     0,     0,     0,     0,    79,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   172,     0,     0,     0,     0,     0,
+     173,   174,   175,   176,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   177,   178,   338,    12,    13,
+      14,    15,    16,    17,   153,   154,   155,     0,   156,   157,
+     158,   159,   160,   161,   162,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+       0,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+     163,   164,   165,   166,   167,   168,   169,     0,     0,   170,
+     171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    73,    74,
+      75,    76,     0,    77,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    82,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,    81,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    83,
+       0,    84,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     165,     0,     0,     0,     0,     0,   166,   167,   168,   169,
-      12,    13,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,   170,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,     0,    34,     0,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,     0,   157,   158,   159,   160,
-     161,   162,     0,     0,   163,   164,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   172,     0,     0,     0,
+       0,     0,   173,   174,   175,   176,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   177,   178,    12,
+      13,    14,    15,    16,    17,   153,   154,   155,     0,   156,
+     157,   158,   159,   160,   161,   162,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,     0,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,   163,   164,   165,   166,   167,   168,   169,     0,     0,
+     170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
+      74,    75,    76,     0,    77,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    82,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   111,    75,    76,    77,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      83,     0,    84,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    80,     0,    81,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
+       0,     0,     0,   173,   174,   175,   176,    12,    13,    14,
+      15,    16,    17,     0,     0,     0,     0,     0,   177,   124,
+       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
+     164,   165,   166,   167,   168,   169,     0,     0,   170,   171,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   165,     0,
-       0,     0,     0,     0,   166,   167,   168,   169,    14,    15,
-      16,    17,     0,     0,     0,     0,     0,     0,     0,  -266,
-       0,     0,     0,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,     0,    73,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    73,    74,    75,
+      76,     0,    77,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    82,    14,    15,    16,    17,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,     0,     0,     0,     0,     0,     0,    83,     0,
+      84,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,   172,    72,     0,     0,     0,
+       0,   173,   174,   175,   176,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   177,     0,     0,     0,
+       0,     0,     0,     0,    74,    75,    76,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      75,    76,    77,     0,     0,     0,     0,     0,     0,     0,
        0,    14,    15,    16,    17,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,     0,     0,     0,     0,     0,     0,    80,     0,    81,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,     0,    73,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   235,     0,     0,
-       0,     0,     0,    75,    76,    77,     0,     0,     0,     0,
-       0,     0,     0,     0,    14,    15,    16,    17,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,     0,     0,     0,     0,     0,
-      80,     0,    81,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,     0,   157,   158,
-     159,   160,   161,   162,     0,     0,   163,   164,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     314,     0,     0,     0,     0,     0,    75,    76,    77,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,    81,     0,     0,     0,     0,
+      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+       0,     0,     0,     0,    83,     0,    84,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,     0,    72,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   239,     0,     0,     0,     0,     0,
+      74,    75,    76,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
+      83,     0,    84,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,     0,   164,   165,
+     166,   167,   168,   169,     0,     0,   170,   171,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     319,     0,     0,     0,     0,     0,    74,    75,    76,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     165,     0,     0,     0,     0,     0,   166,   167,   168,   169,
-      12,    13,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,   246,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,     0,    34,     0,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,     0,   157,   158,   159,   160,
-     161,   162,     0,     0,   163,   164,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   111,    75,    76,    77,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    83,     0,    84,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    80,     0,    81,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    14,    15,    16,    17,     0,   165,     0,
-       0,     0,     0,     0,   166,   167,   168,   169,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    39,    40,    41,    42,    43,    44,    45,    46,
+       0,     0,     0,   172,     0,     0,     0,     0,     0,   173,
+     174,   175,   176,    12,    13,    14,    15,    16,    17,     0,
+       0,     0,     0,     0,   251,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,     0,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,     0,   157,   158,   159,
-     160,   161,   162,     0,     0,   163,   164,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    75,    76,    77,     0,     0,
+      67,    68,    69,    70,    71,     0,   164,   165,   166,   167,
+     168,   169,     0,     0,   170,   171,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   333,    74,    75,    76,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      82,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    80,     0,    81,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    83,     0,    84,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    14,    15,    16,    17,     0,   165,
-       0,     0,   225,     0,     0,   166,   167,   168,   169,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    39,    40,    41,    42,    43,    44,    45,
+       0,     0,     0,     0,     0,     0,    14,    15,    16,    17,
+       0,   172,     0,     0,     0,     0,     0,   173,   174,   175,
+     176,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,     0,   157,   158,
-     159,   160,   161,   162,     0,     0,   163,   164,     0,     0,
+      66,    67,    68,    69,    70,    71,     0,   164,   165,   166,
+     167,   168,   169,     0,     0,   170,   171,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    75,    76,    77,     0,
+       0,     0,     0,     0,     0,    74,    75,    76,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,    81,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    83,     0,    84,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    14,    15,    16,    17,     0,
-     165,     0,     0,   309,     0,     0,   166,   167,   168,   169,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
+      17,     0,   172,     0,     0,   229,     0,     0,   173,   174,
+     175,   176,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,     0,   157,
-     158,   159,   160,   161,   162,     0,     0,   163,   164,     0,
+      65,    66,    67,    68,    69,    70,    71,     0,   164,   165,
+     166,   167,   168,   169,     0,     0,   170,   171,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    75,    76,    77,
+       0,     0,     0,     0,     0,     0,    74,    75,    76,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    80,     0,    81,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    83,     0,    84,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    14,    15,    16,    17,
-       0,   165,     0,     0,   360,     0,     0,   166,   167,   168,
-     169,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    39,    40,    41,    42,    43,
+       0,     0,     0,     0,     0,     0,     0,     0,    14,    15,
+      16,    17,     0,   172,     0,     0,   314,     0,     0,   173,
+     174,   175,   176,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,     0,
-     157,   158,   159,   160,   161,   162,     0,     0,   163,   164,
+      64,    65,    66,    67,    68,    69,    70,    71,     0,   164,
+     165,   166,   167,   168,   169,     0,     0,   170,   171,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    75,    76,
-      77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    74,    75,    76,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    80,     0,    81,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    83,     0,    84,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
-      17,     0,   165,     0,     0,     0,     0,     0,   166,   167,
-     168,   169,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    39,    40,    41,    42,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    14,
+      15,    16,    17,     0,   172,     0,     0,   367,     0,     0,
+     173,   174,   175,   176,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,   264,
-       0,   157,   158,   159,   160,   161,   162,     0,     0,   163,
-     164,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    75,
-      76,    77,     0,     0,     0,     0,     0,     0,     0,     0,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
+     164,   165,   166,   167,   168,   169,     0,     0,   170,   171,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    74,    75,
+      76,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    80,     0,    81,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    83,     0,
+      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    -3,     0,     0,    12,    13,    14,    15,
-      16,    17,     0,   165,     0,     0,     0,     0,     0,   166,
-     167,   168,   169,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,     0,
-      34,     0,    35,     0,    36,    37,    38,    39,    40,    41,
+      14,    15,    16,    17,     0,   172,     0,     0,     0,     0,
+       0,   173,   174,   175,   176,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,     0,    73,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,   269,
+       0,   164,   165,   166,   167,   168,   169,     0,     0,   170,
+     171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-      75,    76,    77,     0,    78,     0,     0,     0,     0,     0,
-       0,     0,     0,    79,    12,    13,    14,    15,    16,    17,
+      75,    76,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    80,    34,    81,
-      35,     0,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,     0,
-      73,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    74,    75,    76,
-      77,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-       0,    79,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,     0,     0,     0,    80,     0,    81,     0,     0,
-       0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,     0,   334,     0,     0,     0,
-       0,   162,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    75,    76,    77,     0,     0,     0,
-       0,     0,     0,     0,     0,    14,    15,    16,    17,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    83,
+       0,    84,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,     0,     0,     0,     0,     0,
-       0,    80,     0,    81,    39,    40,    41,    42,    43,    44,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,     0,   172,     0,     0,     0,
+       0,     0,   173,   174,   175,   176,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,     0,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,     0,    72,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
+      74,    75,    76,     0,    77,     0,     0,     0,     0,     0,
+       0,     0,    78,    79,    80,    81,    82,    14,    15,    16,
+      17,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
+      83,     0,    84,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,     0,    73,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    75,    76,    77,
-       0,     0,     0,     0,     0,     0,     0,     0,    14,    15,
-      16,    17,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,     0,
-       0,     0,     0,     0,    80,     0,    81,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,     0,    73,     0,     0,     0,     0,     0,     0,     0,
+      65,    66,    67,    68,    69,    70,    71,     0,   341,    14,
+      15,    16,    17,   169,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    74,    75,    76,     0,
+       0,     0,     0,     0,     0,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
+      72,    14,    15,    16,    17,     0,    83,     0,    84,     0,
+       0,     0,     0,     0,     0,     0,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    74,    75,
+      76,     0,     0,     0,     0,     0,     0,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,     0,    72,     0,     0,     0,     0,     0,    83,     0,
+      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    80,     0,    81
+      83,     0,    84
 };
 
 static const yytype_int16 yycheck[] =
 {
-       9,    79,   223,   152,    94,   154,     4,    89,    90,    79,
-     140,     3,     4,   251,   374,     9,   165,   148,    87,    88,
-       9,   371,     4,   193,   135,   385,   371,    74,   196,   100,
-     135,     3,     4,   181,   196,   212,   213,   196,    36,    37,
-      38,   211,   113,    35,   212,    37,    93,    39,   210,    41,
-      42,    43,   402,   212,    36,    37,    38,   402,   163,   164,
-     410,   112,   412,    35,   111,    37,    81,    39,   196,    41,
-      42,    43,   308,    82,   196,   196,   224,   208,   191,   184,
-     193,     0,   210,   117,   322,    94,   307,    79,    82,   113,
-     212,   212,    36,    82,   315,   244,    40,   116,   211,   248,
-     109,   231,   251,   192,    79,    36,    37,   196,   117,    40,
-     259,   191,   223,   192,   106,   263,   192,   126,   223,   209,
-     196,   191,   204,   205,   193,   256,   195,   363,   120,   138,
-     278,   140,   192,   192,   106,   213,   196,   196,   359,   148,
-     192,   196,   378,   192,   196,   381,   213,   196,   120,    79,
-     299,   192,   300,   389,   193,   196,   107,   108,   109,    79,
-     308,   397,   171,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   322,    79,   280,   281,   282,   283,   284,
+       9,    73,    73,   159,   155,   161,   141,    76,   141,     4,
+      86,    87,    91,     9,    84,    85,   172,    76,   146,     9,
+       3,     4,   381,    95,    96,    78,   313,   256,     4,   193,
+     104,   105,   106,   392,   227,   170,   171,     0,    33,    34,
+      35,   191,   114,   193,   196,     3,     4,   211,   192,    32,
+      33,    34,   196,    36,    37,   109,   191,    33,    34,    35,
+     212,   211,   213,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   196,    32,    33,    34,    86,    36,    37,
+      38,    39,    40,   370,   197,   198,   196,   113,    97,   212,
+      86,   188,   227,   249,   227,   196,    86,   253,   385,   328,
+     256,   388,   212,   112,   103,   110,   196,   235,   264,   396,
+     261,   212,   196,   212,   213,   124,   403,   116,    76,   312,
+     210,    82,    83,   193,   133,   195,   210,   320,   204,   205,
+     209,   228,   191,    88,    89,   144,   192,   146,    33,    34,
+     196,   192,    37,   192,   213,   196,   155,   196,   304,    76,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   192,    79,   307,   197,   198,   208,
-      85,    86,   307,   117,   315,    79,   287,   288,   289,   290,
-     315,   220,    36,    37,    38,   363,    91,    92,   367,   283,
-     284,   212,   231,   201,   202,   203,   291,   292,   376,   212,
-     378,   285,   286,   381,   243,   384,   212,   191,   191,   212,
-     210,   389,   251,   191,   191,   206,   192,   256,   359,   397,
-     191,   207,    93,   208,   359,   404,    95,   191,    79,   194,
-     212,   193,    78,   192,    79,   193,   211,   194,   191,   194,
-     196,   192,   211,   191,   211,   213,   212,   194,   211,   194,
-     192,   194,    12,   191,    12,   293,   260,   211,   294,   211,
-     295,   298,   296,   120,   297,   127,   212,   239,    78,   316,
-     138,   385,    84,   243,   372,   171,   322,    82,    -1,   220,
-     220,    -1,    -1,   322,    -1,    -1,    -1,    -1,    -1,    -1,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   178,
+     192,   268,   328,   366,   196,   112,   192,   312,   113,   312,
+     196,   211,    33,    34,    35,   320,   283,   320,   292,   293,
+     294,   295,   113,   201,   202,   203,   113,   192,   113,   288,
+     289,   192,   290,   291,   213,   296,   297,   191,   305,   196,
+      76,   193,    76,   213,    76,   224,   313,    76,   374,   113,
+      76,   191,   191,   212,   212,   211,   235,   378,   192,   191,
+     207,   366,   212,   366,   212,   391,   210,   191,   191,   248,
+     206,     3,     4,   208,    90,    92,   191,   256,    76,    78,
+     194,   193,   261,   212,    75,   193,   192,   408,   191,   211,
+     194,   333,   333,    76,   196,   194,   192,   191,   211,   194,
+      32,    33,    34,   370,    36,    37,    38,    39,    40,    12,
+     211,   194,   212,   192,   194,   213,   383,   298,   385,   211,
+     265,   388,   211,   299,   212,   302,   300,   127,   301,   396,
+     134,   303,    77,   244,   224,   144,   403,   321,   224,   248,
+     392,   379,    88,   178,    86,   328,    -1,    -1,    -1,   328,
+      -1,    -1,    -1,    -1,    -1,   248,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,
+      -1,    -1,   381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   392,    -1,    -1,    -1,    -1,    -1,    -1,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,   408,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    -1,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     103,   104,   105,   106,    -1,   108,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,    -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,   154,    -1,   156,    -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,   191,    -1,
+      -1,    -1,    -1,    -1,   197,   198,   199,   200,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,
+     213,   214,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   243,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   371,    -1,    -1,   374,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   385,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   402,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   410,    -1,   412,     3,     4,     5,     6,     7,     8,
+      -1,    -1,    -1,   154,    -1,   156,    -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,
+     191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,   200,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   212,   213,   214,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    -1,    37,    -1,
-      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+      29,    30,    31,    32,    33,    34,    -1,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    87,    88,
+      79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   103,   104,   105,   106,    -1,   108,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,   107,   108,
-     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   120,    -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,
@@ -1648,15 +1623,15 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,   212,   213,   214,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    -1,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
-      37,    -1,    39,    -1,    41,    42,    43,    44,    45,    46,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-      87,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,
-     107,   108,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    79,    80,    81,    -1,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,
+      -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   120,    -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,
@@ -1670,14 +1645,14 @@ static const yytype_int16 yycheck[] =
        5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    -1,    37,    -1,    39,    -1,    41,    42,    43,    44,
+      -1,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   106,   107,   108,   109,    -1,   111,    -1,    -1,    -1,
+      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,
+     105,   106,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -1687,390 +1662,280 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,    -1,
       -1,    -1,   197,   198,   199,   200,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,   213,   214,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    37,    -1,    39,    -1,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,   213,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
+     104,   105,   106,    -1,   108,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   106,   107,   108,   109,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,
+      -1,    -1,    -1,   197,   198,   199,   200,     3,     4,     5,
+       6,     7,     8,    -1,    -1,    -1,    -1,    -1,   212,   213,
+      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,
-      -1,    -1,    -1,    -1,   197,   198,   199,   200,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,
-     213,   214,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    37,    -1,    39,    -1,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    87,    88,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
+     106,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   120,     5,     6,     7,     8,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   106,   107,   108,   109,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,
+     156,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,   191,    76,    -1,    -1,    -1,
+      -1,   197,   198,   199,   200,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   212,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
+      -1,    -1,    -1,    -1,   154,    -1,   156,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   214,    -1,    -1,    -1,    -1,    -1,
+     104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,
+       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
+     154,    -1,   156,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   154,    -1,   156,    -1,    -1,    -1,    -1,
+     214,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -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,
-     191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,   200,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   212,   213,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
+      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -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,   191,    -1,    -1,    -1,    -1,    -1,   197,
+     198,   199,   200,     3,     4,     5,     6,     7,     8,    -1,
+      -1,    -1,    -1,    -1,   212,    -1,    -1,    -1,    -1,    -1,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    37,    -1,    39,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    87,    88,    -1,
+      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   103,   104,   105,   106,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   106,   107,   108,   109,
-      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      120,    -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,   154,    -1,   156,    -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,    -1,    -1,    -1,     5,     6,     7,     8,
       -1,   191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,
-     200,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   212,   213,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    -1,    37,    -1,
-      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+     200,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    87,    88,
+      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+      79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -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,   106,   107,   108,
-     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   120,    -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,   154,    -1,   156,    -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,     5,     6,     7,
+       8,    -1,   191,    -1,    -1,   194,    -1,    -1,   197,   198,
+     199,   200,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   191,    -1,    -1,    -1,    -1,    -1,   197,   198,
-     199,   200,     3,     4,     5,     6,     7,     8,    -1,    -1,
-      -1,    -1,    -1,   212,   213,    -1,    -1,    -1,    -1,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    37,    -1,    39,    -1,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    87,    88,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   106,   107,   108,   109,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,
       -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,   154,    -1,   156,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -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,     5,     6,
+       7,     8,    -1,   191,    -1,    -1,   194,    -1,    -1,   197,
+     198,   199,   200,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    -1,    -1,    84,    85,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,   200,
-       3,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-      -1,   212,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    37,    -1,    39,    -1,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,    -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,   154,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,
       -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,   191,    -1,
-      -1,    -1,    -1,    -1,   197,   198,   199,   200,     5,     6,
-       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,
-      -1,    -1,    -1,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+       6,     7,     8,    -1,   191,    -1,    -1,   194,    -1,    -1,
+     197,   198,   199,   200,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
+     106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     107,   108,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   214,    -1,    -1,
-      -1,    -1,    -1,   107,   108,   109,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     5,     6,     7,     8,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-     154,    -1,   156,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    87,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     214,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,    -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,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   154,    -1,   156,    -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,
-     191,    -1,    -1,    -1,    -1,    -1,   197,   198,   199,   200,
-       3,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-      -1,   212,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    37,    -1,    39,    -1,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,    -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,   154,    -1,   156,    -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,     5,     6,     7,     8,    -1,   191,    -1,
-      -1,    -1,    -1,    -1,   197,   198,   199,   200,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   107,   108,   109,    -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,   154,    -1,
+     156,    -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,   154,    -1,   156,    -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,     5,     6,     7,     8,    -1,   191,
-      -1,    -1,   194,    -1,    -1,   197,   198,   199,   200,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    -1,    87,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,    -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,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   154,    -1,   156,    -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,     5,     6,     7,     8,    -1,
-     191,    -1,    -1,   194,    -1,    -1,   197,   198,   199,   200,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    -1,    79,
-      80,    81,    82,    83,    84,    -1,    -1,    87,    88,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,
-      -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,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   154,    -1,   156,    -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,     5,     6,     7,     8,
-      -1,   191,    -1,    -1,   194,    -1,    -1,   197,   198,   199,
-     200,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    -1,    87,    88,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,
-     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       5,     6,     7,     8,    -1,   191,    -1,    -1,    -1,    -1,
+      -1,   197,   198,   199,   200,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    84,
+      85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
+     105,   106,    -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,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,
+      -1,   156,    -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,
+       4,     5,     6,     7,     8,    -1,   191,    -1,    -1,    -1,
+      -1,    -1,   197,   198,   199,   200,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,
-       8,    -1,   191,    -1,    -1,    -1,    -1,    -1,   197,   198,
-     199,   200,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
+     104,   105,   106,    -1,   108,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   116,   117,   118,   119,   120,     5,     6,     7,
+       8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
+     154,    -1,   156,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    -1,    87,
-      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
-     108,   109,    -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,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   154,    -1,   156,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,
-       7,     8,    -1,   191,    -1,    -1,    -1,    -1,    -1,   197,
-     198,   199,   200,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
-      37,    -1,    39,    -1,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    -1,    79,    -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,   106,
-     107,   108,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   120,     3,     4,     5,     6,     7,     8,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,   154,    37,   156,
-      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    -1,
-      79,    -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,   106,   107,   108,
-     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   120,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    -1,    -1,    -1,   154,    -1,   156,    -1,    -1,
-      -1,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    -1,    79,    -1,    -1,    -1,
-      -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,   154,    -1,   156,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    -1,    79,
-      -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,   107,   108,   109,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
-       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,   154,    -1,   156,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      68,    69,    70,    71,    72,    73,    74,    -1,    76,     5,
+       6,     7,     8,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,   104,   105,   106,    -1,
+      -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
+      76,     5,     6,     7,     8,    -1,   154,    -1,   156,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,   104,   105,
+     106,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    -1,    76,    -1,    -1,    -1,    -1,    -1,   154,    -1,
+     156,    -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,    -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,    -1,    -1,    -1,    -1,   154,    -1,   156
+     154,    -1,   156
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   112,   216,   218,    81,     0,   219,   117,   113,   217,
-     220,    79,     3,     4,     5,     6,     7,     8,    20,    21,
+       0,   109,   216,   218,    78,     0,   220,   113,   110,   217,
+     221,    76,     3,     4,     5,     6,     7,     8,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    37,    39,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    79,   106,   107,   108,   109,   111,   120,
-     154,   156,   221,   251,   252,   253,   254,   255,   260,   261,
-     262,   263,   264,   267,   269,   270,   271,   272,   273,   274,
-     275,   276,   302,   303,   116,    36,    37,    40,    79,   213,
-      79,   106,   269,   275,   191,   302,   212,   213,   289,   192,
-     196,     4,    36,    37,    38,   257,   258,   268,   196,   212,
-      79,    36,    40,   269,   271,   193,   272,    79,   213,   271,
-     277,   278,   272,    79,   265,   266,     9,    10,    11,    13,
-      14,    15,    16,    17,    18,    19,    78,    79,    80,    81,
-      82,    83,    84,    87,    88,   191,   197,   198,   199,   200,
-     212,   213,   214,   222,   223,   224,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   249,   251,
-     252,   271,   282,   283,   284,   285,   286,   287,   290,   291,
-     292,   293,   295,   296,   297,   301,   257,   256,   259,   271,
-     258,    79,   191,   193,   211,   194,   233,   246,   250,   271,
-     117,   277,    79,   279,   280,   214,   278,   212,   192,   196,
-     212,   212,   283,   191,   191,   212,   212,   249,   191,   249,
-     210,   191,   233,   233,   249,   214,   290,    87,    88,   193,
-     195,   192,   192,   196,    77,   247,   191,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   211,   248,   233,
-     201,   202,   203,   197,   198,    85,    86,    89,    90,   204,
-     205,    91,    92,   206,   207,   208,    93,    95,    94,   209,
-     196,   212,   214,   283,    79,   256,   259,   193,   211,   194,
-     250,   247,   281,   194,   214,   193,   196,   212,   266,    78,
-     282,   291,   298,   249,   212,   249,   210,   249,   262,   294,
-     192,   214,   225,   249,    79,   228,   247,   247,   233,   233,
-     233,   235,   235,   236,   236,   237,   237,   237,   237,   238,
-     238,   239,   240,   241,   242,   243,   244,   249,   247,   193,
-     194,   250,   281,   211,   194,   250,   280,   191,   294,   299,
-     300,   192,   192,    79,   192,   194,   210,   250,   211,   194,
-     281,   211,   194,   249,   212,   192,   284,   285,   287,   211,
-      14,   286,   288,   289,   247,   194,   281,   211,   281,   192,
-     249,   288,    12,   281,   191,   281,   212,   284,   285,   249,
-     192,   284,    12
+      32,    33,    34,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    76,   103,   104,   105,   106,   108,   116,   117,
+     118,   119,   120,   154,   156,   219,   222,   252,   253,   254,
+     255,   256,   261,   262,   263,   264,   267,   269,   270,   271,
+     272,   273,   274,   275,   276,   300,   301,   112,    33,    34,
+      37,    76,   213,    76,   267,   270,   275,   113,   113,   113,
+     113,   191,   300,   212,   213,   287,   192,   196,     4,    33,
+      34,    35,   258,   259,   268,   196,   212,    76,   270,   270,
+     271,   193,   272,    76,   213,   271,   277,   278,   270,   272,
+      76,   265,   266,     9,    10,    11,    13,    14,    15,    16,
+      17,    18,    19,    75,    76,    77,    78,    79,    80,    81,
+      84,    85,   191,   197,   198,   199,   200,   212,   213,   214,
+     223,   224,   225,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   250,   252,   253,   271,   282,
+     283,   284,   285,   288,   289,   290,   293,   294,   295,   299,
+     258,   257,   260,   271,   259,    76,   191,   193,   211,   194,
+     234,   247,   251,   271,   113,   277,    76,   279,   280,   214,
+     278,   212,   211,   192,   196,   212,   212,   283,   191,   191,
+     212,   212,   250,   191,   250,   210,   191,   234,   234,   250,
+     214,   288,    84,    85,   193,   195,   192,   192,   196,    74,
+     248,   191,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   211,   249,   234,   201,   202,   203,   197,   198,
+      82,    83,    86,    87,   204,   205,    88,    89,   206,   207,
+     208,    90,    92,    91,   209,   196,   212,   214,   283,    76,
+     257,   260,   193,   211,   194,   251,   248,   281,   194,   214,
+     193,   196,   212,    78,   266,    75,   282,   289,   296,   250,
+     212,   250,   210,   103,   250,   263,   292,   192,   214,   226,
+     250,    76,   229,   248,   248,   234,   234,   234,   236,   236,
+     237,   237,   238,   238,   238,   238,   239,   239,   240,   241,
+     242,   243,   244,   245,   250,   248,   193,   194,   251,   281,
+     211,   194,   251,   280,   191,   292,   297,   298,   192,   192,
+      76,   192,   194,   210,   251,   211,   194,   281,   211,   194,
+     250,   212,   192,   283,   291,   285,   211,   284,   286,   287,
+     248,   194,   281,   211,   281,   192,   250,   286,    12,   281,
+     281,   212,   283
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2752,7 +2617,7 @@ YYLTYPE yylloc;
 }
 
 /* Line 1242 of yacc.c  */
-#line 2756 "glsl_parser.cpp"
+#line 2621 "glsl_parser.cpp"
   yylsp[0] = yylloc;
 
   goto yysetstate;
@@ -2940,27 +2805,20 @@ yyreduce:
         case 2:
 
 /* Line 1455 of yacc.c  */
-#line 210 "glsl_parser.ypp"
+#line 211 "glsl_parser.ypp"
     {
           _mesa_glsl_initialize_types(state);
        ;}
     break;
 
-  case 4:
-
-/* Line 1455 of yacc.c  */
-#line 218 "glsl_parser.ypp"
-    {
-          state->language_version = 110;
-       ;}
-    break;
-
   case 5:
 
 /* Line 1455 of yacc.c  */
-#line 222 "glsl_parser.ypp"
+#line 220 "glsl_parser.ypp"
     {
           switch ((yyvsp[(2) - (3)].n)) {
+          case 100:
+             state->es_shader = true;
           case 110:
           case 120:
           case 130:
@@ -2975,10 +2833,10 @@ yyreduce:
        ;}
     break;
 
-  case 8:
+  case 12:
 
 /* Line 1455 of yacc.c  */
-#line 245 "glsl_parser.ypp"
+#line 252 "glsl_parser.ypp"
     {
           if (!_mesa_glsl_process_extension((yyvsp[(2) - (5)].identifier), & (yylsp[(2) - (5)]), (yyvsp[(4) - (5)].identifier), & (yylsp[(4) - (5)]), state)) {
              YYERROR;
@@ -2986,10 +2844,10 @@ yyreduce:
        ;}
     break;
 
-  case 9:
+  case 13:
 
 /* Line 1455 of yacc.c  */
-#line 254 "glsl_parser.ypp"
+#line 261 "glsl_parser.ypp"
     {
           /* FINISHME: The NULL test is only required because 'precision'
            * FINISHME: statements are not yet supported.
@@ -2999,10 +2857,10 @@ yyreduce:
        ;}
     break;
 
-  case 10:
+  case 14:
 
 /* Line 1455 of yacc.c  */
-#line 262 "glsl_parser.ypp"
+#line 269 "glsl_parser.ypp"
     {
           /* FINISHME: The NULL test is only required because 'precision'
            * FINISHME: statements are not yet supported.
@@ -3012,10 +2870,10 @@ yyreduce:
        ;}
     break;
 
-  case 12:
+  case 16:
 
 /* Line 1455 of yacc.c  */
-#line 277 "glsl_parser.ypp"
+#line 284 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL);
@@ -3024,10 +2882,10 @@ yyreduce:
        ;}
     break;
 
-  case 13:
+  case 17:
 
 /* Line 1455 of yacc.c  */
-#line 284 "glsl_parser.ypp"
+#line 291 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL);
@@ -3036,10 +2894,10 @@ yyreduce:
        ;}
     break;
 
-  case 14:
+  case 18:
 
 /* Line 1455 of yacc.c  */
-#line 291 "glsl_parser.ypp"
+#line 298 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL);
@@ -3048,10 +2906,10 @@ yyreduce:
        ;}
     break;
 
-  case 15:
+  case 19:
 
 /* Line 1455 of yacc.c  */
-#line 298 "glsl_parser.ypp"
+#line 305 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL);
@@ -3060,10 +2918,10 @@ yyreduce:
        ;}
     break;
 
-  case 16:
+  case 20:
 
 /* Line 1455 of yacc.c  */
-#line 305 "glsl_parser.ypp"
+#line 312 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL);
@@ -3072,19 +2930,19 @@ yyreduce:
        ;}
     break;
 
-  case 17:
+  case 21:
 
 /* Line 1455 of yacc.c  */
-#line 312 "glsl_parser.ypp"
+#line 319 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(2) - (3)].expression);
        ;}
     break;
 
-  case 19:
+  case 23:
 
 /* Line 1455 of yacc.c  */
-#line 320 "glsl_parser.ypp"
+#line 327 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[(1) - (4)].expression), (yyvsp[(3) - (4)].expression), NULL);
@@ -3092,19 +2950,19 @@ yyreduce:
        ;}
     break;
 
-  case 20:
+  case 24:
 
 /* Line 1455 of yacc.c  */
-#line 326 "glsl_parser.ypp"
+#line 333 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (1)].expression);
        ;}
     break;
 
-  case 21:
+  case 25:
 
 /* Line 1455 of yacc.c  */
-#line 330 "glsl_parser.ypp"
+#line 337 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), NULL, NULL);
@@ -3113,10 +2971,10 @@ yyreduce:
        ;}
     break;
 
-  case 22:
+  case 26:
 
 /* Line 1455 of yacc.c  */
-#line 337 "glsl_parser.ypp"
+#line 344 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -3124,10 +2982,10 @@ yyreduce:
        ;}
     break;
 
-  case 23:
+  case 27:
 
 /* Line 1455 of yacc.c  */
-#line 343 "glsl_parser.ypp"
+#line 350 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -3135,10 +2993,10 @@ yyreduce:
        ;}
     break;
 
-  case 27:
+  case 31:
 
 /* Line 1455 of yacc.c  */
-#line 361 "glsl_parser.ypp"
+#line 368 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3146,10 +3004,10 @@ yyreduce:
        ;}
     break;
 
-  case 32:
+  case 36:
 
 /* Line 1455 of yacc.c  */
-#line 380 "glsl_parser.ypp"
+#line 387 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (2)].expression);
           (yyval.expression)->set_location(yylloc);
@@ -3157,10 +3015,10 @@ yyreduce:
        ;}
     break;
 
-  case 33:
+  case 37:
 
 /* Line 1455 of yacc.c  */
-#line 386 "glsl_parser.ypp"
+#line 393 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (3)].expression);
           (yyval.expression)->set_location(yylloc);
@@ -3168,10 +3026,10 @@ yyreduce:
        ;}
     break;
 
-  case 35:
+  case 39:
 
 /* Line 1455 of yacc.c  */
-#line 402 "glsl_parser.ypp"
+#line 409 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_function_expression((yyvsp[(1) - (1)].type_specifier));
@@ -3179,10 +3037,10 @@ yyreduce:
        ;}
     break;
 
-  case 36:
+  case 40:
 
 /* Line 1455 of yacc.c  */
-#line 408 "glsl_parser.ypp"
+#line 415 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3191,10 +3049,10 @@ yyreduce:
        ;}
     break;
 
-  case 37:
+  case 41:
 
 /* Line 1455 of yacc.c  */
-#line 415 "glsl_parser.ypp"
+#line 422 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3203,10 +3061,10 @@ yyreduce:
        ;}
     break;
 
-  case 39:
+  case 43:
 
 /* Line 1455 of yacc.c  */
-#line 427 "glsl_parser.ypp"
+#line 434 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3214,10 +3072,10 @@ yyreduce:
        ;}
     break;
 
-  case 40:
+  case 44:
 
 /* Line 1455 of yacc.c  */
-#line 433 "glsl_parser.ypp"
+#line 440 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3225,10 +3083,10 @@ yyreduce:
        ;}
     break;
 
-  case 41:
+  case 45:
 
 /* Line 1455 of yacc.c  */
-#line 439 "glsl_parser.ypp"
+#line 446 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression((yyvsp[(1) - (2)].n), (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3236,38 +3094,38 @@ yyreduce:
        ;}
     break;
 
-  case 42:
+  case 46:
 
 /* Line 1455 of yacc.c  */
-#line 448 "glsl_parser.ypp"
+#line 455 "glsl_parser.ypp"
     { (yyval.n) = ast_plus; ;}
     break;
 
-  case 43:
+  case 47:
 
 /* Line 1455 of yacc.c  */
-#line 449 "glsl_parser.ypp"
+#line 456 "glsl_parser.ypp"
     { (yyval.n) = ast_neg; ;}
     break;
 
-  case 44:
+  case 48:
 
 /* Line 1455 of yacc.c  */
-#line 450 "glsl_parser.ypp"
+#line 457 "glsl_parser.ypp"
     { (yyval.n) = ast_logic_not; ;}
     break;
 
-  case 45:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 451 "glsl_parser.ypp"
+#line 458 "glsl_parser.ypp"
     { (yyval.n) = ast_bit_not; ;}
     break;
 
-  case 47:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 457 "glsl_parser.ypp"
+#line 464 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3275,10 +3133,10 @@ yyreduce:
        ;}
     break;
 
-  case 48:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 463 "glsl_parser.ypp"
+#line 470 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3286,10 +3144,10 @@ yyreduce:
        ;}
     break;
 
-  case 49:
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 469 "glsl_parser.ypp"
+#line 476 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3297,10 +3155,10 @@ yyreduce:
        ;}
     break;
 
-  case 51:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 479 "glsl_parser.ypp"
+#line 486 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3308,10 +3166,10 @@ yyreduce:
        ;}
     break;
 
-  case 52:
+  case 56:
 
 /* Line 1455 of yacc.c  */
-#line 485 "glsl_parser.ypp"
+#line 492 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3319,10 +3177,10 @@ yyreduce:
        ;}
     break;
 
-  case 54:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 495 "glsl_parser.ypp"
+#line 502 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3330,10 +3188,10 @@ yyreduce:
        ;}
     break;
 
-  case 55:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 501 "glsl_parser.ypp"
+#line 508 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3341,10 +3199,10 @@ yyreduce:
        ;}
     break;
 
-  case 57:
+  case 61:
 
 /* Line 1455 of yacc.c  */
-#line 511 "glsl_parser.ypp"
+#line 518 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3352,10 +3210,10 @@ yyreduce:
        ;}
     break;
 
-  case 58:
+  case 62:
 
 /* Line 1455 of yacc.c  */
-#line 517 "glsl_parser.ypp"
+#line 524 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3363,10 +3221,10 @@ yyreduce:
        ;}
     break;
 
-  case 59:
+  case 63:
 
 /* Line 1455 of yacc.c  */
-#line 523 "glsl_parser.ypp"
+#line 530 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3374,10 +3232,10 @@ yyreduce:
        ;}
     break;
 
-  case 60:
+  case 64:
 
 /* Line 1455 of yacc.c  */
-#line 529 "glsl_parser.ypp"
+#line 536 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3385,10 +3243,10 @@ yyreduce:
        ;}
     break;
 
-  case 62:
+  case 66:
 
 /* Line 1455 of yacc.c  */
-#line 539 "glsl_parser.ypp"
+#line 546 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3396,10 +3254,10 @@ yyreduce:
        ;}
     break;
 
-  case 63:
+  case 67:
 
 /* Line 1455 of yacc.c  */
-#line 545 "glsl_parser.ypp"
+#line 552 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3407,10 +3265,10 @@ yyreduce:
        ;}
     break;
 
-  case 65:
+  case 69:
 
 /* Line 1455 of yacc.c  */
-#line 555 "glsl_parser.ypp"
+#line 562 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3418,10 +3276,10 @@ yyreduce:
        ;}
     break;
 
-  case 67:
+  case 71:
 
 /* Line 1455 of yacc.c  */
-#line 565 "glsl_parser.ypp"
+#line 572 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3429,10 +3287,10 @@ yyreduce:
        ;}
     break;
 
-  case 69:
+  case 73:
 
 /* Line 1455 of yacc.c  */
-#line 575 "glsl_parser.ypp"
+#line 582 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3440,10 +3298,10 @@ yyreduce:
        ;}
     break;
 
-  case 71:
+  case 75:
 
 /* Line 1455 of yacc.c  */
-#line 585 "glsl_parser.ypp"
+#line 592 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3451,10 +3309,10 @@ yyreduce:
        ;}
     break;
 
-  case 73:
+  case 77:
 
 /* Line 1455 of yacc.c  */
-#line 595 "glsl_parser.ypp"
+#line 602 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3462,10 +3320,10 @@ yyreduce:
        ;}
     break;
 
-  case 75:
+  case 79:
 
 /* Line 1455 of yacc.c  */
-#line 605 "glsl_parser.ypp"
+#line 612 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3473,10 +3331,10 @@ yyreduce:
        ;}
     break;
 
-  case 77:
+  case 81:
 
 /* Line 1455 of yacc.c  */
-#line 615 "glsl_parser.ypp"
+#line 622 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[(1) - (5)].expression), (yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].expression));
@@ -3484,10 +3342,10 @@ yyreduce:
        ;}
     break;
 
-  case 79:
+  case 83:
 
 /* Line 1455 of yacc.c  */
-#line 625 "glsl_parser.ypp"
+#line 632 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression((yyvsp[(2) - (3)].n), (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3495,96 +3353,96 @@ yyreduce:
        ;}
     break;
 
-  case 80:
+  case 84:
 
 /* Line 1455 of yacc.c  */
-#line 633 "glsl_parser.ypp"
+#line 640 "glsl_parser.ypp"
     { (yyval.n) = ast_assign; ;}
     break;
 
-  case 81:
+  case 85:
 
 /* Line 1455 of yacc.c  */
-#line 634 "glsl_parser.ypp"
+#line 641 "glsl_parser.ypp"
     { (yyval.n) = ast_mul_assign; ;}
     break;
 
-  case 82:
+  case 86:
 
 /* Line 1455 of yacc.c  */
-#line 635 "glsl_parser.ypp"
+#line 642 "glsl_parser.ypp"
     { (yyval.n) = ast_div_assign; ;}
     break;
 
-  case 83:
+  case 87:
 
 /* Line 1455 of yacc.c  */
-#line 636 "glsl_parser.ypp"
+#line 643 "glsl_parser.ypp"
     { (yyval.n) = ast_mod_assign; ;}
     break;
 
-  case 84:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 637 "glsl_parser.ypp"
+#line 644 "glsl_parser.ypp"
     { (yyval.n) = ast_add_assign; ;}
     break;
 
-  case 85:
+  case 89:
 
 /* Line 1455 of yacc.c  */
-#line 638 "glsl_parser.ypp"
+#line 645 "glsl_parser.ypp"
     { (yyval.n) = ast_sub_assign; ;}
     break;
 
-  case 86:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 639 "glsl_parser.ypp"
+#line 646 "glsl_parser.ypp"
     { (yyval.n) = ast_ls_assign; ;}
     break;
 
-  case 87:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 640 "glsl_parser.ypp"
+#line 647 "glsl_parser.ypp"
     { (yyval.n) = ast_rs_assign; ;}
     break;
 
-  case 88:
+  case 92:
 
 /* Line 1455 of yacc.c  */
-#line 641 "glsl_parser.ypp"
+#line 648 "glsl_parser.ypp"
     { (yyval.n) = ast_and_assign; ;}
     break;
 
-  case 89:
+  case 93:
 
 /* Line 1455 of yacc.c  */
-#line 642 "glsl_parser.ypp"
+#line 649 "glsl_parser.ypp"
     { (yyval.n) = ast_xor_assign; ;}
     break;
 
-  case 90:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 643 "glsl_parser.ypp"
+#line 650 "glsl_parser.ypp"
     { (yyval.n) = ast_or_assign; ;}
     break;
 
-  case 91:
+  case 95:
 
 /* Line 1455 of yacc.c  */
-#line 648 "glsl_parser.ypp"
+#line 655 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (1)].expression);
        ;}
     break;
 
-  case 92:
+  case 96:
 
 /* Line 1455 of yacc.c  */
-#line 652 "glsl_parser.ypp"
+#line 659 "glsl_parser.ypp"
     {
           void *ctx = state;
           if ((yyvsp[(1) - (3)].expression)->oper != ast_sequence) {
@@ -3599,28 +3457,28 @@ yyreduce:
        ;}
     break;
 
-  case 94:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 672 "glsl_parser.ypp"
+#line 679 "glsl_parser.ypp"
     {
           (yyval.node) = (yyvsp[(1) - (2)].function);
        ;}
     break;
 
-  case 95:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 676 "glsl_parser.ypp"
+#line 683 "glsl_parser.ypp"
     {
           (yyval.node) = (yyvsp[(1) - (2)].declarator_list);
        ;}
     break;
 
-  case 96:
+  case 100:
 
 /* Line 1455 of yacc.c  */
-#line 680 "glsl_parser.ypp"
+#line 687 "glsl_parser.ypp"
     {
           if (((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_float)
               && ((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_int)) {
@@ -3633,30 +3491,30 @@ yyreduce:
        ;}
     break;
 
-  case 100:
+  case 104:
 
 /* Line 1455 of yacc.c  */
-#line 703 "glsl_parser.ypp"
+#line 710 "glsl_parser.ypp"
     {
           (yyval.function) = (yyvsp[(1) - (2)].function);
           (yyval.function)->parameters.push_tail(& (yyvsp[(2) - (2)].parameter_declarator)->link);
        ;}
     break;
 
-  case 101:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 708 "glsl_parser.ypp"
+#line 715 "glsl_parser.ypp"
     {
           (yyval.function) = (yyvsp[(1) - (3)].function);
           (yyval.function)->parameters.push_tail(& (yyvsp[(3) - (3)].parameter_declarator)->link);
        ;}
     break;
 
-  case 102:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 716 "glsl_parser.ypp"
+#line 723 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.function) = new(ctx) ast_function();
@@ -3666,10 +3524,10 @@ yyreduce:
        ;}
     break;
 
-  case 103:
+  case 107:
 
 /* Line 1455 of yacc.c  */
-#line 727 "glsl_parser.ypp"
+#line 734 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3681,10 +3539,10 @@ yyreduce:
        ;}
     break;
 
-  case 104:
+  case 108:
 
 /* Line 1455 of yacc.c  */
-#line 737 "glsl_parser.ypp"
+#line 744 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3698,90 +3556,102 @@ yyreduce:
        ;}
     break;
 
-  case 105:
+  case 109:
 
 /* Line 1455 of yacc.c  */
-#line 752 "glsl_parser.ypp"
+#line 759 "glsl_parser.ypp"
     {
-          (yyvsp[(1) - (3)].type_qualifier).i |= (yyvsp[(2) - (3)].type_qualifier).i;
+          (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
 
           (yyval.parameter_declarator) = (yyvsp[(3) - (3)].parameter_declarator);
-          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (3)].type_qualifier).q;
+          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (3)].type_qualifier);
        ;}
     break;
 
-  case 106:
+  case 110:
 
 /* Line 1455 of yacc.c  */
-#line 759 "glsl_parser.ypp"
+#line 766 "glsl_parser.ypp"
     {
           (yyval.parameter_declarator) = (yyvsp[(2) - (2)].parameter_declarator);
-          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier).q;
+          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier);
        ;}
     break;
 
-  case 107:
+  case 111:
 
 /* Line 1455 of yacc.c  */
-#line 764 "glsl_parser.ypp"
+#line 771 "glsl_parser.ypp"
     {
           void *ctx = state;
-          (yyvsp[(1) - (3)].type_qualifier).i |= (yyvsp[(2) - (3)].type_qualifier).i;
+          (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
 
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
           (yyval.parameter_declarator)->set_location(yylloc);
           (yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type();
-          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (3)].type_qualifier).q;
+          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (3)].type_qualifier);
           (yyval.parameter_declarator)->type->specifier = (yyvsp[(3) - (3)].type_specifier);
        ;}
     break;
 
-  case 108:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 775 "glsl_parser.ypp"
+#line 782 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
           (yyval.parameter_declarator)->set_location(yylloc);
           (yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type();
-          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier).q;
+          (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier);
           (yyval.parameter_declarator)->type->specifier = (yyvsp[(2) - (2)].type_specifier);
        ;}
     break;
 
-  case 109:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 786 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; ;}
+#line 794 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+       ;}
     break;
 
-  case 110:
+  case 114:
 
 /* Line 1455 of yacc.c  */
-#line 787 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.in = 1; ;}
+#line 798 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.in = 1;
+       ;}
     break;
 
-  case 111:
+  case 115:
 
 /* Line 1455 of yacc.c  */
-#line 788 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.out = 1; ;}
+#line 803 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.out = 1;
+       ;}
     break;
 
-  case 112:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 789 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.in = 1; (yyval.type_qualifier).q.out = 1; ;}
+#line 808 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.in = 1;
+          (yyval.type_qualifier).flags.q.out = 1;
+       ;}
     break;
 
-  case 115:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 799 "glsl_parser.ypp"
+#line 822 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (3)].identifier), false, NULL, NULL);
@@ -3792,10 +3662,10 @@ yyreduce:
        ;}
     break;
 
-  case 116:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 808 "glsl_parser.ypp"
+#line 831 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), true, NULL, NULL);
@@ -3806,10 +3676,10 @@ yyreduce:
        ;}
     break;
 
-  case 117:
+  case 121:
 
 /* Line 1455 of yacc.c  */
-#line 817 "glsl_parser.ypp"
+#line 840 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (6)].identifier), true, (yyvsp[(5) - (6)].expression), NULL);
@@ -3820,10 +3690,10 @@ yyreduce:
        ;}
     break;
 
-  case 118:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 826 "glsl_parser.ypp"
+#line 849 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (7)].identifier), true, NULL, (yyvsp[(7) - (7)].expression));
@@ -3834,10 +3704,10 @@ yyreduce:
        ;}
     break;
 
-  case 119:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 835 "glsl_parser.ypp"
+#line 858 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (8)].identifier), true, (yyvsp[(5) - (8)].expression), (yyvsp[(8) - (8)].expression));
@@ -3848,10 +3718,10 @@ yyreduce:
        ;}
     break;
 
-  case 120:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 844 "glsl_parser.ypp"
+#line 867 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), false, NULL, (yyvsp[(5) - (5)].expression));
@@ -3862,10 +3732,10 @@ yyreduce:
        ;}
     break;
 
-  case 121:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 857 "glsl_parser.ypp"
+#line 880 "glsl_parser.ypp"
     {
           void *ctx = state;
           if ((yyvsp[(1) - (1)].fully_specified_type)->specifier->type_specifier != ast_struct) {
@@ -3878,10 +3748,10 @@ yyreduce:
        ;}
     break;
 
-  case 122:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 868 "glsl_parser.ypp"
+#line 891 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3892,10 +3762,10 @@ yyreduce:
        ;}
     break;
 
-  case 123:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 877 "glsl_parser.ypp"
+#line 900 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), true, NULL, NULL);
@@ -3906,10 +3776,10 @@ yyreduce:
        ;}
     break;
 
-  case 124:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 886 "glsl_parser.ypp"
+#line 909 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (5)].identifier), true, (yyvsp[(4) - (5)].expression), NULL);
@@ -3920,10 +3790,10 @@ yyreduce:
        ;}
     break;
 
-  case 125:
+  case 129:
 
 /* Line 1455 of yacc.c  */
-#line 895 "glsl_parser.ypp"
+#line 918 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (6)].identifier), true, NULL, (yyvsp[(6) - (6)].expression));
@@ -3934,10 +3804,10 @@ yyreduce:
        ;}
     break;
 
-  case 126:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 904 "glsl_parser.ypp"
+#line 927 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (7)].identifier), true, (yyvsp[(4) - (7)].expression), (yyvsp[(7) - (7)].expression));
@@ -3948,10 +3818,10 @@ yyreduce:
        ;}
     break;
 
-  case 127:
+  case 131:
 
 /* Line 1455 of yacc.c  */
-#line 913 "glsl_parser.ypp"
+#line 936 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -3962,10 +3832,10 @@ yyreduce:
        ;}
     break;
 
-  case 128:
+  case 132:
 
 /* Line 1455 of yacc.c  */
-#line 922 "glsl_parser.ypp"
+#line 945 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3978,10 +3848,10 @@ yyreduce:
        ;}
     break;
 
-  case 129:
+  case 133:
 
 /* Line 1455 of yacc.c  */
-#line 936 "glsl_parser.ypp"
+#line 959 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3990,204 +3860,322 @@ yyreduce:
        ;}
     break;
 
-  case 130:
+  case 134:
 
 /* Line 1455 of yacc.c  */
-#line 943 "glsl_parser.ypp"
+#line 966 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
           (yyval.fully_specified_type)->set_location(yylloc);
-          (yyval.fully_specified_type)->qualifier = (yyvsp[(1) - (2)].type_qualifier).q;
+          (yyval.fully_specified_type)->qualifier = (yyvsp[(1) - (2)].type_qualifier);
           (yyval.fully_specified_type)->specifier = (yyvsp[(2) - (2)].type_specifier);
        ;}
     break;
 
-  case 131:
-
-/* Line 1455 of yacc.c  */
-#line 953 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; ;}
-    break;
-
-  case 133:
+  case 135:
 
 /* Line 1455 of yacc.c  */
-#line 959 "glsl_parser.ypp"
+#line 977 "glsl_parser.ypp"
     {
          (yyval.type_qualifier) = (yyvsp[(3) - (4)].type_qualifier);
        ;}
     break;
 
-  case 135:
+  case 137:
 
 /* Line 1455 of yacc.c  */
-#line 967 "glsl_parser.ypp"
+#line 985 "glsl_parser.ypp"
     {
-          (yyval.type_qualifier).i = (yyvsp[(1) - (3)].type_qualifier).i | (yyvsp[(3) - (3)].type_qualifier).i;
+          if (((yyvsp[(1) - (3)].type_qualifier).flags.i & (yyvsp[(3) - (3)].type_qualifier).flags.i) != 0) {
+             _mesa_glsl_error(& (yylsp[(3) - (3)]), state,
+                              "duplicate layout qualifiers used\n");
+             YYERROR;
+          }
+
+          (yyval.type_qualifier).flags.i = (yyvsp[(1) - (3)].type_qualifier).flags.i | (yyvsp[(3) - (3)].type_qualifier).flags.i;
+
+          if ((yyvsp[(1) - (3)].type_qualifier).flags.q.explicit_location)
+             (yyval.type_qualifier).location = (yyvsp[(1) - (3)].type_qualifier).location;
+
+          if ((yyvsp[(3) - (3)].type_qualifier).flags.q.explicit_location)
+             (yyval.type_qualifier).location = (yyvsp[(3) - (3)].type_qualifier).location;
        ;}
     break;
 
-  case 136:
+  case 138:
 
 /* Line 1455 of yacc.c  */
-#line 974 "glsl_parser.ypp"
+#line 1004 "glsl_parser.ypp"
     {
-          (yyval.type_qualifier).i = 0;
+          bool got_one = false;
 
-          if (state->ARB_fragment_coord_conventions_enable) {
-             bool got_one = false;
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
 
+          if (state->ARB_fragment_coord_conventions_enable) {
              if (strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left") == 0) {
                 got_one = true;
-                (yyval.type_qualifier).q.origin_upper_left = 1;
+                (yyval.type_qualifier).flags.q.origin_upper_left = 1;
              } else if (strcmp((yyvsp[(1) - (1)].identifier), "pixel_center_integer") == 0) {
                 got_one = true;
-                (yyval.type_qualifier).q.pixel_center_integer = 1;
-             }
-
-             if (state->ARB_fragment_coord_conventions_warn && got_one) {
-                _mesa_glsl_warning(& (yylsp[(1) - (1)]), state,
-                                   "GL_ARB_fragment_coord_conventions layout "
-                                   "identifier `%s' used\n", (yyvsp[(1) - (1)].identifier));
+                (yyval.type_qualifier).flags.q.pixel_center_integer = 1;
              }
           }
 
           /* If the identifier didn't match any known layout identifiers,
            * emit an error.
            */
-          if ((yyval.type_qualifier).i == 0) {
+          if (!got_one) {
              _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "unrecognized layout identifier "
                               "`%s'\n", (yyvsp[(1) - (1)].identifier));
              YYERROR;
+          } else if (state->ARB_fragment_coord_conventions_warn) {
+             _mesa_glsl_warning(& (yylsp[(1) - (1)]), state,
+                                "GL_ARB_fragment_coord_conventions layout "
+                                "identifier `%s' used\n", (yyvsp[(1) - (1)].identifier));
           }
        ;}
     break;
 
-  case 137:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1007 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.smooth = 1; ;}
-    break;
+#line 1033 "glsl_parser.ypp"
+    {
+          bool got_one = false;
 
-  case 138:
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
 
-/* Line 1455 of yacc.c  */
-#line 1008 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.flat = 1; ;}
+          if (state->ARB_explicit_attrib_location_enable) {
+             /* FINISHME: Handle 'index' once GL_ARB_blend_func_exteneded and
+              * FINISHME: GLSL 1.30 (or later) are supported.
+              */
+             if (strcmp("location", (yyvsp[(1) - (3)].identifier)) == 0) {
+                got_one = true;
+
+                (yyval.type_qualifier).flags.q.explicit_location = 1;
+
+                if ((yyvsp[(3) - (3)].n) >= 0) {
+                   (yyval.type_qualifier).location = (yyvsp[(3) - (3)].n);
+                } else {
+                   _mesa_glsl_error(& (yylsp[(3) - (3)]), state,
+                                    "invalid location %d specified\n", (yyvsp[(3) - (3)].n));
+                   YYERROR;
+                }
+             }
+          }
+
+          /* If the identifier didn't match any known layout identifiers,
+           * emit an error.
+           */
+          if (!got_one) {
+             _mesa_glsl_error(& (yylsp[(1) - (3)]), state, "unrecognized layout identifier "
+                              "`%s'\n", (yyvsp[(1) - (3)].identifier));
+             YYERROR;
+          } else if (state->ARB_explicit_attrib_location_warn) {
+             _mesa_glsl_warning(& (yylsp[(1) - (3)]), state,
+                                "GL_ARB_explicit_attrib_location layout "
+                                "identifier `%s' used\n", (yyvsp[(1) - (3)].identifier));
+          }
+       ;}
     break;
 
-  case 139:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1009 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.noperspective = 1; ;}
+#line 1074 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.smooth = 1;
+       ;}
     break;
 
-  case 140:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1013 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.constant = 1; ;}
+#line 1079 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.flat = 1;
+       ;}
     break;
 
   case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1019 "glsl_parser.ypp"
+#line 1084 "glsl_parser.ypp"
     {
-          (yyval.type_qualifier).i = (yyvsp[(1) - (2)].type_qualifier).i | (yyvsp[(2) - (2)].type_qualifier).i;
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.noperspective = 1;
        ;}
     break;
 
   case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1023 "glsl_parser.ypp"
+#line 1092 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.constant = 1;
+       ;}
+    break;
+
+  case 146:
+
+/* Line 1455 of yacc.c  */
+#line 1102 "glsl_parser.ypp"
+    {
+          (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
+          (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
+       ;}
+    break;
+
+  case 148:
+
+/* Line 1455 of yacc.c  */
+#line 1108 "glsl_parser.ypp"
+    {
+          (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
+          (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
+       ;}
+    break;
+
+  case 149:
+
+/* Line 1455 of yacc.c  */
+#line 1113 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(2) - (2)].type_qualifier);
-          (yyval.type_qualifier).q.invariant = 1;
+          (yyval.type_qualifier).flags.q.invariant = 1;
        ;}
     break;
 
-  case 144:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1030 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.constant = 1; ;}
+#line 1118 "glsl_parser.ypp"
+    {
+          (yyval.type_qualifier) = (yyvsp[(2) - (3)].type_qualifier);
+          (yyval.type_qualifier).flags.i |= (yyvsp[(3) - (3)].type_qualifier).flags.i;
+          (yyval.type_qualifier).flags.q.invariant = 1;
+       ;}
     break;
 
-  case 145:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1031 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.attribute = 1; ;}
+#line 1124 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.invariant = 1;
+       ;}
     break;
 
-  case 146:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1032 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = (yyvsp[(1) - (2)].type_qualifier).i; (yyval.type_qualifier).q.varying = 1; ;}
+#line 1132 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.constant = 1;
+       ;}
     break;
 
-  case 147:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1033 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.centroid = 1; (yyval.type_qualifier).q.varying = 1; ;}
+#line 1137 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.attribute = 1;
+       ;}
     break;
 
-  case 148:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1034 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.in = 1; ;}
+#line 1142 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.varying = 1;
+       ;}
     break;
 
-  case 149:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1035 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.out = 1; ;}
+#line 1147 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.centroid = 1;
+          (yyval.type_qualifier).flags.q.varying = 1;
+       ;}
     break;
 
-  case 150:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1036 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.centroid = 1; (yyval.type_qualifier).q.in = 1; ;}
+#line 1153 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.in = 1;
+       ;}
     break;
 
-  case 151:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1037 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.centroid = 1; (yyval.type_qualifier).q.out = 1; ;}
+#line 1158 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.out = 1;
+       ;}
     break;
 
-  case 152:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1038 "glsl_parser.ypp"
-    { (yyval.type_qualifier).i = 0; (yyval.type_qualifier).q.uniform = 1; ;}
+#line 1163 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.in = 1;
+       ;}
     break;
 
-  case 154:
+  case 159:
+
+/* Line 1455 of yacc.c  */
+#line 1168 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.out = 1;
+       ;}
+    break;
+
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1044 "glsl_parser.ypp"
+#line 1173 "glsl_parser.ypp"
+    {
+          memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
+          (yyval.type_qualifier).flags.q.uniform = 1;
+       ;}
+    break;
+
+  case 162:
+
+/* Line 1455 of yacc.c  */
+#line 1182 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(2) - (2)].type_specifier);
           (yyval.type_specifier)->precision = (yyvsp[(1) - (2)].n);
        ;}
     break;
 
-  case 156:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1053 "glsl_parser.ypp"
+#line 1191 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(1) - (3)].type_specifier);
           (yyval.type_specifier)->is_array = true;
@@ -4195,10 +4183,10 @@ yyreduce:
        ;}
     break;
 
-  case 157:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1059 "glsl_parser.ypp"
+#line 1197 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(1) - (4)].type_specifier);
           (yyval.type_specifier)->is_array = true;
@@ -4206,10 +4194,10 @@ yyreduce:
        ;}
     break;
 
-  case 158:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "glsl_parser.ypp"
+#line 1206 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].n));
@@ -4217,10 +4205,10 @@ yyreduce:
        ;}
     break;
 
-  case 159:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1074 "glsl_parser.ypp"
+#line 1212 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].struct_specifier));
@@ -4228,10 +4216,10 @@ yyreduce:
        ;}
     break;
 
-  case 160:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1080 "glsl_parser.ypp"
+#line 1218 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].identifier));
@@ -4239,439 +4227,418 @@ yyreduce:
        ;}
     break;
 
-  case 161:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1088 "glsl_parser.ypp"
+#line 1226 "glsl_parser.ypp"
     { (yyval.n) = ast_void; ;}
     break;
 
-  case 162:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1089 "glsl_parser.ypp"
+#line 1227 "glsl_parser.ypp"
     { (yyval.n) = ast_float; ;}
     break;
 
-  case 163:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1090 "glsl_parser.ypp"
+#line 1228 "glsl_parser.ypp"
     { (yyval.n) = ast_int; ;}
     break;
 
-  case 164:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1091 "glsl_parser.ypp"
+#line 1229 "glsl_parser.ypp"
     { (yyval.n) = ast_uint; ;}
     break;
 
-  case 165:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1092 "glsl_parser.ypp"
+#line 1230 "glsl_parser.ypp"
     { (yyval.n) = ast_bool; ;}
     break;
 
-  case 166:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1093 "glsl_parser.ypp"
+#line 1231 "glsl_parser.ypp"
     { (yyval.n) = ast_vec2; ;}
     break;
 
-  case 167:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1094 "glsl_parser.ypp"
+#line 1232 "glsl_parser.ypp"
     { (yyval.n) = ast_vec3; ;}
     break;
 
-  case 168:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1095 "glsl_parser.ypp"
+#line 1233 "glsl_parser.ypp"
     { (yyval.n) = ast_vec4; ;}
     break;
 
-  case 169:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1096 "glsl_parser.ypp"
+#line 1234 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec2; ;}
     break;
 
-  case 170:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1097 "glsl_parser.ypp"
+#line 1235 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec3; ;}
     break;
 
-  case 171:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1098 "glsl_parser.ypp"
+#line 1236 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec4; ;}
     break;
 
-  case 172:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1099 "glsl_parser.ypp"
+#line 1237 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec2; ;}
     break;
 
-  case 173:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1100 "glsl_parser.ypp"
+#line 1238 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec3; ;}
     break;
 
-  case 174:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1101 "glsl_parser.ypp"
+#line 1239 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec4; ;}
     break;
 
-  case 175:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1102 "glsl_parser.ypp"
+#line 1240 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec2; ;}
     break;
 
-  case 176:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1103 "glsl_parser.ypp"
+#line 1241 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec3; ;}
     break;
 
-  case 177:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1104 "glsl_parser.ypp"
+#line 1242 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec4; ;}
     break;
 
-  case 178:
-
-/* Line 1455 of yacc.c  */
-#line 1105 "glsl_parser.ypp"
-    { (yyval.n) = ast_mat2; ;}
-    break;
-
-  case 179:
-
-/* Line 1455 of yacc.c  */
-#line 1106 "glsl_parser.ypp"
-    { (yyval.n) = ast_mat3; ;}
-    break;
-
-  case 180:
-
-/* Line 1455 of yacc.c  */
-#line 1107 "glsl_parser.ypp"
-    { (yyval.n) = ast_mat4; ;}
-    break;
-
-  case 181:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1108 "glsl_parser.ypp"
+#line 1243 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2; ;}
     break;
 
-  case 182:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1109 "glsl_parser.ypp"
+#line 1244 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2x3; ;}
     break;
 
-  case 183:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1110 "glsl_parser.ypp"
+#line 1245 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2x4; ;}
     break;
 
-  case 184:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1111 "glsl_parser.ypp"
+#line 1246 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3x2; ;}
     break;
 
-  case 185:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1112 "glsl_parser.ypp"
+#line 1247 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3; ;}
     break;
 
-  case 186:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1113 "glsl_parser.ypp"
+#line 1248 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3x4; ;}
     break;
 
-  case 187:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1114 "glsl_parser.ypp"
+#line 1249 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4x2; ;}
     break;
 
-  case 188:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1115 "glsl_parser.ypp"
+#line 1250 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4x3; ;}
     break;
 
-  case 189:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1116 "glsl_parser.ypp"
+#line 1251 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4; ;}
     break;
 
-  case 190:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1117 "glsl_parser.ypp"
+#line 1252 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1d; ;}
     break;
 
-  case 191:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1118 "glsl_parser.ypp"
+#line 1253 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2d; ;}
     break;
 
-  case 192:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1119 "glsl_parser.ypp"
+#line 1254 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2drect; ;}
     break;
 
-  case 193:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1120 "glsl_parser.ypp"
+#line 1255 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler3d; ;}
     break;
 
-  case 194:
+  case 199:
 
 /* Line 1455 of yacc.c  */
-#line 1121 "glsl_parser.ypp"
+#line 1256 "glsl_parser.ypp"
     { (yyval.n) = ast_samplercube; ;}
     break;
 
-  case 195:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1122 "glsl_parser.ypp"
+#line 1257 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1dshadow; ;}
     break;
 
-  case 196:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1123 "glsl_parser.ypp"
+#line 1258 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2dshadow; ;}
     break;
 
-  case 197:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1124 "glsl_parser.ypp"
+#line 1259 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2drectshadow; ;}
     break;
 
-  case 198:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1125 "glsl_parser.ypp"
+#line 1260 "glsl_parser.ypp"
     { (yyval.n) = ast_samplercubeshadow; ;}
     break;
 
-  case 199:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1126 "glsl_parser.ypp"
+#line 1261 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1darray; ;}
     break;
 
-  case 200:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 1127 "glsl_parser.ypp"
+#line 1262 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2darray; ;}
     break;
 
-  case 201:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 1128 "glsl_parser.ypp"
+#line 1263 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1darrayshadow; ;}
     break;
 
-  case 202:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 1129 "glsl_parser.ypp"
+#line 1264 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2darrayshadow; ;}
     break;
 
-  case 203:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 1130 "glsl_parser.ypp"
+#line 1265 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler1d; ;}
     break;
 
-  case 204:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1131 "glsl_parser.ypp"
+#line 1266 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler2d; ;}
     break;
 
-  case 205:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1132 "glsl_parser.ypp"
+#line 1267 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler3d; ;}
     break;
 
-  case 206:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1133 "glsl_parser.ypp"
+#line 1268 "glsl_parser.ypp"
     { (yyval.n) = ast_isamplercube; ;}
     break;
 
-  case 207:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1134 "glsl_parser.ypp"
+#line 1269 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler1darray; ;}
     break;
 
-  case 208:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 1135 "glsl_parser.ypp"
+#line 1270 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler2darray; ;}
     break;
 
-  case 209:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 1136 "glsl_parser.ypp"
+#line 1271 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler1d; ;}
     break;
 
-  case 210:
+  case 215:
 
 /* Line 1455 of yacc.c  */
-#line 1137 "glsl_parser.ypp"
+#line 1272 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler2d; ;}
     break;
 
-  case 211:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 1138 "glsl_parser.ypp"
+#line 1273 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler3d; ;}
     break;
 
-  case 212:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1139 "glsl_parser.ypp"
+#line 1274 "glsl_parser.ypp"
     { (yyval.n) = ast_usamplercube; ;}
     break;
 
-  case 213:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1140 "glsl_parser.ypp"
+#line 1275 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler1darray; ;}
     break;
 
-  case 214:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1141 "glsl_parser.ypp"
+#line 1276 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler2darray; ;}
     break;
 
-  case 215:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1145 "glsl_parser.ypp"
+#line 1280 "glsl_parser.ypp"
     {
-                          if (state->language_version < 130)
-                             _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
-                                              "precision qualifier forbidden "
-                                              "in GLSL %d.%d (1.30 or later "
-                                              "required)\n",
-                                              state->language_version / 100,
-                                              state->language_version % 100);
+                    if (!state->es_shader && state->language_version < 130)
+                       _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
+                                        "precision qualifier forbidden "
+                                        "in GLSL %d.%d (1.30 or later "
+                                        "required)\n",
+                                        state->language_version / 100,
+                                        state->language_version % 100);
 
-                          (yyval.n) = ast_precision_high;
-                       ;}
+                    (yyval.n) = ast_precision_high;
+                 ;}
     break;
 
-  case 216:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 1156 "glsl_parser.ypp"
+#line 1291 "glsl_parser.ypp"
     {
-                          if (state->language_version < 130)
-                             _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
-                                              "precision qualifier forbidden "
-                                              "in GLSL %d.%d (1.30 or later "
-                                              "required)\n",
-                                              state->language_version / 100,
-                                              state->language_version % 100);
+                    if (!state->es_shader && state->language_version < 130)
+                       _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
+                                        "precision qualifier forbidden "
+                                        "in GLSL %d.%d (1.30 or later "
+                                        "required)\n",
+                                        state->language_version / 100,
+                                        state->language_version % 100);
 
-                          (yyval.n) = ast_precision_medium;
-                       ;}
+                    (yyval.n) = ast_precision_medium;
+                 ;}
     break;
 
-  case 217:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1167 "glsl_parser.ypp"
+#line 1302 "glsl_parser.ypp"
     {
-                          if (state->language_version < 130)
-                             _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
-                                              "precision qualifier forbidden "
-                                              "in GLSL %d.%d (1.30 or later "
-                                              "required)\n",
-                                              state->language_version / 100,
-                                              state->language_version % 100);
+                    if (!state->es_shader && state->language_version < 130)
+                       _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
+                                        "precision qualifier forbidden "
+                                        "in GLSL %d.%d (1.30 or later "
+                                        "required)\n",
+                                        state->language_version / 100,
+                                        state->language_version % 100);
 
-                          (yyval.n) = ast_precision_low;
-                       ;}
+                    (yyval.n) = ast_precision_low;
+                 ;}
     break;
 
-  case 218:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1182 "glsl_parser.ypp"
+#line 1317 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[(2) - (5)].identifier), (yyvsp[(4) - (5)].node));
@@ -4679,10 +4646,10 @@ yyreduce:
        ;}
     break;
 
-  case 219:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1188 "glsl_parser.ypp"
+#line 1323 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.struct_specifier) = new(ctx) ast_struct_specifier(NULL, (yyvsp[(3) - (4)].node));
@@ -4690,30 +4657,30 @@ yyreduce:
        ;}
     break;
 
-  case 220:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1197 "glsl_parser.ypp"
+#line 1332 "glsl_parser.ypp"
     {
-          (yyval.node) = (struct ast_node *) (yyvsp[(1) - (1)].declarator_list);
+          (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].declarator_list);
           (yyvsp[(1) - (1)].declarator_list)->link.self_link();
        ;}
     break;
 
-  case 221:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1202 "glsl_parser.ypp"
+#line 1337 "glsl_parser.ypp"
     {
-          (yyval.node) = (struct ast_node *) (yyvsp[(1) - (2)].node);
+          (yyval.node) = (ast_node *) (yyvsp[(1) - (2)].node);
           (yyval.node)->link.insert_before(& (yyvsp[(2) - (2)].declarator_list)->link);
        ;}
     break;
 
-  case 222:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1210 "glsl_parser.ypp"
+#line 1345 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_fully_specified_type *type = new(ctx) ast_fully_specified_type();
@@ -4727,30 +4694,30 @@ yyreduce:
        ;}
     break;
 
-  case 223:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 1225 "glsl_parser.ypp"
+#line 1360 "glsl_parser.ypp"
     {
           (yyval.declaration) = (yyvsp[(1) - (1)].declaration);
           (yyvsp[(1) - (1)].declaration)->link.self_link();
        ;}
     break;
 
-  case 224:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1230 "glsl_parser.ypp"
+#line 1365 "glsl_parser.ypp"
     {
           (yyval.declaration) = (yyvsp[(1) - (3)].declaration);
           (yyval.declaration)->link.insert_before(& (yyvsp[(3) - (3)].declaration)->link);
        ;}
     break;
 
-  case 225:
+  case 230:
 
 /* Line 1455 of yacc.c  */
-#line 1238 "glsl_parser.ypp"
+#line 1373 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (1)].identifier), false, NULL, NULL);
@@ -4758,10 +4725,10 @@ yyreduce:
        ;}
     break;
 
-  case 226:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1244 "glsl_parser.ypp"
+#line 1379 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (4)].identifier), true, (yyvsp[(3) - (4)].expression), NULL);
@@ -4769,31 +4736,31 @@ yyreduce:
        ;}
     break;
 
-  case 231:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1267 "glsl_parser.ypp"
-    { (yyval.node) = (struct ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
+#line 1397 "glsl_parser.ypp"
+    { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
     break;
 
-  case 237:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1279 "glsl_parser.ypp"
+#line 1405 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
-  case 238:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1280 "glsl_parser.ypp"
+#line 1406 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
-  case 241:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1287 "glsl_parser.ypp"
+#line 1413 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL);
@@ -4801,10 +4768,10 @@ yyreduce:
        ;}
     break;
 
-  case 242:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1293 "glsl_parser.ypp"
+#line 1419 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[(2) - (3)].node));
@@ -4812,17 +4779,17 @@ yyreduce:
        ;}
     break;
 
-  case 243:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1301 "glsl_parser.ypp"
-    { (yyval.node) = (struct ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
+#line 1427 "glsl_parser.ypp"
+    { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
     break;
 
-  case 245:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1307 "glsl_parser.ypp"
+#line 1433 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL);
@@ -4830,10 +4797,10 @@ yyreduce:
        ;}
     break;
 
-  case 246:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1313 "glsl_parser.ypp"
+#line 1439 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[(2) - (3)].node));
@@ -4841,10 +4808,10 @@ yyreduce:
        ;}
     break;
 
-  case 247:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1322 "glsl_parser.ypp"
+#line 1448 "glsl_parser.ypp"
     {
           if ((yyvsp[(1) - (1)].node) == NULL) {
              _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "<nil> statement\n");
@@ -4856,10 +4823,10 @@ yyreduce:
        ;}
     break;
 
-  case 248:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1332 "glsl_parser.ypp"
+#line 1458 "glsl_parser.ypp"
     {
           if ((yyvsp[(2) - (2)].node) == NULL) {
              _mesa_glsl_error(& (yylsp[(2) - (2)]), state, "<nil> statement\n");
@@ -4870,10 +4837,10 @@ yyreduce:
        ;}
     break;
 
-  case 249:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1344 "glsl_parser.ypp"
+#line 1470 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_expression_statement(NULL);
@@ -4881,10 +4848,10 @@ yyreduce:
        ;}
     break;
 
-  case 250:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1350 "glsl_parser.ypp"
+#line 1476 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_expression_statement((yyvsp[(1) - (2)].expression));
@@ -4892,63 +4859,50 @@ yyreduce:
        ;}
     break;
 
-  case 251:
-
-/* Line 1455 of yacc.c  */
-#line 1359 "glsl_parser.ypp"
-    {
-          void *ctx = state;
-          (yyval.node) = new(ctx) ast_selection_statement((yyvsp[(3) - (7)].expression), (yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node));
-          (yyval.node)->set_location(yylloc);
-       ;}
-    break;
-
-  case 252:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1368 "glsl_parser.ypp"
+#line 1485 "glsl_parser.ypp"
     {
-          void *ctx = state;
-          (yyval.node) = new(ctx) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].node), NULL);
+          (yyval.node) = new(state) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].selection_rest_statement).then_statement,
+                                                  (yyvsp[(5) - (5)].selection_rest_statement).else_statement);
           (yyval.node)->set_location(yylloc);
        ;}
     break;
 
-  case 253:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1374 "glsl_parser.ypp"
+#line 1494 "glsl_parser.ypp"
     {
-          void *ctx = state;
-          (yyval.node) = new(ctx) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].node), NULL);
-          (yyval.node)->set_location(yylloc);
+          (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (3)].node);
+          (yyval.selection_rest_statement).else_statement = (yyvsp[(3) - (3)].node);
        ;}
     break;
 
-  case 254:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1380 "glsl_parser.ypp"
+#line 1499 "glsl_parser.ypp"
     {
-          void *ctx = state;
-          (yyval.node) = new(ctx) ast_selection_statement((yyvsp[(3) - (7)].expression), (yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node));
-          (yyval.node)->set_location(yylloc);
+          (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (1)].node);
+          (yyval.selection_rest_statement).else_statement = NULL;
        ;}
     break;
 
-  case 255:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1389 "glsl_parser.ypp"
+#line 1507 "glsl_parser.ypp"
     {
-          (yyval.node) = (struct ast_node *) (yyvsp[(1) - (1)].expression);
+          (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].expression);
        ;}
     break;
 
-  case 256:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1393 "glsl_parser.ypp"
+#line 1511 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -4961,10 +4915,10 @@ yyreduce:
        ;}
     break;
 
-  case 260:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1416 "glsl_parser.ypp"
+#line 1534 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while,
@@ -4973,10 +4927,10 @@ yyreduce:
        ;}
     break;
 
-  case 261:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1423 "glsl_parser.ypp"
+#line 1541 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while,
@@ -4985,10 +4939,10 @@ yyreduce:
        ;}
     break;
 
-  case 262:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1430 "glsl_parser.ypp"
+#line 1548 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for,
@@ -4997,39 +4951,39 @@ yyreduce:
        ;}
     break;
 
-  case 266:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 1446 "glsl_parser.ypp"
+#line 1564 "glsl_parser.ypp"
     {
           (yyval.node) = NULL;
        ;}
     break;
 
-  case 267:
+  case 268:
 
 /* Line 1455 of yacc.c  */
-#line 1453 "glsl_parser.ypp"
+#line 1571 "glsl_parser.ypp"
     {
           (yyval.for_rest_statement).cond = (yyvsp[(1) - (2)].node);
           (yyval.for_rest_statement).rest = NULL;
        ;}
     break;
 
-  case 268:
+  case 269:
 
 /* Line 1455 of yacc.c  */
-#line 1458 "glsl_parser.ypp"
+#line 1576 "glsl_parser.ypp"
     {
           (yyval.for_rest_statement).cond = (yyvsp[(1) - (3)].node);
           (yyval.for_rest_statement).rest = (yyvsp[(3) - (3)].expression);
        ;}
     break;
 
-  case 269:
+  case 270:
 
 /* Line 1455 of yacc.c  */
-#line 1467 "glsl_parser.ypp"
+#line 1585 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL);
@@ -5037,10 +4991,10 @@ yyreduce:
        ;}
     break;
 
-  case 270:
+  case 271:
 
 /* Line 1455 of yacc.c  */
-#line 1473 "glsl_parser.ypp"
+#line 1591 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL);
@@ -5048,10 +5002,10 @@ yyreduce:
        ;}
     break;
 
-  case 271:
+  case 272:
 
 /* Line 1455 of yacc.c  */
-#line 1479 "glsl_parser.ypp"
+#line 1597 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL);
@@ -5059,10 +5013,10 @@ yyreduce:
        ;}
     break;
 
-  case 272:
+  case 273:
 
 /* Line 1455 of yacc.c  */
-#line 1485 "glsl_parser.ypp"
+#line 1603 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[(2) - (3)].expression));
@@ -5070,10 +5024,10 @@ yyreduce:
        ;}
     break;
 
-  case 273:
+  case 274:
 
 /* Line 1455 of yacc.c  */
-#line 1491 "glsl_parser.ypp"
+#line 1609 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL);
@@ -5081,24 +5035,31 @@ yyreduce:
        ;}
     break;
 
-  case 274:
+  case 275:
 
 /* Line 1455 of yacc.c  */
-#line 1499 "glsl_parser.ypp"
+#line 1617 "glsl_parser.ypp"
     { (yyval.node) = (yyvsp[(1) - (1)].function_definition); ;}
     break;
 
-  case 275:
+  case 276:
 
 /* Line 1455 of yacc.c  */
-#line 1500 "glsl_parser.ypp"
+#line 1618 "glsl_parser.ypp"
     { (yyval.node) = (yyvsp[(1) - (1)].node); ;}
     break;
 
-  case 276:
+  case 277:
+
+/* Line 1455 of yacc.c  */
+#line 1619 "glsl_parser.ypp"
+    { (yyval.node) = NULL; ;}
+    break;
+
+  case 278:
 
 /* Line 1455 of yacc.c  */
-#line 1505 "glsl_parser.ypp"
+#line 1624 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.function_definition) = new(ctx) ast_function_definition();
@@ -5111,7 +5072,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 5115 "glsl_parser.cpp"
+#line 5076 "glsl_parser.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);