/* A Bison parser, made by GNU Bison 3.3.2.  */

/* Apple Note: For the avoidance of doubt, Apple elects to distribute this file under the terms of the BSD license. */

/* Bison implementation for Yacc-like parsers in C

   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
   Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

/* C LALR(1) parser skeleton written by Richard Stallman, by
   simplifying the original so-called "semantic" parser.  */

/* All symbols defined below should begin with yy or YY, to avoid
   infringing on user name space.  This should be done even for local
   variables, as they might otherwise be expanded by user macros.
   There are some unavoidable exceptions within include files to
   define necessary library symbols; they are noted "INFRINGES ON
   USER NAME SPACE" below.  */

/* Undocumented macros, especially those whose name start with YY_,
   are private implementation details.  Do not rely on them.  */

/* Identify Bison output.  */
#define YYBISON 1

/* Bison version.  */
#define YYBISON_VERSION "3.3.2"

/* Skeleton name.  */
#define YYSKELETON_NAME "yacc.c"

/* Pure parsers.  */
#define YYPURE 2

/* Push parsers.  */
#define YYPUSH 0

/* Pull parsers.  */
#define YYPULL 1

/* First part of user prologue.  */

// GENERATED FILE - DO NOT EDIT.
// Generated by generate_parser.py from glslang.y
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// glslang.y:
//   Parser for the OpenGL shading language.

// Ignore errors in auto-generated code.
#if defined(__GNUC__)
#    pragma GCC diagnostic ignored "-Wunused-function"
#    pragma GCC diagnostic ignored "-Wunused-variable"
#    pragma GCC diagnostic ignored "-Wswitch-enum"
#elif defined(_MSC_VER)
#    pragma warning(disable : 4065)
#    pragma warning(disable : 4189)
#    pragma warning(disable : 4244)
#    pragma warning(disable : 4505)
#    pragma warning(disable : 4701)
#    pragma warning(disable : 4702)
#endif
#if defined(__clang__)
#    pragma clang diagnostic ignored "-Wunreachable-code"
#endif

#include "GLSLANG/ShaderLang.h"
#include "angle_gl.h"
#include "compiler/translator/Declarator.h"
#include "compiler/translator/ParseContext.h"
#include "compiler/translator/SymbolTable.h"

#define YYENABLE_NLS 0

using namespace sh;

#ifndef YY_NULLPTR
#    if defined __cplusplus
#        if 201103L <= __cplusplus
#            define YY_NULLPTR nullptr
#        else
#            define YY_NULLPTR 0
#        endif
#    else
#        define YY_NULLPTR ((void *)0)
#    endif
#endif

/* Enabling verbose error messages.  */
#ifdef YYERROR_VERBOSE
#    undef YYERROR_VERBOSE
#    define YYERROR_VERBOSE 1
#else
#    define YYERROR_VERBOSE 0
#endif

/* In a future release of Bison, this section will be replaced
   by #include "glslang_tab_autogen.h".  */
#ifndef YY_YY_GLSLANG_TAB_AUTOGEN_H_INCLUDED
#    define YY_YY_GLSLANG_TAB_AUTOGEN_H_INCLUDED
/* Debug traces.  */
#    ifndef YYDEBUG
#        define YYDEBUG 0
#    endif
#    if YYDEBUG
extern int yydebug;
#    endif
/* "%code requires" blocks.  */

#    define YYLTYPE TSourceLoc
#    define YYLTYPE_IS_DECLARED 1
#    define YYLTYPE_IS_TRIVIAL 1

/* Token type.  */
#    ifndef YYTOKENTYPE
#        define YYTOKENTYPE
enum yytokentype
{
    INVARIANT                 = 258,
    PRECISE                   = 259,
    HIGH_PRECISION            = 260,
    MEDIUM_PRECISION          = 261,
    LOW_PRECISION             = 262,
    PRECISION                 = 263,
    ATTRIBUTE                 = 264,
    CONST_QUAL                = 265,
    BOOL_TYPE                 = 266,
    FLOAT_TYPE                = 267,
    INT_TYPE                  = 268,
    UINT_TYPE                 = 269,
    BREAK                     = 270,
    CONTINUE                  = 271,
    DO                        = 272,
    ELSE                      = 273,
    FOR                       = 274,
    IF                        = 275,
    DISCARD                   = 276,
    RETURN                    = 277,
    SWITCH                    = 278,
    CASE                      = 279,
    DEFAULT                   = 280,
    BVEC2                     = 281,
    BVEC3                     = 282,
    BVEC4                     = 283,
    IVEC2                     = 284,
    IVEC3                     = 285,
    IVEC4                     = 286,
    VEC2                      = 287,
    VEC3                      = 288,
    VEC4                      = 289,
    UVEC2                     = 290,
    UVEC3                     = 291,
    UVEC4                     = 292,
    MATRIX2                   = 293,
    MATRIX3                   = 294,
    MATRIX4                   = 295,
    IN_QUAL                   = 296,
    OUT_QUAL                  = 297,
    INOUT_QUAL                = 298,
    UNIFORM                   = 299,
    BUFFER                    = 300,
    VARYING                   = 301,
    MATRIX2x3                 = 302,
    MATRIX3x2                 = 303,
    MATRIX2x4                 = 304,
    MATRIX4x2                 = 305,
    MATRIX3x4                 = 306,
    MATRIX4x3                 = 307,
    CENTROID                  = 308,
    FLAT                      = 309,
    SMOOTH                    = 310,
    READONLY                  = 311,
    WRITEONLY                 = 312,
    COHERENT                  = 313,
    RESTRICT                  = 314,
    VOLATILE                  = 315,
    SHARED                    = 316,
    STRUCT                    = 317,
    VOID_TYPE                 = 318,
    WHILE                     = 319,
    SAMPLER2D                 = 320,
    SAMPLERCUBE               = 321,
    SAMPLER_EXTERNAL_OES      = 322,
    SAMPLER2DRECT             = 323,
    SAMPLER2DARRAY            = 324,
    ISAMPLER2D                = 325,
    ISAMPLER3D                = 326,
    ISAMPLERCUBE              = 327,
    ISAMPLER2DARRAY           = 328,
    USAMPLER2D                = 329,
    USAMPLER3D                = 330,
    USAMPLERCUBE              = 331,
    USAMPLER2DARRAY           = 332,
    SAMPLER2DMS               = 333,
    ISAMPLER2DMS              = 334,
    USAMPLER2DMS              = 335,
    SAMPLER2DMSARRAY          = 336,
    ISAMPLER2DMSARRAY         = 337,
    USAMPLER2DMSARRAY         = 338,
    SAMPLER3D                 = 339,
    SAMPLER3DRECT             = 340,
    SAMPLER2DSHADOW           = 341,
    SAMPLERCUBESHADOW         = 342,
    SAMPLER2DARRAYSHADOW      = 343,
    SAMPLERVIDEOWEBGL         = 344,
    SAMPLEREXTERNAL2DY2YEXT   = 345,
    IMAGE2D                   = 346,
    IIMAGE2D                  = 347,
    UIMAGE2D                  = 348,
    IMAGE3D                   = 349,
    IIMAGE3D                  = 350,
    UIMAGE3D                  = 351,
    IMAGE2DARRAY              = 352,
    IIMAGE2DARRAY             = 353,
    UIMAGE2DARRAY             = 354,
    IMAGECUBE                 = 355,
    IIMAGECUBE                = 356,
    UIMAGECUBE                = 357,
    ATOMICUINT                = 358,
    LAYOUT                    = 359,
    YUVCSCSTANDARDEXT         = 360,
    YUVCSCSTANDARDEXTCONSTANT = 361,
    IDENTIFIER                = 362,
    TYPE_NAME                 = 363,
    FLOATCONSTANT             = 364,
    INTCONSTANT               = 365,
    UINTCONSTANT              = 366,
    BOOLCONSTANT              = 367,
    FIELD_SELECTION           = 368,
    LEFT_OP                   = 369,
    RIGHT_OP                  = 370,
    INC_OP                    = 371,
    DEC_OP                    = 372,
    LE_OP                     = 373,
    GE_OP                     = 374,
    EQ_OP                     = 375,
    NE_OP                     = 376,
    AND_OP                    = 377,
    OR_OP                     = 378,
    XOR_OP                    = 379,
    MUL_ASSIGN                = 380,
    DIV_ASSIGN                = 381,
    ADD_ASSIGN                = 382,
    MOD_ASSIGN                = 383,
    LEFT_ASSIGN               = 384,
    RIGHT_ASSIGN              = 385,
    AND_ASSIGN                = 386,
    XOR_ASSIGN                = 387,
    OR_ASSIGN                 = 388,
    SUB_ASSIGN                = 389,
    LEFT_PAREN                = 390,
    RIGHT_PAREN               = 391,
    LEFT_BRACKET              = 392,
    RIGHT_BRACKET             = 393,
    LEFT_BRACE                = 394,
    RIGHT_BRACE               = 395,
    DOT                       = 396,
    COMMA                     = 397,
    COLON                     = 398,
    EQUAL                     = 399,
    SEMICOLON                 = 400,
    BANG                      = 401,
    DASH                      = 402,
    TILDE                     = 403,
    PLUS                      = 404,
    STAR                      = 405,
    SLASH                     = 406,
    PERCENT                   = 407,
    LEFT_ANGLE                = 408,
    RIGHT_ANGLE               = 409,
    VERTICAL_BAR              = 410,
    CARET                     = 411,
    AMPERSAND                 = 412,
    QUESTION                  = 413
};
#    endif

/* Value type.  */
#    if !defined YYSTYPE && !defined YYSTYPE_IS_DECLARED

union YYSTYPE
{

    struct
    {
        union
        {
            const char *string;  // pool allocated.
            float f;
            int i;
            unsigned int u;
            bool b;
        };
        const TSymbol *symbol;
    } lex;
    struct
    {
        TOperator op;
        union
        {
            TIntermNode *intermNode;
            TIntermNodePair nodePair;
            TIntermTyped *intermTypedNode;
            TIntermAggregate *intermAggregate;
            TIntermBlock *intermBlock;
            TIntermDeclaration *intermDeclaration;
            TIntermFunctionPrototype *intermFunctionPrototype;
            TIntermSwitch *intermSwitch;
            TIntermCase *intermCase;
        };
        union
        {
            TVector<unsigned int> *arraySizes;
            TTypeSpecifierNonArray typeSpecifierNonArray;
            TPublicType type;
            TPrecision precision;
            TLayoutQualifier layoutQualifier;
            TQualifier qualifier;
            TFunction *function;
            TFunctionLookup *functionLookup;
            TParameter param;
            TDeclarator *declarator;
            TDeclaratorList *declaratorList;
            TFieldList *fieldList;
            TQualifierWrapperBase *qualifierWrapper;
            TTypeQualifierBuilder *typeQualifierBuilder;
        };
    } interm;
};

typedef union YYSTYPE YYSTYPE;
#        define YYSTYPE_IS_TRIVIAL 1
#        define YYSTYPE_IS_DECLARED 1
#    endif

/* Location type.  */
#    if !defined YYLTYPE && !defined YYLTYPE_IS_DECLARED
typedef struct YYLTYPE YYLTYPE;
struct YYLTYPE
{
    int first_line;
    int first_column;
    int last_line;
    int last_column;
};
#        define YYLTYPE_IS_DECLARED 1
#        define YYLTYPE_IS_TRIVIAL 1
#    endif

int yyparse(TParseContext *context, void *scanner);

#endif /* !YY_YY_GLSLANG_TAB_AUTOGEN_H_INCLUDED  */

/* Second part of user prologue.  */

extern int yylex(YYSTYPE *yylval, YYLTYPE *yylloc, void *yyscanner);
extern void yyerror(YYLTYPE *yylloc, TParseContext *context, void *scanner, const char *reason);

#define YYLLOC_DEFAULT(Current, Rhs, N)                         \
    do                                                          \
    {                                                           \
        if (N)                                                  \
        {                                                       \
            (Current).first_file = YYRHSLOC(Rhs, 1).first_file; \
            (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \
            (Current).last_file  = YYRHSLOC(Rhs, N).last_file;  \
            (Current).last_line  = YYRHSLOC(Rhs, N).last_line;  \
        }                                                       \
        else                                                    \
        {                                                       \
            (Current).first_file = YYRHSLOC(Rhs, 0).last_file;  \
            (Current).first_line = YYRHSLOC(Rhs, 0).last_line;  \
            (Current).last_file  = YYRHSLOC(Rhs, 0).last_file;  \
            (Current).last_line  = YYRHSLOC(Rhs, 0).last_line;  \
        }                                                       \
    } while (0)

#define VERTEX_ONLY(S, L)                                              \
    do                                                                 \
    {                                                                  \
        if (context->getShaderType() != GL_VERTEX_SHADER)              \
        {                                                              \
            context->error(L, " supported in vertex shaders only", S); \
        }                                                              \
    } while (0)

#define COMPUTE_ONLY(S, L)                                              \
    do                                                                  \
    {                                                                   \
        if (context->getShaderType() != GL_COMPUTE_SHADER)              \
        {                                                               \
            context->error(L, " supported in compute shaders only", S); \
        }                                                               \
    } while (0)

#define ES2_ONLY(S, L)                                               \
    do                                                               \
    {                                                                \
        if (context->getShaderVersion() != 100)                      \
        {                                                            \
            context->error(L, " supported in GLSL ES 1.00 only", S); \
        }                                                            \
    } while (0)

#define ES3_OR_NEWER(TOKEN, LINE, REASON)                                                    \
    do                                                                                       \
    {                                                                                        \
        if (context->getShaderVersion() < 300)                                               \
        {                                                                                    \
            context->error(LINE, REASON " supported in GLSL ES 3.00 and above only", TOKEN); \
        }                                                                                    \
    } while (0)

#define ES3_1_ONLY(TOKEN, LINE, REASON)                                            \
    do                                                                             \
    {                                                                              \
        if (context->getShaderVersion() != 310)                                    \
        {                                                                          \
            context->error(LINE, REASON " supported in GLSL ES 3.10 only", TOKEN); \
        }                                                                          \
    } while (0)

#ifdef short
#    undef short
#endif

#ifdef YYTYPE_UINT8
typedef YYTYPE_UINT8 yytype_uint8;
#else
typedef unsigned char yytype_uint8;
#endif

#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
#else
typedef signed char yytype_int8;
#endif

#ifdef YYTYPE_UINT16
typedef YYTYPE_UINT16 yytype_uint16;
#else
typedef unsigned short yytype_uint16;
#endif

#ifdef YYTYPE_INT16
typedef YYTYPE_INT16 yytype_int16;
#else
typedef short yytype_int16;
#endif

#ifndef YYSIZE_T
#    ifdef __SIZE_TYPE__
#        define YYSIZE_T __SIZE_TYPE__
#    elif defined size_t
#        define YYSIZE_T size_t
#    elif !defined YYSIZE_T
#        include <stddef.h> /* INFRINGES ON USER NAME SPACE */
#        define YYSIZE_T size_t
#    else
#        define YYSIZE_T unsigned
#    endif
#endif

#define YYSIZE_MAXIMUM ((YYSIZE_T)-1)

#ifndef YY_
#    if defined YYENABLE_NLS && YYENABLE_NLS
#        if ENABLE_NLS
#            include <libintl.h> /* INFRINGES ON USER NAME SPACE */
#            define YY_(Msgid) dgettext("bison-runtime", Msgid)
#        endif
#    endif
#    ifndef YY_
#        define YY_(Msgid) Msgid
#    endif
#endif

#ifndef YY_ATTRIBUTE
#    if (defined __GNUC__ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) || \
        defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
#        define YY_ATTRIBUTE(Spec) __attribute__(Spec)
#    else
#        define YY_ATTRIBUTE(Spec) /* empty */
#    endif
#endif

#ifndef YY_ATTRIBUTE_PURE
#    define YY_ATTRIBUTE_PURE YY_ATTRIBUTE((__pure__))
#endif

#ifndef YY_ATTRIBUTE_UNUSED
#    define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE((__unused__))
#endif

/* Suppress unused-variable warnings by "using" E.  */
#if !defined lint || defined __GNUC__
#    define YYUSE(E) ((void)(E))
#else
#    define YYUSE(E) /* empty */
#endif

#if defined __GNUC__ && !defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
#    define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                                              \
        _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \
            _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
#    define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop")
#else
#    define YY_INITIAL_VALUE(Value) Value
#endif
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
#    define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
#    define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
#    define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif

#if !defined yyoverflow || YYERROR_VERBOSE

/* The parser invokes alloca or malloc; define the necessary symbols.  */

#    ifdef YYSTACK_USE_ALLOCA
#        if YYSTACK_USE_ALLOCA
#            ifdef __GNUC__
#                define YYSTACK_ALLOC __builtin_alloca
#            elif defined __BUILTIN_VA_ARG_INCR
#                include <alloca.h> /* INFRINGES ON USER NAME SPACE */
#            elif defined _AIX
#                define YYSTACK_ALLOC __alloca
#            elif defined _MSC_VER
#                include <malloc.h> /* INFRINGES ON USER NAME SPACE */
#                define alloca _alloca
#            else
#                define YYSTACK_ALLOC alloca
#                if !defined _ALLOCA_H && !defined EXIT_SUCCESS
#                    include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
/* Use EXIT_SUCCESS as a witness for stdlib.h.  */
#                    ifndef EXIT_SUCCESS
#                        define EXIT_SUCCESS 0
#                    endif
#                endif
#            endif
#        endif
#    endif

#    ifdef YYSTACK_ALLOC
/* Pacify GCC's 'empty if-body' warning.  */
#        define YYSTACK_FREE(Ptr) \
            do                    \
            { /* empty */         \
                ;                 \
            } while (0)
#        ifndef YYSTACK_ALLOC_MAXIMUM
/* The OS might guarantee only one guard page at the bottom of the stack,
   and a page size can be as small as 4096 bytes.  So we cannot safely
   invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
   to allow for a few compiler-allocated temporary stack slots.  */
#            define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
#        endif
#    else
#        define YYSTACK_ALLOC YYMALLOC
#        define YYSTACK_FREE YYFREE
#        ifndef YYSTACK_ALLOC_MAXIMUM
#            define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
#        endif
#        if (defined __cplusplus && !defined EXIT_SUCCESS && \
             !((defined YYMALLOC || defined malloc) && (defined YYFREE || defined free)))
#            include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
#            ifndef EXIT_SUCCESS
#                define EXIT_SUCCESS 0
#            endif
#        endif
#        ifndef YYMALLOC
#            define YYMALLOC malloc
#            if !defined malloc && !defined EXIT_SUCCESS
void *malloc(YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
#            endif
#        endif
#        ifndef YYFREE
#            define YYFREE free
#            if !defined free && !defined EXIT_SUCCESS
void free(void *);      /* INFRINGES ON USER NAME SPACE */
#            endif
#        endif
#    endif
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */

#if (!defined yyoverflow &&                                                        \
     (!defined __cplusplus || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL && \
                               defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))

/* A type that is properly aligned for any stack member.  */
union yyalloc
{
    yytype_int16 yyss_alloc;
    YYSTYPE yyvs_alloc;
    YYLTYPE yyls_alloc;
};

/* The size of the maximum gap between one aligned stack and the next.  */
#    define YYSTACK_GAP_MAXIMUM (sizeof(union yyalloc) - 1)

/* The size of an array large to enough to hold all stacks, each with
   N elements.  */
#    define YYSTACK_BYTES(N) \
        ((N) * (sizeof(yytype_int16) + sizeof(YYSTYPE) + sizeof(YYLTYPE)) + 2 * YYSTACK_GAP_MAXIMUM)

#    define YYCOPY_NEEDED 1

/* Relocate STACK from its old location to the new one.  The
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
   elements in the stack, and YYPTR gives the new location of the
   stack.  Advance YYPTR to a properly aligned location for the next
   stack.  */
#    define YYSTACK_RELOCATE(Stack_alloc, Stack)                             \
        do                                                                   \
        {                                                                    \
            YYSIZE_T yynewbytes;                                             \
            YYCOPY(&yyptr->Stack_alloc, Stack, yysize);                      \
            Stack      = &yyptr->Stack_alloc;                                \
            yynewbytes = yystacksize * sizeof(*Stack) + YYSTACK_GAP_MAXIMUM; \
            yyptr += yynewbytes / sizeof(*yyptr);                            \
        } while (0)

#endif

#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
/* Copy COUNT objects from SRC to DST.  The source and destination do
   not overlap.  */
#    ifndef YYCOPY
#        if defined __GNUC__ && 1 < __GNUC__
#            define YYCOPY(Dst, Src, Count) __builtin_memcpy(Dst, Src, (Count) * sizeof(*(Src)))
#        else
#            define YYCOPY(Dst, Src, Count)             \
                do                                      \
                {                                       \
                    YYSIZE_T yyi;                       \
                    for (yyi = 0; yyi < (Count); yyi++) \
                        (Dst)[yyi] = (Src)[yyi];        \
                } while (0)
#        endif
#    endif
#endif /* !YYCOPY_NEEDED */

/* YYFINAL -- State number of the termination state.  */
#define YYFINAL 141
/* YYLAST -- Last index in YYTABLE.  */
#define YYLAST 2995

/* YYNTOKENS -- Number of terminals.  */
#define YYNTOKENS 159
/* YYNNTS -- Number of nonterminals.  */
#define YYNNTS 96
/* YYNRULES -- Number of rules.  */
#define YYNRULES 303
/* YYNSTATES -- Number of states.  */
#define YYNSTATES 429

#define YYUNDEFTOK 2
#define YYMAXUTOK 413

/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
   as returned by yylex, with out-of-bounds checking.  */
#define YYTRANSLATE(YYX) ((unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)

/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
   as returned by yylex.  */
static const yytype_uint8 yytranslate[] = {
    0,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
    2,   2,   2,   2,   2,   2,   2,   2,   2,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,
    11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
    30,  31,  32,  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,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
    87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
    106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
    125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
    144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158};

#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
static const yytype_uint16 yyrline[] = {
    0,    251,  251,  252,  255,  262,  265,  270,  275,  280,  285,  294,  300,  303,  306,  309,
    312,  315,  321,  328,  334,  337,  345,  348,  354,  357,  363,  367,  374,  382,  385,  388,
    394,  397,  400,  403,  410,  411,  412,  413,  421,  422,  425,  428,  435,  436,  439,  445,
    446,  450,  457,  458,  461,  464,  467,  473,  474,  477,  483,  484,  491,  492,  499,  500,
    507,  508,  514,  515,  521,  522,  528,  529,  535,  536,  542,  543,  544,  545,  549,  550,
    551,  555,  559,  563,  567,  574,  577,  583,  590,  597,  600,  603,  607,  611,  615,  619,
    623,  630,  637,  640,  647,  655,  672,  682,  685,  691,  695,  699,  703,  710,  717,  720,
    724,  728,  733,  740,  744,  748,  752,  757,  764,  768,  774,  777,  783,  787,  794,  800,
    806,  810,  814,  817,  820,  824,  832,  837,  841,  844,  847,  850,  853,  857,  860,  864,
    867,  870,  873,  876,  879,  886,  893,  896,  899,  905,  912,  915,  921,  924,  927,  930,
    936,  939,  946,  951,  958,  963,  974,  977,  980,  983,  986,  989,  993,  997,  1001, 1005,
    1009, 1013, 1017, 1021, 1025, 1029, 1033, 1037, 1041, 1045, 1049, 1053, 1057, 1061, 1065, 1069,
    1073, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122,
    1125, 1128, 1131, 1134, 1137, 1140, 1143, 1150, 1160, 1167, 1174, 1177, 1180, 1183, 1186, 1189,
    1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1224, 1224, 1227, 1227, 1233, 1236, 1242,
    1245, 1252, 1256, 1262, 1265, 1271, 1275, 1279, 1280, 1286, 1287, 1288, 1289, 1290, 1291, 1292,
    1296, 1300, 1300, 1300, 1307, 1308, 1312, 1312, 1313, 1313, 1318, 1322, 1329, 1333, 1340, 1341,
    1345, 1351, 1355, 1364, 1364, 1371, 1374, 1380, 1384, 1390, 1390, 1395, 1395, 1399, 1399, 1407,
    1410, 1416, 1419, 1425, 1429, 1436, 1439, 1442, 1445, 1448, 1456, 1462, 1468, 1471, 1477, 1477};
#endif

#if YYDEBUG || YYERROR_VERBOSE || 0
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
static const char *const yytname[] = {"$end",
                                      "error",
                                      "$undefined",
                                      "INVARIANT",
                                      "PRECISE",
                                      "HIGH_PRECISION",
                                      "MEDIUM_PRECISION",
                                      "LOW_PRECISION",
                                      "PRECISION",
                                      "ATTRIBUTE",
                                      "CONST_QUAL",
                                      "BOOL_TYPE",
                                      "FLOAT_TYPE",
                                      "INT_TYPE",
                                      "UINT_TYPE",
                                      "BREAK",
                                      "CONTINUE",
                                      "DO",
                                      "ELSE",
                                      "FOR",
                                      "IF",
                                      "DISCARD",
                                      "RETURN",
                                      "SWITCH",
                                      "CASE",
                                      "DEFAULT",
                                      "BVEC2",
                                      "BVEC3",
                                      "BVEC4",
                                      "IVEC2",
                                      "IVEC3",
                                      "IVEC4",
                                      "VEC2",
                                      "VEC3",
                                      "VEC4",
                                      "UVEC2",
                                      "UVEC3",
                                      "UVEC4",
                                      "MATRIX2",
                                      "MATRIX3",
                                      "MATRIX4",
                                      "IN_QUAL",
                                      "OUT_QUAL",
                                      "INOUT_QUAL",
                                      "UNIFORM",
                                      "BUFFER",
                                      "VARYING",
                                      "MATRIX2x3",
                                      "MATRIX3x2",
                                      "MATRIX2x4",
                                      "MATRIX4x2",
                                      "MATRIX3x4",
                                      "MATRIX4x3",
                                      "CENTROID",
                                      "FLAT",
                                      "SMOOTH",
                                      "READONLY",
                                      "WRITEONLY",
                                      "COHERENT",
                                      "RESTRICT",
                                      "VOLATILE",
                                      "SHARED",
                                      "STRUCT",
                                      "VOID_TYPE",
                                      "WHILE",
                                      "SAMPLER2D",
                                      "SAMPLERCUBE",
                                      "SAMPLER_EXTERNAL_OES",
                                      "SAMPLER2DRECT",
                                      "SAMPLER2DARRAY",
                                      "ISAMPLER2D",
                                      "ISAMPLER3D",
                                      "ISAMPLERCUBE",
                                      "ISAMPLER2DARRAY",
                                      "USAMPLER2D",
                                      "USAMPLER3D",
                                      "USAMPLERCUBE",
                                      "USAMPLER2DARRAY",
                                      "SAMPLER2DMS",
                                      "ISAMPLER2DMS",
                                      "USAMPLER2DMS",
                                      "SAMPLER2DMSARRAY",
                                      "ISAMPLER2DMSARRAY",
                                      "USAMPLER2DMSARRAY",
                                      "SAMPLER3D",
                                      "SAMPLER3DRECT",
                                      "SAMPLER2DSHADOW",
                                      "SAMPLERCUBESHADOW",
                                      "SAMPLER2DARRAYSHADOW",
                                      "SAMPLERVIDEOWEBGL",
                                      "SAMPLEREXTERNAL2DY2YEXT",
                                      "IMAGE2D",
                                      "IIMAGE2D",
                                      "UIMAGE2D",
                                      "IMAGE3D",
                                      "IIMAGE3D",
                                      "UIMAGE3D",
                                      "IMAGE2DARRAY",
                                      "IIMAGE2DARRAY",
                                      "UIMAGE2DARRAY",
                                      "IMAGECUBE",
                                      "IIMAGECUBE",
                                      "UIMAGECUBE",
                                      "ATOMICUINT",
                                      "LAYOUT",
                                      "YUVCSCSTANDARDEXT",
                                      "YUVCSCSTANDARDEXTCONSTANT",
                                      "IDENTIFIER",
                                      "TYPE_NAME",
                                      "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",
                                      "LEFT_PAREN",
                                      "RIGHT_PAREN",
                                      "LEFT_BRACKET",
                                      "RIGHT_BRACKET",
                                      "LEFT_BRACE",
                                      "RIGHT_BRACE",
                                      "DOT",
                                      "COMMA",
                                      "COLON",
                                      "EQUAL",
                                      "SEMICOLON",
                                      "BANG",
                                      "DASH",
                                      "TILDE",
                                      "PLUS",
                                      "STAR",
                                      "SLASH",
                                      "PERCENT",
                                      "LEFT_ANGLE",
                                      "RIGHT_ANGLE",
                                      "VERTICAL_BAR",
                                      "CARET",
                                      "AMPERSAND",
                                      "QUESTION",
                                      "$accept",
                                      "identifier",
                                      "variable_identifier",
                                      "primary_expression",
                                      "postfix_expression",
                                      "integer_expression",
                                      "function_call",
                                      "function_call_or_method",
                                      "function_call_generic",
                                      "function_call_header_no_parameters",
                                      "function_call_header_with_parameters",
                                      "function_call_header",
                                      "function_identifier",
                                      "unary_expression",
                                      "unary_operator",
                                      "multiplicative_expression",
                                      "additive_expression",
                                      "shift_expression",
                                      "relational_expression",
                                      "equality_expression",
                                      "and_expression",
                                      "exclusive_or_expression",
                                      "inclusive_or_expression",
                                      "logical_and_expression",
                                      "logical_xor_expression",
                                      "logical_or_expression",
                                      "conditional_expression",
                                      "assignment_expression",
                                      "assignment_operator",
                                      "expression",
                                      "constant_expression",
                                      "enter_struct",
                                      "declaration",
                                      "function_prototype",
                                      "function_declarator",
                                      "function_header_with_parameters",
                                      "function_header",
                                      "parameter_declarator",
                                      "parameter_declaration",
                                      "parameter_type_specifier",
                                      "init_declarator_list",
                                      "single_declaration",
                                      "fully_specified_type",
                                      "interpolation_qualifier",
                                      "type_qualifier",
                                      "invariant_qualifier",
                                      "precise_qualifier",
                                      "single_type_qualifier",
                                      "storage_qualifier",
                                      "type_specifier",
                                      "precision_qualifier",
                                      "layout_qualifier",
                                      "layout_qualifier_id_list",
                                      "layout_qualifier_id",
                                      "type_specifier_no_prec",
                                      "array_specifier",
                                      "type_specifier_nonarray",
                                      "struct_specifier",
                                      "$@1",
                                      "$@2",
                                      "struct_declaration_list",
                                      "struct_declaration",
                                      "struct_declarator_list",
                                      "struct_declarator",
                                      "initializer",
                                      "declaration_statement",
                                      "statement",
                                      "simple_statement",
                                      "compound_statement_with_scope",
                                      "$@3",
                                      "$@4",
                                      "statement_no_new_scope",
                                      "statement_with_scope",
                                      "$@5",
                                      "$@6",
                                      "compound_statement_no_new_scope",
                                      "statement_list",
                                      "expression_statement",
                                      "selection_statement",
                                      "selection_rest_statement",
                                      "switch_statement",
                                      "$@7",
                                      "case_label",
                                      "condition",
                                      "iteration_statement",
                                      "$@8",
                                      "$@9",
                                      "$@10",
                                      "for_init_statement",
                                      "conditionopt",
                                      "for_rest_statement",
                                      "jump_statement",
                                      "translation_unit",
                                      "external_declaration",
                                      "function_definition",
                                      "$@11",
                                      YY_NULLPTR};
#endif

#ifdef YYPRINT
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
   (internal) symbol number NUM (which must be that of a token).  */
static const yytype_uint16 yytoknum[] = {
    0,   256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
    273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
    291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
    309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
    327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
    345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
    363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
    381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
    399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413};
#endif

#define YYPACT_NINF -370

#define yypact_value_is_default(Yystate) (!!((Yystate) == (-370)))

#define YYTABLE_NINF -263

#define yytable_value_is_error(Yytable_value) 0

/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
   STATE-NUM.  */
static const yytype_int16 yypact[] = {
    2585, -370, -370, -370, -370, -370, 120,  -370, -370, -370, -370, -370, -370, -370, -370, -370,
    -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370,
    -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370,
    -370, -68,  -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370,
    -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370,
    -370, -370, -370, -370, -370, -370, -370, -370, -370, -82,  -370, -370, -370, -88,  -60,  -58,
    2691, -36,  -370, -77,  -370, 1402, -370, -370, -370, -370, -370, -370, -370, -370, -40,  -370,
    2479, -370, -370, 2887, -370, -370, -370, -59,  -45,  -370, -50,  -370, 2691, -370, -370, -370,
    2691, 49,   49,   -370, -30,  -109, -62,  -370, 2691, -370, -370, 1501, 4,    -370, -370, -8,
    2691, -370, -370, 3,    -57,  -370, 413,  -370, -370, -370, -370, -40,  -96,  -370, 1882, -95,
    -370, -370, 2691, 49,   2134, -370, -370, 14,   -370, -370, -370, -370, -370, 1882, 1882, 1882,
    -370, -370, -370, -370, -370, -370, -370, -51,  -370, -370, -370, 15,   -44,  2007, 28,   -370,
    1882, 2,    -80,  44,   -98,  40,   8,    13,   20,   58,   61,   -97,  -370, 48,   -370, 1629,
    -370, 2249, 2691, 57,   -370, -45,  53,   56,   -370, 67,   68,   60,   1757, 73,   1882, 69,
    76,   74,   -370, -370, 63,   -370, -370, -31,  -370, -88,  78,   -370, -370, -370, -370, 560,
    -370, -370, -370, -370, -370, -370, 4,    1882, -69,  -370, -370, 1882, 49,   -40,  -29,  -370,
    -85,  -370, -370, -370, -43,  -370, -370, 1882, 2789, -370, -370, 1882, 79,   -370, -370, -370,
    1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
    1882, 1882, 1882, 1882, -370, -370, 80,   -370, 2364, -370, -370, -370, -370, -370, 77,   -370,
    1882, -370, -370, -3,   1882, 97,   -370, -370, -370, 707,  -370, -370, -370, -370, -370, -370,
    -370, -370, -370, -370, -370, 1882, 1882, -370, -370, -370, -370, 1882, -370, 1,    4,    49,
    -370, -112, -370, -370, 81,   75,   -370, 106,  -370, -370, -370, -370, -370, 2,    2,    -80,
    -80,  44,   44,   44,   44,   -98,  -98,  40,   8,    13,   20,   58,   61,   29,   -370, -370,
    179,  -50,  1001, 1148, -42,  -370, -34,  -370, 1275, 707,  -370, -370, -370, -370, -370, 1882,
    -370, -370, 1882, 109,  -370, -370, -370, -370, 1275, 77,   -370, 75,   49,   2691, 110,  105,
    114,  -370, 1882, -370, 102,  112,  235,  -370, 115,  111,  854,  -370, 113,  -32,  1882, 854,
    77,   -370, 1882, -370, -370, -370, -370, 116,  75,   -370, -370, -370, -370};

/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
   Performed when YYTABLE does not specify something else to do.  Zero
   means the default is an error.  */
static const yytype_uint16 yydefact[] = {
    0,   126, 127, 150, 151, 152, 0,   134, 136, 170, 167, 168, 169, 174, 175, 176, 177, 178, 179,
    171, 172, 173, 180, 181, 182, 183, 184, 185, 137, 138, 139, 141, 142, 135, 186, 187, 188, 189,
    190, 191, 140, 123, 122, 143, 144, 145, 146, 147, 148, 0,   166, 193, 195, 215, 217, 196, 199,
    200, 201, 202, 205, 206, 207, 208, 197, 203, 209, 198, 204, 210, 194, 211, 212, 213, 214, 216,
    218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 0,   192, 232, 301, 302, 0,
    99,  98,  0,   110, 115, 131, 0,   132, 133, 124, 128, 120, 130, 129, 149, 160, 231, 0,   298,
    300, 0,   2,   3,   235, 0,   0,   89,  0,   97,  0,   106, 100, 108, 0,   109, 0,   90,  2,
    116, 0,   95,  0,   125, 121, 0,   161, 1,   299, 0,   0,   233, 159, 156, 0,   154, 0,   303,
    101, 105, 107, 103, 111, 102, 0,   117, 88,  96,  0,   0,   0,   237, 10,  4,   8,   6,   7,
    9,   31,  0,   0,   0,   162, 38,  37,  39,  36,  5,   12,  32,  14,  19,  20,  0,   0,   25,
    0,   40,  0,   44,  47,  50,  55,  58,  60,  62,  64,  66,  68,  70,  87,  0,   29,  0,   91,
    0,   0,   0,   153, 0,   0,   0,   283, 0,   0,   0,   0,   0,   0,   0,   0,   257, 266, 270,
    40,  72,  85,  0,   246, 0,   149, 249, 268, 248, 247, 0,   250, 251, 252, 253, 254, 255, 104,
    0,   112, 245, 119, 0,   0,   243, 0,   241, 0,   238, 33,  34,  0,   16,  17,  0,   0,   23,
    22,  0,   166, 26,  28,  35,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   163, 164, 0,   236, 0,   157, 158, 155, 294, 293, 264, 285,
    0,   297, 295, 0,   0,   0,   278, 281, 256, 0,   75,  76,  78,  77,  80,  81,  82,  83,  84,
    79,  74,  0,   0,   271, 267, 269, 114, 0,   118, 0,   244, 0,   239, 0,   92,  11,  0,   18,
    30,  15,  21,  27,  41,  42,  43,  46,  45,  48,  49,  53,  54,  51,  52,  56,  57,  59,  61,
    63,  65,  67,  69,  0,   165, 234, 0,   0,   0,   0,   0,   296, 0,   277, 0,   258, 73,  86,
    113, 240, 242, 0,   93,  13,  0,   0,   263, 265, 288, 287, 290, 264, 275, 279, 0,   0,   0,
    0,   0,   71,  0,   289, 0,   0,   274, 272, 0,   0,   0,   259, 0,   0,   291, 0,   264, 276,
    0,   261, 282, 260, 94,  0,   292, 286, 273, 280, 284};

/* YYPGOTO[NTERM-NUM].  */
static const yytype_int16 yypgoto[] = {
    -370, -48,  -370, -370, -370, -370, -370, -370, -7,   -370, -370, -370, -370, -52,  -370, -102,
    -101, -148, -84,  -26,  -24,  -27,  -25,  -33,  -22,  -370, -134, -144, -370, -125, -199, -370,
    17,   18,   -370, -370, -370, 136,  141,  138,  -370, -370, -349, -370, -90,  -370, -370, -99,
    -370, -92,  263,  -370, -370, 59,   0,    -118, -370, -370, -370, -370, -132, -151, 19,   -65,
    -240, -93,  -229, -351, -135, -370, -370, -140, -369, -370, -370, -119, -37,  -91,  -370, -370,
    -370, -370, -370, -113, -370, -370, -370, -370, -370, -370, -370, -370, -370, 169,  -370, -370};

/* YYDEFGOTO[NTERM-NUM].  */
static const yytype_int16 yydefgoto[] = {
    -1,  253, 181, 182, 183, 340, 184, 185, 186, 187, 188, 189, 190, 228, 192, 193,
    194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 229, 230, 325, 231, 205, 136,
    232, 233, 94,  95,  96,  125, 126, 127, 97,  98,  99,  100, 101, 102, 103, 104,
    105, 106, 107, 108, 148, 149, 206, 140, 110, 111, 210, 144, 164, 165, 254, 255,
    250, 235, 236, 237, 238, 313, 399, 420, 368, 369, 370, 421, 239, 240, 241, 407,
    242, 408, 243, 398, 244, 376, 302, 371, 392, 404, 405, 245, 112, 113, 114, 122};

/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
   positive, shift that token.  If negative, reduce the rule whose
   number is the opposite.  If YYTABLE_NINF, syntax error.  */
static const yytype_int16 yytable[] = {
    109, 119, 137, 151, 129, 204, 128, 330,  294, 138, 329, 332, 209, 257, 249, 159, 146, 92,  93,
    389, 279, 280, 337, 309, 406, 383, 290,  396, 139, 137, 132, 117, 129, 384, 128, 158, 129, 246,
    248, 116, 117, 139, 207, 396, 163, 269,  162, 426, 247, 251, 260, 133, 163, 120, 162, 281, 282,
    121, 257, 419, 338, 291, 147, 137, 419,  261, 262, 275, 207, 276, 252, 118, 163, 204, 162, 331,
    123, 160, 296, 212, 145, 155, 156, 161,  124, 213, 263, 191, 204, 150, 264, 380, 266, 339, 393,
    307, 109, 139, 267, 326, 326, 109, 394,  249, 423, 157, 130, 249, 326, 131, 326, 326, 109, 335,
    327, 143, 336, 163, 163, 162, 162, 258,  259, 345, 109, 3,   4,   5,   109, 92,  93,  353, 354,
    355, 356, 334, 109, 208, 341, 326, 271,  207, 373, 335, 109, 257, 381, 211, 329, -30, 234, 265,
    272, 273, 274, 191, 116, 117, 277, 278,  283, 284, 109, 270, 109, 285, 365, 297, 298, 286, 191,
    326, 386, 349, 350, 287, 351, 352, 427,  372, 288, 378, 379, 374, 400, 289, 292, 249, 314, 315,
    316, 317, 318, 319, 320, 321, 322, 323,  300, 357, 358, 301, 303, 304, 163, 305, 162, 324, 308,
    109, 109, 311, 310, -29, 312, -24, -262, 326, 366, 385, 346, 347, 348, 191, 191, 191, 191, 191,
    191, 191, 191, 191, 191, 191, 191, 191,  191, 191, 191, 234, 375, -31, 401, 387, 402, 411, 410,
    414, 415, 204, 388, 395, 412, 416, 225,  418, 363, 344, 422, 359, 361, 428, 360, 362, 153, 152,
    154, 395, 364, 115, 382, 333, 299, 417,  249, 425, 377, 413, 390, 403, 391, 142, 0,   0,   0,
    0,   397, 0,   0,   424, 0,   0,   0,    0,   0,   0,   109, 0,   137, 0,   0,   0,   397, 0,
    0,   138, 0,   0,   0,   0,   0,   0,    0,   234, 0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    191, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   409, 0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   234, 234, 0,   0,   0,   0,   234, 234, 0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   234, 0,   0,   0,   0,   109, 0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   234, 0,   0,   0,   0,   234, 1,   2,
    3,   4,   5,   6,   7,   8,   9,   10,   11,  12,  214, 215, 216, 0,   217, 218, 219, 220, 221,
    222, 223, 13,  14,  15,  16,  17,  18,   19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
    30,  31,  32,  33,  34,  35,  36,  37,   38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,
    49,  50,  224, 51,  52,  53,  54,  55,   56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,
    67,  68,  69,  70,  0,   71,  72,  73,   74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
    85,  86,  87,  88,  89,  90,  166, 167,  91,  168, 169, 170, 171, 172, 0,   0,   173, 174, 0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,   175, 0,   0,
    0,   225, 226, 0,   0,   0,   0,   227,  177, 178, 179, 180, 1,   2,   3,   4,   5,   6,   7,
    8,   9,   10,  11,  12,  214, 215, 216,  0,   217, 218, 219, 220, 221, 222, 223, 13,  14,  15,
    16,  17,  18,  19,  20,  21,  22,  23,   24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,
    35,  36,  37,  38,  39,  40,  41,  42,   43,  44,  45,  46,  47,  48,  49,  50,  224, 51,  52,
    53,  54,  55,  56,  57,  58,  59,  60,   61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  0,
    71,  72,  73,  74,  75,  76,  77,  78,   79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
    90,  166, 167, 91,  168, 169, 170, 171,  172, 0,   0,   173, 174, 0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   175, 0,   0,   0,   225, 328, 0,   0,
    0,   0,   227, 177, 178, 179, 180, 1,    2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,
    214, 215, 216, 0,   217, 218, 219, 220,  221, 222, 223, 13,  14,  15,  16,  17,  18,  19,  20,
    21,  22,  23,  24,  25,  26,  27,  28,   29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,
    40,  41,  42,  43,  44,  45,  46,  47,   48,  49,  50,  224, 51,  52,  53,  54,  55,  56,  57,
    58,  59,  60,  61,  62,  63,  64,  65,   66,  67,  68,  69,  70,  0,   71,  72,  73,  74,  75,
    76,  77,  78,  79,  80,  81,  82,  83,   84,  85,  86,  87,  88,  89,  90,  166, 167, 91,  168,
    169, 170, 171, 172, 0,   0,   173, 174,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   175, 0,    0,   0,   225, 0,   0,   0,   0,   0,   227, 177, 178,
    179, 180, 1,   2,   3,   4,   5,   6,    7,   8,   9,   10,  11,  12,  214, 215, 216, 0,   217,
    218, 219, 220, 221, 222, 223, 13,  14,   15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
    26,  27,  28,  29,  30,  31,  32,  33,   34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
    45,  46,  47,  48,  49,  50,  224, 51,   52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,
    63,  64,  65,  66,  67,  68,  69,  70,   0,   71,  72,  73,  74,  75,  76,  77,  78,  79,  80,
    81,  82,  83,  84,  85,  86,  87,  88,   89,  90,  166, 167, 91,  168, 169, 170, 171, 172, 0,
    0,   173, 174, 0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   175, 0,   0,   0,   150, 0,   0,    0,   0,   0,   227, 177, 178, 179, 180, 1,   2,   3,
    4,   5,   6,   7,   8,   9,   10,  11,   12,  214, 215, 216, 0,   217, 218, 219, 220, 221, 222,
    223, 13,  14,  15,  16,  17,  18,  19,   20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,
    31,  32,  33,  34,  35,  36,  37,  38,   39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,
    50,  224, 51,  52,  53,  54,  55,  56,   57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,
    68,  69,  70,  0,   71,  72,  73,  74,   75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,
    86,  87,  88,  89,  90,  166, 167, 91,   168, 169, 170, 171, 172, 0,   0,   173, 174, 0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   175, 0,   0,   0,
    0,   0,   0,   0,   0,   0,   227, 177,  178, 179, 180, 1,   2,   3,   4,   5,   6,   7,   8,
    9,   10,  11,  12,  0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   13,  14,  15,  16,
    17,  18,  19,  20,  21,  22,  23,  24,   25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
    36,  37,  38,  39,  40,  41,  42,  43,   44,  45,  46,  47,  48,  49,  50,  0,   51,  52,  53,
    54,  55,  56,  57,  58,  59,  60,  61,   62,  63,  64,  65,  66,  67,  68,  69,  70,  0,   71,
    72,  73,  74,  75,  76,  77,  78,  79,   80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
    166, 167, 91,  168, 169, 170, 171, 172,  0,   0,   173, 174, 0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   1,   2,   3,    4,   5,   175, 7,   8,   9,   10,  11,  12,  0,   0,
    0,   227, 177, 178, 179, 180, 0,   0,    0,   13,  14,  15,  16,  17,  18,  19,  20,  21,  22,
    23,  24,  25,  26,  27,  28,  29,  30,   31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,
    42,  43,  44,  45,  46,  47,  48,  49,   50,  0,   51,  52,  53,  54,  55,  56,  57,  58,  59,
    60,  61,  62,  63,  64,  65,  66,  67,   68,  69,  70,  0,   71,  72,  73,  74,  75,  76,  77,
    78,  79,  80,  81,  82,  83,  84,  85,   86,  87,  88,  89,  90,  166, 167, 91,  168, 169, 170,
    171, 172, 0,   0,   173, 174, 0,   0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,
    2,   3,   4,   5,   175, 7,   8,   9,    10,  11,  12,  0,   0,   0,   0,   177, 178, 179, 180,
    0,   0,   0,   13,  14,  15,  16,  17,   18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,
    29,  30,  31,  32,  33,  34,  35,  36,   37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
    48,  49,  50,  0,   51,  52,  53,  54,   55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
    66,  67,  68,  69,  70,  0,   71,  72,   73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
    84,  85,  86,  87,  88,  89,  90,  0,    134, 91,  0,   9,   10,  11,  12,  0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   13,   14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,
    25,  26,  27,  0,   0,   0,   0,   0,    135, 34,  35,  36,  37,  38,  39,  0,   0,   0,   0,
    0,   0,   0,   0,   0,   49,  50,  0,    51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
    62,  63,  64,  65,  66,  67,  68,  69,   70,  0,   71,  72,  73,  74,  75,  76,  77,  78,  79,
    80,  81,  82,  83,  84,  85,  86,  87,   88,  0,   90,  166, 167, 91,  168, 169, 170, 171, 172,
    0,   0,   173, 174, 0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   175, 0,   0,   176, 9,   10,   11,  12,  0,   0,   0,   177, 178, 179, 180, 0,   0,
    0,   0,   13,  14,  15,  16,  17,  18,   19,  20,  21,  22,  23,  24,  25,  26,  27,  0,   0,
    0,   0,   0,   0,   34,  35,  36,  37,   38,  39,  0,   0,   0,   0,   0,   0,   0,   0,   0,
    49,  50,  0,   51,  52,  53,  54,  55,   56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,
    67,  68,  69,  70,  0,   71,  72,  73,   74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
    85,  86,  87,  88,  0,   90,  166, 167,  91,  168, 169, 170, 171, 172, 0,   0,   173, 174, 0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,   175, 0,   0,
    293, 9,   10,  11,  12,  0,   0,   0,    177, 178, 179, 180, 0,   0,   0,   0,   13,  14,  15,
    16,  17,  18,  19,  20,  21,  22,  23,   24,  25,  26,  27,  0,   0,   0,   0,   0,   0,   34,
    35,  36,  37,  38,  39,  0,   0,   0,    0,   0,   0,   0,   0,   0,   49,  50,  0,   51,  52,
    53,  54,  55,  56,  57,  58,  59,  60,   61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  0,
    71,  72,  73,  74,  75,  76,  77,  78,   79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  0,
    90,  166, 167, 91,  168, 169, 170, 171,  172, 0,   0,   173, 174, 0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   175, 9,   10,  11,  12,  0,   0,   0,
    0,   0,   306, 177, 178, 179, 180, 0,    13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
    24,  25,  26,  27,  0,   0,   0,   0,    0,   0,   34,  35,  36,  37,  38,  39,  0,   0,   0,
    0,   0,   0,   0,   0,   0,   49,  50,   0,   51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
    61,  62,  63,  64,  65,  66,  67,  68,   69,  70,  0,   71,  72,  73,  74,  75,  76,  77,  78,
    79,  80,  81,  82,  83,  84,  85,  86,   87,  88,  0,   90,  166, 167, 91,  168, 169, 170, 171,
    172, 0,   0,   173, 174, 0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   175, 9,   10,  11,  12,   0,   0,   0,   0,   0,   0,   177, 178, 179, 180, 0,
    13,  14,  15,  16,  17,  18,  19,  20,   21,  22,  23,  24,  25,  26,  27,  0,   0,   0,   0,
    0,   0,   34,  35,  36,  37,  38,  39,   0,   0,   0,   0,   0,   0,   0,   0,   0,   49,  268,
    0,   51,  52,  53,  54,  55,  56,  57,   58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,
    69,  70,  0,   71,  72,  73,  74,  75,   76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
    87,  88,  0,   90,  166, 167, 91,  168,  169, 170, 171, 172, 0,   0,   173, 174, 0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    0,   1,   2,   3,   4,   5,   175, 7,   8,   9,   10,
    11,  12,  0,   0,   0,   0,   177, 178,  179, 180, 0,   0,   0,   13,  14,  15,  16,  17,  18,
    19,  20,  21,  22,  23,  24,  25,  26,   27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,
    38,  39,  40,  41,  42,  43,  44,  45,   46,  47,  48,  49,  50,  0,   51,  52,  53,  54,  55,
    56,  57,  58,  59,  60,  61,  62,  63,   64,  65,  66,  67,  68,  69,  70,  0,   71,  72,  73,
    74,  75,  76,  77,  78,  79,  80,  81,   82,  83,  84,  85,  86,  87,  88,  89,  90,  0,   0,
    91,  0,   0,   0,   0,   0,   0,   0,    0,   0,   1,   2,   3,   4,   5,   0,   7,   8,   9,
    10,  11,  12,  0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   256, 13,  14,  15,  16,  17,
    18,  19,  20,  21,  22,  23,  24,  25,   26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,
    37,  38,  39,  40,  41,  42,  43,  44,   45,  46,  47,  48,  49,  50,  0,   51,  52,  53,  54,
    55,  56,  57,  58,  59,  60,  61,  62,   63,  64,  65,  66,  67,  68,  69,  70,  0,   71,  72,
    73,  74,  75,  76,  77,  78,  79,  80,   81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  0,
    0,   91,  0,   0,   0,   0,   0,   0,    0,   0,   0,   1,   2,   3,   4,   5,   0,   7,   8,
    9,   10,  11,  12,  0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   295, 13,  14,  15,  16,
    17,  18,  19,  20,  21,  22,  23,  24,   25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
    36,  37,  38,  39,  40,  41,  42,  43,   44,  45,  46,  47,  48,  49,  50,  0,   51,  52,  53,
    54,  55,  56,  57,  58,  59,  60,  61,   62,  63,  64,  65,  66,  67,  68,  69,  70,  0,   71,
    72,  73,  74,  75,  76,  77,  78,  79,   80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
    0,   0,   91,  0,   0,   0,   0,   0,    0,   141, 0,   0,   1,   2,   3,   4,   5,   6,   7,
    8,   9,   10,  11,  12,  0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   367, 13,  14,  15,
    16,  17,  18,  19,  20,  21,  22,  23,   24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,
    35,  36,  37,  38,  39,  40,  41,  42,   43,  44,  45,  46,  47,  48,  49,  50,  0,   51,  52,
    53,  54,  55,  56,  57,  58,  59,  60,   61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  0,
    71,  72,  73,  74,  75,  76,  77,  78,   79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
    90,  0,   0,   91,  1,   2,   3,   4,    5,   6,   7,   8,   9,   10,  11,  12,  0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,    13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
    24,  25,  26,  27,  28,  29,  30,  31,   32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
    43,  44,  45,  46,  47,  48,  49,  50,   0,   51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
    61,  62,  63,  64,  65,  66,  67,  68,   69,  70,  0,   71,  72,  73,  74,  75,  76,  77,  78,
    79,  80,  81,  82,  83,  84,  85,  86,   87,  88,  89,  90,  0,   0,   91,  1,   2,   3,   4,
    5,   0,   7,   8,   9,   10,  11,  12,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    13,  14,  15,  16,  17,  18,  19,  20,   21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
    32,  33,  34,  35,  36,  37,  38,  39,   40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,
    0,   51,  52,  53,  54,  55,  56,  57,   58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,
    69,  70,  0,   71,  72,  73,  74,  75,   76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
    87,  88,  89,  90,  0,   0,   91,  9,    10,  11,  12,  0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   13,  14,  15,  16,  17,   18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  0,
    0,   0,   0,   0,   0,   34,  35,  36,   37,  38,  39,  0,   0,   0,   0,   0,   0,   0,   0,
    0,   49,  50,  0,   51,  52,  53,  54,   55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
    66,  67,  68,  69,  70,  0,   71,  72,   73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
    84,  85,  86,  87,  88,  0,   90,  0,    342, 91,  9,   10,  11,  12,  343, 0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   13,  14,   15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
    26,  27,  0,   0,   0,   0,   0,   0,    34,  35,  36,  37,  38,  39,  0,   0,   0,   0,   0,
    0,   0,   0,   0,   49,  50,  0,   51,   52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,
    63,  64,  65,  66,  67,  68,  69,  70,   0,   71,  72,  73,  74,  75,  76,  77,  78,  79,  80,
    81,  82,  83,  84,  85,  86,  87,  88,   0,   90,  0,   0,   91};

static const yytype_int16 yycheck[] = {
    0,   49,  101, 122, 96,  139, 96,  247, 207, 101, 239, 251, 144, 164, 158, 133, 61,  0,   0,
    370, 118, 119, 107, 222, 393, 137, 123, 376, 137, 128, 107, 108, 124, 145, 124, 144, 128, 155,
    156, 107, 108, 137, 137, 392, 136, 189, 136, 416, 144, 144, 175, 99,  144, 135, 144, 153, 154,
    145, 209, 410, 145, 158, 107, 162, 415, 116, 117, 147, 137, 149, 162, 139, 164, 207, 164, 144,
    136, 139, 210, 136, 139, 129, 130, 145, 142, 142, 137, 139, 222, 139, 141, 331, 136, 136, 136,
    220, 96,  137, 142, 142, 142, 101, 136, 247, 136, 135, 142, 251, 142, 145, 142, 142, 112, 142,
    145, 115, 145, 209, 210, 209, 210, 173, 174, 267, 124, 5,   6,   7,   128, 112, 112, 279, 280,
    281, 282, 253, 136, 145, 263, 142, 192, 137, 145, 142, 144, 296, 145, 144, 377, 135, 150, 136,
    150, 151, 152, 207, 107, 108, 114, 115, 120, 121, 162, 135, 164, 157, 291, 110, 111, 156, 222,
    142, 143, 275, 276, 155, 277, 278, 418, 304, 122, 325, 326, 308, 383, 124, 138, 331, 125, 126,
    127, 128, 129, 130, 131, 132, 133, 134, 145, 283, 284, 145, 135, 135, 296, 145, 296, 144, 135,
    209, 210, 135, 143, 135, 140, 136, 139, 142, 138, 138, 272, 273, 274, 275, 276, 277, 278, 279,
    280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 239, 143, 135, 386, 64,  135, 140, 136,
    145, 136, 383, 369, 376, 138, 18,  139, 144, 289, 264, 145, 285, 287, 145, 286, 288, 128, 124,
    128, 392, 290, 6,   335, 252, 213, 408, 418, 415, 313, 402, 371, 392, 371, 112, -1,  -1,  -1,
    -1,  376, -1,  -1,  414, -1,  -1,  -1,  -1,  -1,  -1,  296, -1,  397, -1,  -1,  -1,  392, -1,
    -1,  397, -1,  -1,  -1,  -1,  -1,  -1,  -1,  313, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  383, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  396, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  370, 371, -1,  -1,  -1,  -1,  376, 377, -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  392, -1,  -1,  -1,  -1,  397, -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  410, -1,  -1,  -1,  -1,  415, 3,   4,
    5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  -1,  19,  20,  21,  22,  23,
    24,  25,  26,  27,  28,  29,  30,  31,  32,  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,  73,  74,  75,  76,  77,  78,  79,  80,
    81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
    100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  135, -1,  -1,
    -1,  139, 140, -1,  -1,  -1,  -1,  145, 146, 147, 148, 149, 3,   4,   5,   6,   7,   8,   9,
    10,  11,  12,  13,  14,  15,  16,  17,  -1,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,
    29,  30,  31,  32,  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,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,
    86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104,
    105, 106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  135, -1,  -1,  -1,  139, 140, -1,  -1,
    -1,  -1,  145, 146, 147, 148, 149, 3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,
    15,  16,  17,  -1,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  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,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,
    91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
    110, 111, 112, 113, -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  135, -1,  -1,  -1,  139, -1,  -1,  -1,  -1,  -1,  145, 146, 147,
    148, 149, 3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  -1,  19,
    20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  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,  73,  74,  75,  76,
    77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
    96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, -1,
    -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  135, -1,  -1,  -1,  139, -1,  -1,  -1,  -1,  -1,  145, 146, 147, 148, 149, 3,   4,   5,
    6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  -1,  19,  20,  21,  22,  23,  24,
    25,  26,  27,  28,  29,  30,  31,  32,  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,  73,  74,  75,  76,  77,  78,  79,  80,  81,
    82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100,
    101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  135, -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  145, 146, 147, 148, 149, 3,   4,   5,   6,   7,   8,   9,   10,
    11,  12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  26,  27,  28,  29,
    30,  31,  32,  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,  -1,  65,  66,  67,
    68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,
    87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
    106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  3,   4,   5,   6,   7,   135, 9,   10,  11,  12,  13,  14,  -1,  -1,
    -1,  145, 146, 147, 148, 149, -1,  -1,  -1,  26,  27,  28,  29,  30,  31,  32,  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,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,
    74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,
    93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
    112, 113, -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  3,
    4,   5,   6,   7,   135, 9,   10,  11,  12,  13,  14,  -1,  -1,  -1,  -1,  146, 147, 148, 149,
    -1,  -1,  -1,  26,  27,  28,  29,  30,  31,  32,  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,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
    80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,
    99,  100, 101, 102, 103, 104, 105, -1,  107, 108, -1,  11,  12,  13,  14,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,
    38,  39,  40,  -1,  -1,  -1,  -1,  -1,  145, 47,  48,  49,  50,  51,  52,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  62,  63,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,
    76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,
    95,  96,  97,  98,  99,  100, 101, 102, 103, -1,  105, 106, 107, 108, 109, 110, 111, 112, 113,
    -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  135, -1,  -1,  138, 11,  12,  13,  14,  -1,  -1,  -1,  146, 147, 148, 149, -1,  -1,
    -1,  -1,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  -1,  -1,
    -1,  -1,  -1,  -1,  47,  48,  49,  50,  51,  52,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    62,  63,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,
    81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
    100, 101, 102, 103, -1,  105, 106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  135, -1,  -1,
    138, 11,  12,  13,  14,  -1,  -1,  -1,  146, 147, 148, 149, -1,  -1,  -1,  -1,  26,  27,  28,
    29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  -1,  -1,  -1,  -1,  -1,  -1,  47,
    48,  49,  50,  51,  52,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  62,  63,  -1,  65,  66,
    67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,
    86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, -1,
    105, 106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  135, 11,  12,  13,  14,  -1,  -1,  -1,
    -1,  -1,  145, 146, 147, 148, 149, -1,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,
    37,  38,  39,  40,  -1,  -1,  -1,  -1,  -1,  -1,  47,  48,  49,  50,  51,  52,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  62,  63,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
    75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,
    94,  95,  96,  97,  98,  99,  100, 101, 102, 103, -1,  105, 106, 107, 108, 109, 110, 111, 112,
    113, -1,  -1,  116, 117, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  135, 11,  12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  146, 147, 148, 149, -1,
    26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  -1,  -1,  -1,  -1,
    -1,  -1,  47,  48,  49,  50,  51,  52,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  62,  63,
    -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,
    83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101,
    102, 103, -1,  105, 106, 107, 108, 109, 110, 111, 112, 113, -1,  -1,  116, 117, -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  3,   4,   5,   6,   7,   135, 9,   10,  11,  12,
    13,  14,  -1,  -1,  -1,  -1,  146, 147, 148, 149, -1,  -1,  -1,  26,  27,  28,  29,  30,  31,
    32,  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,  -1,  65,  66,  67,  68,  69,
    70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,
    89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, -1,  -1,
    108, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  3,   4,   5,   6,   7,   -1,  9,   10,  11,
    12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  140, 26,  27,  28,  29,  30,
    31,  32,  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,  -1,  65,  66,  67,  68,
    69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,
    88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, -1,
    -1,  108, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  3,   4,   5,   6,   7,   -1,  9,   10,
    11,  12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  140, 26,  27,  28,  29,
    30,  31,  32,  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,  -1,  65,  66,  67,
    68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,
    87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
    -1,  -1,  108, -1,  -1,  -1,  -1,  -1,  -1,  0,   -1,  -1,  3,   4,   5,   6,   7,   8,   9,
    10,  11,  12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  140, 26,  27,  28,
    29,  30,  31,  32,  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,  -1,  65,  66,
    67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,
    86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104,
    105, -1,  -1,  108, 3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  26,  27,  28,  29,  30,  31,  32,  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,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
    75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,
    94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, -1,  -1,  108, 3,   4,   5,   6,
    7,   -1,  9,   10,  11,  12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    26,  27,  28,  29,  30,  31,  32,  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,
    -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,
    83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101,
    102, 103, 104, 105, -1,  -1,  108, 11,  12,  13,  14,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  -1,
    -1,  -1,  -1,  -1,  -1,  47,  48,  49,  50,  51,  52,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
    -1,  62,  63,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
    80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,
    99,  100, 101, 102, 103, -1,  105, -1,  107, 108, 11,  12,  13,  14,  113, -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  -1,  -1,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,
    39,  40,  -1,  -1,  -1,  -1,  -1,  -1,  47,  48,  49,  50,  51,  52,  -1,  -1,  -1,  -1,  -1,
    -1,  -1,  -1,  -1,  62,  63,  -1,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,
    77,  78,  79,  80,  81,  82,  83,  84,  -1,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
    96,  97,  98,  99,  100, 101, 102, 103, -1,  105, -1,  -1,  108};

/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
   symbol of state STATE-NUM.  */
static const yytype_uint8 yystos[] = {
    0,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  26,  27,  28,  29,  30,  31,
    32,  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,  65,  66,  67,  68,  69,  70,
    71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  86,  87,  88,  89,  90,
    91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 108, 191, 192, 193,
    194, 195, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 213, 215, 216, 251, 252,
    253, 209, 107, 108, 139, 160, 135, 145, 254, 136, 142, 196, 197, 198, 203, 208, 142, 145, 107,
    160, 107, 145, 190, 206, 208, 137, 214, 0,   252, 213, 218, 139, 61,  107, 211, 212, 139, 234,
    197, 196, 198, 160, 160, 135, 144, 214, 139, 145, 203, 208, 219, 220, 106, 107, 109, 110, 111,
    112, 113, 116, 117, 135, 138, 146, 147, 148, 149, 161, 162, 163, 165, 166, 167, 168, 169, 170,
    171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 189, 213, 137, 145,
    219, 217, 144, 136, 142, 15,  16,  17,  19,  20,  21,  22,  23,  24,  25,  64,  139, 140, 145,
    172, 185, 186, 188, 191, 192, 213, 224, 225, 226, 227, 235, 236, 237, 239, 241, 243, 250, 214,
    144, 214, 186, 223, 144, 208, 160, 221, 222, 140, 220, 172, 172, 188, 116, 117, 137, 141, 136,
    136, 142, 63,  186, 135, 172, 150, 151, 152, 147, 149, 114, 115, 118, 119, 153, 154, 120, 121,
    157, 156, 155, 122, 124, 123, 158, 138, 138, 189, 140, 219, 110, 111, 212, 145, 145, 245, 135,
    135, 145, 145, 188, 135, 189, 143, 135, 140, 228, 125, 126, 127, 128, 129, 130, 131, 132, 133,
    134, 144, 187, 142, 145, 140, 225, 223, 144, 223, 221, 214, 142, 145, 107, 145, 136, 164, 188,
    107, 113, 167, 186, 172, 172, 172, 174, 174, 175, 175, 176, 176, 176, 176, 177, 177, 178, 179,
    180, 181, 182, 183, 188, 138, 140, 231, 232, 233, 246, 188, 145, 188, 143, 244, 235, 186, 186,
    223, 145, 222, 137, 145, 138, 143, 64,  234, 226, 224, 236, 247, 136, 136, 188, 201, 203, 242,
    229, 189, 186, 135, 242, 248, 249, 231, 238, 240, 160, 136, 140, 138, 188, 145, 136, 18,  227,
    144, 226, 230, 234, 145, 136, 188, 230, 231, 223, 145};

/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
static const yytype_uint8 yyr1[] = {
    0,   159, 160, 160, 161, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 164,
    165, 166, 166, 167, 167, 168, 168, 169, 169, 170, 171, 171, 171, 172, 172, 172, 172, 173, 173,
    173, 173, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 178, 178,
    178, 179, 179, 180, 180, 181, 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, 186, 187, 187,
    187, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, 189, 190, 191, 191, 191, 191, 191, 191,
    191, 191, 192, 193, 193, 194, 194, 195, 196, 196, 197, 197, 197, 197, 198, 199, 199, 199, 199,
    199, 200, 200, 200, 200, 200, 201, 201, 202, 202, 203, 203, 204, 205, 206, 206, 206, 206, 206,
    206, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 208, 209, 209,
    209, 210, 211, 211, 212, 212, 212, 212, 213, 213, 214, 214, 214, 214, 215, 215, 215, 215, 215,
    215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
    215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
    215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
    215, 215, 215, 215, 215, 217, 216, 218, 216, 219, 219, 220, 220, 221, 221, 222, 222, 223, 224,
    225, 225, 226, 226, 226, 226, 226, 226, 226, 227, 228, 229, 227, 230, 230, 232, 231, 233, 231,
    234, 234, 235, 235, 236, 236, 237, 238, 238, 240, 239, 241, 241, 242, 242, 244, 243, 245, 243,
    246, 243, 247, 247, 248, 248, 249, 249, 250, 250, 250, 250, 250, 251, 251, 252, 252, 254, 253};

/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
static const yytype_uint8 yyr2[] = {
    0, 2, 1, 1, 1, 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, 2, 4, 5,
    6, 9, 2, 3, 2, 1, 1, 2, 3, 3, 2, 3, 2, 1, 2, 1, 1, 1, 3, 4, 6, 5, 1, 2, 3, 5, 4, 1, 2, 1, 1,
    1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1,
    3, 1, 3, 3, 1, 1, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 0, 6, 0, 5, 1, 2, 3, 4, 1, 3, 1, 2, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 5, 1, 1, 0, 2, 0, 2, 2, 3, 1, 2, 1, 2, 5, 3, 1, 0, 6, 3, 2,
    1, 4, 0, 6, 0, 8, 0, 7, 1, 1, 1, 0, 2, 3, 2, 2, 2, 3, 2, 1, 2, 1, 1, 0, 3};

#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY (-2)
#define YYEOF 0

#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab

#define YYRECOVERING() (!!yyerrstatus)

#define YYBACKUP(Token, Value)                                                       \
    do                                                                               \
        if (yychar == YYEMPTY)                                                       \
        {                                                                            \
            yychar = (Token);                                                        \
            yylval = (Value);                                                        \
            YYPOPSTACK(yylen);                                                       \
            yystate = *yyssp;                                                        \
            goto yybackup;                                                           \
        }                                                                            \
        else                                                                         \
        {                                                                            \
            yyerror(&yylloc, context, scanner, YY_("syntax error: cannot back up")); \
            YYERROR;                                                                 \
        }                                                                            \
    while (0)

/* Error token number */
#define YYTERROR 1
#define YYERRCODE 256

/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
   If N is 0, then set CURRENT to the empty location which ends
   the previous symbol: RHS[0] (always defined).  */

#ifndef YYLLOC_DEFAULT
#    define YYLLOC_DEFAULT(Current, Rhs, N)                                                    \
        do                                                                                     \
            if (N)                                                                             \
            {                                                                                  \
                (Current).first_line   = YYRHSLOC(Rhs, 1).first_line;                          \
                (Current).first_column = YYRHSLOC(Rhs, 1).first_column;                        \
                (Current).last_line    = YYRHSLOC(Rhs, N).last_line;                           \
                (Current).last_column  = YYRHSLOC(Rhs, N).last_column;                         \
            }                                                                                  \
            else                                                                               \
            {                                                                                  \
                (Current).first_line = (Current).last_line = YYRHSLOC(Rhs, 0).last_line;       \
                (Current).first_column = (Current).last_column = YYRHSLOC(Rhs, 0).last_column; \
            }                                                                                  \
        while (0)
#endif

#define YYRHSLOC(Rhs, K) ((Rhs)[K])

/* Enable debugging if requested.  */
#if YYDEBUG

#    ifndef YYFPRINTF
#        include <stdio.h> /* INFRINGES ON USER NAME SPACE */
#        define YYFPRINTF fprintf
#    endif

#    define YYDPRINTF(Args)     \
        do                      \
        {                       \
            if (yydebug)        \
                YYFPRINTF Args; \
        } while (0)

/* YY_LOCATION_PRINT -- Print the location on the stream.
   This macro was not mandated originally: define only if we know
   we won't break user code: when these are the locations we know.  */

#    ifndef YY_LOCATION_PRINT
#        if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL

/* Print *YYLOCP on YYO.  Private, do not rely on its existence. */

YY_ATTRIBUTE_UNUSED
static int yy_location_print_(FILE *yyo, YYLTYPE const *const yylocp)
{
    int res     = 0;
    int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
    if (0 <= yylocp->first_line)
    {
        res += YYFPRINTF(yyo, "%d", yylocp->first_line);
        if (0 <= yylocp->first_column)
            res += YYFPRINTF(yyo, ".%d", yylocp->first_column);
    }
    if (0 <= yylocp->last_line)
    {
        if (yylocp->first_line < yylocp->last_line)
        {
            res += YYFPRINTF(yyo, "-%d", yylocp->last_line);
            if (0 <= end_col)
                res += YYFPRINTF(yyo, ".%d", end_col);
        }
        else if (0 <= end_col && yylocp->first_column < end_col)
            res += YYFPRINTF(yyo, "-%d", end_col);
    }
    return res;
}

#            define YY_LOCATION_PRINT(File, Loc) yy_location_print_(File, &(Loc))

#        else
#            define YY_LOCATION_PRINT(File, Loc) ((void)0)
#        endif
#    endif

#    define YY_SYMBOL_PRINT(Title, Type, Value, Location)                         \
        do                                                                        \
        {                                                                         \
            if (yydebug)                                                          \
            {                                                                     \
                YYFPRINTF(stderr, "%s ", Title);                                  \
                yy_symbol_print(stderr, Type, Value, Location, context, scanner); \
                YYFPRINTF(stderr, "\n");                                          \
            }                                                                     \
        } while (0)

/*-----------------------------------.
| Print this symbol's value on YYO.  |
`-----------------------------------*/

static void yy_symbol_value_print(FILE *yyo,
                                  int yytype,
                                  YYSTYPE const *const yyvaluep,
                                  YYLTYPE const *const yylocationp,
                                  TParseContext *context,
                                  void *scanner)
{
    FILE *yyoutput = yyo;
    YYUSE(yyoutput);
    YYUSE(yylocationp);
    YYUSE(context);
    YYUSE(scanner);
    if (!yyvaluep)
        return;
#    ifdef YYPRINT
    if (yytype < YYNTOKENS)
        YYPRINT(yyo, yytoknum[yytype], *yyvaluep);
#    endif
    YYUSE(yytype);
}

/*---------------------------.
| Print this symbol on YYO.  |
`---------------------------*/

static void yy_symbol_print(FILE *yyo,
                            int yytype,
                            YYSTYPE const *const yyvaluep,
                            YYLTYPE const *const yylocationp,
                            TParseContext *context,
                            void *scanner)
{
    YYFPRINTF(yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);

    YY_LOCATION_PRINT(yyo, *yylocationp);
    YYFPRINTF(yyo, ": ");
    yy_symbol_value_print(yyo, yytype, yyvaluep, yylocationp, context, scanner);
    YYFPRINTF(yyo, ")");
}

/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
| TOP (included).                                                   |
`------------------------------------------------------------------*/

static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop)
{
    YYFPRINTF(stderr, "Stack now");
    for (; yybottom <= yytop; yybottom++)
    {
        int yybot = *yybottom;
        YYFPRINTF(stderr, " %d", yybot);
    }
    YYFPRINTF(stderr, "\n");
}

#    define YY_STACK_PRINT(Bottom, Top)          \
        do                                       \
        {                                        \
            if (yydebug)                         \
                yy_stack_print((Bottom), (Top)); \
        } while (0)

/*------------------------------------------------.
| Report that the YYRULE is going to be reduced.  |
`------------------------------------------------*/

static void yy_reduce_print(yytype_int16 *yyssp,
                            YYSTYPE *yyvsp,
                            YYLTYPE *yylsp,
                            int yyrule,
                            TParseContext *context,
                            void *scanner)
{
    unsigned long yylno = yyrline[yyrule];
    int yynrhs          = yyr2[yyrule];
    int yyi;
    YYFPRINTF(stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno);
    /* The symbols being reduced.  */
    for (yyi = 0; yyi < yynrhs; yyi++)
    {
        YYFPRINTF(stderr, "   $%d = ", yyi + 1);
        yy_symbol_print(stderr, yystos[yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)],
                        &(yylsp[(yyi + 1) - (yynrhs)]), context, scanner);
        YYFPRINTF(stderr, "\n");
    }
}

#    define YY_REDUCE_PRINT(Rule)                                             \
        do                                                                    \
        {                                                                     \
            if (yydebug)                                                      \
                yy_reduce_print(yyssp, yyvsp, yylsp, Rule, context, scanner); \
        } while (0)

/* Nonzero means print parse trace.  It is left uninitialized so that
   multiple parsers can coexist.  */
int yydebug;
#else /* !YYDEBUG */
#    define YYDPRINTF(Args)
#    define YY_SYMBOL_PRINT(Title, Type, Value, Location)
#    define YY_STACK_PRINT(Bottom, Top)
#    define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */

/* YYINITDEPTH -- initial size of the parser's stacks.  */
#ifndef YYINITDEPTH
#    define YYINITDEPTH 200
#endif

/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   if the built-in stack extension method is used).

   Do not make this value too large; the results are undefined if
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   evaluated with infinite-precision integer arithmetic.  */

#ifndef YYMAXDEPTH
#    define YYMAXDEPTH 10000
#endif

#if YYERROR_VERBOSE

#    ifndef yystrlen
#        if defined __GLIBC__ && defined _STRING_H
#            define yystrlen strlen
#        else
/* Return the length of YYSTR.  */
static YYSIZE_T yystrlen(const char *yystr)
{
    YYSIZE_T yylen;
    for (yylen = 0; yystr[yylen]; yylen++)
        continue;
    return yylen;
}
#        endif
#    endif

#    ifndef yystpcpy
#        if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
#            define yystpcpy stpcpy
#        else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
   YYDEST.  */
static char *yystpcpy(char *yydest, const char *yysrc)
{
    char *yyd       = yydest;
    const char *yys = yysrc;

    while ((*yyd++ = *yys++) != '\0')
        continue;

    return yyd - 1;
}
#        endif
#    endif

#    ifndef yytnamerr
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
   quotes and backslashes, so that it's suitable for yyerror.  The
   heuristic is that double-quoting is unnecessary unless the string
   contains an apostrophe, a comma, or backslash (other than
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
   null, do not copy; instead, return the length of what the result
   would have been.  */
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
{
    if (*yystr == '"')
    {
        YYSIZE_T yyn    = 0;
        char const *yyp = yystr;

        for (;;)
            switch (*++yyp)
            {
                case '\'':
                case ',':
                    goto do_not_strip_quotes;

                case '\\':
                    if (*++yyp != '\\')
                        goto do_not_strip_quotes;
                    else
                        goto append;

                append:
                default:
                    if (yyres)
                        yyres[yyn] = *yyp;
                    yyn++;
                    break;

                case '"':
                    if (yyres)
                        yyres[yyn] = '\0';
                    return yyn;
            }
    do_not_strip_quotes:;
    }

    if (!yyres)
        return yystrlen(yystr);

    return (YYSIZE_T)(yystpcpy(yyres, yystr) - yyres);
}
#    endif

/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
   about the unexpected token YYTOKEN for the state stack whose top is
   YYSSP.

   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
   not large enough to hold the message.  In that case, also set
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
   required number of bytes is too large to store.  */
static int yysyntax_error(YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken)
{
    YYSIZE_T yysize0 = yytnamerr(YY_NULLPTR, yytname[yytoken]);
    YYSIZE_T yysize  = yysize0;
    enum
    {
        YYERROR_VERBOSE_ARGS_MAXIMUM = 5
    };
    /* Internationalized format string. */
    const char *yyformat = YY_NULLPTR;
    /* Arguments of yyformat. */
    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
    /* Number of reported tokens (one for the "unexpected", one per
       "expected"). */
    int yycount = 0;

    /* There are many possibilities here to consider:
       - If this state is a consistent state with a default action, then
         the only way this function was invoked is if the default action
         is an error action.  In that case, don't check for expected
         tokens because there are none.
       - The only way there can be no lookahead present (in yychar) is if
         this state is a consistent state with a default action.  Thus,
         detecting the absence of a lookahead is sufficient to determine
         that there is no unexpected or expected token to report.  In that
         case, just report a simple "syntax error".
       - Don't assume there isn't a lookahead just because this state is a
         consistent state with a default action.  There might have been a
         previous inconsistent state, consistent state with a non-default
         action, or user semantic action that manipulated yychar.
       - Of course, the expected token list depends on states to have
         correct lookahead information, and it depends on the parser not
         to perform extra reductions after fetching a lookahead from the
         scanner and before detecting a syntax error.  Thus, state merging
         (from LALR or IELR) and default reductions corrupt the expected
         token list.  However, the list is correct for canonical LR with
         one exception: it will still contain any token that will not be
         accepted due to an error action in a later state.
    */
    if (yytoken != YYEMPTY)
    {
        int yyn          = yypact[*yyssp];
        yyarg[yycount++] = yytname[yytoken];
        if (!yypact_value_is_default(yyn))
        {
            /* Start YYX at -YYN if negative to avoid negative indexes in
               YYCHECK.  In other words, skip the first -YYN actions for
               this state because they are default actions.  */
            int yyxbegin = yyn < 0 ? -yyn : 0;
            /* Stay within bounds of both yycheck and yytname.  */
            int yychecklim = YYLAST - yyn + 1;
            int yyxend     = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
            int yyx;

            for (yyx = yyxbegin; yyx < yyxend; ++yyx)
                if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR &&
                    !yytable_value_is_error(yytable[yyx + yyn]))
                {
                    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
                    {
                        yycount = 1;
                        yysize  = yysize0;
                        break;
                    }
                    yyarg[yycount++] = yytname[yyx];
                    {
                        YYSIZE_T yysize1 = yysize + yytnamerr(YY_NULLPTR, yytname[yyx]);
                        if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
                            yysize = yysize1;
                        else
                            return 2;
                    }
                }
        }
    }

    switch (yycount)
    {
#    define YYCASE_(N, S) \
        case N:           \
            yyformat = S; \
            break
        default: /* Avoid compiler warnings. */
            YYCASE_(0, YY_("syntax error"));
            YYCASE_(1, YY_("syntax error, unexpected %s"));
            YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
            YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
            YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
            YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
#    undef YYCASE_
    }

    {
        YYSIZE_T yysize1 = yysize + yystrlen(yyformat);
        if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
            yysize = yysize1;
        else
            return 2;
    }

    if (*yymsg_alloc < yysize)
    {
        *yymsg_alloc = 2 * yysize;
        if (!(yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
            *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
        return 1;
    }

    /* Avoid sprintf, as that infringes on the user's name space.
       Don't have undefined behavior even if the translation
       produced a string with the wrong number of "%s"s.  */
    {
        char *yyp = *yymsg;
        int yyi   = 0;
        while ((*yyp = *yyformat) != '\0')
            if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
            {
                yyp += yytnamerr(yyp, yyarg[yyi++]);
                yyformat += 2;
            }
            else
            {
                yyp++;
                yyformat++;
            }
    }
    return 0;
}
#endif /* YYERROR_VERBOSE */

/*-----------------------------------------------.
| Release the memory associated to this symbol.  |
`-----------------------------------------------*/

static void yydestruct(const char *yymsg,
                       int yytype,
                       YYSTYPE *yyvaluep,
                       YYLTYPE *yylocationp,
                       TParseContext *context,
                       void *scanner)
{
    YYUSE(yyvaluep);
    YYUSE(yylocationp);
    YYUSE(context);
    YYUSE(scanner);
    if (!yymsg)
        yymsg = "Deleting";
    YY_SYMBOL_PRINT(yymsg, yytype, yyvaluep, yylocationp);

    YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    YYUSE(yytype);
    YY_IGNORE_MAYBE_UNINITIALIZED_END
}

/*----------.
| yyparse.  |
`----------*/

int yyparse(TParseContext *context, void *scanner)
{
    /* The lookahead symbol.  */
    int yychar;

    /* The semantic value of the lookahead symbol.  */
    /* Default value used for initialization, for pacifying older GCCs
       or non-GCC compilers.  */
    YY_INITIAL_VALUE(static YYSTYPE yyval_default;)
    YYSTYPE yylval YY_INITIAL_VALUE(= yyval_default);

    /* Location data for the lookahead symbol.  */
    static YYLTYPE yyloc_default
#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
        = { 1,
            1,
            1,
            1 }
#endif
    ;
    YYLTYPE yylloc = yyloc_default;

    /* Number of syntax errors so far.  */
    int yynerrs;

    int yystate;
    /* Number of tokens to shift before error messages enabled.  */
    int yyerrstatus;

    /* The stacks and their tools:
       'yyss': related to states.
       'yyvs': related to semantic values.
       'yyls': related to locations.

       Refer to the stacks through separate pointers, to allow yyoverflow
       to reallocate them elsewhere.  */

    /* The state stack.  */
    yytype_int16 yyssa[YYINITDEPTH];
    yytype_int16 *yyss;
    yytype_int16 *yyssp;

    /* The semantic value stack.  */
    YYSTYPE yyvsa[YYINITDEPTH];
    YYSTYPE *yyvs;
    YYSTYPE *yyvsp;

    /* The location stack.  */
    YYLTYPE yylsa[YYINITDEPTH];
    YYLTYPE *yyls;
    YYLTYPE *yylsp;

    /* The locations where the error started and ended.  */
    YYLTYPE yyerror_range[3];

    YYSIZE_T yystacksize;

    int yyn;
    int yyresult;
    /* Lookahead token as an internal (translated) token number.  */
    int yytoken = 0;
    /* The variables used to return semantic value and location from the
       action routines.  */
    YYSTYPE yyval;
    YYLTYPE yyloc;

#if YYERROR_VERBOSE
    /* Buffer for error messages, and its allocated size.  */
    char yymsgbuf[128];
    char *yymsg          = yymsgbuf;
    YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
#endif

#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))

    /* The number of symbols on the RHS of the reduced rule.
       Keep to zero when no symbol should be popped.  */
    int yylen = 0;

    yyssp = yyss = yyssa;
    yyvsp = yyvs = yyvsa;
    yylsp = yyls = yylsa;
    yystacksize  = YYINITDEPTH;

    YYDPRINTF((stderr, "Starting parse\n"));

    yystate     = 0;
    yyerrstatus = 0;
    yynerrs     = 0;
    yychar      = YYEMPTY; /* Cause a token to be read.  */
    yylsp[0]    = yylloc;
    goto yysetstate;

/*------------------------------------------------------------.
| yynewstate -- push a new state, which is found in yystate.  |
`------------------------------------------------------------*/
yynewstate:
    /* In all cases, when you get here, the value and location stacks
       have just been pushed.  So pushing a state here evens the stacks.  */
    yyssp++;

/*--------------------------------------------------------------------.
| yynewstate -- set current state (the top of the stack) to yystate.  |
`--------------------------------------------------------------------*/
yysetstate:
    *yyssp = (yytype_int16)yystate;

    if (yyss + yystacksize - 1 <= yyssp)
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
        goto yyexhaustedlab;
#else
    {
        /* Get the current used size of the three stacks, in elements.  */
        YYSIZE_T yysize = (YYSIZE_T)(yyssp - yyss + 1);

#    if defined yyoverflow
        {
            /* Give user a chance to reallocate the stack.  Use copies of
               these so that the &'s don't force the real ones into
               memory.  */
            YYSTYPE *yyvs1      = yyvs;
            yytype_int16 *yyss1 = yyss;
            YYLTYPE *yyls1      = yyls;

            /* Each stack pointer address is followed by the size of the
               data in use in that stack, in bytes.  This used to be a
               conditional around just the two extra args, but that might
               be undefined if yyoverflow is a macro.  */
            yyoverflow(YY_("memory exhausted"), &yyss1, yysize * sizeof(*yyssp), &yyvs1,
                       yysize * sizeof(*yyvsp), &yyls1, yysize * sizeof(*yylsp), &yystacksize);
            yyss = yyss1;
            yyvs = yyvs1;
            yyls = yyls1;
        }
#    else /* defined YYSTACK_RELOCATE */
        /* Extend the stack our own way.  */
        if (YYMAXDEPTH <= yystacksize)
            goto yyexhaustedlab;
        yystacksize *= 2;
        if (YYMAXDEPTH < yystacksize)
            yystacksize = YYMAXDEPTH;

        {
            yytype_int16 *yyss1  = yyss;
            union yyalloc *yyptr = (union yyalloc *)YYSTACK_ALLOC(YYSTACK_BYTES(yystacksize));
            if (!yyptr)
                goto yyexhaustedlab;
            YYSTACK_RELOCATE(yyss_alloc, yyss);
            YYSTACK_RELOCATE(yyvs_alloc, yyvs);
            YYSTACK_RELOCATE(yyls_alloc, yyls);
#        undef YYSTACK_RELOCATE
            if (yyss1 != yyssa)
                YYSTACK_FREE(yyss1);
        }
#    endif

        yyssp = yyss + yysize - 1;
        yyvsp = yyvs + yysize - 1;
        yylsp = yyls + yysize - 1;

        YYDPRINTF((stderr, "Stack size increased to %lu\n", (unsigned long)yystacksize));

        if (yyss + yystacksize - 1 <= yyssp)
            YYABORT;
    }
#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */

    YYDPRINTF((stderr, "Entering state %d\n", yystate));

    if (yystate == YYFINAL)
        YYACCEPT;

    goto yybackup;

/*-----------.
| yybackup.  |
`-----------*/
yybackup:
    /* Do appropriate processing given the current state.  Read a
       lookahead token if we need one and don't already have one.  */

    /* First try to decide what to do without reference to lookahead token.  */
    yyn = yypact[yystate];
    if (yypact_value_is_default(yyn))
        goto yydefault;

    /* Not known => get a lookahead token if don't already have one.  */

    /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
    if (yychar == YYEMPTY)
    {
        YYDPRINTF((stderr, "Reading a token: "));
        yychar = yylex(&yylval, &yylloc, scanner);
    }

    if (yychar <= YYEOF)
    {
        yychar = yytoken = YYEOF;
        YYDPRINTF((stderr, "Now at end of input.\n"));
    }
    else
    {
        yytoken = YYTRANSLATE(yychar);
        YY_SYMBOL_PRINT("Next token is", yytoken, &yylval, &yylloc);
    }

    /* If the proper action on seeing token YYTOKEN is to reduce or to
       detect an error, take that action.  */
    yyn += yytoken;
    if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
        goto yydefault;
    yyn = yytable[yyn];
    if (yyn <= 0)
    {
        if (yytable_value_is_error(yyn))
            goto yyerrlab;
        yyn = -yyn;
        goto yyreduce;
    }

    /* Count tokens shifted since error; after three, turn off error
       status.  */
    if (yyerrstatus)
        yyerrstatus--;

    /* Shift the lookahead token.  */
    YY_SYMBOL_PRINT("Shifting", yytoken, &yylval, &yylloc);

    /* Discard the shifted token.  */
    yychar = YYEMPTY;

    yystate = yyn;
    YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    *++yyvsp = yylval;
    YY_IGNORE_MAYBE_UNINITIALIZED_END
    *++yylsp = yylloc;
    goto yynewstate;

/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state.  |
`-----------------------------------------------------------*/
yydefault:
    yyn = yydefact[yystate];
    if (yyn == 0)
        goto yyerrlab;
    goto yyreduce;

/*-----------------------------.
| yyreduce -- do a reduction.  |
`-----------------------------*/
yyreduce:
    /* yyn is the number of a rule to reduce with.  */
    yylen = yyr2[yyn];

    /* If YYLEN is nonzero, implement the default value of the action:
       '$$ = $1'.

       Otherwise, the following line sets YYVAL to garbage.
       This behavior is undocumented and Bison
       users should not rely upon it.  Assigning to YYVAL
       unconditionally makes the parser a bit smaller, and it avoids a
       GCC warning that YYVAL may be used uninitialized.  */
    yyval = yyvsp[1 - yylen];

    /* Default location. */
    YYLLOC_DEFAULT(yyloc, (yylsp - yylen), yylen);
    yyerror_range[1] = yyloc;
    YY_REDUCE_PRINT(yyn);
    switch (yyn)
    {
        case 4:

        {
            // The symbol table search was done in the lexical phase
            (yyval.interm.intermTypedNode) = context->parseVariableIdentifier(
                (yylsp[0]), ImmutableString((yyvsp[0].lex).string), (yyvsp[0].lex).symbol);
        }

        break;

        case 5:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 6:

        {
            TConstantUnion *unionArray = new TConstantUnion[1];
            unionArray->setIConst((yyvsp[0].lex).i);
            (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
        }

        break;

        case 7:

        {
            TConstantUnion *unionArray = new TConstantUnion[1];
            unionArray->setUConst((yyvsp[0].lex).u);
            (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
        }

        break;

        case 8:

        {
            TConstantUnion *unionArray = new TConstantUnion[1];
            unionArray->setFConst((yyvsp[0].lex).f);
            (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
        }

        break;

        case 9:

        {
            TConstantUnion *unionArray = new TConstantUnion[1];
            unionArray->setBConst((yyvsp[0].lex).b);
            (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
        }

        break;

        case 10:

        {
            if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
            {
                context->error((yylsp[0]), "unsupported value",
                               ImmutableString((yyvsp[0].lex).string));
            }
            TConstantUnion *unionArray = new TConstantUnion[1];
            unionArray->setYuvCscStandardEXTConst(
                getYuvCscStandardEXT(ImmutableString((yyvsp[0].lex).string)));
            (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
        }

        break;

        case 11:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
        }

        break;

        case 12:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 13:

        {
            (yyval.interm.intermTypedNode) =
                context->addIndexExpression((yyvsp[-3].interm.intermTypedNode), (yylsp[-2]),
                                            (yyvsp[-1].interm.intermTypedNode));
        }

        break;

        case 14:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 15:

        {
            (yyval.interm.intermTypedNode) = context->addFieldSelectionExpression(
                (yyvsp[-2].interm.intermTypedNode), (yylsp[-1]),
                ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
        }

        break;

        case 16:

        {
            (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
                EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
        }

        break;

        case 17:

        {
            (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
                EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
        }

        break;

        case 18:

        {
            context->checkIsScalarInteger((yyvsp[0].interm.intermTypedNode), "[]");
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 19:

        {
            (yyval.interm.intermTypedNode) =
                context->addFunctionCallOrMethod((yyvsp[0].interm.functionLookup), (yylsp[0]));
        }

        break;

        case 20:

        {
            (yyval.interm.functionLookup) = (yyvsp[0].interm.functionLookup);
        }

        break;

        case 21:

        {
            ES3_OR_NEWER("", (yylsp[0]), "methods");
            (yyval.interm.functionLookup) = (yyvsp[0].interm.functionLookup);
            (yyval.interm.functionLookup)->setThisNode((yyvsp[-2].interm.intermTypedNode));
        }

        break;

        case 22:

        {
            (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
        }

        break;

        case 23:

        {
            (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
        }

        break;

        case 24:

        {
            (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
        }

        break;

        case 25:

        {
            (yyval.interm.functionLookup) = (yyvsp[0].interm.functionLookup);
        }

        break;

        case 26:

        {
            (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
            (yyval.interm.functionLookup)->addArgument((yyvsp[0].interm.intermTypedNode));
        }

        break;

        case 27:

        {
            (yyval.interm.functionLookup) = (yyvsp[-2].interm.functionLookup);
            (yyval.interm.functionLookup)->addArgument((yyvsp[0].interm.intermTypedNode));
        }

        break;

        case 28:

        {
            (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
        }

        break;

        case 29:

        {
            (yyval.interm.functionLookup) = context->addConstructorFunc((yyvsp[0].interm.type));
        }

        break;

        case 30:

        {
            (yyval.interm.functionLookup) = context->addNonConstructorFunc(
                ImmutableString((yyvsp[0].lex).string), (yyvsp[0].lex).symbol);
        }

        break;

        case 31:

        {
            (yyval.interm.functionLookup) = context->addNonConstructorFunc(
                ImmutableString((yyvsp[0].lex).string), (yyvsp[0].lex).symbol);
        }

        break;

        case 32:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 33:

        {
            (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
                EOpPreIncrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 34:

        {
            (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
                EOpPreDecrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 35:

        {
            (yyval.interm.intermTypedNode) = context->addUnaryMath(
                (yyvsp[-1].interm.op), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 36:

        {
            (yyval.interm.op) = EOpPositive;
        }

        break;

        case 37:

        {
            (yyval.interm.op) = EOpNegative;
        }

        break;

        case 38:

        {
            (yyval.interm.op) = EOpLogicalNot;
        }

        break;

        case 39:

        {
            ES3_OR_NEWER("~", (yyloc), "bit-wise operator");
            (yyval.interm.op) = EOpBitwiseNot;
        }

        break;

        case 40:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 41:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpMul, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 42:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpDiv, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 43:

        {
            ES3_OR_NEWER("%", (yylsp[-1]), "integer modulus operator");
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpIMod, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 44:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 45:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpAdd, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 46:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpSub, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 47:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 48:

        {
            ES3_OR_NEWER("<<", (yylsp[-1]), "bit-wise operator");
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpBitShiftLeft, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 49:

        {
            ES3_OR_NEWER(">>", (yylsp[-1]), "bit-wise operator");
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpBitShiftRight, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 50:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 51:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMathBooleanResult(EOpLessThan, (yyvsp[-2].interm.intermTypedNode),
                                                    (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 52:

        {
            (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
                EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 53:

        {
            (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
                EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 54:

        {
            (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
                EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 55:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 56:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMathBooleanResult(EOpEqual, (yyvsp[-2].interm.intermTypedNode),
                                                    (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 57:

        {
            (yyval.interm.intermTypedNode) =
                context->addBinaryMathBooleanResult(EOpNotEqual, (yyvsp[-2].interm.intermTypedNode),
                                                    (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 58:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 59:

        {
            ES3_OR_NEWER("&", (yylsp[-1]), "bit-wise operator");
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpBitwiseAnd, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 60:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 61:

        {
            ES3_OR_NEWER("^", (yylsp[-1]), "bit-wise operator");
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpBitwiseXor, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 62:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 63:

        {
            ES3_OR_NEWER("|", (yylsp[-1]), "bit-wise operator");
            (yyval.interm.intermTypedNode) =
                context->addBinaryMath(EOpBitwiseOr, (yyvsp[-2].interm.intermTypedNode),
                                       (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 64:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 65:

        {
            (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
                EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 66:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 67:

        {
            (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
                EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 68:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 69:

        {
            (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
                EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode),
                (yylsp[-1]));
        }

        break;

        case 70:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 71:

        {
            (yyval.interm.intermTypedNode) = context->addTernarySelection(
                (yyvsp[-4].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-3]));
        }

        break;

        case 72:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 73:

        {
            (yyval.interm.intermTypedNode) =
                context->addAssign((yyvsp[-1].interm.op), (yyvsp[-2].interm.intermTypedNode),
                                   (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 74:

        {
            (yyval.interm.op) = EOpAssign;
        }

        break;

        case 75:

        {
            (yyval.interm.op) = EOpMulAssign;
        }

        break;

        case 76:

        {
            (yyval.interm.op) = EOpDivAssign;
        }

        break;

        case 77:

        {
            ES3_OR_NEWER("%=", (yyloc), "integer modulus operator");
            (yyval.interm.op) = EOpIModAssign;
        }

        break;

        case 78:

        {
            (yyval.interm.op) = EOpAddAssign;
        }

        break;

        case 79:

        {
            (yyval.interm.op) = EOpSubAssign;
        }

        break;

        case 80:

        {
            ES3_OR_NEWER("<<=", (yyloc), "bit-wise operator");
            (yyval.interm.op) = EOpBitShiftLeftAssign;
        }

        break;

        case 81:

        {
            ES3_OR_NEWER(">>=", (yyloc), "bit-wise operator");
            (yyval.interm.op) = EOpBitShiftRightAssign;
        }

        break;

        case 82:

        {
            ES3_OR_NEWER("&=", (yyloc), "bit-wise operator");
            (yyval.interm.op) = EOpBitwiseAndAssign;
        }

        break;

        case 83:

        {
            ES3_OR_NEWER("^=", (yyloc), "bit-wise operator");
            (yyval.interm.op) = EOpBitwiseXorAssign;
        }

        break;

        case 84:

        {
            ES3_OR_NEWER("|=", (yyloc), "bit-wise operator");
            (yyval.interm.op) = EOpBitwiseOrAssign;
        }

        break;

        case 85:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 86:

        {
            (yyval.interm.intermTypedNode) = context->addComma(
                (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
        }

        break;

        case 87:

        {
            context->checkIsConst((yyvsp[0].interm.intermTypedNode));
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 88:

        {
            context->enterStructDeclaration((yylsp[-1]), ImmutableString((yyvsp[-1].lex).string));
            (yyval.lex) = (yyvsp[-1].lex);
        }

        break;

        case 89:

        {
            (yyval.interm.intermNode) = context->addFunctionPrototypeDeclaration(
                *((yyvsp[-1].interm).function), (yylsp[-1]));
        }

        break;

        case 90:

        {
            (yyval.interm.intermNode) = (yyvsp[-1].interm).intermDeclaration;
        }

        break;

        case 91:

        {
            context->parseDefaultPrecisionQualifier((yyvsp[-2].interm.precision),
                                                    (yyvsp[-1].interm.type), (yylsp[-3]));
            (yyval.interm.intermNode) = nullptr;
        }

        break;

        case 92:

        {
            ES3_OR_NEWER(ImmutableString((yyvsp[-3].lex).string), (yylsp[-4]), "interface blocks");
            (yyval.interm.intermNode) = context->addInterfaceBlock(
                *(yyvsp[-4].interm.typeQualifierBuilder), (yylsp[-3]),
                ImmutableString((yyvsp[-3].lex).string), (yyvsp[-2].interm.fieldList),
                kEmptyImmutableString, (yyloc), NULL, (yyloc));
        }

        break;

        case 93:

        {
            ES3_OR_NEWER(ImmutableString((yyvsp[-4].lex).string), (yylsp[-5]), "interface blocks");
            (yyval.interm.intermNode) = context->addInterfaceBlock(
                *(yyvsp[-5].interm.typeQualifierBuilder), (yylsp[-4]),
                ImmutableString((yyvsp[-4].lex).string), (yyvsp[-3].interm.fieldList),
                ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]), NULL, (yyloc));
        }

        break;

        case 94:

        {
            ES3_OR_NEWER(ImmutableString((yyvsp[-7].lex).string), (yylsp[-8]), "interface blocks");
            (yyval.interm.intermNode) = context->addInterfaceBlock(
                *(yyvsp[-8].interm.typeQualifierBuilder), (yylsp[-7]),
                ImmutableString((yyvsp[-7].lex).string), (yyvsp[-6].interm.fieldList),
                ImmutableString((yyvsp[-4].lex).string), (yylsp[-4]),
                (yyvsp[-2].interm.intermTypedNode), (yylsp[-3]));
        }

        break;

        case 95:

        {
            context->parseGlobalLayoutQualifier(*(yyvsp[-1].interm.typeQualifierBuilder));
            (yyval.interm.intermNode) = nullptr;
        }

        break;

        case 96:

        {
            (yyval.interm.intermNode) = context->parseGlobalQualifierDeclaration(
                *(yyvsp[-2].interm.typeQualifierBuilder), (yylsp[-1]),
                ImmutableString((yyvsp[-1].lex).string), (yyvsp[-1].lex).symbol);
        }

        break;

        case 97:

        {
            (yyval.interm).function =
                context->parseFunctionDeclarator((yylsp[0]), (yyvsp[-1].interm.function));
            context->exitFunctionDeclaration();
        }

        break;

        case 98:

        {
            (yyval.interm.function) = (yyvsp[0].interm.function);
        }

        break;

        case 99:

        {
            (yyval.interm.function) = (yyvsp[0].interm.function);
        }

        break;

        case 100:

        {
            // Add the parameter
            (yyval.interm.function) = (yyvsp[-1].interm.function);
            if ((yyvsp[0].interm.param).type->getBasicType() != EbtVoid)
            {
                (yyvsp[-1].interm.function)
                    ->addParameter((yyvsp[0].interm.param).createVariable(&context->symbolTable));
            }
        }

        break;

        case 101:

        {
            (yyval.interm.function) = (yyvsp[-2].interm.function);
            // Only first parameter of one-parameter functions can be void
            // The check for named parameters not being void is done in parameter_declarator
            if ((yyvsp[0].interm.param).type->getBasicType() == EbtVoid)
            {
                // This parameter > first is void
                context->error((yylsp[-1]), "cannot be a parameter type except for '(void)'",
                               "void");
            }
            else
            {
                (yyvsp[-2].interm.function)
                    ->addParameter((yyvsp[0].interm.param).createVariable(&context->symbolTable));
            }
        }

        break;

        case 102:

        {
            (yyval.interm.function) = context->parseFunctionHeader(
                (yyvsp[-2].interm.type), ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]));

            context->symbolTable.push();
            context->enterFunctionDeclaration();
        }

        break;

        case 103:

        {
            (yyval.interm.param) = context->parseParameterDeclarator(
                (yyvsp[-1].interm.type), ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
        }

        break;

        case 104:

        {
            (yyval.interm.param) = context->parseParameterArrayDeclarator(
                ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]),
                *((yyvsp[0].interm.arraySizes)), (yylsp[0]), &(yyvsp[-2].interm.type));
        }

        break;

        case 105:

        {
            (yyval.interm.param) = (yyvsp[0].interm.param);
            context->checkIsParameterQualifierValid(
                (yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.param).type);
        }

        break;

        case 106:

        {
            (yyval.interm.param) = (yyvsp[0].interm.param);
            (yyval.interm.param).type->setQualifier(EvqIn);
        }

        break;

        case 107:

        {
            (yyval.interm.param) = (yyvsp[0].interm.param);
            context->checkIsParameterQualifierValid(
                (yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.param).type);
        }

        break;

        case 108:

        {
            (yyval.interm.param) = (yyvsp[0].interm.param);
            (yyval.interm.param).type->setQualifier(EvqIn);
        }

        break;

        case 109:

        {
            TParameter param     = {0, new TType((yyvsp[0].interm.type))};
            (yyval.interm.param) = param;
        }

        break;

        case 110:

        {
            (yyval.interm) = (yyvsp[0].interm);
        }

        break;

        case 111:

        {
            (yyval.interm) = (yyvsp[-2].interm);
            context->parseDeclarator((yyval.interm).type, (yylsp[0]),
                                     ImmutableString((yyvsp[0].lex).string),
                                     (yyval.interm).intermDeclaration);
        }

        break;

        case 112:

        {
            (yyval.interm) = (yyvsp[-3].interm);
            context->parseArrayDeclarator(
                (yyval.interm).type, (yylsp[-1]), ImmutableString((yyvsp[-1].lex).string),
                (yylsp[0]), *((yyvsp[0].interm.arraySizes)), (yyval.interm).intermDeclaration);
        }

        break;

        case 113:

        {
            ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
            (yyval.interm) = (yyvsp[-5].interm);
            context->parseArrayInitDeclarator(
                (yyval.interm).type, (yylsp[-3]), ImmutableString((yyvsp[-3].lex).string),
                (yylsp[-2]), *((yyvsp[-2].interm.arraySizes)), (yylsp[-1]),
                (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
        }

        break;

        case 114:

        {
            (yyval.interm) = (yyvsp[-4].interm);
            context->parseInitDeclarator(
                (yyval.interm).type, (yylsp[-2]), ImmutableString((yyvsp[-2].lex).string),
                (yylsp[-1]), (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
        }

        break;

        case 115:

        {
            (yyval.interm).type              = (yyvsp[0].interm.type);
            (yyval.interm).intermDeclaration = context->parseSingleDeclaration(
                (yyval.interm).type, (yylsp[0]), kEmptyImmutableString);
        }

        break;

        case 116:

        {
            (yyval.interm).type              = (yyvsp[-1].interm.type);
            (yyval.interm).intermDeclaration = context->parseSingleDeclaration(
                (yyval.interm).type, (yylsp[0]), ImmutableString((yyvsp[0].lex).string));
        }

        break;

        case 117:

        {
            (yyval.interm).type              = (yyvsp[-2].interm.type);
            (yyval.interm).intermDeclaration = context->parseSingleArrayDeclaration(
                (yyval.interm).type, (yylsp[-1]), ImmutableString((yyvsp[-1].lex).string),
                (yylsp[0]), *((yyvsp[0].interm.arraySizes)));
        }

        break;

        case 118:

        {
            ES3_OR_NEWER("[]", (yylsp[-2]), "first-class arrays (array initializer)");
            (yyval.interm).type              = (yyvsp[-4].interm.type);
            (yyval.interm).intermDeclaration = context->parseSingleArrayInitDeclaration(
                (yyval.interm).type, (yylsp[-3]), ImmutableString((yyvsp[-3].lex).string),
                (yylsp[-2]), *((yyvsp[-2].interm.arraySizes)), (yylsp[-1]),
                (yyvsp[0].interm.intermTypedNode));
        }

        break;

        case 119:

        {
            (yyval.interm).type              = (yyvsp[-3].interm.type);
            (yyval.interm).intermDeclaration = context->parseSingleInitDeclaration(
                (yyval.interm).type, (yylsp[-2]), ImmutableString((yyvsp[-2].lex).string),
                (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
        }

        break;

        case 120:

        {
            context->addFullySpecifiedType(&(yyvsp[0].interm.type));
            (yyval.interm.type) = (yyvsp[0].interm.type);
        }

        break;

        case 121:

        {
            (yyval.interm.type) = context->addFullySpecifiedType(
                *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.type));
        }

        break;

        case 122:

        {
            (yyval.interm.qualifier) = EvqSmooth;
        }

        break;

        case 123:

        {
            (yyval.interm.qualifier) = EvqFlat;
        }

        break;

        case 124:

        {
            (yyval.interm.typeQualifierBuilder) = context->createTypeQualifierBuilder((yylsp[0]));
            (yyval.interm.typeQualifierBuilder)
                ->appendQualifier((yyvsp[0].interm.qualifierWrapper));
        }

        break;

        case 125:

        {
            (yyval.interm.typeQualifierBuilder) = (yyvsp[-1].interm.typeQualifierBuilder);
            (yyval.interm.typeQualifierBuilder)
                ->appendQualifier((yyvsp[0].interm.qualifierWrapper));
        }

        break;

        case 126:

        {
            // empty
        }

        break;

        case 127:

        {
            // empty
        }

        break;

        case 128:

        {
            context->checkLocalVariableConstStorageQualifier(*(yyvsp[0].interm.qualifierWrapper));
            (yyval.interm.qualifierWrapper) = (yyvsp[0].interm.qualifierWrapper);
        }

        break;

        case 129:

        {
            context->checkIsAtGlobalLevel((yylsp[0]), "layout");
            (yyval.interm.qualifierWrapper) =
                new TLayoutQualifierWrapper((yyvsp[0].interm.layoutQualifier), (yylsp[0]));
        }

        break;

        case 130:

        {
            (yyval.interm.qualifierWrapper) =
                new TPrecisionQualifierWrapper((yyvsp[0].interm.precision), (yylsp[0]));
        }

        break;

        case 131:

        {
            (yyval.interm.qualifierWrapper) =
                new TInterpolationQualifierWrapper((yyvsp[0].interm.qualifier), (yylsp[0]));
        }

        break;

        case 132:

        {
            context->checkIsAtGlobalLevel((yylsp[0]), "invariant");
            (yyval.interm.qualifierWrapper) = new TInvariantQualifierWrapper((yylsp[0]));
        }

        break;

        case 133:

        {
            (yyval.interm.qualifierWrapper) = new TPreciseQualifierWrapper((yylsp[0]));
        }

        break;

        case 134:

        {
            VERTEX_ONLY("attribute", (yylsp[0]));
            ES2_ONLY("attribute", (yylsp[0]));
            (yyval.interm.qualifierWrapper) =
                context->parseGlobalStorageQualifier(EvqAttribute, (yylsp[0]));
        }

        break;

        case 135:

        {
            ES2_ONLY("varying", (yylsp[0]));
            (yyval.interm.qualifierWrapper) = context->parseVaryingQualifier((yylsp[0]));
        }

        break;

        case 136:

        {
            (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqConst, (yylsp[0]));
        }

        break;

        case 137:

        {
            (yyval.interm.qualifierWrapper) = context->parseInQualifier((yylsp[0]));
        }

        break;

        case 138:

        {
            (yyval.interm.qualifierWrapper) = context->parseOutQualifier((yylsp[0]));
        }

        break;

        case 139:

        {
            (yyval.interm.qualifierWrapper) = context->parseInOutQualifier((yylsp[0]));
        }

        break;

        case 140:

        {
            ES3_OR_NEWER("centroid", (yylsp[0]), "storage qualifier");
            (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqCentroid, (yylsp[0]));
        }

        break;

        case 141:

        {
            (yyval.interm.qualifierWrapper) =
                context->parseGlobalStorageQualifier(EvqUniform, (yylsp[0]));
        }

        break;

        case 142:

        {
            ES3_1_ONLY("buffer", (yylsp[0]), "storage qualifier");
            (yyval.interm.qualifierWrapper) =
                context->parseGlobalStorageQualifier(EvqBuffer, (yylsp[0]));
        }

        break;

        case 143:

        {
            (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqReadOnly, (yylsp[0]));
        }

        break;

        case 144:

        {
            (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqWriteOnly, (yylsp[0]));
        }

        break;

        case 145:

        {
            (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqCoherent, (yylsp[0]));
        }

        break;

        case 146:

        {
            (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqRestrict, (yylsp[0]));
        }

        break;

        case 147:

        {
            (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqVolatile, (yylsp[0]));
        }

        break;

        case 148:

        {
            COMPUTE_ONLY("shared", (yylsp[0]));
            (yyval.interm.qualifierWrapper) =
                context->parseGlobalStorageQualifier(EvqShared, (yylsp[0]));
        }

        break;

        case 149:

        {
            (yyval.interm.type) = (yyvsp[0].interm.type);
            (yyval.interm.type).precision =
                context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
        }

        break;

        case 150:

        {
            (yyval.interm.precision) = EbpHigh;
        }

        break;

        case 151:

        {
            (yyval.interm.precision) = EbpMedium;
        }

        break;

        case 152:

        {
            (yyval.interm.precision) = EbpLow;
        }

        break;

        case 153:

        {
            ES3_OR_NEWER("layout", (yylsp[-3]), "qualifier");
            (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
        }

        break;

        case 154:

        {
            (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
        }

        break;

        case 155:

        {
            (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers(
                (yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
        }

        break;

        case 156:

        {
            (yyval.interm.layoutQualifier) =
                context->parseLayoutQualifier(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
        }

        break;

        case 157:

        {
            (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
                ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
        }

        break;

        case 158:

        {
            (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
                ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
        }

        break;

        case 159:

        {
            (yyval.interm.layoutQualifier) =
                context->parseLayoutQualifier(ImmutableString("shared"), (yylsp[0]));
        }

        break;

        case 160:

        {
            (yyval.interm.type)
                .initialize((yyvsp[0].interm.typeSpecifierNonArray),
                            (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
        }

        break;

        case 161:

        {
            (yyval.interm.type)
                .initialize((yyvsp[-1].interm.typeSpecifierNonArray),
                            (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
            (yyval.interm.type).setArraySizes((yyvsp[0].interm.arraySizes));
        }

        break;

        case 162:

        {
            ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
            (yyval.interm.arraySizes) = new TVector<unsigned int>();
            (yyval.interm.arraySizes)->push_back(0u);
        }

        break;

        case 163:

        {
            (yyval.interm.arraySizes) = new TVector<unsigned int>();
            unsigned int size =
                context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
            // Make the type an array even if size check failed.
            // This ensures useless error messages regarding a variable's non-arrayness won't
            // follow.
            (yyval.interm.arraySizes)->push_back(size);
        }

        break;

        case 164:

        {
            ES3_1_ONLY("[]", (yylsp[-1]), "arrays of arrays");
            (yyval.interm.arraySizes) = (yyvsp[-2].interm.arraySizes);
            (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), 0u);
        }

        break;

        case 165:

        {
            ES3_1_ONLY("[]", (yylsp[-2]), "arrays of arrays");
            (yyval.interm.arraySizes) = (yyvsp[-3].interm.arraySizes);
            unsigned int size =
                context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
            // Make the type an array even if size check failed.
            // This ensures useless error messages regarding a variable's non-arrayness won't
            // follow.
            (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), size);
        }

        break;

        case 166:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
        }

        break;

        case 167:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
        }

        break;

        case 168:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
        }

        break;

        case 169:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
        }

        break;

        case 170:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
        }

        break;

        case 171:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(2);
        }

        break;

        case 172:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(3);
        }

        break;

        case 173:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(4);
        }

        break;

        case 174:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(2);
        }

        break;

        case 175:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(3);
        }

        break;

        case 176:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(4);
        }

        break;

        case 177:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(2);
        }

        break;

        case 178:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(3);
        }

        break;

        case 179:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(4);
        }

        break;

        case 180:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(2);
        }

        break;

        case 181:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(3);
        }

        break;

        case 182:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setAggregate(4);
        }

        break;

        case 183:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
        }

        break;

        case 184:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
        }

        break;

        case 185:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
        }

        break;

        case 186:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
        }

        break;

        case 187:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
        }

        break;

        case 188:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
        }

        break;

        case 189:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
        }

        break;

        case 190:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
        }

        break;

        case 191:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
            (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
        }

        break;

        case 192:

        {
            if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
            {
                context->error((yylsp[0]), "unsupported type", "yuvCscStandardEXT");
            }
            (yyval.interm.typeSpecifierNonArray).initialize(EbtYuvCscStandardEXT, (yylsp[0]));
        }

        break;

        case 193:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
        }

        break;

        case 194:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
        }

        break;

        case 195:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
        }

        break;

        case 196:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
        }

        break;

        case 197:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
        }

        break;

        case 198:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMSArray, (yylsp[0]));
        }

        break;

        case 199:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
        }

        break;

        case 200:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
        }

        break;

        case 201:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
        }

        break;

        case 202:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
        }

        break;

        case 203:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
        }

        break;

        case 204:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMSArray, (yylsp[0]));
        }

        break;

        case 205:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
        }

        break;

        case 206:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
        }

        break;

        case 207:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
        }

        break;

        case 208:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
        }

        break;

        case 209:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
        }

        break;

        case 210:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMSArray, (yylsp[0]));
        }

        break;

        case 211:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
        }

        break;

        case 212:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
        }

        break;

        case 213:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
        }

        break;

        case 214:

        {
            if (!context->checkCanUseExtension((yylsp[0]), TExtension::WEBGL_video_texture))
            {
                context->error((yylsp[0]), "unsupported type", "samplerVideoWEBGL");
            }
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerVideoWEBGL, (yylsp[0]));
        }

        break;

        case 215:

        {
            constexpr std::array<TExtension, 3u> extensions{
                {TExtension::NV_EGL_stream_consumer_external,
                 TExtension::OES_EGL_image_external_essl3, TExtension::OES_EGL_image_external}};
            if (!context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
            {
                context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
            }
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternalOES, (yylsp[0]));
        }

        break;

        case 216:

        {
            if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
            {
                context->error((yylsp[0]), "unsupported type", "__samplerExternal2DY2YEXT");
            }
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternal2DY2YEXT, (yylsp[0]));
        }

        break;

        case 217:

        {
            if (!context->checkCanUseExtension((yylsp[0]), TExtension::ARB_texture_rectangle))
            {
                context->error((yylsp[0]), "unsupported type", "sampler2DRect");
            }
            (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DRect, (yylsp[0]));
        }

        break;

        case 218:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
        }

        break;

        case 219:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
        }

        break;

        case 220:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
        }

        break;

        case 221:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
        }

        break;

        case 222:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
        }

        break;

        case 223:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
        }

        break;

        case 224:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
        }

        break;

        case 225:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
        }

        break;

        case 226:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
        }

        break;

        case 227:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
        }

        break;

        case 228:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
        }

        break;

        case 229:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
        }

        break;

        case 230:

        {
            (yyval.interm.typeSpecifierNonArray).initialize(EbtAtomicCounter, (yylsp[0]));
        }

        break;

        case 231:

        {
            (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
        }

        break;

        case 232:

        {
            // This is for user defined type names. The lexical phase looked up the type.
            const TStructure *structure = static_cast<const TStructure *>((yyvsp[0].lex).symbol);
            (yyval.interm.typeSpecifierNonArray).initializeStruct(structure, false, (yylsp[0]));
        }

        break;

        case 233:

        {
            context->enterStructDeclaration((yylsp[-1]), ImmutableString((yyvsp[-1].lex).string));
        }

        break;

        case 234:

        {
            (yyval.interm.typeSpecifierNonArray) = context->addStructure(
                (yylsp[-5]), (yylsp[-4]), ImmutableString((yyvsp[-4].lex).string),
                (yyvsp[-1].interm.fieldList));
        }

        break;

        case 235:

        {
            context->enterStructDeclaration((yylsp[0]), kEmptyImmutableString);
        }

        break;

        case 236:

        {
            (yyval.interm.typeSpecifierNonArray) = context->addStructure(
                (yylsp[-4]), (yyloc), kEmptyImmutableString, (yyvsp[-1].interm.fieldList));
        }

        break;

        case 237:

        {
            (yyval.interm.fieldList) =
                context->addStructFieldList((yyvsp[0].interm.fieldList), (yylsp[0]));
        }

        break;

        case 238:

        {
            (yyval.interm.fieldList) = context->combineStructFieldLists(
                (yyvsp[-1].interm.fieldList), (yyvsp[0].interm.fieldList), (yylsp[0]));
        }

        break;

        case 239:

        {
            (yyval.interm.fieldList) = context->addStructDeclaratorList(
                (yyvsp[-2].interm.type), (yyvsp[-1].interm.declaratorList));
        }

        break;

        case 240:

        {
            // ES3 Only, but errors should be handled elsewhere
            (yyval.interm.fieldList) = context->addStructDeclaratorListWithQualifiers(
                *(yyvsp[-3].interm.typeQualifierBuilder), &(yyvsp[-2].interm.type),
                (yyvsp[-1].interm.declaratorList));
        }

        break;

        case 241:

        {
            (yyval.interm.declaratorList) = new TDeclaratorList();
            (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
        }

        break;

        case 242:

        {
            (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
        }

        break;

        case 243:

        {
            (yyval.interm.declarator) =
                context->parseStructDeclarator(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
        }

        break;

        case 244:

        {
            (yyval.interm.declarator) = context->parseStructArrayDeclarator(
                ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]), (yyvsp[0].interm.arraySizes));
        }

        break;

        case 245:

        {
            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 246:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 247:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
        }

        break;

        case 248:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 249:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 250:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 251:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 252:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch);
        }

        break;

        case 253:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase);
        }

        break;

        case 254:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 255:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 256:

        {
            (yyval.interm.intermBlock) = new TIntermBlock();
            (yyval.interm.intermBlock)->setLine((yyloc));
        }

        break;

        case 257:

        {
            context->symbolTable.push();
        }

        break;

        case 258:

        {
            context->symbolTable.pop();
        }

        break;

        case 259:

        {
            (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
            (yyval.interm.intermBlock) = (yyvsp[-2].interm.intermBlock);
        }

        break;

        case 260:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
        }

        break;

        case 261:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 262:

        {
            context->symbolTable.push();
        }

        break;

        case 263:

        {
            context->symbolTable.pop();
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
        }

        break;

        case 264:

        {
            context->symbolTable.push();
        }

        break;

        case 265:

        {
            context->symbolTable.pop();
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 266:

        {
            (yyval.interm.intermBlock) = new TIntermBlock();
            (yyval.interm.intermBlock)->setLine((yyloc));
        }

        break;

        case 267:

        {
            (yyvsp[-1].interm.intermBlock)->setLine((yyloc));
            (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
        }

        break;

        case 268:

        {
            (yyval.interm.intermBlock) = new TIntermBlock();
            context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
        }

        break;

        case 269:

        {
            (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
            context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
        }

        break;

        case 270:

        {
            (yyval.interm.intermNode) = context->addEmptyStatement((yyloc));
        }

        break;

        case 271:

        {
            (yyval.interm.intermNode) = (yyvsp[-1].interm.intermTypedNode);
        }

        break;

        case 272:

        {
            (yyval.interm.intermNode) = context->addIfElse((yyvsp[-2].interm.intermTypedNode),
                                                           (yyvsp[0].interm.nodePair), (yylsp[-4]));
        }

        break;

        case 273:

        {
            (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
            (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
        }

        break;

        case 274:

        {
            (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
            (yyval.interm.nodePair).node2 = nullptr;
        }

        break;

        case 275:

        {
            context->incrSwitchNestingLevel();
        }

        break;

        case 276:

        {
            (yyval.interm.intermSwitch) = context->addSwitch(
                (yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
            context->decrSwitchNestingLevel();
        }

        break;

        case 277:

        {
            (yyval.interm.intermCase) =
                context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
        }

        break;

        case 278:

        {
            (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
        }

        break;

        case 279:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
            context->checkIsScalarBool((yyvsp[0].interm.intermTypedNode)->getLine(),
                                       (yyvsp[0].interm.intermTypedNode));
        }

        break;

        case 280:

        {
            (yyval.interm.intermNode) = context->addConditionInitializer(
                (yyvsp[-3].interm.type), ImmutableString((yyvsp[-2].lex).string),
                (yyvsp[0].interm.intermTypedNode), (yylsp[-2]));
        }

        break;

        case 281:

        {
            context->symbolTable.push();
            context->incrLoopNestingLevel();
        }

        break;

        case 282:

        {
            context->symbolTable.pop();
            (yyval.interm.intermNode) =
                context->addLoop(ELoopWhile, 0, (yyvsp[-2].interm.intermNode), 0,
                                 (yyvsp[0].interm.intermNode), (yylsp[-5]));
            context->decrLoopNestingLevel();
        }

        break;

        case 283:

        {
            context->incrLoopNestingLevel();
        }

        break;

        case 284:

        {
            (yyval.interm.intermNode) =
                context->addLoop(ELoopDoWhile, 0, (yyvsp[-2].interm.intermTypedNode), 0,
                                 (yyvsp[-5].interm.intermNode), (yylsp[-4]));
            context->decrLoopNestingLevel();
        }

        break;

        case 285:

        {
            context->symbolTable.push();
            context->incrLoopNestingLevel();
        }

        break;

        case 286:

        {
            context->symbolTable.pop();
            (yyval.interm.intermNode) = context->addLoop(
                ELoopFor, (yyvsp[-3].interm.intermNode), (yyvsp[-2].interm.nodePair).node1,
                reinterpret_cast<TIntermTyped *>((yyvsp[-2].interm.nodePair).node2),
                (yyvsp[0].interm.intermNode), (yylsp[-6]));
            context->decrLoopNestingLevel();
        }

        break;

        case 287:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 288:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 289:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 290:

        {
            (yyval.interm.intermNode) = nullptr;
        }

        break;

        case 291:

        {
            (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode);
            (yyval.interm.nodePair).node2 = 0;
        }

        break;

        case 292:

        {
            (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
            (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
        }

        break;

        case 293:

        {
            (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
        }

        break;

        case 294:

        {
            (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
        }

        break;

        case 295:

        {
            (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
        }

        break;

        case 296:

        {
            (yyval.interm.intermNode) =
                context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
        }

        break;

        case 297:

        {
            (yyval.interm.intermNode) = context->addBranch(EOpKill, (yylsp[-1]));
        }

        break;

        case 298:

        {
            (yyval.interm.intermBlock) = new TIntermBlock();
            (yyval.interm.intermBlock)->setLine((yyloc));
            (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
            context->setTreeRoot((yyval.interm.intermBlock));
        }

        break;

        case 299:

        {
            (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
        }

        break;

        case 300:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 301:

        {
            (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
        }

        break;

        case 302:

        {
            context->parseFunctionDefinitionHeader((yylsp[0]), (yyvsp[0].interm).function,
                                                   &((yyvsp[0].interm).intermFunctionPrototype));
        }

        break;

        case 303:

        {
            (yyval.interm.intermNode) =
                context->addFunctionDefinition((yyvsp[-2].interm).intermFunctionPrototype,
                                               (yyvsp[0].interm.intermBlock), (yylsp[-2]));
        }

        break;

        default:
            break;
    }
    /* User semantic actions sometimes alter yychar, and that requires
       that yytoken be updated with the new translation.  We take the
       approach of translating immediately before every use of yytoken.
       One alternative is translating here after every semantic action,
       but that translation would be missed if the semantic action invokes
       YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
       if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
       incorrect destructor might then be invoked immediately.  In the
       case of YYERROR or YYBACKUP, subsequent parser actions might lead
       to an incorrect destructor call or verbose syntax error message
       before the lookahead is translated.  */
    YY_SYMBOL_PRINT("-> $$ =", yyr1[yyn], &yyval, &yyloc);

    YYPOPSTACK(yylen);
    yylen = 0;
    YY_STACK_PRINT(yyss, yyssp);

    *++yyvsp = yyval;
    *++yylsp = yyloc;

    /* Now 'shift' the result of the reduction.  Determine what state
       that goes to, based on the state we popped back to and the rule
       number reduced by.  */
    {
        const int yylhs = yyr1[yyn] - YYNTOKENS;
        const int yyi   = yypgoto[yylhs] + *yyssp;
        yystate =
            (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]);
    }

    goto yynewstate;

/*--------------------------------------.
| yyerrlab -- here on detecting error.  |
`--------------------------------------*/
yyerrlab:
    /* Make sure we have latest lookahead translation.  See comments at
       user semantic actions for why this is necessary.  */
    yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE(yychar);

    /* If not already recovering from an error, report this error.  */
    if (!yyerrstatus)
    {
        ++yynerrs;
#if !YYERROR_VERBOSE
        yyerror(&yylloc, context, scanner, YY_("syntax error"));
#else
#    define YYSYNTAX_ERROR yysyntax_error(&yymsg_alloc, &yymsg, yyssp, yytoken)
        {
            char const *yymsgp = YY_("syntax error");
            int yysyntax_error_status;
            yysyntax_error_status = YYSYNTAX_ERROR;
            if (yysyntax_error_status == 0)
                yymsgp = yymsg;
            else if (yysyntax_error_status == 1)
            {
                if (yymsg != yymsgbuf)
                    YYSTACK_FREE(yymsg);
                yymsg = (char *)YYSTACK_ALLOC(yymsg_alloc);
                if (!yymsg)
                {
                    yymsg                 = yymsgbuf;
                    yymsg_alloc           = sizeof yymsgbuf;
                    yysyntax_error_status = 2;
                }
                else
                {
                    yysyntax_error_status = YYSYNTAX_ERROR;
                    yymsgp                = yymsg;
                }
            }
            yyerror(&yylloc, context, scanner, yymsgp);
            if (yysyntax_error_status == 2)
                goto yyexhaustedlab;
        }
#    undef YYSYNTAX_ERROR
#endif
    }

    yyerror_range[1] = yylloc;

    if (yyerrstatus == 3)
    {
        /* If just tried and failed to reuse lookahead token after an
           error, discard it.  */

        if (yychar <= YYEOF)
        {
            /* Return failure if at end of input.  */
            if (yychar == YYEOF)
                YYABORT;
        }
        else
        {
            yydestruct("Error: discarding", yytoken, &yylval, &yylloc, context, scanner);
            yychar = YYEMPTY;
        }
    }

    /* Else will try to reuse lookahead token after shifting the error
       token.  */
    goto yyerrlab1;

/*---------------------------------------------------.
| yyerrorlab -- error raised explicitly by YYERROR.  |
`---------------------------------------------------*/
yyerrorlab:
    /* Pacify compilers when the user code never invokes YYERROR and the
       label yyerrorlab therefore never appears in user code.  */
    if (0)
        YYERROR;

    /* Do not reclaim the symbols of the rule whose action triggered
       this YYERROR.  */
    YYPOPSTACK(yylen);
    yylen = 0;
    YY_STACK_PRINT(yyss, yyssp);
    yystate = *yyssp;
    goto yyerrlab1;

/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
`-------------------------------------------------------------*/
yyerrlab1:
    yyerrstatus = 3; /* Each real token shifted decrements this.  */

    for (;;)
    {
        yyn = yypact[yystate];
        if (!yypact_value_is_default(yyn))
        {
            yyn += YYTERROR;
            if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
            {
                yyn = yytable[yyn];
                if (0 < yyn)
                    break;
            }
        }

        /* Pop the current state because it cannot handle the error token.  */
        if (yyssp == yyss)
            YYABORT;

        yyerror_range[1] = *yylsp;
        yydestruct("Error: popping", yystos[yystate], yyvsp, yylsp, context, scanner);
        YYPOPSTACK(1);
        yystate = *yyssp;
        YY_STACK_PRINT(yyss, yyssp);
    }

    YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    *++yyvsp = yylval;
    YY_IGNORE_MAYBE_UNINITIALIZED_END

    yyerror_range[2] = yylloc;
    /* Using YYLLOC is tempting, but would change the location of
       the lookahead.  YYLOC is available though.  */
    YYLLOC_DEFAULT(yyloc, yyerror_range, 2);
    *++yylsp = yyloc;

    /* Shift the error token.  */
    YY_SYMBOL_PRINT("Shifting", yystos[yyn], yyvsp, yylsp);

    yystate = yyn;
    goto yynewstate;

/*-------------------------------------.
| yyacceptlab -- YYACCEPT comes here.  |
`-------------------------------------*/
yyacceptlab:
    yyresult = 0;
    goto yyreturn;

/*-----------------------------------.
| yyabortlab -- YYABORT comes here.  |
`-----------------------------------*/
yyabortlab:
    yyresult = 1;
    goto yyreturn;

#if !defined yyoverflow || YYERROR_VERBOSE
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here.  |
`-------------------------------------------------*/
yyexhaustedlab:
    yyerror(&yylloc, context, scanner, YY_("memory exhausted"));
    yyresult = 2;
    /* Fall through.  */
#endif

/*-----------------------------------------------------.
| yyreturn -- parsing is finished, return the result.  |
`-----------------------------------------------------*/
yyreturn:
    if (yychar != YYEMPTY)
    {
        /* Make sure we have latest lookahead translation.  See comments at
           user semantic actions for why this is necessary.  */
        yytoken = YYTRANSLATE(yychar);
        yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, context, scanner);
    }
    /* Do not reclaim the symbols of the rule whose action triggered
       this YYABORT or YYACCEPT.  */
    YYPOPSTACK(yylen);
    YY_STACK_PRINT(yyss, yyssp);
    while (yyssp != yyss)
    {
        yydestruct("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp, context, scanner);
        YYPOPSTACK(1);
    }
#ifndef yyoverflow
    if (yyss != yyssa)
        YYSTACK_FREE(yyss);
#endif
#if YYERROR_VERBOSE
    if (yymsg != yymsgbuf)
        YYSTACK_FREE(yymsg);
#endif
    return yyresult;
}

int glslang_parse(TParseContext *context)
{
    return yyparse(context, context->getScanner());
}
