Changeset 2162c2c


Ignore:
Timestamp:
Jan 11, 2017, 4:11:02 PM (7 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
075734f
Parents:
bb82c03 (diff), d3a85240 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src
Files:
2 added
56 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    rbb82c03 r2162c2c  
    656656        }
    657657
    658         void CodeGenerator::visit( TupleExpr * tupleExpr ) { assert( false ); }
     658        void CodeGenerator::visit( UntypedTupleExpr * tupleExpr ) { assertf( false, "UntypedTupleExpr should not make it to Code Gen" ); }
     659
     660        void CodeGenerator::visit( TupleExpr * tupleExpr ) { assertf( false, "TupleExpr should not make it to Code Gen" ); }
    659661
    660662        void CodeGenerator::visit( TypeExpr * typeExpr ) {}
  • src/CodeGen/CodeGenerator.h

    rbb82c03 r2162c2c  
    7272                virtual void visit( CommaExpr *commaExpr );
    7373                virtual void visit( CompoundLiteralExpr *compLitExpr );
     74                virtual void visit( UntypedTupleExpr *tupleExpr );
    7475                virtual void visit( TupleExpr *tupleExpr );
    7576                virtual void visit( TypeExpr *typeExpr );
  • src/CodeGen/GenType.cc

    rbb82c03 r2162c2c  
    4141                virtual void visit( EnumInstType *enumInst );
    4242                virtual void visit( TypeInstType *typeInst );
     43                virtual void visit( TupleType * tupleType );
    4344                virtual void visit( VarArgsType *varArgsType );
    4445                virtual void visit( ZeroType *zeroType );
     
    197198        }
    198199
     200        void GenType::visit( TupleType * tupleType ) {
     201                assertf( ! mangle, "Tuple types should not make it to Code Gen." );
     202                Visitor::visit( tupleType );
     203        }
     204
    199205        void GenType::visit( VarArgsType *varArgsType ) {
    200206                typeString = "__builtin_va_list " + typeString;
  • src/GenPoly/Box.cc

    rbb82c03 r2162c2c  
    136136                        template< typename DeclClass >
    137137                        DeclClass *handleDecl( DeclClass *decl, Type *type );
    138 
    139                         using PolyMutator::mutate;
     138                        template< typename AggDecl >
     139                        AggDecl * handleAggDecl( AggDecl * aggDecl );
     140
     141                        typedef PolyMutator Parent;
     142                        using Parent::mutate;
    140143                        virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
    141144                        virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) override;
     145                        virtual StructDecl *mutate( StructDecl *structDecl ) override;
     146                        virtual UnionDecl *mutate( UnionDecl *unionDecl ) override;
    142147                        virtual TypeDecl *mutate( TypeDecl *typeDecl ) override;
    143148                        virtual TypedefDecl *mutate( TypedefDecl *typedefDecl ) override;
     
    686691                        for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
    687692                                TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    688                                 assert(paramType && "Aggregate parameters should be type expressions");
     693                                assertf(paramType, "Aggregate parameters should be type expressions");
    689694                                paramType->set_type( replaceWithConcrete( appExpr, paramType->get_type(), false ) );
    690695                        }
     
    783788                void Pass1::boxParams( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars ) {
    784789                        for ( std::list< DeclarationWithType *>::const_iterator param = function->get_parameters().begin(); param != function->get_parameters().end(); ++param, ++arg ) {
    785                                 assert( arg != appExpr->get_args().end() );
     790                                assertf( arg != appExpr->get_args().end(), "boxParams: missing argument for param %s to %s in %s", toString( *param ).c_str(), toString( function ).c_str(), toString( appExpr ).c_str() );
    786791                                addCast( *arg, (*param)->get_type(), exprTyVars );
    787792                                boxParam( (*param)->get_type(), *arg, exprTyVars );
     
    11271132                        makeTyVarMap( function, exprTyVars ); // xxx - should this take into account the variables already bound in scopeTyVars (i.e. remove them from exprTyVars?)
    11281133                        ReferenceToType *dynRetType = isDynRet( function, exprTyVars );
    1129                         Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result();// ?: dynRetType; // xxx - is concRetType a good name?
    1130 
     1134
     1135                        // NOTE: addDynRetParam needs to know the actual (generated) return type so it can make a temp variable, so pass the result type from the appExpr
     1136                        // passTypeVars needs to know the program-text return type (i.e. the distinction between _conc_T30 and T3(int))
     1137                        // concRetType may not be a good name in one or both of these places. A more appropriate name change is welcome.
    11311138                        if ( dynRetType ) {
     1139                                Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result();
    11321140                                ret = addDynRetParam( appExpr, function, concRetType, arg ); // xxx - used to use dynRetType instead of concRetType
    11331141                        } else if ( needsAdapter( function, scopeTyVars ) && ! needsAdapter( function, exprTyVars) ) { // xxx - exprTyVars is used above...?
     
    11421150                        arg = appExpr->get_args().begin();
    11431151
     1152                        Type *concRetType = replaceWithConcrete( appExpr, dynRetType );
    11441153                        passTypeVars( appExpr, concRetType, arg, exprTyVars ); // xxx - used to use dynRetType instead of concRetType; this changed so that the correct type paramaters are passed for return types (it should be the concrete type's parameters, not the formal type's)
    11451154                        addInferredParams( appExpr, function, arg, exprTyVars );
     
    12711280                template< typename DeclClass >
    12721281                DeclClass * Pass2::handleDecl( DeclClass *decl, Type *type ) {
    1273                         DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
     1282                        DeclClass *ret = static_cast< DeclClass *>( Parent::mutate( decl ) );
    12741283
    12751284                        return ret;
     
    13051314                }
    13061315
     1316                template< typename AggDecl >
     1317                AggDecl * Pass2::handleAggDecl( AggDecl * aggDecl ) {
     1318                        // prevent tyVars from leaking into containing scope
     1319                        scopeTyVars.beginScope();
     1320                        Parent::mutate( aggDecl );
     1321                        scopeTyVars.endScope();
     1322                        return aggDecl;
     1323                }
     1324
     1325                StructDecl * Pass2::mutate( StructDecl *aggDecl ) {
     1326                        return handleAggDecl( aggDecl );
     1327                }
     1328
     1329                UnionDecl * Pass2::mutate( UnionDecl *aggDecl ) {
     1330                        return handleAggDecl( aggDecl );
     1331                }
     1332
    13071333                TypeDecl * Pass2::mutate( TypeDecl *typeDecl ) {
    13081334                        addToTyVarMap( typeDecl, scopeTyVars );
     
    13101336                                return handleDecl( typeDecl, typeDecl->get_base() );
    13111337                        } else {
    1312                                 return Mutator::mutate( typeDecl );
     1338                                return Parent::mutate( typeDecl );
    13131339                        }
    13141340                }
     
    13221348                        makeTyVarMap( pointerType, scopeTyVars );
    13231349
    1324                         Type *ret = Mutator::mutate( pointerType );
     1350                        Type *ret = Parent::mutate( pointerType );
    13251351
    13261352                        scopeTyVars.endScope();
  • src/GenPoly/InstantiateGeneric.cc

    rbb82c03 r2162c2c  
    1818#include <utility>
    1919#include <vector>
     20#include <unordered_map>
    2021
    2122#include "InstantiateGeneric.h"
     
    2425#include "GenPoly.h"
    2526#include "ScopedSet.h"
     27#include "PolyMutator.h"
    2628
    2729#include "ResolvExpr/typeops.h"
     
    146148        }
    147149
     150        // collect the environments of each TypeInstType so that type variables can be replaced
     151        // xxx - possibly temporary solution. Access to type environments is required in GenericInstantiator, but it needs to be a DeclMutator which does not provide easy access to the type environments.
     152        class EnvFinder final : public GenPoly::PolyMutator {
     153        public:
     154                virtual Type * mutate( TypeInstType * inst ) override {
     155                        if ( env ) envMap[inst] = env;
     156                        return inst;
     157                }
     158
     159                // don't want to associate an environment with TypeInstTypes that occur in function types - this may actually only apply to function types belonging to DeclarationWithTypes (or even just FunctionDecl)?
     160                virtual Type * mutate( FunctionType * ftype ) override {
     161                        return ftype;
     162                }
     163                std::unordered_map< ReferenceToType *, TypeSubstitution * > envMap;
     164        };
     165
    148166        /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
    149167        class GenericInstantiator final : public DeclMutator {
     
    154172                /// Namer for concrete types
    155173                UniqueName typeNamer;
    156 
     174                /// Reference to mapping of environments
     175                const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap;
    157176        public:
    158                 GenericInstantiator() : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_") {}
     177                GenericInstantiator( const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap ) : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_"), envMap( envMap ) {}
    159178
    160179                using DeclMutator::mutate;
     
    174193                void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
    175194
     195                void replaceParametersWithConcrete( std::list< Expression* >& params );
     196                Type *replaceWithConcrete( Type *type, bool doClone );
     197
    176198                /// Strips a dtype-static aggregate decl of its type parameters, marks it as stripped
    177199                void stripDtypeParams( AggregateDecl *base, std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs );
     
    179201
    180202        void instantiateGeneric( std::list< Declaration* > &translationUnit ) {
    181                 GenericInstantiator instantiator;
     203                EnvFinder finder;
     204                mutateAll( translationUnit, finder );
     205                GenericInstantiator instantiator( finder.envMap );
    182206                instantiator.mutateDeclarationList( translationUnit );
    183207        }
     
    209233                                // can pretend that any ftype is `void (*)(void)`
    210234                                out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
     235                                break;
     236                        case TypeDecl::Ttype:
     237                                assertf( false, "Ttype parameters are not currently allowed as parameters to generic types." );
    211238                                break;
    212239                        }
     
    253280        }
    254281
     282        /// xxx - more or less copied from box -- these should be merged with those somehow...
     283        void GenericInstantiator::replaceParametersWithConcrete( std::list< Expression* >& params ) {
     284                for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
     285                        TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
     286                        assertf(paramType, "Aggregate parameters should be type expressions");
     287                        paramType->set_type( replaceWithConcrete( paramType->get_type(), false ) );
     288                }
     289        }
     290
     291        Type *GenericInstantiator::replaceWithConcrete( Type *type, bool doClone ) {
     292                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) {
     293                        if ( envMap.count( typeInst ) ) {
     294                                TypeSubstitution * env = envMap.at( typeInst );
     295                                Type *concrete = env->lookup( typeInst->get_name() );
     296                                if ( concrete ) {
     297                                        return concrete->clone();
     298                                }
     299                                else return typeInst->clone();
     300                        }
     301                } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
     302                        if ( doClone ) {
     303                                structType = structType->clone();
     304                        }
     305                        replaceParametersWithConcrete( structType->get_parameters() );
     306                        return structType;
     307                } else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
     308                        if ( doClone ) {
     309                                unionType = unionType->clone();
     310                        }
     311                        replaceParametersWithConcrete( unionType->get_parameters() );
     312                        return unionType;
     313                }
     314                return type;
     315        }
     316
     317
    255318        Type* GenericInstantiator::mutate( StructInstType *inst ) {
    256319                // mutate subtypes
     
    262325                if ( inst->get_parameters().empty() ) return inst;
    263326
     327                // need to replace type variables to ensure that generic types are instantiated for the return values of polymorphic functions (in particular, for thunks, because they are not [currently] copy constructed).
     328                replaceWithConcrete( inst, false );
     329
    264330                // check for an already-instantiatiated dtype-static type
    265331                if ( dtypeStatics.find( inst->get_baseStruct() ) != dtypeStatics.end() ) {
     
    269335
    270336                // check if type can be concretely instantiated; put substitutions into typeSubs
    271                 assert( inst->get_baseParameters() && "Base struct has parameters" );
     337                assertf( inst->get_baseParameters(), "Base struct has parameters" );
    272338                std::list< TypeExpr* > typeSubs;
    273339                genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
  • src/GenPoly/ScrubTyVars.cc

    rbb82c03 r2162c2c  
    3131                          case TypeDecl::Any:
    3232                          case TypeDecl::Dtype:
     33                          case TypeDecl::Ttype:
    3334                                {
    3435                                        PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) );
  • src/GenPoly/Specialize.cc

    rbb82c03 r2162c2c  
    3232#include "Common/utility.h"
    3333#include "InitTweak/InitTweak.h"
     34#include "Tuples/Tuples.h"
    3435
    3536namespace GenPoly {
    36         const std::list<Label> noLabels;
    37 
     37        class Specializer;
    3838        class Specialize final : public PolyMutator {
     39                friend class Specializer;
    3940          public:
    40                 Specialize( std::string paramPrefix = "_p" );
    41 
    4241                using PolyMutator::mutate;
    4342                virtual Expression * mutate( ApplicationExpr *applicationExpr ) override;
     
    4847                // virtual Expression * mutate( CommaExpr *commaExpr );
    4948
    50           private:
    51                 Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams = 0 );
    52                 Expression *doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = 0 );
     49                Specializer * specializer = nullptr;
    5350                void handleExplicitParams( ApplicationExpr *appExpr );
    54 
    55                 UniqueName thunkNamer;
    56                 std::string paramPrefix;
    5751        };
    5852
    59         void convertSpecializations( std::list< Declaration* >& translationUnit ) {
    60                 Specialize specializer;
    61                 mutateAll( translationUnit, specializer );
    62         }
    63 
    64         Specialize::Specialize( std::string paramPrefix )
    65                 : thunkNamer( "_thunk" ), paramPrefix( paramPrefix ) {
    66         }
     53        class Specializer {
     54          public:
     55                Specializer( Specialize & spec ) : spec( spec ), env( spec.env ), stmtsToAdd( spec.stmtsToAdd ) {}
     56                virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) = 0;
     57                virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) = 0;
     58                virtual Expression *doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = 0 );
     59
     60          protected:
     61                Specialize & spec;
     62                std::string paramPrefix = "_p";
     63                TypeSubstitution *& env;
     64                std::list< Statement * > & stmtsToAdd;
     65        };
     66
     67        // for normal polymorphic -> monomorphic function conversion
     68        class PolySpecializer : public Specializer {
     69          public:
     70                PolySpecializer( Specialize & spec ) : Specializer( spec ) {}
     71                virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) override;
     72                virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) override;
     73        };
     74
     75        // // for tuple -> non-tuple function conversion
     76        class TupleSpecializer : public Specializer {
     77          public:
     78                TupleSpecializer( Specialize & spec ) : Specializer( spec ) {}
     79                virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) override;
     80                virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) override;
     81        };
    6782
    6883        /// Looks up open variables in actual type, returning true if any of them are bound in the environment or formal type.
    69         bool needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
     84        bool PolySpecializer::needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
    7085                if ( env ) {
    7186                        using namespace ResolvExpr;
     
    92107
    93108        /// Generates a thunk that calls `actual` with type `funType` and returns its address
    94         Expression * Specialize::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     109        Expression * PolySpecializer::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     110                static UniqueName thunkNamer( "_thunk" );
     111
    95112                FunctionType *newType = funType->clone();
    96113                if ( env ) {
    97                         TypeSubstitution newEnv( *env );
    98114                        // it is important to replace only occurrences of type variables that occur free in the
    99115                        // thunk's type
    100                         newEnv.applyFree( newType );
     116                        env->applyFree( newType );
    101117                } // if
    102118                // create new thunk with same signature as formal type (C linkage, empty body)
     
    125141                std::list< Statement* > oldStmts;
    126142                oldStmts.splice( oldStmts.end(), stmtsToAdd );
    127                 handleExplicitParams( appExpr );
     143                spec.handleExplicitParams( appExpr );
    128144                paramPrefix = oldParamPrefix;
    129145                // write any statements added for recursive specializations into the thunk body
     
    147163        }
    148164
    149         Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
     165        Expression * Specializer::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
    150166                assertf( actual->has_result(), "attempting to specialize an untyped expression" );
    151167                if ( needsSpecialization( formalType, actual->get_result(), env ) ) {
    152                         FunctionType *funType;
    153                         if ( ( funType = getFunctionType( formalType ) ) ) {
     168                        if ( FunctionType *funType = getFunctionType( formalType ) ) {
    154169                                ApplicationExpr *appExpr;
    155170                                VariableExpr *varExpr;
     
    170185        }
    171186
     187        bool TupleSpecializer::needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
     188                if ( FunctionType * ftype = getFunctionType( formalType ) ) {
     189                        return ftype->isTtype();
     190                }
     191                return false;
     192        }
     193
     194        /// restructures arg to match the structure of a single formal parameter. Assumes that atomic types are compatible (as the Resolver should have ensured this)
     195        template< typename OutIterator >
     196        void matchOneFormal( Expression * arg, unsigned & idx, Type * formal, OutIterator out ) {
     197                if ( TupleType * tupleType = dynamic_cast< TupleType * >( formal ) ) {
     198                        std::list< Expression * > exprs;
     199                        for ( Type * t : *tupleType ) {
     200                                matchOneFormal( arg, idx, t, back_inserter( exprs ) );
     201                        }
     202                        *out++ = new TupleExpr( exprs );
     203                } else {
     204                        *out++ = new TupleIndexExpr( arg->clone(), idx++ );
     205                }
     206        }
     207
     208        /// restructures the ttype argument to match the structure of the formal parameters of the actual function.
     209        // [begin, end) are the formal parameters.
     210        // args is the list of arguments currently given to the actual function, the last of which needs to be restructured.
     211        template< typename Iterator, typename OutIterator >
     212        void fixLastArg( Expression * last, Iterator begin, Iterator end, OutIterator out ) {
     213                // safe_dynamic_cast for the assertion
     214                safe_dynamic_cast< TupleType * >( last->get_result() );
     215                unsigned idx = 0;
     216                for ( ; begin != end; ++begin ) {
     217                        DeclarationWithType * formal = *begin;
     218                        Type * formalType = formal->get_type();
     219                        matchOneFormal( last, idx, formalType, out );
     220                }
     221                delete last;
     222        }
     223
     224        Expression * TupleSpecializer::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     225                static UniqueName thunkNamer( "_tupleThunk" );
     226
     227                FunctionType *newType = funType->clone();
     228                if ( env ) {
     229                        // it is important to replace only occurrences of type variables that occur free in the
     230                        // thunk's type
     231                        env->applyFree( newType );
     232                } // if
     233                // create new thunk with same signature as formal type (C linkage, empty body)
     234                FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ), false, false );
     235                thunkFunc->fixUniqueId();
     236
     237                // thunks may be generated and not used - silence warning with attribute
     238                thunkFunc->get_attributes().push_back( new Attribute( "unused" ) );
     239
     240                // thread thunk parameters into call to actual function, naming thunk parameters as we go
     241                UniqueName paramNamer( paramPrefix );
     242                ApplicationExpr *appExpr = new ApplicationExpr( actual );
     243
     244                FunctionType * actualType = getFunctionType( actual->get_result() )->clone();
     245                if ( env ) {
     246                        // need to apply the environment to the actual function's type, since it may itself be polymorphic
     247                        env->apply( actualType );
     248                }
     249                std::unique_ptr< FunctionType > actualTypeManager( actualType ); // for RAII
     250                std::list< DeclarationWithType * >::iterator actualBegin = actualType->get_parameters().begin();
     251                std::list< DeclarationWithType * >::iterator actualEnd = actualType->get_parameters().end();
     252                std::list< DeclarationWithType * >::iterator formalBegin = funType->get_parameters().begin();
     253                std::list< DeclarationWithType * >::iterator formalEnd = funType->get_parameters().end();
     254
     255                Expression * last = nullptr;
     256                for ( DeclarationWithType* param : thunkFunc->get_functionType()->get_parameters() ) {
     257                        // walk the parameters to the actual function alongside the parameters to the thunk to find the location where the ttype parameter begins to satisfy parameters in the actual function.
     258                        param->set_name( paramNamer.newName() );
     259                        assertf( formalBegin != formalEnd, "Reached end of formal parameters before finding ttype parameter" );
     260                        if ( Tuples::isTtype((*formalBegin)->get_type()) ) {
     261                                last = new VariableExpr( param );
     262                                break;
     263                        }
     264                        assertf( actualBegin != actualEnd, "reached end of actual function's arguments before finding ttype parameter" );
     265                        ++actualBegin;
     266                        ++formalBegin;
     267
     268                        appExpr->get_args().push_back( new VariableExpr( param ) );
     269                } // for
     270                assert( last );
     271                fixLastArg( last, actualBegin, actualEnd, back_inserter( appExpr->get_args() ) );
     272                appExpr->set_env( maybeClone( env ) );
     273                if ( inferParams ) {
     274                        appExpr->get_inferParams() = *inferParams;
     275                } // if
     276
     277                // handle any specializations that may still be present
     278                std::string oldParamPrefix = paramPrefix;
     279                paramPrefix += "p";
     280                // save stmtsToAdd in oldStmts
     281                std::list< Statement* > oldStmts;
     282                oldStmts.splice( oldStmts.end(), stmtsToAdd );
     283                spec.mutate( appExpr );
     284                paramPrefix = oldParamPrefix;
     285                // write any statements added for recursive specializations into the thunk body
     286                thunkFunc->get_statements()->get_kids().splice( thunkFunc->get_statements()->get_kids().end(), stmtsToAdd );
     287                // restore oldStmts into stmtsToAdd
     288                stmtsToAdd.splice( stmtsToAdd.end(), oldStmts );
     289
     290                // add return (or valueless expression) to the thunk
     291                Statement *appStmt;
     292                if ( funType->get_returnVals().empty() ) {
     293                        appStmt = new ExprStmt( noLabels, appExpr );
     294                } else {
     295                        appStmt = new ReturnStmt( noLabels, appExpr );
     296                } // if
     297                thunkFunc->get_statements()->get_kids().push_back( appStmt );
     298
     299                // add thunk definition to queue of statements to add
     300                stmtsToAdd.push_back( new DeclStmt( noLabels, thunkFunc ) );
     301                // return address of thunk function as replacement expression
     302                return new AddressExpr( new VariableExpr( thunkFunc ) );
     303        }
     304
    172305        void Specialize::handleExplicitParams( ApplicationExpr *appExpr ) {
    173306                // create thunks for the explicit parameters
     
    178311                std::list< Expression* >::iterator actual;
    179312                for ( formal = function->get_parameters().begin(), actual = appExpr->get_args().begin(); formal != function->get_parameters().end() && actual != appExpr->get_args().end(); ++formal, ++actual ) {
    180                         *actual = doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
     313                        *actual = specializer->doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
    181314                }
    182315        }
     
    190323                        // don't need to do this for intrinsic calls, because they aren't actually passed
    191324                        for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
    192                                 inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
     325                                inferParam->second.expr = specializer->doSpecialization( inferParam->second.formalType, inferParam->second.expr, inferParam->second.inferParams.get() );
    193326                        }
    194 
    195327                        handleExplicitParams( appExpr );
    196328                }
    197 
    198329                return appExpr;
    199330        }
     
    202333                addrExpr->get_arg()->acceptMutator( *this );
    203334                assert( addrExpr->has_result() );
    204                 addrExpr->set_arg( doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
     335                addrExpr->set_arg( specializer->doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
    205336                return addrExpr;
    206337        }
     
    212343                        return castExpr;
    213344                }
    214                 Expression *specialized = doSpecialization( castExpr->get_result(), castExpr->get_arg() );
     345                Expression *specialized = specializer->doSpecialization( castExpr->get_result(), castExpr->get_arg() );
    215346                if ( specialized != castExpr->get_arg() ) {
    216347                        // assume here that the specialization incorporates the cast
     
    236367        //      return commaExpr;
    237368        // }
     369
     370        void convertSpecializations( std::list< Declaration* >& translationUnit ) {
     371                Specialize spec;
     372
     373                TupleSpecializer tupleSpec( spec );
     374                spec.specializer = &tupleSpec;
     375                mutateAll( translationUnit, spec );
     376
     377                PolySpecializer polySpec( spec );
     378                spec.specializer = &polySpec;
     379                mutateAll( translationUnit, spec );
     380        }
    238381} // namespace GenPoly
    239382
  • src/InitTweak/FixInit.cc

    rbb82c03 r2162c2c  
    3838#include "SynTree/AddStmtVisitor.h"
    3939#include "CodeGen/GenType.h"  // for warning/error messages
     40#include "Tuples/Tuples.h"
    4041
    4142bool ctordtorp = false; // print all debug
     
    392393
    393394                bool ResolveCopyCtors::skipCopyConstruct( Type * type ) {
    394                         return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type );
     395                        return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type );
    395396                }
    396397
     
    10991100                        addDeclaration( tmp );
    11001101
     1102                        // xxx - this can be TupleAssignExpr now. Need to properly handle this case.
    11011103                        ApplicationExpr * callExpr = safe_dynamic_cast< ApplicationExpr * > ( ctorExpr->get_callExpr() );
    11021104                        TypeSubstitution * env = ctorExpr->get_env();
  • src/InitTweak/InitTweak.cc

    rbb82c03 r2162c2c  
    487487                virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
    488488                virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
     489                virtual void visit( UntypedTupleExpr *tupleExpr ) { isConstExpr = false; }
    489490                virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
    490491                virtual void visit( TupleAssignExpr *tupleExpr ) { isConstExpr = false; }
  • src/Parser/DeclarationNode.cc

    rbb82c03 r2162c2c  
    948948//      if ( variable.name ) {
    949949        if ( variable.tyClass != NoTypeClass ) {
    950                 static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
     950                static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Dtype, TypeDecl::Ftype, TypeDecl::Ttype };
     951                assertf( sizeof(kindMap)/sizeof(kindMap[0] == NoTypeClass-1), "DeclarationNode::build: kindMap is out of sync." );
     952                assertf( variable.tyClass < sizeof(kindMap)/sizeof(kindMap[0]), "Variable's tyClass is out of bounds." );
    951953//              TypeDecl * ret = new TypeDecl( *variable.name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
    952954                TypeDecl * ret = new TypeDecl( *name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
  • src/Parser/ExpressionNode.cc

    rbb82c03 r2162c2c  
    323323
    324324Expression *build_tuple( ExpressionNode * expr_node ) {
    325         TupleExpr *ret = new TupleExpr();
    326         buildMoveList( expr_node, ret->get_exprs() );
    327         return ret;
     325        std::list< Expression * > exprs;
     326        buildMoveList( expr_node, exprs );
     327        return new UntypedTupleExpr( exprs );;
    328328}
    329329
  • src/Parser/ParseNode.h

    rbb82c03 r2162c2c  
    204204        enum Length { Short, Long, LongLong, NoLength };
    205205        enum Aggregate { Struct, Union, Trait, NoAggregate };
    206         enum TypeClass { Otype, Dtype, Ftype, NoTypeClass };
     206        enum TypeClass { Otype, Dtype, Ftype, Ttype, NoTypeClass };
    207207        enum BuiltinType { Valist, Zero, One, NoBuiltinType };
    208208
  • src/Parser/lex.cc

    rbb82c03 r2162c2c  
    382382        (yy_c_buf_p) = yy_cp;
    383383
    384 #define YY_NUM_RULES 185
    385 #define YY_END_OF_BUFFER 186
     384#define YY_NUM_RULES 186
     385#define YY_END_OF_BUFFER 187
    386386/* This struct is not used in this scanner,
    387387   but its presence is necessary. */
     
    391391        flex_int32_t yy_nxt;
    392392        };
    393 static yyconst flex_int16_t yy_accept[905] =
     393static yyconst flex_int16_t yy_accept[909] =
    394394    {   0,
    395         0,    0,    0,    0,    0,    0,  120,  120,  123,  123,
    396       186,  184,    7,    9,    8,  143,  122,  105,  148,  151,
    397       119,  130,  131,  146,  144,  134,  145,  137,  147,  110,
    398       111,  112,  135,  136,  153,  155,  154,  156,  184,  105,
    399       128,  184,  129,  149,  105,  107,  105,  105,  105,  105,
    400       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    401       105,  105,  105,  132,  152,  133,  150,    7,  184,    4,
    402         4,  185,  108,  185,  109,  120,  121,  127,  123,  124,
    403         7,    9,    0,    8,  160,  179,  105,    0,  172,  142,
    404       165,  173,  170,  157,  168,  158,  169,  167,    0,  116,
    405 
    406         3,    0,  171,  115,  113,    0,    0,  113,  113,    0,
    407         0,  113,  112,  112,  112,    0,  112,  140,  141,  139,
    408       161,  163,  159,  164,  162,    0,    0,    0,    0,    0,
     395        0,    0,    0,    0,    0,    0,  121,  121,  124,  124,
     396      187,  185,    7,    9,    8,  144,  123,  106,  149,  152,
     397      120,  131,  132,  147,  145,  135,  146,  138,  148,  111,
     398      112,  113,  136,  137,  154,  156,  155,  157,  185,  106,
     399      129,  185,  130,  150,  106,  108,  106,  106,  106,  106,
     400      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     401      106,  106,  106,  133,  153,  134,  151,    7,  185,    4,
     402        4,  186,  109,  186,  110,  121,  122,  128,  124,  125,
     403        7,    9,    0,    8,  161,  180,  106,    0,  173,  143,
     404      166,  174,  171,  158,  169,  159,  170,  168,    0,  117,
     405
     406        3,    0,  172,  116,  114,    0,    0,  114,  114,    0,
     407        0,  114,  113,  113,  113,    0,  113,  141,  142,  140,
     408      162,  164,  160,  165,  163,    0,    0,    0,    0,    0,
    409409        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    410       106,  178,    0,  122,  119,  105,    0,    0,  175,    0,
    411       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    412       105,  105,  105,  105,  105,  105,  105,   38,  105,  105,
    413       105,  105,  105,  105,  105,  105,  105,  105,   57,  105,
    414       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    415       105,  105,  105,  105,  105,  105,  105,  174,  166,    7,
    416 
    417         0,    0,    0,    2,    0,    5,  108,    0,    0,    0,
    418       120,    0,  126,  125,  125,    0,    0,    0,  123,    0,
     410      107,  179,    0,  123,  120,  106,    0,    0,  176,    0,
     411      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     412      106,  106,  106,  106,  106,  106,  106,   38,  106,  106,
     413      106,  106,  106,  106,  106,  106,  106,  106,   57,  106,
     414      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     415      106,  106,  106,  106,  106,  106,  106,  106,  175,  167,
     416
     417        7,    0,    0,    0,    2,    0,    5,  109,    0,    0,
     418        0,  121,    0,  127,  126,  126,    0,    0,    0,  124,
    419419        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    420         0,    0,    0,    0,  138,  116,  117,    0,  117,  117,
    421         0,    0,    6,  117,  113,    0,    0,    0,  117,    0,
    422       113,  113,  113,  113,    0,  114,    0,    0,  112,  112,
    423       112,  112,    0,  176,  177,    0,  182,  180,    0,    0,
    424         0,  106,    0,    0,    0,    0,    0,    0,    0,    0,
    425       105,   17,  105,  105,  105,  105,  105,  105,  105,  105,
    426       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    427 
    428        14,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    429       105,  105,  105,  105,  105,  105,  105,  105,  105,   51,
    430       105,  105,  105,   64,  105,  105,  105,  105,  105,  105,
    431       105,  105,  105,  105,  105,  105,  105,  105,  105,   91,
    432       105,  105,  105,  105,  105,  105,  105,  105,    0,    0,
    433         0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
    434         0,    0,  125,    0,    0,  183,    0,    0,    0,    0,
    435         0,    0,    0,  117,    0,  117,    0,  117,    0,  117,
    436         0,    0,  117,    0,  113,  113,    0,    0,  114,  114,
    437         0,  114,    0,  114,  112,  112,    0,    0,    0,    0,
    438 
    439         0,    0,    0,    0,    0,    0,  181,  105,  105,  105,
    440       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    441       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    442        21,  105,   24,  105,   27,  105,  105,  105,  105,  105,
    443       105,  105,   41,  105,   43,  105,  105,  105,  105,  105,
    444       105,  105,   56,  105,   67,  105,  105,  105,  105,  105,
    445       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    446       105,  105,   99,  105,  105,  105,    0,    0,    0,    0,
     420        0,    0,    0,    0,    0,  139,  117,  118,    0,  118,
     421      118,    0,    0,    6,  118,  114,    0,    0,    0,  118,
     422        0,  114,  114,  114,  114,    0,  115,    0,    0,  113,
     423      113,  113,  113,    0,  177,  178,    0,  183,  181,    0,
     424        0,    0,  107,    0,    0,    0,    0,    0,    0,    0,
     425        0,  106,   17,  106,  106,  106,  106,  106,  106,  106,
     426      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     427
     428      106,   14,  106,  106,  106,  106,  106,  106,  106,  106,
     429      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     430       51,  106,  106,  106,   64,  106,  106,  106,  106,  106,
     431      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     432       91,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     433        0,    0,    0,    0,    0,    0,    0,    0,  126,    0,
     434        0,    0,    0,    0,  126,    0,    0,  184,    0,    0,
     435        0,    0,    0,    0,    0,  118,    0,  118,    0,  118,
     436        0,  118,    0,    0,  118,    0,  114,  114,    0,    0,
     437      115,  115,    0,  115,    0,  115,  113,  113,    0,    0,
     438
     439        0,    0,    0,    0,    0,    0,    0,    0,  182,  106,
     440      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     441      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     442      106,  106,   21,  106,   24,  106,   27,  106,  106,  106,
     443      106,  106,  106,  106,   41,  106,   43,  106,  106,  106,
     444      106,  106,  106,  106,   56,  106,   67,  106,  106,  106,
     445      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     446      106,  106,  106,  106,  106,  100,  106,  106,  106,    0,
    447447        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    448       125,    0,    0,    0,    0,    0,  117,    0,    0,    0,
    449 
    450         0,    0,    0,    0,  114,  114,    0,  118,    0,  114,
    451       114,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    452         0,    0,    0,    0,  105,  105,   22,  105,  105,  105,
    453       105,  105,  105,  105,   15,  105,  105,  105,  105,  105,
    454       105,  105,  105,  105,  105,  105,  105,  105,  105,   23,
    455        25,  105,   32,  105,  105,  105,  105,   40,  105,  105,
    456       105,  105,   49,  105,  105,   54,  105,  105,   71,   72,
    457       105,  105,  105,   78,  105,  105,  105,  105,  105,   88,
    458        90,  105,  105,   96,  105,  105,  103,  105,    0,    0,
     448        0,    0,    0,  126,    0,    0,    0,    0,    0,  118,
     449
     450        0,    0,    0,    0,    0,    0,    0,  115,  115,    0,
     451      119,    0,  115,  115,    0,    0,    0,    0,    0,    0,
     452        0,    0,    0,    0,    0,    0,    0,  106,  106,   22,
     453      106,  106,  106,  106,  106,  106,  106,   15,  106,  106,
     454      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     455      106,  106,   23,   25,  106,   32,  106,  106,  106,  106,
     456       40,  106,  106,  106,  106,   49,  106,  106,   54,  106,
     457      106,   71,   72,  106,  106,  106,   78,  106,  106,  106,
     458      106,  106,   88,   90,   92,  106,  106,   97,  106,  106,
     459      104,  106,    0,    0,    0,    0,    0,    0,    0,    0,
     460
    459461        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    460 
    461         0,    0,    0,    0,    0,    0,    0,  118,    0,    0,
    462       114,  118,  118,  118,  118,    0,  114,    0,    0,    0,
    463         0,    0,    0,    0,    0,    0,    0,  105,    0,  105,
    464       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
    465       105,  105,  105,  105,  105,   59,  105,  105,  105,  105,
    466       105,  105,  105,  105,   28,  105,  105,  105,   39,   42,
    467        45,  105,  105,   52,  105,   61,   68,  105,  105,   77,
    468        79,   82,   83,   85,   86,  105,  105,   93,  105,  105,
    469       104,    0,    1,    0,    0,    0,    0,    0,    0,  108,
    470         0,    0,    0,  125,    0,    0,    0,    0,  118,    0,
    471 
    472       118,  118,    0,    0,    0,    0,    0,    0,    0,    0,
    473         0,  105,  105,   18,  105,  105,  105,  105,  105,  105,
    474       105,   16,  105,  105,  105,   33,  105,  105,  105,  105,
    475       105,  105,  105,  105,  105,  105,  105,  105,   36,   37,
    476       105,   48,   53,  105,  105,  105,   92,  105,  105,    0,
     462        0,  119,    0,    0,  115,  119,  119,  119,  119,    0,
     463      115,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     464        0,  106,    0,  106,  106,  106,  106,  106,  106,  106,
     465      106,  106,  106,  106,  106,  106,  106,  106,  106,   59,
     466      106,  106,  106,  106,  106,  106,  106,  106,   28,  106,
     467      106,  106,   39,   42,   45,  106,  106,   52,  106,   61,
     468       68,  106,  106,   77,   79,   82,   83,   85,   86,  106,
     469      106,   94,  106,  106,  105,    0,    1,    0,    0,    0,
     470        0,    0,    0,  109,    0,    0,    0,  126,    0,    0,
     471
     472        0,    0,  119,    0,  119,  119,    0,    0,    0,    0,
     473        0,    0,    0,    0,    0,  106,  106,   18,  106,  106,
     474      106,  106,  106,  106,  106,   16,  106,  106,  106,   33,
     475      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     476      106,  106,   36,   37,  106,   48,   53,  106,  106,  106,
     477       93,  106,  106,    0,    0,    0,    0,    0,    0,    0,
     478        0,    0,    0,    0,    0,    0,   10,   11,   29,   55,
     479      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
     480      106,   60,   62,   65,  106,  106,   80,   95,  106,  106,
     481       35,  106,   47,   73,   74,  106,   98,  101,    0,    0,
     482
    477483        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    478         0,    0,   10,   11,   29,   55,  105,  105,  105,  105,
    479       105,  105,  105,  105,  105,  105,  105,   60,   62,   65,
    480       105,  105,   80,   94,  105,  105,   35,  105,   47,   73,
    481        74,  105,   97,  100,    0,    0,    0,    0,    0,    0,
    482 
    483         0,    0,    0,    0,    0,    0,  105,   69,  105,  105,
    484        12,  105,  105,   30,   34,  105,  105,  105,   66,  105,
    485       105,  105,  105,  105,  105,  105,    0,    0,    0,    0,
    486         0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
    487       105,  105,  105,  105,  105,  105,  105,   50,   63,   75,
    488        81,   95,  101,  105,  105,  105,    0,    0,    0,    0,
    489         0,    0,    0,    0,  105,  105,   13,   19,  105,  105,
    490        31,  105,  105,  105,   26,   46,   89,    0,    0,  105,
    491       105,  105,  105,  105,  105,   76,  102,  105,   87,   20,
    492       105,  105,   44,   84,  105,  105,  105,  105,  105,  105,
    493 
    494       105,   98,   70,    0
     484      106,   69,  106,  106,   12,  106,  106,   30,   34,  106,
     485      106,  106,   66,  106,  106,  106,  106,  106,  106,  106,
     486        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     487        0,    0,    0,   58,  106,  106,  106,  106,  106,  106,
     488      106,   50,   63,   75,   81,   96,  102,  106,  106,  106,
     489        0,    0,    0,    0,    0,    0,    0,    0,  106,  106,
     490       13,   19,  106,  106,   31,  106,  106,  106,   26,   46,
     491       89,    0,    0,  106,  106,  106,  106,  106,  106,   76,
     492      103,  106,   87,   20,  106,  106,   44,   84,  106,  106,
     493
     494      106,  106,  106,  106,  106,   99,   70,    0
    495495    } ;
    496496
     
    540540    } ;
    541541
    542 static yyconst flex_int16_t yy_base[1079] =
     542static yyconst flex_int16_t yy_base[1083] =
    543543    {   0,
    544         0,   84, 2323, 2322,   94,    0,  177,  178,  179,  180,
    545      2338, 2866,  191, 2866,  197,   55, 2866, 2283,   60,  173,
    546      2866, 2866, 2866,   56,  188, 2866,  191,  189,  204,  216,
    547       275,    0, 2300, 2866,  216, 2298,  152,  344,  155,  220,
    548      2866,  159, 2866,  217,  226, 2866,  185,  154,  212,  251,
    549       237,  270,  235,  257,  241,  279,  193,  305,  314,  333,
    550       238,  228,  227, 2866,  225, 2866, 2295,  402,  390, 2866,
    551      2306, 2866, 2273,  235, 2866,    0, 2866,  426,    0, 2866,
    552       417, 2866,  439,  451, 2866,  498, 2270,  264, 2866, 2866,
    553      2866, 2866, 2866, 2286, 2866, 2285, 2866, 2866, 2297,  559,
    554 
    555      2866, 2313, 2866,  438,  444,  511,  534,  289,  253,  197,
    556       380,  305,    0,  319,  280,  198,  322, 2866, 2866, 2866,
    557      2281, 2866, 2866, 2866, 2278, 2277,  218,  312, 2292,  350,
    558       459,  368,  398,  440,  405,  448, 2272,  441, 2219,  458,
    559      2247, 2866,  335, 2866, 2866,  321, 2243, 2242, 2866, 2214,
    560       444,  297,  433,  372,  425,  454,  434,  461,  570,  455,
    561       468,  385,  474,  475,  494,  492,  489,  464,  488,  491,
    562       513,  503,  430,  521,  517,  519,  516,  522, 2240,  526,
    563       523,  276,  460,  524,  542,  555,  554,  561,  325,  558,
    564       584,  552,  600,  586,  593,  588,  595, 2866, 2866,  667,
    565 
    566       655, 2287,  682, 2866,  688, 2866, 2236,  590, 2232, 2230,
    567         0,  648, 2866, 2866,  675, 2227, 2224, 2223,    0, 2246,
    568       578,  631,  654,  685,  698,  660,  689,  670,  692, 2242,
    569       695,  701, 2200, 2198, 2866,    0,  693,  720,  685,  711,
    570      2197, 2247, 2866,  737,  745,  666,  757,  763,  797,  780,
    571       599, 2866, 2203, 2178,    0,  805, 2224,  806,  617, 2866,
    572      2199, 2172,  819, 2866, 2866, 2203, 2866, 2866,  707,  722,
    573      2182, 2182,  699, 2177, 2174, 2171,    0, 2170,    0, 2141,
    574       743,  724,  739,  689,  741,  720,  623,  759,  762,  804,
    575       681,  795,  749,  746,  799,  801,  765,  784,  803,  811,
    576 
    577      2170,  814,  818,  827,  831,  817,  821,  833,  835,  841,
    578       842,  834,  843,  844,  845,  847,  849,  857,  858,  860,
    579       851,  859,  866, 2167,  867,  868,  869,  871,  873,  874,
    580       763,  875,  876,  880,  881,  884,  887,  888,  885, 2164,
    581       891,  936,  894,  897,  905,  899,  901,  902,  965,  961,
    582      2160, 2159, 2157,    0, 2154,    0,  952,  956, 2153,    0,
    583      2152,    0, 2150,    0, 2169, 2866,  951,  952, 2148, 2145,
    584         0, 2143,    0, 2866,  967,  986,  978, 2866,  992, 1032,
    585      2140, 1008, 1054, 2136, 2866, 2866,  915,  951, 1040,  993,
    586      1079,  956, 1071,  994, 2866, 2866, 2132, 2130, 2128,    0,
    587 
    588      2125,    0, 2123,    0, 2121,    0, 2866,  935,  969,  973,
    589       968, 1012,  975, 1056,  992, 1058,  997, 1032,  993, 1000,
    590      1060, 1061, 1066, 1070, 1073, 1030, 1071, 1069, 1072, 1078,
    591      2121,  700, 2118, 1085, 2117, 1079, 1081, 1089, 1087, 1098,
    592      1096, 1099, 2116, 1101, 2114, 1105, 1106, 1107, 1109, 1112,
    593      1113, 1114, 2111, 1115, 2108, 1117, 1119, 1120, 1118, 1124,
    594      1126, 1121, 1136, 1130, 1134, 1135, 1149, 1137, 1138, 1150,
    595      1152, 1153, 2107, 1151, 1154, 1167, 1205, 2103,    0, 2101,
    596         0, 2098,    0, 2095,    0, 1204, 2094,    0, 2093,    0,
    597      2091, 2088, 2085,    0, 2084,    0, 1208, 2083, 1214, 1230,
    598 
    599      1216, 1255, 1221, 1172, 1169, 2866, 1271, 1289, 1282, 2093,
    600      2066, 2075, 2074,    0, 2073,    0, 2071,    0, 2068,    0,
    601      2065,    0, 2064,    0, 1190, 1159, 2066, 1193, 1195, 1197,
    602      1212, 1237, 1231, 1265, 1248, 1266, 1267, 1213, 1268, 1269,
    603      1283, 1270, 1271,  234, 1285, 1273, 1274, 1287, 1293, 2064,
    604      1306, 1301, 2061, 1290, 1303, 1305, 1308, 2058, 1312, 1309,
    605      1311, 1313, 2057, 1314, 1319, 2056, 1316, 1322, 2054, 2051,
    606      1315, 1327, 1330, 2050, 1333, 1332, 1336, 1334, 1338, 1345,
    607      2049, 1335, 1348, 2047, 1346, 1349, 2044, 1351, 2093, 2039,
    608         0, 2037,    0, 2004,    0, 2002,    0, 2001,    0, 1998,
    609 
    610         0, 1995,    0, 1994,    0, 1394, 1404, 1428, 1415, 1993,
    611      2866, 1421, 1370, 1391, 1419, 1991, 2866, 1988,    0, 1985,
    612         0, 1984,    0, 1983,    0,    0,    0, 1984,    0, 1352,
    613      1406, 1408, 1359, 1354, 1409, 1415, 1412, 1411, 1423, 1433,
    614      1425, 1430, 1435, 1437, 1439, 1448, 1442, 1449, 1440, 1444,
    615      1453, 1450, 1452, 1456, 1981, 1458, 1460, 1463, 1980, 1979,
    616      1977, 1466, 1467, 1974, 1470, 1973, 1972, 1469, 1473, 1970,
    617      1963, 1961, 1960, 1957, 1953, 1475, 1479, 1949, 1476, 1477,
    618      1945, 1992, 2866, 1938,    0, 1937,    0,    0,    0, 1938,
    619         0,    0,    0, 2866,    0,    0,    0,    0, 1525, 1932,
    620 
    621      2866, 2866, 1531, 1931,    0, 1930,    0,    0,    0,    0,
    622      1928, 1488, 1483, 1928, 1491, 1507, 1518, 1490, 1519, 1521,
    623      1508, 1927, 1525, 1529, 1527, 1541, 1530, 1384, 1543, 1539,
    624      1558, 1547, 1549, 1512, 1545, 1552, 1553, 1554, 1926, 1924,
    625      1557, 1921, 1920, 1556, 1537, 1560, 1919, 1561, 1564,    0,
    626         0,    0, 1914, 1911, 1910, 1612,    0, 1909, 1907, 1904,
    627      1903, 1902, 1903, 1900, 1899, 1898, 1568, 1572, 1566, 1577,
    628      1590, 1570, 1578, 1579, 1591, 1596, 1625, 1896, 1598, 1893,
    629      1599, 1603, 1604, 1608, 1606, 1612, 1892, 1613, 1891, 1889,
    630      1886, 1614, 1885, 1884, 1879, 1872, 1870, 1869, 1866, 1865,
    631 
    632      1864, 1862, 1845, 1836, 1835, 1832, 1616, 1828, 1617, 1622,
    633      1620, 1619, 1624, 1626, 1825, 1628, 1644, 1630, 1818, 1631,
    634      1639, 1645, 1647, 1634, 1649, 1651, 1813, 1812, 1791, 1790,
    635      1789, 1782, 1780, 1779, 1737, 1735, 1733, 1732, 1730, 1732,
    636      1652, 1654, 1655, 1657, 1659, 1662, 1663, 1731, 1729, 1668,
    637      1727, 1724, 1669, 1670, 1664, 1675, 1719, 1718, 1671, 1629,
    638      1564, 1468, 1350, 1269, 1678, 1681, 1239, 1682, 1688, 1689,
    639      1238, 1690, 1692, 1696, 1206, 1171, 1157, 1035, 1031, 1691,
    640      1697, 1700, 1704, 1702, 1706,  998,  560, 1701,  527,  395,
    641      1707, 1710,  357,  300, 1708, 1713, 1715, 1718, 1716, 1719,
    642 
    643      1720,  233,  137, 2866, 1794, 1807, 1820, 1830, 1840, 1853,
    644      1863, 1876, 1889, 1902, 1910, 1920, 1927, 1934, 1941, 1948,
    645      1955, 1962, 1969, 1976, 1983, 1990, 1994, 2002, 2008, 2015,
    646      2022, 2029, 2036, 2039, 2046, 2052, 2065, 2078, 2085, 2092,
    647      2099, 2106, 2109, 2116, 2119, 2126, 2129, 2136, 2139, 2146,
    648      2149, 2156, 2159, 2166, 2169, 2176, 2184, 2191, 2198, 2205,
    649      2212, 2215, 2222, 2225, 2232, 2235, 2242, 2248, 2261, 2268,
    650      2275, 2278, 2285, 2288, 2295, 2298, 2305, 2308, 2315, 2318,
    651      2325, 2328, 2335, 2342, 2345, 2352, 2355, 2362, 2369, 2376,
    652      2379, 2386, 2389, 2396, 2399, 2406, 2409, 2416, 2419, 2426,
    653 
    654      2432, 2445, 2452, 2459, 2462, 2469, 2472, 2479, 2482, 2489,
    655      2492, 2499, 2502, 2509, 2512, 2519, 2522, 2529, 2532, 2539,
    656      2546, 2549, 2556, 2559, 2566, 2569, 2576, 2579, 2582, 2588,
    657      2595, 2604, 2611, 2618, 2621, 2628, 2631, 2634, 2640, 2647,
    658      2650, 2653, 2656, 2659, 2662, 2665, 2668, 2675, 2678, 2685,
    659      2688, 2691, 2694, 2697, 2707, 2714, 2717, 2720, 2723, 2730,
    660      2737, 2744, 2747, 2754, 2761, 2768, 2775, 2782, 2789, 2796,
    661      2803, 2810, 2817, 2824, 2831, 2838, 2845, 2852
     544        0,   84, 2330, 2327,   94,    0,  177,  178,  179,  180,
     545     2341, 2877,  191, 2877,  197,   55, 2877, 2287,   60,  173,
     546     2877, 2877, 2877,   56,  188, 2877,  191,  189,  204,  216,
     547      275,    0, 2306, 2877,  216, 2305,  152,  344,  155,  220,
     548     2877,  159, 2877,  217,  226, 2877,  185,  154,  212,  251,
     549      237,  270,  235,  257,  241,  279,  193,  305,  314,  351,
     550      238,  228,  227, 2877,  225, 2877, 2300,  406,  412, 2877,
     551     2309, 2877, 2277,  235, 2877,    0, 2877,  439,    0, 2877,
     552      426, 2877,  452,  464, 2877,  511, 2276,  264, 2877, 2877,
     553     2877, 2877, 2877, 2293, 2877, 2290, 2877, 2877, 2300,  572,
     554
     555     2877, 2317, 2877,  451,  457,  524,  547,  298,  253,  197,
     556      312,  279,    0,  342,  325,  198,  322, 2877, 2877, 2877,
     557     2287, 2877, 2877, 2877, 2285, 2282,  218,  312, 2295,  350,
     558      363,  368,  369,  391,  411,  417, 2276,  452, 2225,  453,
     559     2254, 2877,  274, 2877, 2877,  438, 2248, 2245, 2877, 2218,
     560      435,  282,  353,  277,  391,  419,  442,  320,  583,  451,
     561      446,  443,  479,  469,  364,  472,  481,  454,  458,  484,
     562      503,  493,  352,  506,  486,  453,  507,  509, 2246,  539,
     563      532,  524,  516,  528,  556,  530,  540,  552,  553,  564,
     564      574,  538,  576,  613,  573,  597,  602,  571, 2877, 2877,
     565
     566      668,  674, 2294,  680, 2877,  686, 2877, 2241,  603, 2235,
     567     2234,    0,  683, 2877, 2877,  692, 2233, 2231, 2211,    0,
     568     2233,  556,  627,  630,  662,  699,  688,  692,  693,  696,
     569     2230,  700,  703, 2205, 2202, 2877,    0,  695,  726,  693,
     570      701, 2201, 2253, 2877,  747,  742,  700,  753,  760,  793,
     571      815,  746, 2877, 2210, 2183,    0,  802, 2227,  801,  754,
     572     2877, 2203, 2178,  839, 2877, 2877, 2210, 2877, 2877,  709,
     573      723, 2187, 2185,  755, 2181, 2180, 2178,    0, 2175,    0,
     574     2144,  694,  736,  737,  741,  614,  739,  738,  742,  798,
     575      807,  792,  802,  797,  746,  816,  748,  791,  824,  819,
     576
     577      826, 2174,  827,  830,  831,  440,  834,  838,  836,  843,
     578      847,  849,  841,  850,  861,  853,  862,  851,  863,  865,
     579      872,  864,  873,  874, 2173,  749,  875,  876,  878,  880,
     580      881,  882,  884,  885,  886,  888,  889,  892,  898,  896,
     581     2171,  899,  906,  944,  901,  907,  913,  917,  908,  911,
     582      976,  977, 2165, 2164, 2163,    0, 2161,    0,  964,  968,
     583     2158,    0, 2157,    0, 2156,    0, 2176, 2877,  964,  967,
     584     2153, 2147,    0, 2143,    0, 2877,  979,  998,  990, 2877,
     585     1004, 1044, 2141, 1020, 1066, 2139, 2877, 2877,  963, 1006,
     586     1052, 1005, 1091,  968, 1083, 1006, 2877, 2877, 2136, 2134,
     587
     588     2132,    0, 2129,    0, 2126,    0, 2125,    0, 2877,  931,
     589      981,  985,  928, 1024,  987, 1068,  958, 1070, 1060, 1010,
     590     1005, 1072, 1083, 1022, 1078, 1082, 1088, 1042, 1084, 1081,
     591     1089, 1097, 2127, 1090, 2125, 1095, 2122, 1093, 1091, 1109,
     592     1101, 1111, 1115, 1116, 2119, 1118, 2118, 1119, 1120, 1121,
     593     1123, 1126, 1127, 1128, 2117, 1129, 2115, 1131, 1134, 1135,
     594     1132, 1138, 1140, 1143, 1148, 1149, 1150, 1152, 1155, 1151,
     595     1161, 1164, 1166, 1168, 1169, 2112, 1170, 1172, 1175, 1221,
     596     2106,    0, 2105,    0, 2104,    0, 2102,    0, 1216, 2099,
     597        0, 2096,    0, 2095, 2094, 2092,    0, 2089,    0, 1223,
     598
     599     2086, 1229, 1245, 1231, 1270, 1236, 1186, 1185, 2877, 1286,
     600     1304, 1297, 2097, 2072, 2082, 2079,    0, 2076,    0, 2075,
     601        0, 2074,    0, 2072,    0, 2069,    0, 1190, 1210, 2069,
     602     1191, 1227, 1212, 1230, 1253, 1246, 1254, 1280, 1281, 1282,
     603     1284, 1228, 1287, 1286, 1288, 1285,  234, 1293, 1289, 1304,
     604     1300, 1305, 2068, 1322, 1306, 2067, 1308, 1313, 1318, 1320,
     605     2065, 1323, 1324, 1326, 1327, 2062, 1330, 1331, 2061, 1334,
     606     1335, 2060, 2058, 1337, 1339, 1340, 2055, 1004, 1346, 1347,
     607     1348, 1349, 1364, 2054, 2053, 1351, 1353, 2051, 1350, 1355,
     608     2018, 1362, 2066, 2012,    0, 2009,    0, 2006,    0, 2005,
     609
     610        0, 2004,    0, 2002,    0, 1999,    0, 1996,    0, 1401,
     611     1407, 1435, 1418, 1995, 2877, 1424, 1411, 1421, 1427, 1994,
     612     2877, 1992,    0, 1989,    0, 1988,    0, 1987,    0,    0,
     613        0, 1988,    0, 1412, 1422, 1419, 1387, 1369, 1416, 1433,
     614     1436, 1403, 1446, 1441, 1431, 1432, 1451, 1452, 1455, 1456,
     615     1457, 1486, 1460, 1461, 1462, 1464, 1463, 1467, 1985, 1465,
     616     1468, 1470, 1984, 1983, 1981, 1472, 1466, 1974, 1478, 1972,
     617     1971, 1480, 1484, 1968, 1964, 1960, 1956, 1953, 1952, 1487,
     618     1494, 1951, 1497, 1483, 1949, 1996, 2877, 1942,    0, 1941,
     619        0,    0,    0, 1942,    0,    0,    0, 2877,    0,    0,
     620
     621        0,    0, 1537, 1936, 2877, 2877, 1543, 1935,    0, 1934,
     622        0,    0,    0,    0, 1932, 1499, 1519, 1932, 1500, 1524,
     623     1530, 1501, 1502, 1533, 1537, 1931, 1532, 1541, 1534, 1539,
     624     1544,  599, 1548, 1549, 1579, 1556, 1557, 1560, 1561, 1562,
     625     1563, 1564, 1930, 1928, 1567, 1925, 1924, 1566, 1569, 1572,
     626     1923, 1574, 1578,    0,    0,    0, 1918, 1915, 1914, 1624,
     627        0, 1913, 1911, 1908, 1907, 1906, 1907, 1904, 1903, 1902,
     628     1580, 1588, 1576, 1577, 1601, 1583, 1602, 1589, 1604, 1603,
     629     1636, 1900, 1609, 1897, 1610, 1614, 1617, 1622, 1618, 1623,
     630     1896, 1624, 1895, 1893, 1886, 1626, 1884, 1883, 1877, 1876,
     631
     632     1875, 1873, 1856, 1847, 1846, 1843, 1836, 1833, 1826, 1824,
     633     1628, 1826, 1629, 1630, 1631, 1632, 1635, 1637, 1805, 1639,
     634     1667, 1642, 1804, 1643, 1653, 1658, 1651, 1652, 1659, 1662,
     635     1800, 1793, 1791, 1790, 1748, 1745, 1744, 1742, 1741, 1737,
     636     1735, 1733, 1732, 1734, 1663, 1664, 1666, 1672, 1673, 1674,
     637     1675, 1731, 1689, 1676, 1644, 1522, 1680, 1685, 1686, 1687,
     638     1500, 1411, 1363, 1362, 1260, 1219, 1218, 1047, 1690, 1688,
     639     1046, 1700, 1695, 1701,  924, 1704, 1708, 1709,  839,  794,
     640      759,  702,  636, 1682, 1710, 1713, 1714, 1715, 1717,  638,
     641      536, 1719,  488,  441, 1721, 1722,  408,  281, 1723, 1726,
     642
     643     1727, 1729, 1728, 1730, 1733,  233,  137, 2877, 1805, 1818,
     644     1831, 1841, 1851, 1864, 1874, 1887, 1900, 1913, 1921, 1931,
     645     1938, 1945, 1952, 1959, 1966, 1973, 1980, 1987, 1994, 2001,
     646     2005, 2013, 2019, 2026, 2033, 2040, 2047, 2050, 2057, 2063,
     647     2076, 2089, 2096, 2103, 2110, 2117, 2120, 2127, 2130, 2137,
     648     2140, 2147, 2150, 2157, 2160, 2167, 2170, 2177, 2180, 2187,
     649     2195, 2202, 2209, 2216, 2223, 2226, 2233, 2236, 2243, 2246,
     650     2253, 2259, 2272, 2279, 2286, 2289, 2296, 2299, 2306, 2309,
     651     2316, 2319, 2326, 2329, 2336, 2339, 2346, 2353, 2356, 2363,
     652     2366, 2373, 2380, 2387, 2390, 2397, 2400, 2407, 2410, 2417,
     653
     654     2420, 2427, 2430, 2437, 2443, 2456, 2463, 2470, 2473, 2480,
     655     2483, 2490, 2493, 2500, 2503, 2510, 2513, 2520, 2523, 2530,
     656     2533, 2540, 2543, 2550, 2557, 2560, 2567, 2570, 2577, 2580,
     657     2587, 2590, 2593, 2599, 2606, 2615, 2622, 2629, 2632, 2639,
     658     2642, 2645, 2651, 2658, 2661, 2664, 2667, 2670, 2673, 2676,
     659     2679, 2686, 2689, 2696, 2699, 2702, 2705, 2708, 2718, 2725,
     660     2728, 2731, 2734, 2741, 2748, 2755, 2758, 2765, 2772, 2779,
     661     2786, 2793, 2800, 2807, 2814, 2821, 2828, 2835, 2842, 2849,
     662     2856, 2863
    662663    } ;
    663664
    664 static yyconst flex_int16_t yy_def[1079] =
     665static yyconst flex_int16_t yy_def[1083] =
    665666    {   0,
    666       904,    1,  905,  905,  904,    5,  906,  906,  907,  907,
    667       904,  904,  904,  904,  904,  904,  904,  908,  904,  904,
    668       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    669       904,   31,  904,  904,  904,  904,  904,  904,  909,  908,
    670       904,  904,  904,  904,  908,  904,  908,  908,  908,  908,
     667      908,    1,  909,  909,  908,    5,  910,  910,  911,  911,
     668      908,  908,  908,  908,  908,  908,  908,  912,  908,  908,
    671669      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    672       908,  908,  908,  904,  904,  904,  904,  904,  910,  904,
    673       904,  904,  911,  904,  904,  912,  904,  904,  913,  904,
    674       904,  904,  904,  904,  904,  904,  908,  904,  904,  904,
    675       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    676 
    677       904,  914,  904,  904,   30,  904,  904,  904,  904,  915,
    678        30,  904,   31,  904,  904,   31,  904,  904,  904,  904,
    679       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    680       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    681       916,  904,  904,  904,  904,  908,  917,  918,  904,  904,
     670      908,   31,  908,  908,  908,  908,  908,  908,  913,  912,
     671      908,  908,  908,  908,  912,  908,  912,  912,  912,  912,
     672      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     673      912,  912,  912,  908,  908,  908,  908,  908,  914,  908,
     674      908,  908,  915,  908,  908,  916,  908,  908,  917,  908,
     675      908,  908,  908,  908,  908,  908,  912,  908,  908,  908,
     676      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     677
     678      908,  918,  908,  908,   30,  908,  908,  908,  908,  919,
     679       30,  908,   31,  908,  908,   31,  908,  908,  908,  908,
     680      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     681      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     682      920,  908,  908,  908,  908,  912,  921,  922,  908,  908,
     683      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     684      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     685      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     686      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
     687      912,  912,  912,  912,  912,  912,  912,  912,  908,  908,
     688
     689      908,  914,  914,  914,  908,  914,  908,  915,  908,  923,
     690      924,  916,  908,  908,  908,  908,  925,  926,  927,  917,
     691      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     692      908,  908,  908,  928,  929,  908,  100,  908,  908,  908,
     693      908,  100,  918,  908,  100,  111,  246,  908,  908,  908,
     694      908,  908,  908,  908,  908,  930,  931,  932,  908,  908,
     695      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     696      908,  908,  933,  908,  934,  935,  936,  937,  938,  939,
     697      908,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     698      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     699
     700      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     701      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     702      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     703      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     704      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     705      941,  942,  943,  944,  945,  946,  947,  948,  908,  908,
     706      949,  950,  951,  952,  953,  954,  908,  908,  908,  908,
     707      908,  955,  956,  957,  958,  908,  908,  908,  908,  908,
     708      908,  908,  382,  908,  378,  385,  908,  908,  959,  960,
     709      961,  908,  908,  908,  961,  908,  908,  908,  962,  963,
     710
     711      964,  965,  966,  967,  968,  969,  970,  971,  908,  972,
     712      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     713      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     714      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     715      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     716      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     717      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     718      972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
     719      974,  975,  976,  977,  978,  979,  980,  981,  908,  982,
     720      983,  984,  985,  986,  986,  987,  988,  989,  990,  908,
     721
     722      500,  908,  908,  991,  908,  991,  908,  908,  908,  908,
     723      908,  908,  908,  908,  992,  993,  994,  995,  996,  997,
     724      998,  999, 1000, 1001, 1002, 1003, 1004, 1005, 1005, 1005,
     725     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     726     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     727     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     728     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     729     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     730     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
     731     1005, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
     732
     733     1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,  908,
     734      908,  908,  908, 1023,  908,  612,  908,  908,  908,  616,
     735      908, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
     736     1033, 1034, 1035, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     737     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     738     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     739     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     740     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
     741     1034, 1034, 1034, 1034, 1034, 1036,  908, 1037, 1038, 1039,
     742     1040, 1041, 1042, 1043, 1044, 1045, 1046,  908, 1047, 1048,
     743
     744     1049, 1050,  908,  703,  908,  908,  908, 1051, 1052, 1053,
     745     1054, 1055, 1056, 1057, 1058, 1059, 1059, 1059, 1059, 1059,
     746     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     747     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     748     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     749     1059, 1059, 1059, 1060, 1061, 1062, 1063, 1064, 1065,  908,
     750     1066, 1051, 1053, 1067, 1068, 1058, 1059, 1059, 1059, 1059,
     751     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     752     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     753     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1069, 1070,
     754
     755     1063, 1071, 1064, 1072, 1065, 1073, 1074, 1067, 1075, 1068,
     756     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     757     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     758     1076, 1069, 1077, 1070, 1078, 1071, 1079, 1072, 1080, 1073,
     759     1081, 1074, 1075, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     760     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     761     1082, 1076, 1077, 1078, 1079, 1053, 1080, 1081, 1059, 1059,
     762     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     763     1059, 1082, 1053, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     764     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
     765
     766     1059, 1059, 1059, 1059, 1059, 1059, 1059,    0,  908,  908,
    682767      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    683768      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    684769      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    685770      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    686       908,  908,  908,  908,  908,  908,  908,  904,  904,  904,
    687 
    688       910,  910,  910,  904,  910,  904,  911,  904,  919,  920,
    689       912,  904,  904,  904,  904,  921,  922,  923,  913,  904,
    690       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    691       904,  904,  924,  925,  904,  100,  904,  904,  904,  904,
    692       100,  914,  904,  100,  111,  245,  904,  904,  904,  904,
    693       904,  904,  904,  904,  926,  927,  928,  904,  904,  904,
    694       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    695       904,  929,  904,  930,  931,  932,  933,  934,  935,  904,
    696       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    697       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    698 
    699       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    700       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    701       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    702       936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
    703       936,  936,  936,  936,  936,  936,  936,  936,  937,  938,
    704       939,  940,  941,  942,  943,  944,  904,  904,  945,  946,
    705       947,  948,  949,  950,  904,  904,  904,  904,  904,  951,
    706       952,  953,  954,  904,  904,  904,  904,  904,  904,  904,
    707       380,  904,  376,  383,  904,  904,  955,  956,  957,  904,
    708       904,  904,  957,  904,  904,  904,  958,  959,  960,  961,
    709 
    710       962,  963,  964,  965,  966,  967,  904,  968,  968,  968,
    711       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    712       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    713       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    714       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    715       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    716       968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
    717       968,  968,  968,  968,  968,  968,  969,  970,  971,  972,
    718       973,  974,  975,  976,  977,  904,  978,  979,  980,  981,
    719       982,  982,  983,  984,  985,  986,  904,  497,  904,  904,
    720 
    721       987,  904,  987,  904,  904,  904,  904,  904,  904,  904,
    722       904,  988,  989,  990,  991,  992,  993,  994,  995,  996,
    723       997,  998,  999, 1000, 1001, 1001, 1001, 1001, 1001, 1001,
    724      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    725      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    726      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    727      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    728      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    729      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002, 1003,
    730      1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
    731 
    732      1014, 1015, 1016, 1017, 1018,  904,  904,  904,  904, 1019,
    733       904,  608,  904,  904,  904,  612,  904, 1020, 1021, 1022,
    734      1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1030,
    735      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    736      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    737      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    738      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    739      1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
    740      1030, 1032,  904, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
    741      1040, 1041, 1042,  904, 1043, 1044, 1045, 1046,  904,  699,
    742 
    743       904,  904,  904, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
    744      1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    745      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    746      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    747      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1056,
    748      1057, 1058, 1059, 1060, 1061,  904, 1062, 1047, 1049, 1063,
    749      1064, 1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    750      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    751      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    752      1055, 1055, 1055, 1055, 1065, 1066, 1059, 1067, 1060, 1068,
    753 
    754      1061, 1069, 1070, 1063, 1071, 1064, 1055, 1055, 1055, 1055,
    755      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    756      1055, 1055, 1055, 1055, 1055, 1055, 1072, 1065, 1073, 1066,
    757      1074, 1067, 1075, 1068, 1076, 1069, 1077, 1070, 1071, 1055,
    758      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    759      1055, 1055, 1055, 1055, 1055, 1055, 1078, 1072, 1073, 1074,
    760      1075, 1049, 1076, 1077, 1055, 1055, 1055, 1055, 1055, 1055,
    761      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1078, 1049, 1055,
    762      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    763      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
    764 
    765      1055, 1055, 1055,    0,  904,  904,  904,  904,  904,  904,
    766       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    767       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    768       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    769       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    770       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    771       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    772       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    773       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    774       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    775 
    776       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    777       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    778       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    779       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    780       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    781       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    782       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    783       904,  904,  904,  904,  904,  904,  904,  904
     771      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     772      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     773      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     774      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     775      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     776
     777      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     778      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     779      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     780      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     781      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     782      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     783      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     784      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     785      908,  908
    784786    } ;
    785787
    786 static yyconst flex_int16_t yy_nxt[2952] =
     788static yyconst flex_int16_t yy_nxt[2963] =
    787789    {   0,
    788790       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    809811
    810812       84,   84,   84,   83,   92,   94,   88,  143,  147,   99,
    811        96,  100,  100,  100,  100,  100,  100,  255,  904,   95,
     813       96,  100,  100,  100,  100,  100,  100,  256,  908,   95,
    812814      101,   86,   97,   98,   86,  102,  162,  119,  144,   78,
    813815       78,   78,   78,  145,  148,  103,  104,   88,  105,  105,
    814       105,  105,  106,  106,  120,   88,  121,  122,  149,  266,
    815       150,  267,  257,  263,  185,  107,  198,  648,  160,  108,
     816      105,  105,  106,  106,  120,   88,  121,  122,  149,  267,
     817      150,  268,  258,  264,  185,  107,  199,  652,  160,  108,
    816818      161,  151,  152,  153,   88,  109,  110,  154,  155,  163,
    817819      156,  111,   88,  157,  158,  146,  164,  107,   88,   88,
    818        88,  159,  165,  112,  209,   88,   88,   88,  197,   88,
    819        88,  109,  196,   88,  110,  104,  253,  113,  113,  113,
    820 
    821       113,  113,  113,   88,  170,  178,  171,  199,  195,   88,
    822       210,  181,  166,  233,  107,  172,  167,  182,  114,  179,
    823       254,  168,   88,  261,  115,  169,  180,  173,   88,  144,
    824       116,   88,  251,  326,  145,  174,  107,  175,  252,  234,
    825       176,  144,  117,  266,  177,  267,  145,  262,  183,   88,
    826       115,  126,   88,  184,  252,  127,  128,   88,  129,  193,
    827       130,  131,  259,  132,  252,  133,   88,  283,  260,  186,
    828       187,  260,  251,   88,  134,  135,  136,   88,  190,  188,
    829       252,  266,  189,  267,  274,   88,  191,  268,  146,  259,
    830       337,  203,  204,  192,  260,  137,  203,  260,  138,  266,
    831 
    832       904,  267,  194,  200,   82,   83,   83,   83,  200,   88,
    833       275,  201,  205,  205,  205,  205,  205,  205,   81,   82,
    834        83,   83,   83,   81,   88,  139,  140,  212,  213,  266,
    835       904,  267,  212,  285,  214,  258,  266,   88,  267,  214,
    836        83,   82,   83,   83,   83,   83,  303,   88,  215,  215,
    837       215,  215,   83,   82,   84,   84,   84,   83,  904,  214,
    838       244,  244,  244,  244,  244,  244,  245,  245,  245,  245,
    839       269,  266,  266,  267,  267,  216,  268,   88,  214,  266,
    840       270,  267,   88,  214,  214,   88,   88,  214,  214,  266,
    841       266,  267,  267,  286,  904,  214,   88,  317,  214,  246,
    842 
    843       214,  217,  214,  284,  218,  220,   88,   88,  288,  221,
    844       222,  281,   88,   88,  223,  224,   88,  225,  282,  226,
    845        88,  327,  904,  301,  287,  289,   88,   88,  227,  228,
    846       229,  104,  306,  106,  106,  106,  106,  106,  106,  311,
    847        88,   88,  302,   88,   88,  307,   88,  304,  305,  230,
    848       107,  248,  231,  248,  309,   88,  249,  249,  249,  249,
    849       249,  249,  310,  308,  313,   88,  247,  312,   88,   88,
    850       314,   88,  107,   88,   88,   88,   88,  316,   88,   88,
    851       232,  236,  236,  236,  236,  236,  236,  319,  315,  250,
    852       318,  320,  325,  323,   88,  321,  322,  237,  238,  239,
    853 
    854       324,  240,  239,  328,   88,  329,   88,   88,  144,  365,
    855        88,  366,   88,   88,  241,  330,  331,  333,  335,  239,
    856       238,  239,   88,  341,  240,  332,  239,  290,  291,  292,
    857       338,  293,  294,  336,  334,  295,   88,  296,   88,  351,
    858        88,  339,  297,  298,  299,   88,  300,   88,  385,  212,
    859       213,  343,   88,  347,  212,  342,  203,  204,  345,  344,
    860       346,  203,  365,  340,  366,  352,  395,  348,  200,   82,
    861        83,   83,   83,  200,  385,   88,  201,  205,  205,  205,
    862       205,  205,  205,  203,  204,  365,  904,  366,  203,  349,
    863       204,  365,  395,  366,  349,  414,  350,  357,  357,  357,
    864 
    865       357,  365,  366,  366,  205,  205,  205,  205,  205,  205,
    866       205,  205,  205,  205,  205,  205,  365,  366,  366,  367,
    867       365,  382,  366,  365,  368,  366,  365,  374,  366,  365,
    868       358,  366,  365,   88,  366,  374,  374,  375,  266,  375,
    869       267,   88,  376,  376,  376,  376,  376,  376,  397,  378,
    870       374,  378,   88,  266,  378,  267,  420,  411,  374,  380,
    871       380,  380,  380,  380,  380,  104,  550,  245,  245,  245,
    872       245,  378,   88,  378,  398,  377,   88,  413,  378,  106,
    873       106,  106,  106,  106,  106,  249,  249,  249,  249,  249,
    874       249,   88,  381,   88,  409,   88,  107,  248,   88,  248,
    875 
    876       246,   88,  249,  249,  249,  249,  249,  249,  408,  410,
    877       412,   88,  258,  423,   88,   88,  415,   88,  107,  383,
    878       383,  383,  383,  383,  383,  388,  427,  422,  106,  106,
    879       106,  106,  106,  106,  416,  237,   88,  239,  461,  240,
    880       239,  113,  113,  113,  113,  113,  113,   88,  390,  428,
    881       391,   88,  384,   88,  392,   88,   88,  239,  426,  239,
    882       393,  258,  240,   88,  239,  421,   88,  424,  425,   88,
    883        88,  417,  394,   88,  263,  432,  391,  418,  419,   88,
    884       392,  430,  429,   88,  431,   88,   88,   88,  433,  435,
    885       434,  436,  439,   88,   88,   88,   88,   88,  440,   88,
    886 
    887       441,   88,  444,   88,  443,  442,  437,  438,  446,   88,
    888        88,   88,   88,  445,  448,  449,  447,  450,   88,   88,
    889        88,   88,  452,   88,  457,   88,   88,   88,   88,  453,
    890       455,  454,   88,   88,  451,  456,   88,   88,  459,   88,
    891        88,  464,  458,   88,  144,  463,   88,  462,  460,   88,
    892       469,   88,  470,   88,   88,  465,  474,   88,  468,  466,
    893       502,  467,  472,  204,  471,  473,  349,  204,  475,  202,
    894       503,  349,  476,  350,  214,  214,  214,  214,  357,  357,
    895       357,  357,  365,  365,  366,  366,  502,   88,   88,  376,
    896       376,  376,  376,  376,  376,  375,  502,  375,  525,  510,
    897 
    898       376,  376,  376,  376,  376,  376,  504,  486,  497,  497,
    899       497,  497,  497,  497,  236,  236,  236,  236,  236,  236,
    900        88,   88,  502,  511,  237,   88,  239,   88,  240,  239,
    901       245,  245,  245,  245,  106,  106,  505,  526,  530,  528,
    902       527,  498,  506,  506,   88,   88,  239,  379,  239,   88,
    903        88,  240,   88,  239,  380,  380,  380,  380,  380,  380,
    904       388,  505,  534,  382,   88,  537,  532,  536,  506,  506,
    905       237,  238,  239,  529,  240,  239,  383,  383,  383,  383,
    906       383,  383,   88,  390,   88,  391,  904,  381,  545,  392,
    907       904,  904,  239,  238,  239,  393,  507,  240,  507,  239,
    908 
    909       535,  508,  508,  508,  508,  508,  508,  394,   88,  384,
    910        88,  391,   88,   88,  390,  392,  391,  531,   88,  533,
    911       392,   88,   88,   88,   88,   88,  512,  542,  538,  539,
    912        88,   88,  547,   88,  509,  540,  541,   88,  394,   88,
    913       543,   88,  391,  548,  546,  549,  392,  544,   88,  551,
    914        88,   88,  552,   88,  554,  553,  556,   88,   88,   88,
    915       558,   88,  555,  557,   88,   88,   88,   88,  559,   88,
    916        88,   88,   88,   88,  562,  566,   88,  560,   88,  564,
    917       561,  570,   88,  563,  567,  565,   88,   88,   88,   88,
    918        88,  571,  568,  569,  578,  574,  572,  575,  573,  577,
    919 
    920       576,   88,   88,   88,   88,   88,   88,  204,  579,   88,
    921       582,   88,  581,  589,  580,  587,  585,  502,  611,   88,
    922       583,  584,  588,   88,  631,  586,  214,  214,  214,  214,
    923       497,  497,  497,  497,  497,  497,  380,  380,  380,  380,
    924       380,  380,   88,  502,  611,   88,  237,   88,  239,   88,
    925       240,  239,  383,  383,  383,  383,  383,  383,   88,  630,
    926       632,  502,  634,  498,   88,   88,  502,  633,  239,  499,
    927       239,  503,  607,  240,  607,  239,  610,  608,  608,  608,
    928       608,  608,  608,   88,  642,  500,  635,  502,  637,   88,
    929        88,   88,  502,  508,  508,  508,  508,  508,  508,  507,
    930 
    931        88,  507,  636,  639,  508,  508,  508,  508,  508,  508,
    932       609,  612,  612,  612,  612,  612,  612,   88,   88,   88,
    933        88,   88,   88,   88,  904,   88,   88,  613,  638,  614,
    934       644,  615,  614,  646,  641,   88,  647,   88,  640,   88,
    935       645,  643,   88,  651,  616,   88,  649,  650,  652,  614,
    936       653,  614,  654,   88,  615,   88,  614,   88,   88,  656,
    937        88,   88,  655,   88,   88,   88,   88,   88,   88,  659,
    938       657,   88,  658,  660,   88,  662,  665,  666,  661,   88,
    939       663,  664,   88,  667,   88,   88,   88,   88,   88,  668,
    940        88,  676,  669,  671,  672,  673,  677,   88,   88,  670,
    941 
    942        88,   88,  675,   88,   88,  904,   88,  777,  674,  712,
    943       678,   88,  701,  701,  680,  679,  497,  497,  497,  497,
    944       497,  497,  713,  717,  716,  681,  608,  608,  608,  608,
    945       608,  608,  607,  701,  607,  701,   88,  608,  608,  608,
    946       608,  608,  608,  612,  612,  612,  612,  612,  612,  606,
    947       699,  699,  699,  699,  699,  699,  701,  702,   88,  702,
    948        88,   88,  702,   88,   88,  714,  613,   88,  614,  715,
    949       615,  614,  720,  731,  719,   88,  616,   88,  722,  702,
    950       721,  702,   88,  700,  718,   88,  702,   88,  614,   88,
    951       614,   88,   88,  615,   88,  614,   88,  725,  723,  724,
    952 
    953        88,   88,   88,  729,   88,   88,  727,  732,   88,  726,
    954        88,  730,   88,  728,  734,   88,  733,  737,   88,   88,
    955       735,   88,   88,  879,  740,   88,  736,   88,   88,   88,
    956       744,   88,  745,  738,  739,   88,  746,  748,  741,  743,
    957        88,  747,   88,   88,  749,  764,  742,  699,  699,  699,
    958       699,  699,  699,  612,  612,  612,  612,  612,  612,   88,
    959        88,  763,  768,  613,   88,  614,  766,  615,  614,  765,
    960        88,   88,  783,   88,  769,  767,  770,   88,  771,   88,
    961       700,   88,   88,  772,  780,  614,  703,  614,  774,   88,
    962       615,   88,  614,   88,  773,   88,  775,   88,  778,   88,
    963 
    964       779,   88,  781,  776,   88,   88,   88,  784,   88,   88,
    965        88,  791,   88,   88,  782,  787,   88,  785,   88,  904,
    966        88,  793,   88,  809,   88,  794,  786,  788,  790,   88,
    967        88,   88,  789,  792,  699,  699,  699,  699,  699,  699,
    968       807,  808,   88,   88,  810,  812,  815,  813,   88,  817,
    969        88,   88,  811,  818,  819,   88,   88,  814,   88,  821,
    970        88,  816,  820,  822,   88,   88,   88,  756,   88,   88,
    971       848,   88,   88,  823,   88,  843,   88,   88,   88,  845,
    972        88,  846,   88,   88,  904,  849,   88,  824,  825,  826,
    973       841,   88,  842,  844,  851,  840,   88,   88,  847,   88,
    974 
    975       852,   88,  854,   88,   88,  850,   88,   88,  853,   88,
    976       867,   88,  855,  866,   88,   88,   88,  871,  868,  856,
    977        88,   88,   88,  873,  874,  865,  904,   88,  876,  869,
    978        88,  875,  872,   88,   88,  870,  877,  882,  881,  880,
    979        88,   88,   88,   88,   88,  885,  884,  886,   88,   88,
    980       883,  887,   88,   88,   88,  890,   88,  892,   88,   88,
    981        88,  893,   88,  888,  889,   88,  891,   88,   88,  897,
    982        88,   88,   88,  904,  878,  894,   88,  896,  898,   88,
    983       895,   88,  903,   88,   88,  904,  901,  904,  864,  899,
    984       904,  900,  863,  902,   70,   70,   70,   70,   70,   70,
    985 
    986        70,   70,   70,   70,   70,   70,   70,   76,   76,   76,
     820       88,  159,  165,  112,  210,   88,   88,   88,  198,   88,
     821       88,  109,  197,   88,  110,  104,  254,  113,  113,  113,
     822
     823      113,  113,  113,   88,  170,  178,  171,  200,  196,   88,
     824      211,  181,  166,  234,  107,  172,  167,  182,  114,  179,
     825      255,  168,   88,  275,  115,  169,  180,  173,  253,   88,
     826      116,   88,  908,   88,   88,  174,  107,  175,  286,  235,
     827      176,  252,  117,  267,  177,  268,  252,  253,  183,  276,
     828      115,  126,  284,  184,  253,  127,  128,   88,  129,  144,
     829      130,  131,  908,  132,  145,  133,   88,  259,  262,  186,
     830      187,  261,   88,  253,  134,  135,  136,  194,  190,  188,
     831      269,  267,  189,  268,  290,  260,  191,  269,  192,  260,
     832      908,  261,  263,  193,  267,  137,  268,  261,  138,  267,
     833
     834      267,  268,  268,   88,   88,   88,  146,  201,   82,   83,
     835       83,   83,  201,  204,  205,  202,   88,  261,  204,  318,
     836      195,  270,  267,  285,  268,  139,  140,   81,   82,   83,
     837       83,   83,   81,  309,  206,  206,  206,  206,  206,  206,
     838      213,  214,  267,   88,  268,  213,  144,  215,  267,  271,
     839      268,  145,  215,   83,   82,   83,   83,   83,   83,  287,
     840       88,  216,  216,  216,  216,   83,   82,   84,   84,   84,
     841       83,   88,  215,  245,  245,  245,  245,  245,  245,  246,
     842      246,  246,  246,  267,  267,  268,  268,   88,  217,  288,
     843       88,  215,   88,   88,   88,   88,  215,  215,   88,  436,
     844
     845      215,  215,  282,   88,  304,   88,   88,  908,  215,  283,
     846       88,  215,  247,  215,  218,  215,  289,  219,  221,  302,
     847      303,   88,  222,  223,   88,  321,  307,  224,  225,  312,
     848      226,   88,  227,   88,  310,  908,   88,  313,   88,  308,
     849       88,  228,  229,  230,  104,   88,  106,  106,  106,  106,
     850      106,  106,  305,  306,  311,   88,  320,  314,   88,   88,
     851      315,   88,  231,  107,  249,  232,  249,  317,   88,  250,
     852      250,  250,  250,  250,  250,  319,   88,  328,  316,  248,
     853       88,  327,   88,  323,   88,  107,  322,  367,   88,  368,
     854       88,   88,   88,  233,  237,  237,  237,  237,  237,  237,
     855
     856      333,  326,  251,  334,   88,   88,  324,  329,   88,  336,
     857      238,  239,  240,  325,  241,  240,   88,  342,  338,  330,
     858      335,  144,  781,   88,  337,   88,   88,  242,   88,  331,
     859      332,  340,  240,  239,  240,   88,  339,  241,  345,  240,
     860      291,  292,  293,  350,  294,  295,  346,  343,  296,   88,
     861      297,   88,  353,  341,   88,  298,  299,  300,  367,  301,
     862      368,  367,  347,  368,  348,   88,   88,  349,  344,  201,
     863       82,   83,   83,   83,  201,  204,  205,  202,  354,  368,
     864      204,  204,  205,  414,  213,  214,  204,  351,  205,  213,
     865       88,  908,  351,  367,  352,  368,  206,  206,  206,  206,
     866
     867      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
     868      206,  206,  206,  206,  359,  359,  359,  359,  368,  367,
     869      908,  368,  369,  367,  367,  368,  368,  367,  370,  368,
     870      367,  367,  368,  368,  367,  376,  368,  376,  376,  380,
     871      267,  380,  268,  377,  380,  377,   88,  360,  378,  378,
     872      378,  378,  378,  378,  267,  384,  268,  908,  376,  410,
     873      376,  380,  104,  380,  246,  246,  246,  246,  380,  382,
     874      382,  382,  382,  382,  382,  106,  106,  106,  106,  106,
     875      106,  379,  250,  250,  250,  250,  250,  250,   88,   88,
     876       88,   88,  107,   88,   88,  387,  415,  247,   88,  417,
     877
     878       88,   88,  383,  397,  399,  428,  411,  412,  259,  413,
     879      416,   88,  457,  425,  107,  385,  385,  385,  385,  385,
     880      385,  387,  390,  106,  106,  106,  106,  106,  106,  397,
     881      400,  238,  249,  240,  249,  241,  240,  250,  250,  250,
     882      250,  250,  250,   88,   88,  392,   88,  393,  386,   88,
     883       88,  394,  429,  240,   88,  240,  259,  395,  241,   88,
     884      240,  113,  113,  113,  113,  113,  113,  422,   88,  396,
     885      418,   88,  423,  393,  419,  424,   88,  394,   88,   88,
     886      420,  421,   88,   88,  426,  427,   88,  434,   88,  430,
     887       88,   88,  435,   88,  264,   88,  432,  433,  431,   88,
     888
     889      441,   88,   88,   88,  442,   88,  437,  443,  438,  439,
     890      440,  445,  444,   88,   88,   88,   88,   88,  449,  446,
     891      450,  447,  451,  448,   88,   88,   88,   88,   88,  452,
     892       88,  459,   88,   88,   88,  454,   88,   88,   88,  456,
     893       88,   88,  458,  455,   88,  461,  453,  466,   88,  460,
     894       88,   88,  144,   88,  465,  462,  464,  463,   88,   88,
     895       88,  471,  467,   88,  468,   88,  469,  473,  470,   88,
     896      472,  474,  475,  476,  477,  478,   88,  351,  205,  205,
     897       88,  479,  351,   88,  352,  203,  215,  215,  215,  215,
     898      359,  359,  359,  359,  528,  367,   88,  368,  367,  531,
     899
     900      368,  378,  378,  378,  378,  378,  378,  377,  505,  377,
     901       88,  513,  378,  378,  378,  378,  378,  378,  506,  489,
     902      500,  500,  500,  500,  500,  500,  237,  237,  237,  237,
     903      237,  237,  535,   88,  505,  514,  238,   88,  240,   88,
     904      241,  240,  246,  246,  246,  246,  106,  106,  508,  529,
     905      533,  505,  530,  501,  509,  509,   88,   88,  240,  381,
     906      240,  507,   88,  241,  675,  240,  382,  382,  382,  382,
     907      382,  382,  390,  508,   88,  384,   88,  505,  538,  539,
     908      509,  509,  238,  239,  240,  532,  241,  240,  385,  385,
     909      385,  385,  385,  385,   88,  392,  543,  393,   88,  383,
     910
     911      548,  394,  908,  908,  240,  239,  240,  395,  510,  241,
     912      510,  240,   88,  511,  511,  511,  511,  511,  511,  396,
     913       88,  386,   88,  393,   88,  537,  392,  394,  393,  534,
     914       88,  536,  394,   88,   88,   88,   88,  540,  515,  545,
     915       88,   88,   88,   88,  550,   88,  512,   88,  544,   88,
     916      396,  541,  542,   88,  393,  546,  553,  549,  394,  554,
     917      551,   88,  547,   88,  552,  556,  555,   88,   88,  559,
     918       88,   88,   88,   88,  557,   88,  558,  561,   88,   88,
     919       88,   88,  560,   88,   88,  562,   88,   88,  565,  569,
     920       88,  563,   88,  567,  564,   88,  573,  566,  570,  568,
     921
     922       88,   88,   88,   88,   88,  574,  571,   88,  572,  578,
     923      575,  581,  576,   88,  582,  580,   88,  577,   88,  579,
     924       88,   88,   88,  205,   88,  585,  586,   88,  583,  593,
     925      592,  505,  589,  591,  615,  584,  587,  588,  215,  215,
     926      215,  215,   88,   88,  590,  500,  500,  500,  500,  500,
     927      500,  382,  382,  382,  382,  382,  382,  505,  636,  634,
     928      615,  238,   88,  240,   88,  241,  240,  385,  385,  385,
     929      385,  385,  385,  908,  883,  635,  505,  638,  501,   88,
     930       88,  505,   88,  240,  502,  240,  506,  611,  241,  611,
     931      240,  614,  612,  612,  612,  612,  612,  612,   88,  637,
     932
     933      503,  647,  505,  641,  639,   88,   88,  505,  511,  511,
     934      511,  511,  511,  511,  510,  908,  510,  642,  640,  511,
     935      511,  511,  511,  511,  511,  613,  616,  616,  616,  616,
     936      616,  616,   88,   88,   88,  643,   88,   88,   88,   88,
     937       88,   88,  617,  649,  618,   88,  619,  618,  648,  645,
     938      651,  650,   88,  644,  653,  646,   88,   88,   88,  620,
     939       88,  656,  657,  654,  618,   88,  618,  659,  658,  619,
     940       88,  618,   88,  655,   88,   88,   88,  660,   88,   88,
     941      661,  663,   88,   88,  664,  662,   88,   88,  669,   88,
     942      666,   88,   88,  665,  667,  670,  671,  668,   88,   88,
     943
     944       88,   88,   88,   88,  673,   88,  677,   88,  676,  674,
     945      680,  672,  681,  679,   88,  682,   88,  908,  908,  683,
     946      684,   88,  678,  500,  500,  500,  500,  500,  500,  612,
     947      612,  612,  612,  612,  612,  611,  685,  611,  721,   88,
     948      612,  612,  612,  612,  612,  612,  616,  616,  616,  616,
     949      616,  616,  720,  705,  705,   88,  610,  703,  703,  703,
     950      703,  703,  703,  705,   88,  706,  908,  706,   88,  716,
     951      706,   88,  725,  617,   88,  618,  705,  619,  618,  620,
     952      719,  718,  717,   88,   88,   88,  705,  706,   88,  706,
     953      704,  722,  723,   88,  706,  618,  724,  618,   88,  729,
     954
     955      619,  726,  618,   88,   88,  728,  727,   88,   88,   88,
     956      735,  733,   88,   88,   88,   88,   88,   88,   88,   88,
     957       88,  731,   88,  738,   88,  730,  734,  736,  741,  732,
     958       88,  744,   88,  737,  739,   88,   88,  740,   88,   88,
     959      742,  748,  743,  749,  745,  746,   88,  747,  750,   88,
     960      753,   88,   88,   88,   88,  882,  751,  773,  752,  703,
     961      703,  703,  703,  703,  703,  616,  616,  616,  616,  616,
     962      616,   88,  767,  772,   88,  617,   88,  618,  769,  619,
     963      618,  768,   88,  770,   88,   88,   88,  771,  774,   88,
     964      776,   88,  704,   88,  779,  778,   88,  618,  707,  618,
     965
     966       88,   88,  619,  782,  618,  784,  777,  775,   88,   88,
     967      783,  785,   88,   88,   88,   88,   88,  780,   88,   88,
     968      787,   88,  786,  788,   88,  791,   88,  789,   88,   88,
     969       88,   88,   88,  813,  797,   88,  790,  792,  794,  798,
     970       88,   88,  793,  795,  814,  796,  703,  703,  703,  703,
     971      703,  703,  811,   88,   88,   88,   88,  812,  816,  819,
     972      821,   88,   88,  815,  822,  823,   88,  818,  820,   88,
     973       88,  817,  825,  824,   88,   88,   88,  826,   88,  760,
     974       88,   88,   88,   88,   88,  827,  847,   88,   88,   88,
     975      849,   88,  850,  852,   88,   88,   88,  853,  828,  829,
     976
     977      846,  830,  845,   88,   88,   88,  848,  844,  855,  851,
     978       88,   88,  857,  856,   88,   88,   88,  854,   88,   88,
     979      858,  871,  859,  870,   88,   88,   88,   88,   88,  875,
     980      860,  877,   88,  872,   88,  878,  869,   88,   88,   88,
     981       88,   88,   88,  873,  876,  885,  879,   88,  881,  874,
     982      880,  884,   88,   88,  892,  886,   88,  887,  888,  889,
     983       88,   88,   88,  890,  891,   88,   88,   88,  894,   88,
     984      896,   88,  897,   88,   88,   88,  895,  893,   88,   88,
     985       88,   88,   88,   88,  901,   88,   88,  908,  908,  900,
     986      868,  902,  908,  898,  899,  907,  867,  908,  905,  865,
     987
     988      908,  903,  904,  864,  906,   70,   70,   70,   70,   70,
     989       70,   70,   70,   70,   70,   70,   70,   70,   76,   76,
    987990       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
    988        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
    989        79,   79,   79,   87,  904,  861,   87,  904,   87,   87,
    990        87,   87,   87,  141,  860,  904,  859,  141,  141,  141,
    991       141,  141,  141,  202,  202,  202,  202,  202,  202,  202,
    992       202,  202,  202,  202,  202,  202,  207,  904,  858,  207,
    993        88,  207,  207,  207,  207,  207,  211,   88,  211,  211,
    994        88,  211,  211,  211,  211,  211,  211,  904,  211,  219,
    995       839,  904,  219,  219,  219,  219,  219,  219,  219,  219,
    996 
    997       838,  219,  242,  242,  242,  242,  242,  242,  242,  242,
    998       242,  242,  242,  242,  242,  256,  256,  836,  256,  904,
    999       834,  904,  256,  272,  832,  904,  272,  830,  272,  272,
    1000       272,  272,  272,  276,  828,  276,   88,   88,   88,  276,
    1001       278,   88,  278,   88,   88,   88,  278,  353,   88,  353,
    1002        88,   88,   88,  353,  355,   88,  355,  904,  806,  804,
    1003       355,  359,  904,  359,  904,  801,  799,  359,  361,  797,
    1004       361,   88,   88,   88,  361,  363,   88,  363,   88,   88,
    1005        88,  363,  370,  762,  370,  759,  758,  756,  370,  372,
    1006       208,  372,  752,  751,  683,  372,  387,   88,  387,  389,
    1007 
    1008       389,   88,  389,  389,  389,   88,  389,  256,  256,   88,
    1009       256,  272,   88,   88,  272,   88,  272,  272,  272,  272,
    1010       272,  399,   88,  399,   88,   88,   88,  399,  401,   88,
    1011       401,   88,   88,   88,  401,  403,   88,  403,  710,  709,
    1012       707,  403,  276,  705,  276,  405,  703,  405,  610,  698,
    1013       697,  405,  278,  695,  278,   87,  693,  691,   87,  689,
    1014        87,   87,   87,   87,   87,  202,  202,  202,  202,  202,
    1015       202,  202,  202,  202,  202,  202,  202,  202,  477,  477,
    1016       477,  477,  477,  477,  477,  477,  477,  477,  477,  477,
    1017       477,  478,  687,  478,  685,  683,   88,  478,  480,   88,
    1018 
    1019       480,   88,   88,   88,  480,  482,   88,  482,   88,   88,
    1020        88,  482,  353,   88,  353,  484,   88,  484,   88,  629,
    1021       627,  484,  355,  625,  355,  487,  623,  487,  621,  619,
    1022       512,  487,  359,  617,  359,  489,  617,  489,  606,  605,
    1023       603,  489,  361,  492,  361,  491,  492,  491,  601,  599,
    1024       597,  491,  363,  595,  363,  493,  593,  493,  591,   88,
    1025        88,  493,  370,   88,  370,  495,   88,  495,   88,   88,
    1026        88,  495,  372,   88,  372,  501,  524,  501,  522,  501,
    1027       520,  501,  387,  518,  387,  516,  387,  514,  387,  389,
    1028       389,  500,  389,  389,  389,  499,  389,  513,  496,  513,
    1029 
    1030       494,  366,  366,  513,  515,  492,  515,  490,  488,  485,
    1031       515,  517,  483,  517,  481,  479,   88,  517,  399,   88,
    1032       399,  519,   88,  519,  407,  406,  404,  519,  401,  402,
    1033       401,  521,  400,  521,  273,  268,  267,  521,  403,  396,
    1034       403,  523,  396,  523,  255,  386,  386,  523,  405,  243,
    1035       405,   87,  379,  373,   87,  371,   87,   87,   87,   87,
    1036        87,  477,  477,  477,  477,  477,  477,  477,  477,  477,
    1037       477,  477,  477,  477,  590,  369,  590,  365,  364,  362,
    1038       590,  478,  360,  478,  592,  356,  592,  354,  208,  204,
    1039       592,  480,   88,  480,  594,  280,  594,  279,  277,  273,
    1040 
    1041       594,  482,  268,  482,  596,  271,  596,  268,  266,  265,
    1042       596,  484,  264,  484,  598,  243,  598,  235,   86,   86,
    1043       598,  487,   88,  487,  600,  208,  600,  206,   86,  123,
    1044       600,  489,  118,  489,  491,   88,  491,  904,   71,   71,
    1045       491,  602,  904,  602,  904,  904,  904,  602,  493,  904,
    1046       493,  604,  904,  604,  904,  904,  904,  604,  495,  904,
    1047       495,  501,  904,  501,  904,  501,  904,  501,  389,  904,
    1048       389,  904,  904,  904,  389,  618,  904,  618,  904,  904,
    1049       904,  618,  513,  904,  513,  620,  904,  620,  904,  904,
    1050       904,  620,  515,  904,  515,  622,  904,  622,  904,  904,
    1051 
    1052       904,  622,  517,  904,  517,  624,  904,  624,  904,  904,
    1053       904,  624,  519,  904,  519,  626,  904,  626,  904,  904,
    1054       904,  626,  521,  904,  521,  628,  904,  628,  904,  904,
    1055       904,  628,  523,  904,  523,   87,  904,  904,   87,  904,
    1056        87,   87,   87,   87,   87,  682,  682,  682,  682,  682,
    1057       682,  682,  682,  682,  682,  682,  682,  682,  684,  904,
    1058       684,  904,  904,  904,  684,  590,  904,  590,  686,  904,
    1059       686,  904,  904,  904,  686,  592,  904,  592,  688,  904,
    1060       688,  904,  904,  904,  688,  594,  904,  594,  690,  904,
    1061       690,  904,  904,  904,  690,  596,  904,  596,  692,  904,
    1062 
    1063       692,  904,  904,  904,  692,  598,  904,  598,  694,  904,
    1064       694,  904,  904,  904,  694,  600,  904,  600,  696,  904,
    1065       696,  904,  904,  904,  696,  602,  904,  602,   87,  904,
    1066        87,  904,  904,  904,   87,  604,  904,  604,  501,  904,
    1067       501,  904,  904,  904,  501,  704,  904,  704,  904,  904,
    1068       904,  704,  618,  904,  618,  706,  904,  706,  904,  904,
    1069       904,  706,  620,  904,  620,  708,  904,  708,  904,  904,
    1070       904,  708,  622,  904,  622,  141,  904,  141,  904,  904,
    1071       904,  141,  624,  904,  624,  711,  904,  711,  626,  904,
    1072       626,   87,  904,  904,   87,  904,   87,   87,   87,   87,
    1073 
    1074        87,  628,  904,  628,  682,  682,  682,  682,  682,  682,
    1075       682,  682,  682,  682,  682,  682,  682,  750,  904,  750,
    1076       904,  904,  904,  750,  684,  904,  684,  207,  904,  207,
    1077       904,  904,  904,  207,  686,  904,  686,  753,  904,  753,
    1078       688,  904,  688,  207,  904,  904,  207,  904,  207,  207,
    1079       207,  207,  207,  690,  904,  690,  754,  904,  754,  692,
    1080       904,  692,  694,  904,  694,  755,  904,  755,  696,  904,
    1081       696,   87,  904,   87,  757,  904,  757,  904,  904,  904,
    1082       757,  704,  904,  704,  272,  904,  272,  904,  904,  904,
    1083       272,  706,  904,  706,  760,  904,  760,  708,  904,  708,
    1084 
    1085       141,  904,  141,  761,  904,  761,  904,  904,  904,  761,
    1086        87,  904,  904,   87,  904,   87,   87,   87,   87,   87,
    1087       795,  904,  795,  750,  904,  750,  207,  904,  207,  796,
    1088       904,  796,  904,  904,  904,  796,  798,  904,  798,  904,
    1089       904,  904,  798,  800,  904,  800,  904,  904,  904,  800,
    1090       802,  904,  802,  803,  904,  803,  904,  904,  904,  803,
    1091       805,  904,  805,  904,  904,  904,  805,  827,  904,  827,
    1092       904,  904,  904,  827,  829,  904,  829,  904,  904,  904,
    1093       829,  831,  904,  831,  904,  904,  904,  831,  833,  904,
    1094       833,  904,  904,  904,  833,  835,  904,  835,  904,  904,
    1095 
    1096       904,  835,  837,  904,  837,  904,  904,  904,  837,  628,
    1097       904,  628,  904,  904,  904,  628,  857,  904,  857,  904,
    1098       904,  904,  857,  690,  904,  690,  904,  904,  904,  690,
    1099       694,  904,  694,  904,  904,  904,  694,   87,  904,   87,
    1100       904,  904,  904,   87,  862,  904,  862,  904,  904,  904,
    1101       862,  141,  904,  141,  904,  904,  904,  141,  207,  904,
    1102       207,  904,  904,  904,  207,   11,  904,  904,  904,  904,
    1103       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1104       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1105       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1106 
    1107       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1108       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1109       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1110       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1111       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1112       904
     991       76,   79,   79,   79,   79,   79,   79,   79,   79,   79,
     992       79,   79,   79,   79,   87,  908,  863,   87,  908,   87,
     993       87,   87,   87,   87,  141,  862,   88,   88,  141,  141,
     994      141,  141,  141,  141,  203,  203,  203,  203,  203,  203,
     995      203,  203,  203,  203,  203,  203,  203,  208,   88,  908,
     996      208,  843,  208,  208,  208,  208,  208,  212,  908,  212,
     997      212,  842,  212,  212,  212,  212,  212,  212,  840,  212,
     998
     999      220,  908,  838,  220,  220,  220,  220,  220,  220,  220,
     1000      220,  908,  220,  243,  243,  243,  243,  243,  243,  243,
     1001      243,  243,  243,  243,  243,  243,  257,  257,  836,  257,
     1002      908,  834,  832,  257,  273,   88,   88,  273,   88,  273,
     1003      273,  273,  273,  273,  277,   88,  277,   88,   88,   88,
     1004      277,  279,   88,  279,   88,   88,   88,  279,  355,   88,
     1005      355,  908,  810,  808,  355,  357,  908,  357,  908,  805,
     1006      803,  357,  361,  801,  361,   88,   88,   88,  361,  363,
     1007       88,  363,   88,   88,   88,  363,  365,  766,  365,  763,
     1008      762,  760,  365,  372,  209,  372,  756,  755,  687,  372,
     1009
     1010      374,   88,  374,   88,   88,   88,  374,  389,   88,  389,
     1011      391,  391,   88,  391,  391,  391,   88,  391,  257,  257,
     1012       88,  257,  273,   88,   88,  273,   88,  273,  273,  273,
     1013      273,  273,  401,   88,  401,   88,   88,   88,  401,  403,
     1014       88,  403,  714,  713,  711,  403,  405,  709,  405,  707,
     1015      614,  702,  405,  277,  701,  277,  407,  699,  407,  697,
     1016      695,  693,  407,  279,  691,  279,   87,  689,  687,   87,
     1017       88,   87,   87,   87,   87,   87,  203,  203,  203,  203,
     1018      203,  203,  203,  203,  203,  203,  203,  203,  203,  480,
     1019      480,  480,  480,  480,  480,  480,  480,  480,  480,  480,
     1020
     1021      480,  480,  481,   88,  481,   88,   88,   88,  481,  483,
     1022       88,  483,   88,   88,   88,  483,  485,   88,  485,   88,
     1023       88,   88,  485,  355,  633,  355,  487,  631,  487,  629,
     1024      627,  625,  487,  357,  623,  357,  490,  515,  490,  621,
     1025      621,  610,  490,  361,  609,  361,  492,  607,  492,  495,
     1026      495,  605,  492,  363,  603,  363,  494,  601,  494,  599,
     1027      597,  595,  494,  365,   88,  365,  496,   88,  496,   88,
     1028       88,   88,  496,  372,   88,  372,  498,   88,  498,   88,
     1029      527,  525,  498,  374,  523,  374,  504,  521,  504,  519,
     1030      504,  517,  504,  389,  503,  389,  502,  389,  499,  389,
     1031
     1032      391,  391,  497,  391,  391,  391,  368,  391,  516,  368,
     1033      516,  495,  493,  491,  516,  518,  488,  518,  486,  484,
     1034      482,  518,  520,   88,  520,   88,   88,  409,  520,  401,
     1035      408,  401,  522,  406,  522,  404,  402,  274,  522,  403,
     1036      269,  403,  524,  268,  524,  398,  398,  256,  524,  405,
     1037      388,  405,  526,  388,  526,  244,  381,  375,  526,  407,
     1038      373,  407,   87,  371,  367,   87,  366,   87,   87,   87,
     1039       87,   87,  480,  480,  480,  480,  480,  480,  480,  480,
     1040      480,  480,  480,  480,  480,  594,  364,  594,  362,  358,
     1041      356,  594,  481,  209,  481,  596,  205,  596,   88,  281,
     1042
     1043      280,  596,  483,  278,  483,  598,  274,  598,  269,  272,
     1044      269,  598,  485,  267,  485,  600,  266,  600,  265,  244,
     1045      236,  600,  487,   86,  487,  602,   86,  602,   88,  209,
     1046      207,  602,  490,   86,  490,  604,  123,  604,  118,   88,
     1047      908,  604,  492,   71,  492,  494,   71,  494,  908,  908,
     1048      908,  494,  606,  908,  606,  908,  908,  908,  606,  496,
     1049      908,  496,  608,  908,  608,  908,  908,  908,  608,  498,
     1050      908,  498,  504,  908,  504,  908,  504,  908,  504,  391,
     1051      908,  391,  908,  908,  908,  391,  622,  908,  622,  908,
     1052      908,  908,  622,  516,  908,  516,  624,  908,  624,  908,
     1053
     1054      908,  908,  624,  518,  908,  518,  626,  908,  626,  908,
     1055      908,  908,  626,  520,  908,  520,  628,  908,  628,  908,
     1056      908,  908,  628,  522,  908,  522,  630,  908,  630,  908,
     1057      908,  908,  630,  524,  908,  524,  632,  908,  632,  908,
     1058      908,  908,  632,  526,  908,  526,   87,  908,  908,   87,
     1059      908,   87,   87,   87,   87,   87,  686,  686,  686,  686,
     1060      686,  686,  686,  686,  686,  686,  686,  686,  686,  688,
     1061      908,  688,  908,  908,  908,  688,  594,  908,  594,  690,
     1062      908,  690,  908,  908,  908,  690,  596,  908,  596,  692,
     1063      908,  692,  908,  908,  908,  692,  598,  908,  598,  694,
     1064
     1065      908,  694,  908,  908,  908,  694,  600,  908,  600,  696,
     1066      908,  696,  908,  908,  908,  696,  602,  908,  602,  698,
     1067      908,  698,  908,  908,  908,  698,  604,  908,  604,  700,
     1068      908,  700,  908,  908,  908,  700,  606,  908,  606,   87,
     1069      908,   87,  908,  908,  908,   87,  608,  908,  608,  504,
     1070      908,  504,  908,  908,  908,  504,  708,  908,  708,  908,
     1071      908,  908,  708,  622,  908,  622,  710,  908,  710,  908,
     1072      908,  908,  710,  624,  908,  624,  712,  908,  712,  908,
     1073      908,  908,  712,  626,  908,  626,  141,  908,  141,  908,
     1074      908,  908,  141,  628,  908,  628,  715,  908,  715,  630,
     1075
     1076      908,  630,   87,  908,  908,   87,  908,   87,   87,   87,
     1077       87,   87,  632,  908,  632,  686,  686,  686,  686,  686,
     1078      686,  686,  686,  686,  686,  686,  686,  686,  754,  908,
     1079      754,  908,  908,  908,  754,  688,  908,  688,  208,  908,
     1080      208,  908,  908,  908,  208,  690,  908,  690,  757,  908,
     1081      757,  692,  908,  692,  208,  908,  908,  208,  908,  208,
     1082      208,  208,  208,  208,  694,  908,  694,  758,  908,  758,
     1083      696,  908,  696,  698,  908,  698,  759,  908,  759,  700,
     1084      908,  700,   87,  908,   87,  761,  908,  761,  908,  908,
     1085      908,  761,  708,  908,  708,  273,  908,  273,  908,  908,
     1086
     1087      908,  273,  710,  908,  710,  764,  908,  764,  712,  908,
     1088      712,  141,  908,  141,  765,  908,  765,  908,  908,  908,
     1089      765,   87,  908,  908,   87,  908,   87,   87,   87,   87,
     1090       87,  799,  908,  799,  754,  908,  754,  208,  908,  208,
     1091      800,  908,  800,  908,  908,  908,  800,  802,  908,  802,
     1092      908,  908,  908,  802,  804,  908,  804,  908,  908,  908,
     1093      804,  806,  908,  806,  807,  908,  807,  908,  908,  908,
     1094      807,  809,  908,  809,  908,  908,  908,  809,  831,  908,
     1095      831,  908,  908,  908,  831,  833,  908,  833,  908,  908,
     1096      908,  833,  835,  908,  835,  908,  908,  908,  835,  837,
     1097
     1098      908,  837,  908,  908,  908,  837,  839,  908,  839,  908,
     1099      908,  908,  839,  841,  908,  841,  908,  908,  908,  841,
     1100      632,  908,  632,  908,  908,  908,  632,  861,  908,  861,
     1101      908,  908,  908,  861,  694,  908,  694,  908,  908,  908,
     1102      694,  698,  908,  698,  908,  908,  908,  698,   87,  908,
     1103       87,  908,  908,  908,   87,  866,  908,  866,  908,  908,
     1104      908,  866,  141,  908,  141,  908,  908,  908,  141,  208,
     1105      908,  208,  908,  908,  908,  208,   11,  908,  908,  908,
     1106      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1107      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1108
     1109      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1110      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1111      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1112      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1113      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1114      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1115      908,  908
    11131116    } ;
    11141117
    1115 static yyconst flex_int16_t yy_chk[2952] =
     1118static yyconst flex_int16_t yy_chk[2963] =
    11161119    {   0,
    11171120        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11341137        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11351138        5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
    1136         8,    9,   10,   37,   37,   20,   39,    9,   10,  903,
     1139        8,    9,   10,   37,   37,   20,   39,    9,   10,  907,
    11371140        7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
    11381141
     
    11421145        8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
    11431146       30,   30,   30,   30,   35,   57,   35,   35,   44,  127,
    1144        44,  127,  110,  116,   57,   30,   65,  544,   47,   30,
     1147       44,  127,  110,  116,   57,   30,   65,  547,   47,   30,
    11451148       47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
    11461149       45,   30,   40,   45,   45,   40,   49,   30,   45,   63,
    1147        62,   45,   49,   30,   74,  902,  544,   53,   63,   51,
     1150       62,   45,   49,   30,   74,  906,  547,   53,   63,   51,
    11481151       61,   30,   62,   55,   30,   31,  109,   31,   31,   31,
    11491152
    11501153       31,   31,   31,   50,   51,   53,   51,   65,   61,   54,
    11511154       74,   55,   50,   88,   31,   51,   50,   55,   31,   54,
    1152       109,   50,   52,  115,   31,   50,   54,   52,  182,  146,
    1153        31,   56,  108,  182,  146,   52,   31,   52,  108,   88,
    1154        52,   60,   31,  128,   52,  128,   60,  115,   56,  152,
    1155        31,   38,  894,   56,  112,   38,   38,   58,   38,   60,
    1156        38,   38,  114,   38,  108,   38,   59,  152,  114,   58,
    1157        58,  117,  112,  146,   38,   38,   38,  189,   59,   58,
    1158       112,  130,   58,  130,  143,   60,   59,  132,   60,  117,
    1159       189,   69,   69,   59,  114,   38,   69,  117,   38,  132,
    1160 
    1161       111,  132,   60,   68,   68,   68,   68,   68,   68,  893,
    1162       143,   68,   69,   69,   69,   69,   69,   69,   81,   81,
    1163        81,   81,   81,   81,  154,   38,   38,   78,   78,  133,
    1164       111,  133,   78,  154,   78,  111,  135,  162,  135,   78,
    1165        83,   83,   83,   83,   83,   83,  162,  890,   78,   78,
    1166        78,   78,   84,   84,   84,   84,   84,   84,  111,   78,
    1167       104,  104,  104,  104,  104,  104,  105,  105,  105,  105,
    1168       134,  134,  138,  134,  138,   78,  131,  155,   78,  136,
    1169       136,  136,  173,   78,   78,  153,  157,   78,   78,  140,
    1170       131,  140,  131,  155,  105,   78,  151,  173,   78,  105,
    1171 
    1172        78,   78,   78,  153,   78,   86,  156,  160,  157,   86,
    1173        86,  151,  183,  158,   86,   86,  168,   86,  151,   86,
    1174       161,  183,  105,  160,  156,  158,  163,  164,   86,   86,
    1175        86,  106,  164,  106,  106,  106,  106,  106,  106,  168,
    1176       169,  167,  161,  170,  166,  164,  165,  163,  163,   86,
    1177       106,  107,   86,  107,  166,  172,  107,  107,  107,  107,
    1178       107,  107,  167,  165,  170,  171,  106,  169,  177,  175,
    1179       171,  176,  106,  174,  178,  181,  184,  172,  180,  889,
    1180        86,  100,  100,  100,  100,  100,  100,  175,  171,  107,
    1181       174,  176,  181,  180,  185,  177,  178,  100,  100,  100,
    1182 
    1183       180,  100,  100,  184,  192,  185,  187,  186,  193,  221,
    1184       190,  221,  887,  188,  100,  185,  185,  187,  188,  100,
    1185       100,  100,  159,  192,  100,  186,  100,  159,  159,  159,
    1186       190,  159,  159,  188,  187,  159,  191,  159,  194,  208,
    1187       196,  191,  159,  159,  159,  195,  159,  197,  251,  212,
    1188       212,  194,  193,  196,  212,  193,  201,  201,  195,  194,
    1189       195,  201,  222,  191,  222,  208,  259,  197,  200,  200,
    1190       200,  200,  200,  200,  251,  287,  200,  201,  201,  201,
    1191       201,  201,  201,  203,  203,  223,  246,  223,  203,  205,
    1192       205,  226,  259,  226,  205,  287,  205,  215,  215,  215,
    1193 
    1194       215,  228,  224,  228,  203,  203,  203,  203,  203,  203,
    1195       205,  205,  205,  205,  205,  205,  224,  225,  224,  227,
    1196       227,  246,  227,  229,  229,  229,  231,  239,  231,  225,
    1197       215,  225,  232,  291,  232,  237,  237,  238,  269,  238,
    1198       269,  284,  238,  238,  238,  238,  238,  238,  273,  240,
    1199       239,  240,  432,  270,  240,  270,  291,  284,  237,  244,
    1200       244,  244,  244,  244,  244,  245,  432,  245,  245,  245,
    1201       245,  240,  286,  240,  273,  238,  282,  286,  240,  247,
    1202       247,  247,  247,  247,  247,  248,  248,  248,  248,  248,
    1203       248,  283,  244,  285,  282,  281,  247,  250,  294,  250,
    1204 
    1205       245,  293,  250,  250,  250,  250,  250,  250,  281,  283,
    1206       285,  288,  247,  294,  289,  331,  288,  297,  247,  249,
    1207       249,  249,  249,  249,  249,  256,  297,  293,  258,  258,
    1208       258,  258,  258,  258,  289,  249,  298,  249,  331,  249,
    1209       249,  263,  263,  263,  263,  263,  263,  292,  256,  298,
    1210       256,  295,  249,  296,  256,  299,  290,  249,  296,  249,
    1211       256,  258,  249,  300,  249,  292,  302,  295,  295,  306,
    1212       303,  290,  256,  307,  263,  303,  256,  290,  290,  304,
    1213       256,  300,  299,  305,  302,  308,  312,  309,  304,  306,
    1214       305,  307,  309,  310,  311,  313,  314,  315,  310,  316,
    1215 
    1216       311,  317,  314,  321,  313,  312,  308,  308,  316,  318,
    1217       319,  322,  320,  315,  318,  319,  317,  320,  323,  325,
    1218       326,  327,  321,  328,  327,  329,  330,  332,  333,  322,
    1219       325,  323,  334,  335,  320,  326,  336,  339,  329,  337,
    1220       338,  334,  328,  341,  342,  333,  343,  332,  330,  344,
    1221       339,  346,  341,  347,  348,  335,  346,  345,  338,  336,
    1222       387,  337,  344,  350,  343,  345,  349,  349,  347,  350,
    1223       387,  349,  348,  349,  357,  357,  357,  357,  358,  358,
    1224       358,  358,  367,  368,  367,  368,  387,  408,  342,  375,
    1225       375,  375,  375,  375,  375,  377,  388,  377,  408,  392,
    1226 
    1227       377,  377,  377,  377,  377,  377,  388,  357,  376,  376,
    1228       376,  376,  376,  376,  379,  379,  379,  379,  379,  379,
    1229       411,  409,  388,  392,  376,  410,  376,  413,  376,  376,
    1230       382,  382,  382,  382,  382,  382,  390,  409,  413,  411,
    1231       410,  376,  390,  394,  415,  419,  376,  379,  376,  417,
    1232       886,  376,  420,  376,  380,  380,  380,  380,  380,  380,
    1233       389,  394,  417,  382,  412,  420,  415,  419,  390,  394,
    1234       380,  380,  380,  412,  380,  380,  383,  383,  383,  383,
    1235       383,  383,  426,  389,  418,  389,  879,  380,  426,  389,
    1236       878,  393,  380,  380,  380,  389,  391,  380,  391,  380,
    1237 
    1238       418,  391,  391,  391,  391,  391,  391,  389,  414,  383,
    1239       416,  389,  421,  422,  393,  389,  393,  414,  423,  416,
    1240       393,  428,  424,  427,  429,  425,  393,  424,  421,  421,
    1241       430,  436,  428,  437,  391,  422,  423,  434,  393,  439,
    1242       425,  438,  393,  429,  427,  430,  393,  425,  441,  434,
    1243       440,  442,  436,  444,  438,  437,  440,  446,  447,  448,
    1244       442,  449,  439,  441,  450,  451,  452,  454,  444,  456,
    1245       459,  457,  458,  462,  448,  452,  460,  446,  461,  450,
    1246       447,  458,  464,  449,  454,  451,  465,  466,  463,  468,
    1247       469,  459,  456,  457,  466,  462,  460,  463,  461,  465,
    1248 
    1249       464,  467,  470,  474,  471,  472,  475,  477,  467,  877,
    1250       470,  526,  469,  477,  468,  475,  472,  504,  505,  476,
    1251       470,  471,  476,  876,  526,  474,  486,  486,  486,  486,
    1252       497,  497,  497,  497,  497,  497,  499,  499,  499,  499,
    1253       499,  499,  525,  504,  505,  528,  497,  529,  497,  530,
    1254       497,  497,  500,  500,  500,  500,  500,  500,  875,  525,
    1255       528,  501,  530,  497,  531,  538,  503,  529,  497,  499,
    1256       497,  501,  502,  497,  502,  497,  503,  502,  502,  502,
    1257       502,  502,  502,  533,  538,  500,  531,  501,  533,  532,
    1258       871,  867,  503,  507,  507,  507,  507,  507,  507,  509,
    1259 
    1260       535,  509,  532,  535,  509,  509,  509,  509,  509,  509,
    1261       502,  508,  508,  508,  508,  508,  508,  534,  536,  537,
    1262       539,  540,  542,  543,  864,  546,  547,  508,  534,  508,
    1263       540,  508,  508,  542,  537,  541,  543,  545,  536,  548,
    1264       541,  539,  554,  547,  508,  549,  545,  546,  548,  508,
    1265       549,  508,  551,  552,  508,  555,  508,  556,  551,  554,
    1266       557,  560,  552,  561,  559,  562,  564,  571,  567,  557,
    1267       555,  565,  556,  559,  568,  561,  565,  567,  560,  572,
    1268       562,  564,  573,  568,  576,  575,  578,  582,  577,  571,
    1269       579,  580,  572,  575,  576,  577,  582,  580,  585,  573,
    1270 
    1271       583,  586,  579,  588,  630,  863,  634,  728,  578,  630,
    1272       583,  633,  613,  613,  586,  585,  606,  606,  606,  606,
    1273       606,  606,  630,  634,  633,  588,  607,  607,  607,  607,
    1274       607,  607,  609,  614,  609,  613,  728,  609,  609,  609,
    1275       609,  609,  609,  612,  612,  612,  612,  612,  612,  606,
    1276       608,  608,  608,  608,  608,  608,  614,  615,  631,  615,
    1277       632,  635,  615,  638,  637,  631,  608,  636,  608,  632,
    1278       608,  608,  637,  648,  636,  639,  612,  641,  639,  615,
    1279       638,  615,  642,  608,  635,  640,  615,  643,  608,  644,
    1280       608,  645,  649,  608,  647,  608,  650,  642,  640,  641,
    1281 
    1282       646,  648,  652,  646,  653,  651,  644,  649,  654,  643,
    1283       656,  647,  657,  645,  651,  658,  650,  654,  662,  663,
    1284       652,  668,  665,  862,  658,  669,  653,  676,  679,  680,
    1285       668,  677,  669,  656,  657,  713,  676,  679,  662,  665,
    1286       712,  677,  718,  715,  680,  713,  663,  699,  699,  699,
    1287       699,  699,  699,  703,  703,  703,  703,  703,  703,  716,
    1288       721,  712,  718,  699,  734,  699,  716,  699,  699,  715,
    1289       717,  719,  734,  720,  719,  717,  720,  723,  721,  725,
    1290       699,  724,  727,  723,  731,  699,  703,  699,  725,  745,
    1291       699,  730,  699,  726,  724,  729,  726,  735,  729,  732,
    1292 
    1293       730,  733,  732,  727,  736,  737,  738,  735,  744,  741,
    1294       731,  745,  746,  748,  733,  738,  749,  736,  769,  861,
    1295       767,  748,  772,  769,  768,  749,  737,  741,  744,  770,
    1296       773,  774,  741,  746,  756,  756,  756,  756,  756,  756,
    1297       767,  768,  771,  775,  770,  772,  775,  773,  776,  777,
    1298       779,  781,  771,  779,  781,  782,  783,  774,  785,  783,
    1299       784,  776,  782,  784,  786,  788,  792,  756,  807,  809,
    1300       817,  812,  811,  785,  810,  811,  813,  777,  814,  813,
    1301       816,  814,  818,  820,  860,  818,  824,  786,  788,  792,
    1302       809,  821,  810,  812,  821,  807,  817,  822,  816,  823,
    1303 
    1304       822,  825,  824,  826,  841,  820,  842,  843,  823,  844,
    1305       843,  845,  825,  842,  846,  847,  855,  846,  844,  826,
    1306       850,  853,  854,  850,  853,  841,  859,  856,  855,  845,
    1307       865,  854,  847,  866,  868,  845,  856,  868,  866,  865,
    1308       869,  870,  872,  880,  873,  872,  870,  873,  874,  881,
    1309       869,  874,  882,  888,  884,  882,  883,  884,  885,  891,
    1310       895,  885,  892,  880,  881,  896,  883,  897,  899,  895,
    1311       898,  900,  901,  858,  857,  888,  852,  892,  896,  851,
    1312       891,  849,  901,  848,  840,  839,  899,  838,  837,  897,
    1313       836,  898,  835,  900,  905,  905,  905,  905,  905,  905,
    1314 
    1315       905,  905,  905,  905,  905,  905,  905,  906,  906,  906,
    1316       906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
    1317       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    1318       907,  907,  907,  908,  834,  833,  908,  832,  908,  908,
    1319       908,  908,  908,  909,  831,  830,  829,  909,  909,  909,
    1320       909,  909,  909,  910,  910,  910,  910,  910,  910,  910,
    1321       910,  910,  910,  910,  910,  910,  911,  828,  827,  911,
    1322       819,  911,  911,  911,  911,  911,  912,  815,  912,  912,
    1323       808,  912,  912,  912,  912,  912,  912,  806,  912,  913,
    1324       805,  804,  913,  913,  913,  913,  913,  913,  913,  913,
    1325 
    1326       803,  913,  914,  914,  914,  914,  914,  914,  914,  914,
    1327       914,  914,  914,  914,  914,  915,  915,  802,  915,  801,
    1328       800,  799,  915,  916,  798,  797,  916,  796,  916,  916,
    1329       916,  916,  916,  917,  795,  917,  794,  793,  791,  917,
    1330       918,  790,  918,  789,  787,  780,  918,  919,  778,  919,
    1331       766,  765,  764,  919,  920,  763,  920,  762,  761,  760,
    1332       920,  921,  759,  921,  758,  755,  754,  921,  922,  753,
    1333       922,  747,  743,  742,  922,  923,  740,  923,  739,  722,
    1334       714,  923,  924,  711,  924,  706,  704,  700,  924,  925,
    1335       690,  925,  686,  684,  682,  925,  926,  681,  926,  927,
    1336 
    1337       927,  678,  927,  927,  927,  675,  927,  928,  928,  674,
    1338       928,  929,  673,  672,  929,  671,  929,  929,  929,  929,
    1339       929,  930,  670,  930,  667,  666,  664,  930,  931,  661,
    1340       931,  660,  659,  655,  931,  932,  628,  932,  624,  622,
    1341       620,  932,  933,  618,  933,  934,  616,  934,  610,  604,
    1342       602,  934,  935,  600,  935,  936,  598,  596,  936,  594,
    1343       936,  936,  936,  936,  936,  937,  937,  937,  937,  937,
    1344       937,  937,  937,  937,  937,  937,  937,  937,  938,  938,
    1345       938,  938,  938,  938,  938,  938,  938,  938,  938,  938,
    1346       938,  939,  592,  939,  590,  589,  587,  939,  940,  584,
    1347 
    1348       940,  581,  574,  570,  940,  941,  569,  941,  566,  563,
    1349       558,  941,  942,  553,  942,  943,  550,  943,  527,  523,
    1350       521,  943,  944,  519,  944,  945,  517,  945,  515,  513,
    1351       512,  945,  946,  511,  946,  947,  510,  947,  498,  495,
    1352       493,  947,  948,  492,  948,  949,  491,  949,  489,  487,
    1353       484,  949,  950,  482,  950,  951,  480,  951,  478,  473,
    1354       455,  951,  952,  453,  952,  953,  445,  953,  443,  435,
    1355       433,  953,  954,  431,  954,  955,  405,  955,  403,  955,
    1356       401,  955,  956,  399,  956,  398,  956,  397,  956,  957,
    1357       957,  384,  957,  957,  957,  381,  957,  958,  372,  958,
    1358 
    1359       370,  369,  365,  958,  959,  363,  959,  361,  359,  355,
    1360       959,  960,  353,  960,  352,  351,  340,  960,  961,  324,
    1361       961,  962,  301,  962,  280,  278,  276,  962,  963,  275,
    1362       963,  964,  274,  964,  272,  271,  266,  964,  965,  262,
    1363       965,  966,  261,  966,  257,  254,  253,  966,  967,  242,
    1364       967,  968,  241,  234,  968,  233,  968,  968,  968,  968,
    1365       968,  969,  969,  969,  969,  969,  969,  969,  969,  969,
    1366       969,  969,  969,  969,  970,  230,  970,  220,  218,  217,
    1367       970,  971,  216,  971,  972,  210,  972,  209,  207,  202,
    1368       972,  973,  179,  973,  974,  150,  974,  148,  147,  141,
    1369 
    1370       974,  975,  139,  975,  976,  137,  976,  129,  126,  125,
    1371       976,  977,  121,  977,  978,  102,  978,   99,   96,   94,
    1372       978,  979,   87,  979,  980,   73,  980,   71,   67,   36,
    1373       980,  981,   33,  981,  982,   18,  982,   11,    4,    3,
    1374       982,  983,    0,  983,    0,    0,    0,  983,  984,    0,
    1375       984,  985,    0,  985,    0,    0,    0,  985,  986,    0,
    1376       986,  987,    0,  987,    0,  987,    0,  987,  988,    0,
    1377       988,    0,    0,    0,  988,  989,    0,  989,    0,    0,
    1378         0,  989,  990,    0,  990,  991,    0,  991,    0,    0,
    1379         0,  991,  992,    0,  992,  993,    0,  993,    0,    0,
    1380 
    1381         0,  993,  994,    0,  994,  995,    0,  995,    0,    0,
    1382         0,  995,  996,    0,  996,  997,    0,  997,    0,    0,
    1383         0,  997,  998,    0,  998,  999,    0,  999,    0,    0,
    1384         0,  999, 1000,    0, 1000, 1001,    0,    0, 1001,    0,
    1385      1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002,
    1386      1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003,    0,
    1387      1003,    0,    0,    0, 1003, 1004,    0, 1004, 1005,    0,
    1388      1005,    0,    0,    0, 1005, 1006,    0, 1006, 1007,    0,
    1389      1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,    0,
    1390      1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,    0,
    1391 
    1392      1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,    0,
    1393      1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,    0,
    1394      1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,    0,
    1395      1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,    0,
    1396      1019,    0,    0,    0, 1019, 1020,    0, 1020,    0,    0,
    1397         0, 1020, 1021,    0, 1021, 1022,    0, 1022,    0,    0,
    1398         0, 1022, 1023,    0, 1023, 1024,    0, 1024,    0,    0,
    1399         0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,    0,
    1400         0, 1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0,
    1401      1029, 1030,    0,    0, 1030,    0, 1030, 1030, 1030, 1030,
    1402 
    1403      1030, 1031,    0, 1031, 1032, 1032, 1032, 1032, 1032, 1032,
    1404      1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033,    0, 1033,
    1405         0,    0,    0, 1033, 1034,    0, 1034, 1035,    0, 1035,
    1406         0,    0,    0, 1035, 1036,    0, 1036, 1037,    0, 1037,
    1407      1038,    0, 1038, 1039,    0,    0, 1039,    0, 1039, 1039,
    1408      1039, 1039, 1039, 1040,    0, 1040, 1041,    0, 1041, 1042,
    1409         0, 1042, 1043,    0, 1043, 1044,    0, 1044, 1045,    0,
    1410      1045, 1046,    0, 1046, 1047,    0, 1047,    0,    0,    0,
    1411      1047, 1048,    0, 1048, 1049,    0, 1049,    0,    0,    0,
    1412      1049, 1050,    0, 1050, 1051,    0, 1051, 1052,    0, 1052,
    1413 
    1414      1053,    0, 1053, 1054,    0, 1054,    0,    0,    0, 1054,
    1415      1055,    0,    0, 1055,    0, 1055, 1055, 1055, 1055, 1055,
    1416      1056,    0, 1056, 1057,    0, 1057, 1058,    0, 1058, 1059,
    1417         0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,    0,
    1418         0,    0, 1060, 1061,    0, 1061,    0,    0,    0, 1061,
    1419      1062,    0, 1062, 1063,    0, 1063,    0,    0,    0, 1063,
    1420      1064,    0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,
    1421         0,    0,    0, 1065, 1066,    0, 1066,    0,    0,    0,
    1422      1066, 1067,    0, 1067,    0,    0,    0, 1067, 1068,    0,
    1423      1068,    0,    0,    0, 1068, 1069,    0, 1069,    0,    0,
    1424 
    1425         0, 1069, 1070,    0, 1070,    0,    0,    0, 1070, 1071,
    1426         0, 1071,    0,    0,    0, 1071, 1072,    0, 1072,    0,
    1427         0,    0, 1072, 1073,    0, 1073,    0,    0,    0, 1073,
    1428      1074,    0, 1074,    0,    0,    0, 1074, 1075,    0, 1075,
    1429         0,    0,    0, 1075, 1076,    0, 1076,    0,    0,    0,
    1430      1076, 1077,    0, 1077,    0,    0,    0, 1077, 1078,    0,
    1431      1078,    0,    0,    0, 1078,  904,  904,  904,  904,  904,
    1432       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1433       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1434       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1435 
    1436       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1437       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1438       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1439       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1440       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
    1441       904
     1155      109,   50,   52,  143,   31,   50,   54,   52,  112,  154,
     1156       31,   56,  111,  898,  152,   52,   31,   52,  154,   88,
     1157       52,  108,   31,  128,   52,  128,  112,  108,   56,  143,
     1158       31,   38,  152,   56,  112,   38,   38,   58,   38,   60,
     1159       38,   38,  111,   38,   60,   38,   59,  111,  115,   58,
     1160       58,  117,  158,  108,   38,   38,   38,   60,   59,   58,
     1161      131,  130,   58,  130,  158,  114,   59,  132,   59,  117,
     1162      111,  114,  115,   59,  131,   38,  131,  117,   38,  132,
     1163
     1164      133,  132,  133,   60,  173,  153,   60,   68,   68,   68,
     1165       68,   68,   68,   69,   69,   68,  165,  114,   69,  173,
     1166       60,  134,  134,  153,  134,   38,   38,   81,   81,   81,
     1167       81,   81,   81,  165,   69,   69,   69,   69,   69,   69,
     1168       78,   78,  135,  155,  135,   78,  146,   78,  136,  136,
     1169      136,  146,   78,   83,   83,   83,   83,   83,   83,  155,
     1170      897,   78,   78,   78,   78,   84,   84,   84,   84,   84,
     1171       84,  156,   78,  104,  104,  104,  104,  104,  104,  105,
     1172      105,  105,  105,  138,  140,  138,  140,  151,   78,  156,
     1173      146,   78,  306,  894,  157,  162,   78,   78,  161,  306,
     1174
     1175       78,   78,  151,  160,  162,  176,  168,  105,   78,  151,
     1176      169,   78,  105,   78,   78,   78,  157,   78,   86,  160,
     1177      161,  164,   86,   86,  166,  176,  164,   86,   86,  168,
     1178       86,  163,   86,  167,  166,  105,  170,  169,  175,  164,
     1179      893,   86,   86,   86,  106,  172,  106,  106,  106,  106,
     1180      106,  106,  163,  163,  167,  171,  175,  170,  174,  177,
     1181      171,  178,   86,  106,  107,   86,  107,  172,  183,  107,
     1182      107,  107,  107,  107,  107,  174,  182,  183,  171,  106,
     1183      184,  182,  186,  178,  181,  106,  177,  222,  891,  222,
     1184      192,  180,  187,   86,  100,  100,  100,  100,  100,  100,
     1185
     1186      186,  181,  107,  187,  188,  189,  180,  184,  185,  188,
     1187      100,  100,  100,  180,  100,  100,  190,  192,  189,  185,
     1188      187,  194,  732,  198,  188,  195,  191,  100,  193,  185,
     1189      185,  191,  100,  100,  100,  159,  190,  100,  195,  100,
     1190      159,  159,  159,  198,  159,  159,  195,  193,  159,  196,
     1191      159,  732,  209,  191,  197,  159,  159,  159,  223,  159,
     1192      223,  224,  196,  224,  196,  194,  286,  197,  194,  201,
     1193      201,  201,  201,  201,  201,  202,  202,  201,  209,  225,
     1194      202,  204,  204,  286,  213,  213,  204,  206,  206,  213,
     1195      890,  883,  206,  225,  206,  225,  202,  202,  202,  202,
     1196
     1197      202,  202,  204,  204,  204,  204,  204,  204,  206,  206,
     1198      206,  206,  206,  206,  216,  216,  216,  216,  226,  227,
     1199      247,  227,  228,  228,  229,  228,  229,  230,  230,  230,
     1200      226,  232,  226,  232,  233,  240,  233,  238,  238,  241,
     1201      270,  241,  270,  239,  241,  239,  282,  216,  239,  239,
     1202      239,  239,  239,  239,  271,  247,  271,  882,  240,  282,
     1203      238,  241,  246,  241,  246,  246,  246,  246,  241,  245,
     1204      245,  245,  245,  245,  245,  248,  248,  248,  248,  248,
     1205      248,  239,  249,  249,  249,  249,  249,  249,  283,  284,
     1206      288,  287,  248,  285,  289,  252,  287,  246,  295,  289,
     1207
     1208      297,  326,  245,  260,  274,  297,  283,  284,  248,  285,
     1209      288,  881,  326,  295,  248,  250,  250,  250,  250,  250,
     1210      250,  252,  257,  259,  259,  259,  259,  259,  259,  260,
     1211      274,  250,  251,  250,  251,  250,  250,  251,  251,  251,
     1212      251,  251,  251,  298,  292,  257,  880,  257,  250,  294,
     1213      290,  257,  298,  250,  293,  250,  259,  257,  250,  291,
     1214      250,  264,  264,  264,  264,  264,  264,  292,  296,  257,
     1215      290,  300,  293,  257,  291,  294,  299,  257,  301,  303,
     1216      291,  291,  304,  305,  296,  296,  307,  304,  309,  299,
     1217      308,  879,  305,  313,  264,  310,  301,  303,  300,  311,
     1218
     1219      310,  312,  314,  318,  311,  316,  307,  312,  308,  309,
     1220      309,  314,  313,  315,  317,  319,  322,  320,  318,  315,
     1221      319,  316,  320,  317,  321,  323,  324,  327,  328,  321,
     1222      329,  328,  330,  331,  332,  322,  333,  334,  335,  324,
     1223      336,  337,  327,  323,  338,  330,  321,  335,  340,  329,
     1224      339,  342,  344,  345,  334,  331,  333,  332,  343,  346,
     1225      349,  340,  336,  350,  337,  347,  338,  343,  339,  348,
     1226      342,  345,  346,  347,  348,  349,  875,  351,  351,  352,
     1227      413,  350,  351,  410,  351,  352,  359,  359,  359,  359,
     1228      360,  360,  360,  360,  410,  369,  344,  369,  370,  413,
     1229
     1230      370,  377,  377,  377,  377,  377,  377,  379,  389,  379,
     1231      417,  394,  379,  379,  379,  379,  379,  379,  389,  359,
     1232      378,  378,  378,  378,  378,  378,  381,  381,  381,  381,
     1233      381,  381,  417,  411,  389,  394,  378,  412,  378,  415,
     1234      378,  378,  384,  384,  384,  384,  384,  384,  392,  411,
     1235      415,  390,  412,  378,  392,  396,  578,  421,  378,  381,
     1236      378,  390,  420,  378,  578,  378,  382,  382,  382,  382,
     1237      382,  382,  391,  396,  424,  384,  414,  390,  420,  421,
     1238      392,  396,  382,  382,  382,  414,  382,  382,  385,  385,
     1239      385,  385,  385,  385,  428,  391,  424,  391,  871,  382,
     1240
     1241      428,  391,  868,  395,  382,  382,  382,  391,  393,  382,
     1242      393,  382,  419,  393,  393,  393,  393,  393,  393,  391,
     1243      416,  385,  418,  391,  422,  419,  395,  391,  395,  416,
     1244      425,  418,  395,  430,  426,  423,  429,  422,  395,  426,
     1245      427,  431,  434,  439,  430,  438,  393,  436,  425,  432,
     1246      395,  423,  423,  441,  395,  427,  434,  429,  395,  436,
     1247      431,  440,  427,  442,  432,  439,  438,  443,  444,  442,
     1248      446,  448,  449,  450,  440,  451,  441,  444,  452,  453,
     1249      454,  456,  443,  458,  461,  446,  459,  460,  450,  454,
     1250      462,  448,  463,  452,  449,  464,  460,  451,  456,  453,
     1251
     1252      465,  466,  467,  470,  468,  461,  458,  469,  459,  465,
     1253      462,  468,  463,  471,  469,  467,  472,  464,  473,  466,
     1254      474,  475,  477,  480,  478,  472,  473,  479,  470,  480,
     1255      479,  507,  475,  478,  508,  471,  473,  474,  489,  489,
     1256      489,  489,  528,  531,  477,  500,  500,  500,  500,  500,
     1257      500,  502,  502,  502,  502,  502,  502,  507,  531,  528,
     1258      508,  500,  529,  500,  533,  500,  500,  503,  503,  503,
     1259      503,  503,  503,  867,  866,  529,  504,  533,  500,  532,
     1260      542,  506,  534,  500,  502,  500,  504,  505,  500,  505,
     1261      500,  506,  505,  505,  505,  505,  505,  505,  536,  532,
     1262
     1263      503,  542,  504,  536,  534,  535,  537,  506,  510,  510,
     1264      510,  510,  510,  510,  512,  865,  512,  537,  535,  512,
     1265      512,  512,  512,  512,  512,  505,  511,  511,  511,  511,
     1266      511,  511,  538,  539,  540,  538,  541,  546,  544,  543,
     1267      545,  549,  511,  544,  511,  548,  511,  511,  543,  540,
     1268      546,  545,  551,  539,  548,  541,  550,  552,  555,  511,
     1269      557,  551,  552,  549,  511,  558,  511,  555,  554,  511,
     1270      559,  511,  560,  550,  554,  562,  563,  557,  564,  565,
     1271      558,  560,  567,  568,  562,  559,  570,  571,  568,  574,
     1272      564,  575,  576,  563,  565,  570,  571,  567,  579,  580,
     1273
     1274      581,  582,  589,  586,  575,  587,  580,  590,  579,  576,
     1275      583,  574,  586,  582,  592,  587,  583,  864,  863,  589,
     1276      590,  638,  581,  610,  610,  610,  610,  610,  610,  611,
     1277      611,  611,  611,  611,  611,  613,  592,  613,  638,  637,
     1278      613,  613,  613,  613,  613,  613,  616,  616,  616,  616,
     1279      616,  616,  637,  617,  617,  642,  610,  612,  612,  612,
     1280      612,  612,  612,  618,  634,  619,  862,  619,  639,  634,
     1281      619,  636,  642,  612,  635,  612,  617,  612,  612,  616,
     1282      636,  635,  634,  645,  646,  640,  618,  619,  641,  619,
     1283      612,  639,  640,  644,  619,  612,  641,  612,  643,  646,
     1284
     1285      612,  643,  612,  647,  648,  645,  644,  649,  650,  651,
     1286      652,  650,  653,  654,  655,  657,  656,  660,  667,  658,
     1287      661,  648,  662,  655,  666,  647,  651,  653,  658,  649,
     1288      669,  662,  672,  654,  656,  684,  673,  657,  652,  680,
     1289      660,  672,  661,  673,  666,  667,  681,  669,  680,  683,
     1290      684,  716,  719,  722,  723,  861,  681,  723,  683,  703,
     1291      703,  703,  703,  703,  703,  707,  707,  707,  707,  707,
     1292      707,  717,  716,  722,  856,  703,  720,  703,  719,  703,
     1293      703,  717,  721,  720,  727,  724,  729,  721,  724,  725,
     1294      727,  730,  703,  728,  730,  729,  731,  703,  707,  703,
     1295
     1296      733,  734,  703,  733,  703,  735,  728,  725,  736,  737,
     1297      734,  736,  738,  739,  740,  741,  742,  731,  748,  745,
     1298      738,  749,  737,  739,  750,  742,  752,  740,  773,  774,
     1299      753,  735,  771,  773,  752,  776,  741,  745,  748,  753,
     1300      772,  778,  745,  749,  774,  750,  760,  760,  760,  760,
     1301      760,  760,  771,  775,  777,  780,  779,  772,  776,  779,
     1302      781,  783,  785,  775,  783,  785,  786,  778,  780,  787,
     1303      789,  777,  787,  786,  788,  790,  792,  788,  796,  760,
     1304      811,  813,  814,  815,  816,  789,  815,  817,  781,  818,
     1305      817,  820,  818,  821,  822,  824,  855,  822,  790,  792,
     1306
     1307      814,  796,  813,  827,  828,  825,  816,  811,  825,  820,
     1308      826,  829,  827,  826,  830,  845,  846,  824,  847,  821,
     1309      828,  847,  829,  846,  848,  849,  850,  851,  854,  850,
     1310      830,  854,  857,  848,  884,  857,  845,  858,  859,  860,
     1311      870,  853,  869,  849,  851,  870,  858,  873,  860,  849,
     1312      859,  869,  872,  874,  884,  872,  876,  873,  874,  876,
     1313      877,  878,  885,  877,  878,  886,  887,  888,  886,  889,
     1314      888,  892,  889,  895,  896,  899,  887,  885,  900,  901,
     1315      903,  902,  904,  852,  899,  905,  844,  843,  842,  896,
     1316      841,  900,  840,  892,  895,  905,  839,  838,  903,  837,
     1317
     1318      836,  901,  902,  835,  904,  909,  909,  909,  909,  909,
     1319      909,  909,  909,  909,  909,  909,  909,  909,  910,  910,
     1320      910,  910,  910,  910,  910,  910,  910,  910,  910,  910,
     1321      910,  911,  911,  911,  911,  911,  911,  911,  911,  911,
     1322      911,  911,  911,  911,  912,  834,  833,  912,  832,  912,
     1323      912,  912,  912,  912,  913,  831,  823,  819,  913,  913,
     1324      913,  913,  913,  913,  914,  914,  914,  914,  914,  914,
     1325      914,  914,  914,  914,  914,  914,  914,  915,  812,  810,
     1326      915,  809,  915,  915,  915,  915,  915,  916,  808,  916,
     1327      916,  807,  916,  916,  916,  916,  916,  916,  806,  916,
     1328
     1329      917,  805,  804,  917,  917,  917,  917,  917,  917,  917,
     1330      917,  803,  917,  918,  918,  918,  918,  918,  918,  918,
     1331      918,  918,  918,  918,  918,  918,  919,  919,  802,  919,
     1332      801,  800,  799,  919,  920,  798,  797,  920,  795,  920,
     1333      920,  920,  920,  920,  921,  794,  921,  793,  791,  784,
     1334      921,  922,  782,  922,  770,  769,  768,  922,  923,  767,
     1335      923,  766,  765,  764,  923,  924,  763,  924,  762,  759,
     1336      758,  924,  925,  757,  925,  751,  747,  746,  925,  926,
     1337      744,  926,  743,  726,  718,  926,  927,  715,  927,  710,
     1338      708,  704,  927,  928,  694,  928,  690,  688,  686,  928,
     1339
     1340      929,  685,  929,  682,  679,  678,  929,  930,  677,  930,
     1341      931,  931,  676,  931,  931,  931,  675,  931,  932,  932,
     1342      674,  932,  933,  671,  670,  933,  668,  933,  933,  933,
     1343      933,  933,  934,  665,  934,  664,  663,  659,  934,  935,
     1344      632,  935,  628,  626,  624,  935,  936,  622,  936,  620,
     1345      614,  608,  936,  937,  606,  937,  938,  604,  938,  602,
     1346      600,  598,  938,  939,  596,  939,  940,  594,  593,  940,
     1347      591,  940,  940,  940,  940,  940,  941,  941,  941,  941,
     1348      941,  941,  941,  941,  941,  941,  941,  941,  941,  942,
     1349      942,  942,  942,  942,  942,  942,  942,  942,  942,  942,
     1350
     1351      942,  942,  943,  588,  943,  585,  584,  577,  943,  944,
     1352      573,  944,  572,  569,  566,  944,  945,  561,  945,  556,
     1353      553,  530,  945,  946,  526,  946,  947,  524,  947,  522,
     1354      520,  518,  947,  948,  516,  948,  949,  515,  949,  514,
     1355      513,  501,  949,  950,  498,  950,  951,  496,  951,  495,
     1356      494,  492,  951,  952,  490,  952,  953,  487,  953,  485,
     1357      483,  481,  953,  954,  476,  954,  955,  457,  955,  455,
     1358      447,  445,  955,  956,  437,  956,  957,  435,  957,  433,
     1359      407,  405,  957,  958,  403,  958,  959,  401,  959,  400,
     1360      959,  399,  959,  960,  386,  960,  383,  960,  374,  960,
     1361
     1362      961,  961,  372,  961,  961,  961,  371,  961,  962,  367,
     1363      962,  365,  363,  361,  962,  963,  357,  963,  355,  354,
     1364      353,  963,  964,  341,  964,  325,  302,  281,  964,  965,
     1365      279,  965,  966,  277,  966,  276,  275,  273,  966,  967,
     1366      272,  967,  968,  267,  968,  263,  262,  258,  968,  969,
     1367      255,  969,  970,  254,  970,  243,  242,  235,  970,  971,
     1368      234,  971,  972,  231,  221,  972,  219,  972,  972,  972,
     1369      972,  972,  973,  973,  973,  973,  973,  973,  973,  973,
     1370      973,  973,  973,  973,  973,  974,  218,  974,  217,  211,
     1371      210,  974,  975,  208,  975,  976,  203,  976,  179,  150,
     1372
     1373      148,  976,  977,  147,  977,  978,  141,  978,  139,  137,
     1374      129,  978,  979,  126,  979,  980,  125,  980,  121,  102,
     1375       99,  980,  981,   96,  981,  982,   94,  982,   87,   73,
     1376       71,  982,  983,   67,  983,  984,   36,  984,   33,   18,
     1377       11,  984,  985,    4,  985,  986,    3,  986,    0,    0,
     1378        0,  986,  987,    0,  987,    0,    0,    0,  987,  988,
     1379        0,  988,  989,    0,  989,    0,    0,    0,  989,  990,
     1380        0,  990,  991,    0,  991,    0,  991,    0,  991,  992,
     1381        0,  992,    0,    0,    0,  992,  993,    0,  993,    0,
     1382        0,    0,  993,  994,    0,  994,  995,    0,  995,    0,
     1383
     1384        0,    0,  995,  996,    0,  996,  997,    0,  997,    0,
     1385        0,    0,  997,  998,    0,  998,  999,    0,  999,    0,
     1386        0,    0,  999, 1000,    0, 1000, 1001,    0, 1001,    0,
     1387        0,    0, 1001, 1002,    0, 1002, 1003,    0, 1003,    0,
     1388        0,    0, 1003, 1004,    0, 1004, 1005,    0,    0, 1005,
     1389        0, 1005, 1005, 1005, 1005, 1005, 1006, 1006, 1006, 1006,
     1390     1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1007,
     1391        0, 1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,
     1392        0, 1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,
     1393        0, 1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,
     1394
     1395        0, 1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,
     1396        0, 1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,
     1397        0, 1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,
     1398        0, 1019,    0,    0,    0, 1019, 1020,    0, 1020, 1021,
     1399        0, 1021,    0,    0,    0, 1021, 1022,    0, 1022, 1023,
     1400        0, 1023,    0,    0,    0, 1023, 1024,    0, 1024,    0,
     1401        0,    0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,
     1402        0,    0, 1026, 1027,    0, 1027, 1028,    0, 1028,    0,
     1403        0,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
     1404        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032, 1033,
     1405
     1406        0, 1033, 1034,    0,    0, 1034,    0, 1034, 1034, 1034,
     1407     1034, 1034, 1035,    0, 1035, 1036, 1036, 1036, 1036, 1036,
     1408     1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037,    0,
     1409     1037,    0,    0,    0, 1037, 1038,    0, 1038, 1039,    0,
     1410     1039,    0,    0,    0, 1039, 1040,    0, 1040, 1041,    0,
     1411     1041, 1042,    0, 1042, 1043,    0,    0, 1043,    0, 1043,
     1412     1043, 1043, 1043, 1043, 1044,    0, 1044, 1045,    0, 1045,
     1413     1046,    0, 1046, 1047,    0, 1047, 1048,    0, 1048, 1049,
     1414        0, 1049, 1050,    0, 1050, 1051,    0, 1051,    0,    0,
     1415        0, 1051, 1052,    0, 1052, 1053,    0, 1053,    0,    0,
     1416
     1417        0, 1053, 1054,    0, 1054, 1055,    0, 1055, 1056,    0,
     1418     1056, 1057,    0, 1057, 1058,    0, 1058,    0,    0,    0,
     1419     1058, 1059,    0,    0, 1059,    0, 1059, 1059, 1059, 1059,
     1420     1059, 1060,    0, 1060, 1061,    0, 1061, 1062,    0, 1062,
     1421     1063,    0, 1063,    0,    0,    0, 1063, 1064,    0, 1064,
     1422        0,    0,    0, 1064, 1065,    0, 1065,    0,    0,    0,
     1423     1065, 1066,    0, 1066, 1067,    0, 1067,    0,    0,    0,
     1424     1067, 1068,    0, 1068,    0,    0,    0, 1068, 1069,    0,
     1425     1069,    0,    0,    0, 1069, 1070,    0, 1070,    0,    0,
     1426        0, 1070, 1071,    0, 1071,    0,    0,    0, 1071, 1072,
     1427
     1428        0, 1072,    0,    0,    0, 1072, 1073,    0, 1073,    0,
     1429        0,    0, 1073, 1074,    0, 1074,    0,    0,    0, 1074,
     1430     1075,    0, 1075,    0,    0,    0, 1075, 1076,    0, 1076,
     1431        0,    0,    0, 1076, 1077,    0, 1077,    0,    0,    0,
     1432     1077, 1078,    0, 1078,    0,    0,    0, 1078, 1079,    0,
     1433     1079,    0,    0,    0, 1079, 1080,    0, 1080,    0,    0,
     1434        0, 1080, 1081,    0, 1081,    0,    0,    0, 1081, 1082,
     1435        0, 1082,    0,    0,    0, 1082,  908,  908,  908,  908,
     1436      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1437      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1438
     1439      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1440      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1441      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1442      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1443      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1444      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1445      908,  908
    14421446    } ;
    14431447
    14441448/* Table of booleans, true if rule could match eol. */
    1445 static yyconst flex_int32_t yy_rule_can_match_eol[186] =
     1449static yyconst flex_int32_t yy_rule_can_match_eol[187] =
    14461450    {   0,
    144714511, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    14511455    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14521456    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1453     0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1457    0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14541458    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14551459    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1456     0, 0, 0, 0, 0, 0,     };
     1460    0, 0, 0, 0, 0, 0, 0,     };
    14571461
    14581462static yy_state_type yy_last_accepting_state;
     
    14761480 * The contents of this file are covered under the licence agreement in the
    14771481 * file "LICENCE" distributed with Cforall.
    1478  * 
    1479  * lex.l -- 
    1480  * 
     1482 *
     1483 * lex.l --
     1484 *
    14811485 * Author           : Peter A. Buhr
    14821486 * Created On       : Sat Sep 22 08:58:10 2001
     
    15441548
    15451549
    1546 #line 1547 "Parser/lex.cc"
     1550#line 1551 "Parser/lex.cc"
    15471551
    15481552#define INITIAL 0
     
    17391743
    17401744                                   /* line directives */
    1741 #line 1742 "Parser/lex.cc"
     1745#line 1746 "Parser/lex.cc"
    17421746
    17431747        if ( !(yy_init) )
     
    17931797                                {
    17941798                                yy_current_state = (int) yy_def[yy_current_state];
    1795                                 if ( yy_current_state >= 905 )
     1799                                if ( yy_current_state >= 909 )
    17961800                                        yy_c = yy_meta[(unsigned int) yy_c];
    17971801                                }
     
    17991803                        ++yy_cp;
    18001804                        }
    1801                 while ( yy_base[yy_current_state] != 2866 );
     1805                while ( yy_base[yy_current_state] != 2877 );
    18021806
    18031807yy_find_action:
     
    23202324YY_RULE_SETUP
    23212325#line 260 "lex.ll"
     2326{ KEYWORD_RETURN(TTYPE); }                              // CFA
     2327        YY_BREAK
     2328case 93:
     2329YY_RULE_SETUP
     2330#line 261 "lex.ll"
    23222331{ KEYWORD_RETURN(TYPEDEF); }
    2323         YY_BREAK
    2324 case 93:
    2325 YY_RULE_SETUP
    2326 #line 261 "lex.ll"
    2327 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    23282332        YY_BREAK
    23292333case 94:
     
    23402344YY_RULE_SETUP
    23412345#line 264 "lex.ll"
     2346{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2347        YY_BREAK
     2348case 97:
     2349YY_RULE_SETUP
     2350#line 265 "lex.ll"
    23422351{ KEYWORD_RETURN(UNION); }
    23432352        YY_BREAK
    2344 case 97:
    2345 YY_RULE_SETUP
    2346 #line 265 "lex.ll"
     2353case 98:
     2354YY_RULE_SETUP
     2355#line 266 "lex.ll"
    23472356{ KEYWORD_RETURN(UNSIGNED); }
    23482357        YY_BREAK
    2349 case 98:
    2350 YY_RULE_SETUP
    2351 #line 266 "lex.ll"
     2358case 99:
     2359YY_RULE_SETUP
     2360#line 267 "lex.ll"
    23522361{ KEYWORD_RETURN(VALIST); }                     // GCC
    23532362        YY_BREAK
    2354 case 99:
    2355 YY_RULE_SETUP
    2356 #line 267 "lex.ll"
     2363case 100:
     2364YY_RULE_SETUP
     2365#line 268 "lex.ll"
    23572366{ KEYWORD_RETURN(VOID); }
    23582367        YY_BREAK
    2359 case 100:
    2360 YY_RULE_SETUP
    2361 #line 268 "lex.ll"
     2368case 101:
     2369YY_RULE_SETUP
     2370#line 269 "lex.ll"
    23622371{ KEYWORD_RETURN(VOLATILE); }
    2363         YY_BREAK
    2364 case 101:
    2365 YY_RULE_SETUP
    2366 #line 269 "lex.ll"
    2367 { KEYWORD_RETURN(VOLATILE); }                   // GCC
    23682372        YY_BREAK
    23692373case 102:
     
    23752379YY_RULE_SETUP
    23762380#line 271 "lex.ll"
     2381{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2382        YY_BREAK
     2383case 104:
     2384YY_RULE_SETUP
     2385#line 272 "lex.ll"
    23772386{ KEYWORD_RETURN(WHILE); }
    23782387        YY_BREAK
    2379 case 104:
    2380 YY_RULE_SETUP
    2381 #line 272 "lex.ll"
     2388case 105:
     2389YY_RULE_SETUP
     2390#line 273 "lex.ll"
    23822391{ NUMERIC_RETURN(ZERO_T); }                             // CFA
    23832392        YY_BREAK
    23842393/* identifier */
    2385 case 105:
    2386 YY_RULE_SETUP
    2387 #line 275 "lex.ll"
     2394case 106:
     2395YY_RULE_SETUP
     2396#line 276 "lex.ll"
    23882397{ IDENTIFIER_RETURN(); }
    23892398        YY_BREAK
    2390 case 106:
    2391 YY_RULE_SETUP
    2392 #line 276 "lex.ll"
     2399case 107:
     2400YY_RULE_SETUP
     2401#line 277 "lex.ll"
    23932402{ ATTRIBUTE_RETURN(); }
    23942403        YY_BREAK
    2395 case 107:
    2396 YY_RULE_SETUP
    2397 #line 277 "lex.ll"
     2404case 108:
     2405YY_RULE_SETUP
     2406#line 278 "lex.ll"
    23982407{ BEGIN BKQUOTE; }
    23992408        YY_BREAK
    2400 case 108:
    2401 YY_RULE_SETUP
    2402 #line 278 "lex.ll"
     2409case 109:
     2410YY_RULE_SETUP
     2411#line 279 "lex.ll"
    24032412{ IDENTIFIER_RETURN(); }
    24042413        YY_BREAK
    2405 case 109:
    2406 YY_RULE_SETUP
    2407 #line 279 "lex.ll"
     2414case 110:
     2415YY_RULE_SETUP
     2416#line 280 "lex.ll"
    24082417{ BEGIN 0; }
    24092418        YY_BREAK
    24102419/* numeric constants */
    2411 case 110:
    2412 YY_RULE_SETUP
    2413 #line 282 "lex.ll"
     2420case 111:
     2421YY_RULE_SETUP
     2422#line 283 "lex.ll"
    24142423{ NUMERIC_RETURN(ZERO); }                               // CFA
    24152424        YY_BREAK
    2416 case 111:
    2417 YY_RULE_SETUP
    2418 #line 283 "lex.ll"
     2425case 112:
     2426YY_RULE_SETUP
     2427#line 284 "lex.ll"
    24192428{ NUMERIC_RETURN(ONE); }                                // CFA
    2420         YY_BREAK
    2421 case 112:
    2422 YY_RULE_SETUP
    2423 #line 284 "lex.ll"
    2424 { NUMERIC_RETURN(INTEGERconstant); }
    24252429        YY_BREAK
    24262430case 113:
     
    24372441YY_RULE_SETUP
    24382442#line 287 "lex.ll"
     2443{ NUMERIC_RETURN(INTEGERconstant); }
     2444        YY_BREAK
     2445case 116:
     2446YY_RULE_SETUP
     2447#line 288 "lex.ll"
    24392448{ NUMERIC_RETURN(REALDECIMALconstant); } // must appear before floating_constant
    24402449        YY_BREAK
    2441 case 116:
    2442 YY_RULE_SETUP
    2443 #line 288 "lex.ll"
     2450case 117:
     2451YY_RULE_SETUP
     2452#line 289 "lex.ll"
    24442453{ NUMERIC_RETURN(REALFRACTIONconstant); } // must appear before floating_constant
    2445         YY_BREAK
    2446 case 117:
    2447 YY_RULE_SETUP
    2448 #line 289 "lex.ll"
    2449 { NUMERIC_RETURN(FLOATINGconstant); }
    24502454        YY_BREAK
    24512455case 118:
     
    24542458{ NUMERIC_RETURN(FLOATINGconstant); }
    24552459        YY_BREAK
     2460case 119:
     2461YY_RULE_SETUP
     2462#line 291 "lex.ll"
     2463{ NUMERIC_RETURN(FLOATINGconstant); }
     2464        YY_BREAK
    24562465/* character constant, allows empty value */
    2457 case 119:
    2458 YY_RULE_SETUP
    2459 #line 293 "lex.ll"
     2466case 120:
     2467YY_RULE_SETUP
     2468#line 294 "lex.ll"
    24602469{ BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
    24612470        YY_BREAK
    2462 case 120:
    2463 YY_RULE_SETUP
    2464 #line 294 "lex.ll"
     2471case 121:
     2472YY_RULE_SETUP
     2473#line 295 "lex.ll"
    24652474{ strtext->append( yytext, yyleng ); }
    24662475        YY_BREAK
    2467 case 121:
    2468 /* rule 121 can match eol */
    2469 YY_RULE_SETUP
    2470 #line 295 "lex.ll"
     2476case 122:
     2477/* rule 122 can match eol */
     2478YY_RULE_SETUP
     2479#line 296 "lex.ll"
    24712480{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
    24722481        YY_BREAK
    24732482/* ' stop highlighting */
    24742483/* string constant */
    2475 case 122:
    2476 YY_RULE_SETUP
    2477 #line 299 "lex.ll"
     2484case 123:
     2485YY_RULE_SETUP
     2486#line 300 "lex.ll"
    24782487{ BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
    24792488        YY_BREAK
    2480 case 123:
    2481 YY_RULE_SETUP
    2482 #line 300 "lex.ll"
     2489case 124:
     2490YY_RULE_SETUP
     2491#line 301 "lex.ll"
    24832492{ strtext->append( yytext, yyleng ); }
    24842493        YY_BREAK
    2485 case 124:
    2486 /* rule 124 can match eol */
    2487 YY_RULE_SETUP
    2488 #line 301 "lex.ll"
     2494case 125:
     2495/* rule 125 can match eol */
     2496YY_RULE_SETUP
     2497#line 302 "lex.ll"
    24892498{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
    24902499        YY_BREAK
    24912500/* " stop highlighting */
    24922501/* common character/string constant */
    2493 case 125:
    2494 YY_RULE_SETUP
    2495 #line 305 "lex.ll"
     2502case 126:
     2503YY_RULE_SETUP
     2504#line 306 "lex.ll"
    24962505{ rm_underscore(); strtext->append( yytext, yyleng ); }
    24972506        YY_BREAK
    2498 case 126:
    2499 /* rule 126 can match eol */
    2500 YY_RULE_SETUP
    2501 #line 306 "lex.ll"
     2507case 127:
     2508/* rule 127 can match eol */
     2509YY_RULE_SETUP
     2510#line 307 "lex.ll"
    25022511{}                                              // continuation (ALSO HANDLED BY CPP)
    25032512        YY_BREAK
    2504 case 127:
    2505 YY_RULE_SETUP
    2506 #line 307 "lex.ll"
     2513case 128:
     2514YY_RULE_SETUP
     2515#line 308 "lex.ll"
    25072516{ strtext->append( yytext, yyleng ); } // unknown escape character
    25082517        YY_BREAK
    25092518/* punctuation */
    2510 case 128:
    2511 YY_RULE_SETUP
    2512 #line 310 "lex.ll"
    2513 { ASCIIOP_RETURN(); }
    2514         YY_BREAK
    25152519case 129:
    25162520YY_RULE_SETUP
     
    25412545YY_RULE_SETUP
    25422546#line 316 "lex.ll"
     2547{ ASCIIOP_RETURN(); }
     2548        YY_BREAK
     2549case 135:
     2550YY_RULE_SETUP
     2551#line 317 "lex.ll"
    25432552{ ASCIIOP_RETURN(); }                                   // also operator
    2544         YY_BREAK
    2545 case 135:
    2546 YY_RULE_SETUP
    2547 #line 317 "lex.ll"
    2548 { ASCIIOP_RETURN(); }
    25492553        YY_BREAK
    25502554case 136:
     
    25562560YY_RULE_SETUP
    25572561#line 319 "lex.ll"
     2562{ ASCIIOP_RETURN(); }
     2563        YY_BREAK
     2564case 138:
     2565YY_RULE_SETUP
     2566#line 320 "lex.ll"
    25582567{ ASCIIOP_RETURN(); }                                   // also operator
    25592568        YY_BREAK
    2560 case 138:
    2561 YY_RULE_SETUP
    2562 #line 320 "lex.ll"
     2569case 139:
     2570YY_RULE_SETUP
     2571#line 321 "lex.ll"
    25632572{ NAMEDOP_RETURN(ELLIPSIS); }
    25642573        YY_BREAK
    25652574/* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
    2566 case 139:
    2567 YY_RULE_SETUP
    2568 #line 323 "lex.ll"
     2575case 140:
     2576YY_RULE_SETUP
     2577#line 324 "lex.ll"
    25692578{ RETURN_VAL('['); }
    25702579        YY_BREAK
    2571 case 140:
    2572 YY_RULE_SETUP
    2573 #line 324 "lex.ll"
     2580case 141:
     2581YY_RULE_SETUP
     2582#line 325 "lex.ll"
    25742583{ RETURN_VAL(']'); }
    25752584        YY_BREAK
    2576 case 141:
    2577 YY_RULE_SETUP
    2578 #line 325 "lex.ll"
     2585case 142:
     2586YY_RULE_SETUP
     2587#line 326 "lex.ll"
    25792588{ RETURN_VAL('{'); }
    25802589        YY_BREAK
    2581 case 142:
    2582 YY_RULE_SETUP
    2583 #line 326 "lex.ll"
     2590case 143:
     2591YY_RULE_SETUP
     2592#line 327 "lex.ll"
    25842593{ RETURN_VAL('}'); }
    25852594        YY_BREAK
    25862595/* operators */
    2587 case 143:
    2588 YY_RULE_SETUP
    2589 #line 329 "lex.ll"
    2590 { ASCIIOP_RETURN(); }
    2591         YY_BREAK
    25922596case 144:
    25932597YY_RULE_SETUP
     
    26572661case 157:
    26582662YY_RULE_SETUP
    2659 #line 344 "lex.ll"
     2663#line 343 "lex.ll"
     2664{ ASCIIOP_RETURN(); }
     2665        YY_BREAK
     2666case 158:
     2667YY_RULE_SETUP
     2668#line 345 "lex.ll"
    26602669{ NAMEDOP_RETURN(ICR); }
    26612670        YY_BREAK
    2662 case 158:
    2663 YY_RULE_SETUP
    2664 #line 345 "lex.ll"
     2671case 159:
     2672YY_RULE_SETUP
     2673#line 346 "lex.ll"
    26652674{ NAMEDOP_RETURN(DECR); }
    26662675        YY_BREAK
    2667 case 159:
    2668 YY_RULE_SETUP
    2669 #line 346 "lex.ll"
     2676case 160:
     2677YY_RULE_SETUP
     2678#line 347 "lex.ll"
    26702679{ NAMEDOP_RETURN(EQ); }
    26712680        YY_BREAK
    2672 case 160:
    2673 YY_RULE_SETUP
    2674 #line 347 "lex.ll"
     2681case 161:
     2682YY_RULE_SETUP
     2683#line 348 "lex.ll"
    26752684{ NAMEDOP_RETURN(NE); }
    26762685        YY_BREAK
    2677 case 161:
    2678 YY_RULE_SETUP
    2679 #line 348 "lex.ll"
     2686case 162:
     2687YY_RULE_SETUP
     2688#line 349 "lex.ll"
    26802689{ NAMEDOP_RETURN(LS); }
    26812690        YY_BREAK
    2682 case 162:
    2683 YY_RULE_SETUP
    2684 #line 349 "lex.ll"
     2691case 163:
     2692YY_RULE_SETUP
     2693#line 350 "lex.ll"
    26852694{ NAMEDOP_RETURN(RS); }
    26862695        YY_BREAK
    2687 case 163:
    2688 YY_RULE_SETUP
    2689 #line 350 "lex.ll"
     2696case 164:
     2697YY_RULE_SETUP
     2698#line 351 "lex.ll"
    26902699{ NAMEDOP_RETURN(LE); }
    26912700        YY_BREAK
    2692 case 164:
    2693 YY_RULE_SETUP
    2694 #line 351 "lex.ll"
     2701case 165:
     2702YY_RULE_SETUP
     2703#line 352 "lex.ll"
    26952704{ NAMEDOP_RETURN(GE); }
    26962705        YY_BREAK
    2697 case 165:
    2698 YY_RULE_SETUP
    2699 #line 352 "lex.ll"
     2706case 166:
     2707YY_RULE_SETUP
     2708#line 353 "lex.ll"
    27002709{ NAMEDOP_RETURN(ANDAND); }
    27012710        YY_BREAK
    2702 case 166:
    2703 YY_RULE_SETUP
    2704 #line 353 "lex.ll"
     2711case 167:
     2712YY_RULE_SETUP
     2713#line 354 "lex.ll"
    27052714{ NAMEDOP_RETURN(OROR); }
    27062715        YY_BREAK
    2707 case 167:
    2708 YY_RULE_SETUP
    2709 #line 354 "lex.ll"
     2716case 168:
     2717YY_RULE_SETUP
     2718#line 355 "lex.ll"
    27102719{ NAMEDOP_RETURN(ARROW); }
    27112720        YY_BREAK
    2712 case 168:
    2713 YY_RULE_SETUP
    2714 #line 355 "lex.ll"
     2721case 169:
     2722YY_RULE_SETUP
     2723#line 356 "lex.ll"
    27152724{ NAMEDOP_RETURN(PLUSassign); }
    27162725        YY_BREAK
    2717 case 169:
    2718 YY_RULE_SETUP
    2719 #line 356 "lex.ll"
     2726case 170:
     2727YY_RULE_SETUP
     2728#line 357 "lex.ll"
    27202729{ NAMEDOP_RETURN(MINUSassign); }
    27212730        YY_BREAK
    2722 case 170:
    2723 YY_RULE_SETUP
    2724 #line 357 "lex.ll"
     2731case 171:
     2732YY_RULE_SETUP
     2733#line 358 "lex.ll"
    27252734{ NAMEDOP_RETURN(MULTassign); }
    27262735        YY_BREAK
    2727 case 171:
    2728 YY_RULE_SETUP
    2729 #line 358 "lex.ll"
     2736case 172:
     2737YY_RULE_SETUP
     2738#line 359 "lex.ll"
    27302739{ NAMEDOP_RETURN(DIVassign); }
    27312740        YY_BREAK
    2732 case 172:
    2733 YY_RULE_SETUP
    2734 #line 359 "lex.ll"
     2741case 173:
     2742YY_RULE_SETUP
     2743#line 360 "lex.ll"
    27352744{ NAMEDOP_RETURN(MODassign); }
    27362745        YY_BREAK
    2737 case 173:
    2738 YY_RULE_SETUP
    2739 #line 360 "lex.ll"
     2746case 174:
     2747YY_RULE_SETUP
     2748#line 361 "lex.ll"
    27402749{ NAMEDOP_RETURN(ANDassign); }
    27412750        YY_BREAK
    2742 case 174:
    2743 YY_RULE_SETUP
    2744 #line 361 "lex.ll"
     2751case 175:
     2752YY_RULE_SETUP
     2753#line 362 "lex.ll"
    27452754{ NAMEDOP_RETURN(ORassign); }
    27462755        YY_BREAK
    2747 case 175:
    2748 YY_RULE_SETUP
    2749 #line 362 "lex.ll"
     2756case 176:
     2757YY_RULE_SETUP
     2758#line 363 "lex.ll"
    27502759{ NAMEDOP_RETURN(ERassign); }
    27512760        YY_BREAK
    2752 case 176:
    2753 YY_RULE_SETUP
    2754 #line 363 "lex.ll"
     2761case 177:
     2762YY_RULE_SETUP
     2763#line 364 "lex.ll"
    27552764{ NAMEDOP_RETURN(LSassign); }
    27562765        YY_BREAK
    2757 case 177:
    2758 YY_RULE_SETUP
    2759 #line 364 "lex.ll"
     2766case 178:
     2767YY_RULE_SETUP
     2768#line 365 "lex.ll"
    27602769{ NAMEDOP_RETURN(RSassign); }
    27612770        YY_BREAK
    2762 case 178:
    2763 YY_RULE_SETUP
    2764 #line 366 "lex.ll"
     2771case 179:
     2772YY_RULE_SETUP
     2773#line 367 "lex.ll"
    27652774{ NAMEDOP_RETURN(ATassign); }                   // CFA
    27662775        YY_BREAK
    27672776/* CFA, operator identifier */
    2768 case 179:
    2769 YY_RULE_SETUP
    2770 #line 369 "lex.ll"
     2777case 180:
     2778YY_RULE_SETUP
     2779#line 370 "lex.ll"
    27712780{ IDENTIFIER_RETURN(); }                                // unary
    2772         YY_BREAK
    2773 case 180:
    2774 YY_RULE_SETUP
    2775 #line 370 "lex.ll"
    2776 { IDENTIFIER_RETURN(); }
    27772781        YY_BREAK
    27782782case 181:
     
    27842788YY_RULE_SETUP
    27852789#line 372 "lex.ll"
     2790{ IDENTIFIER_RETURN(); }
     2791        YY_BREAK
     2792case 183:
     2793YY_RULE_SETUP
     2794#line 373 "lex.ll"
    27862795{ IDENTIFIER_RETURN(); }                // binary
    27872796        YY_BREAK
     
    28122821          an argument list.
    28132822        */
    2814 case 183:
    2815 YY_RULE_SETUP
    2816 #line 399 "lex.ll"
     2823case 184:
     2824YY_RULE_SETUP
     2825#line 400 "lex.ll"
    28172826{
    28182827        // 1 or 2 character unary operator ?
     
    28272836        YY_BREAK
    28282837/* unknown characters */
    2829 case 184:
    2830 YY_RULE_SETUP
    2831 #line 411 "lex.ll"
     2838case 185:
     2839YY_RULE_SETUP
     2840#line 412 "lex.ll"
    28322841{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    28332842        YY_BREAK
    2834 case 185:
    2835 YY_RULE_SETUP
    2836 #line 413 "lex.ll"
     2843case 186:
     2844YY_RULE_SETUP
     2845#line 414 "lex.ll"
    28372846ECHO;
    28382847        YY_BREAK
    2839 #line 2840 "Parser/lex.cc"
     2848#line 2849 "Parser/lex.cc"
    28402849case YY_STATE_EOF(INITIAL):
    28412850case YY_STATE_EOF(COMMENT):
     
    31343143                        {
    31353144                        yy_current_state = (int) yy_def[yy_current_state];
    3136                         if ( yy_current_state >= 905 )
     3145                        if ( yy_current_state >= 909 )
    31373146                                yy_c = yy_meta[(unsigned int) yy_c];
    31383147                        }
     
    31623171                {
    31633172                yy_current_state = (int) yy_def[yy_current_state];
    3164                 if ( yy_current_state >= 905 )
     3173                if ( yy_current_state >= 909 )
    31653174                        yy_c = yy_meta[(unsigned int) yy_c];
    31663175                }
    31673176        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    3168         yy_is_jam = (yy_current_state == 904);
     3177        yy_is_jam = (yy_current_state == 908);
    31693178
    31703179        return yy_is_jam ? 0 : yy_current_state;
     
    38123821#define YYTABLES_NAME "yytables"
    38133822
    3814 #line 413 "lex.ll"
     3823#line 414 "lex.ll"
    38153824
    38163825
  • src/Parser/lex.ll

    rbb82c03 r2162c2c  
    44 * The contents of this file are covered under the licence agreement in the
    55 * file "LICENCE" distributed with Cforall.
    6  * 
    7  * lex.l -- 
    8  * 
     6 *
     7 * lex.l --
     8 *
    99 * Author           : Peter A. Buhr
    1010 * Created On       : Sat Sep 22 08:58:10 2001
     
    258258trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    259259try                             { KEYWORD_RETURN(TRY); }                                // CFA
     260ttype                   { KEYWORD_RETURN(TTYPE); }                              // CFA
    260261typedef                 { KEYWORD_RETURN(TYPEDEF); }
    261262typeof                  { KEYWORD_RETURN(TYPEOF); }                             // GCC
  • src/Parser/parser.cc

    rbb82c03 r2162c2c  
    159159     FTYPE = 291,
    160160     DTYPE = 292,
    161      TRAIT = 293,
    162      SIZEOF = 294,
    163      OFFSETOF = 295,
    164      ATTRIBUTE = 296,
    165      EXTENSION = 297,
    166      IF = 298,
    167      ELSE = 299,
    168      SWITCH = 300,
    169      CASE = 301,
    170      DEFAULT = 302,
    171      DO = 303,
    172      WHILE = 304,
    173      FOR = 305,
    174      BREAK = 306,
    175      CONTINUE = 307,
    176      GOTO = 308,
    177      RETURN = 309,
    178      CHOOSE = 310,
    179      DISABLE = 311,
    180      ENABLE = 312,
    181      FALLTHRU = 313,
    182      TRY = 314,
    183      CATCH = 315,
    184      CATCHRESUME = 316,
    185      FINALLY = 317,
    186      THROW = 318,
    187      THROWRESUME = 319,
    188      AT = 320,
    189      ASM = 321,
    190      ALIGNAS = 322,
    191      ALIGNOF = 323,
    192      ATOMIC = 324,
    193      GENERIC = 325,
    194      NORETURN = 326,
    195      STATICASSERT = 327,
    196      THREADLOCAL = 328,
    197      IDENTIFIER = 329,
    198      QUOTED_IDENTIFIER = 330,
    199      TYPEDEFname = 331,
    200      TYPEGENname = 332,
    201      ATTR_IDENTIFIER = 333,
    202      ATTR_TYPEDEFname = 334,
    203      ATTR_TYPEGENname = 335,
    204      INTEGERconstant = 336,
    205      CHARACTERconstant = 337,
    206      STRINGliteral = 338,
    207      REALDECIMALconstant = 339,
    208      REALFRACTIONconstant = 340,
    209      FLOATINGconstant = 341,
    210      ZERO = 342,
    211      ONE = 343,
    212      ARROW = 344,
    213      ICR = 345,
    214      DECR = 346,
    215      LS = 347,
    216      RS = 348,
    217      LE = 349,
    218      GE = 350,
    219      EQ = 351,
    220      NE = 352,
    221      ANDAND = 353,
    222      OROR = 354,
    223      ELLIPSIS = 355,
    224      MULTassign = 356,
    225      DIVassign = 357,
    226      MODassign = 358,
    227      PLUSassign = 359,
    228      MINUSassign = 360,
    229      LSassign = 361,
    230      RSassign = 362,
    231      ANDassign = 363,
    232      ERassign = 364,
    233      ORassign = 365,
    234      ATassign = 366,
    235      THEN = 367
     161     TTYPE = 293,
     162     TRAIT = 294,
     163     SIZEOF = 295,
     164     OFFSETOF = 296,
     165     ATTRIBUTE = 297,
     166     EXTENSION = 298,
     167     IF = 299,
     168     ELSE = 300,
     169     SWITCH = 301,
     170     CASE = 302,
     171     DEFAULT = 303,
     172     DO = 304,
     173     WHILE = 305,
     174     FOR = 306,
     175     BREAK = 307,
     176     CONTINUE = 308,
     177     GOTO = 309,
     178     RETURN = 310,
     179     CHOOSE = 311,
     180     DISABLE = 312,
     181     ENABLE = 313,
     182     FALLTHRU = 314,
     183     TRY = 315,
     184     CATCH = 316,
     185     CATCHRESUME = 317,
     186     FINALLY = 318,
     187     THROW = 319,
     188     THROWRESUME = 320,
     189     AT = 321,
     190     ASM = 322,
     191     ALIGNAS = 323,
     192     ALIGNOF = 324,
     193     ATOMIC = 325,
     194     GENERIC = 326,
     195     NORETURN = 327,
     196     STATICASSERT = 328,
     197     THREADLOCAL = 329,
     198     IDENTIFIER = 330,
     199     QUOTED_IDENTIFIER = 331,
     200     TYPEDEFname = 332,
     201     TYPEGENname = 333,
     202     ATTR_IDENTIFIER = 334,
     203     ATTR_TYPEDEFname = 335,
     204     ATTR_TYPEGENname = 336,
     205     INTEGERconstant = 337,
     206     CHARACTERconstant = 338,
     207     STRINGliteral = 339,
     208     REALDECIMALconstant = 340,
     209     REALFRACTIONconstant = 341,
     210     FLOATINGconstant = 342,
     211     ZERO = 343,
     212     ONE = 344,
     213     ARROW = 345,
     214     ICR = 346,
     215     DECR = 347,
     216     LS = 348,
     217     RS = 349,
     218     LE = 350,
     219     GE = 351,
     220     EQ = 352,
     221     NE = 353,
     222     ANDAND = 354,
     223     OROR = 355,
     224     ELLIPSIS = 356,
     225     MULTassign = 357,
     226     DIVassign = 358,
     227     MODassign = 359,
     228     PLUSassign = 360,
     229     MINUSassign = 361,
     230     LSassign = 362,
     231     RSassign = 363,
     232     ANDassign = 364,
     233     ERassign = 365,
     234     ORassign = 366,
     235     ATassign = 367,
     236     THEN = 368
    236237   };
    237238#endif
     
    272273#define FTYPE 291
    273274#define DTYPE 292
    274 #define TRAIT 293
    275 #define SIZEOF 294
    276 #define OFFSETOF 295
    277 #define ATTRIBUTE 296
    278 #define EXTENSION 297
    279 #define IF 298
    280 #define ELSE 299
    281 #define SWITCH 300
    282 #define CASE 301
    283 #define DEFAULT 302
    284 #define DO 303
    285 #define WHILE 304
    286 #define FOR 305
    287 #define BREAK 306
    288 #define CONTINUE 307
    289 #define GOTO 308
    290 #define RETURN 309
    291 #define CHOOSE 310
    292 #define DISABLE 311
    293 #define ENABLE 312
    294 #define FALLTHRU 313
    295 #define TRY 314
    296 #define CATCH 315
    297 #define CATCHRESUME 316
    298 #define FINALLY 317
    299 #define THROW 318
    300 #define THROWRESUME 319
    301 #define AT 320
    302 #define ASM 321
    303 #define ALIGNAS 322
    304 #define ALIGNOF 323
    305 #define ATOMIC 324
    306 #define GENERIC 325
    307 #define NORETURN 326
    308 #define STATICASSERT 327
    309 #define THREADLOCAL 328
    310 #define IDENTIFIER 329
    311 #define QUOTED_IDENTIFIER 330
    312 #define TYPEDEFname 331
    313 #define TYPEGENname 332
    314 #define ATTR_IDENTIFIER 333
    315 #define ATTR_TYPEDEFname 334
    316 #define ATTR_TYPEGENname 335
    317 #define INTEGERconstant 336
    318 #define CHARACTERconstant 337
    319 #define STRINGliteral 338
    320 #define REALDECIMALconstant 339
    321 #define REALFRACTIONconstant 340
    322 #define FLOATINGconstant 341
    323 #define ZERO 342
    324 #define ONE 343
    325 #define ARROW 344
    326 #define ICR 345
    327 #define DECR 346
    328 #define LS 347
    329 #define RS 348
    330 #define LE 349
    331 #define GE 350
    332 #define EQ 351
    333 #define NE 352
    334 #define ANDAND 353
    335 #define OROR 354
    336 #define ELLIPSIS 355
    337 #define MULTassign 356
    338 #define DIVassign 357
    339 #define MODassign 358
    340 #define PLUSassign 359
    341 #define MINUSassign 360
    342 #define LSassign 361
    343 #define RSassign 362
    344 #define ANDassign 363
    345 #define ERassign 364
    346 #define ORassign 365
    347 #define ATassign 366
    348 #define THEN 367
     275#define TTYPE 293
     276#define TRAIT 294
     277#define SIZEOF 295
     278#define OFFSETOF 296
     279#define ATTRIBUTE 297
     280#define EXTENSION 298
     281#define IF 299
     282#define ELSE 300
     283#define SWITCH 301
     284#define CASE 302
     285#define DEFAULT 303
     286#define DO 304
     287#define WHILE 305
     288#define FOR 306
     289#define BREAK 307
     290#define CONTINUE 308
     291#define GOTO 309
     292#define RETURN 310
     293#define CHOOSE 311
     294#define DISABLE 312
     295#define ENABLE 313
     296#define FALLTHRU 314
     297#define TRY 315
     298#define CATCH 316
     299#define CATCHRESUME 317
     300#define FINALLY 318
     301#define THROW 319
     302#define THROWRESUME 320
     303#define AT 321
     304#define ASM 322
     305#define ALIGNAS 323
     306#define ALIGNOF 324
     307#define ATOMIC 325
     308#define GENERIC 326
     309#define NORETURN 327
     310#define STATICASSERT 328
     311#define THREADLOCAL 329
     312#define IDENTIFIER 330
     313#define QUOTED_IDENTIFIER 331
     314#define TYPEDEFname 332
     315#define TYPEGENname 333
     316#define ATTR_IDENTIFIER 334
     317#define ATTR_TYPEDEFname 335
     318#define ATTR_TYPEGENname 336
     319#define INTEGERconstant 337
     320#define CHARACTERconstant 338
     321#define STRINGliteral 339
     322#define REALDECIMALconstant 340
     323#define REALFRACTIONconstant 341
     324#define FLOATINGconstant 342
     325#define ZERO 343
     326#define ONE 344
     327#define ARROW 345
     328#define ICR 346
     329#define DECR 347
     330#define LS 348
     331#define RS 349
     332#define LE 350
     333#define GE 351
     334#define EQ 352
     335#define NE 353
     336#define ANDAND 354
     337#define OROR 355
     338#define ELLIPSIS 356
     339#define MULTassign 357
     340#define DIVassign 358
     341#define MODassign 359
     342#define PLUSassign 360
     343#define MINUSassign 361
     344#define LSassign 362
     345#define RSassign 363
     346#define ANDassign 364
     347#define ERassign 365
     348#define ORassign 366
     349#define ATassign 367
     350#define THEN 368
    349351
    350352
     
    376378
    377379/* Line 293 of yacc.c  */
    378 #line 379 "Parser/parser.cc"
     380#line 381 "Parser/parser.cc"
    379381} YYSTYPE;
    380382# define YYSTYPE_IS_TRIVIAL 1
     
    388390
    389391/* Line 343 of yacc.c  */
    390 #line 391 "Parser/parser.cc"
     392#line 393 "Parser/parser.cc"
    391393
    392394#ifdef short
     
    607609#define YYFINAL  251
    608610/* YYLAST -- Last index in YYTABLE.  */
    609 #define YYLAST   10624
     611#define YYLAST   10466
    610612
    611613/* YYNTOKENS -- Number of terminals.  */
    612 #define YYNTOKENS  137
     614#define YYNTOKENS  138
    613615/* YYNNTS -- Number of nonterminals.  */
    614616#define YYNNTS  243
    615617/* YYNRULES -- Number of rules.  */
    616 #define YYNRULES  757
     618#define YYNRULES  758
    617619/* YYNRULES -- Number of states.  */
    618 #define YYNSTATES  1540
     620#define YYNSTATES  1541
    619621
    620622/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    621623#define YYUNDEFTOK  2
    622 #define YYMAXUTOK   367
     624#define YYMAXUTOK   368
    623625
    624626#define YYTRANSLATE(YYX)                                                \
     
    631633       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    632634       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    633        2,     2,     2,   125,     2,     2,     2,   128,   122,     2,
    634      113,   114,   121,   123,   120,   124,   117,   127,     2,     2,
    635        2,     2,     2,     2,     2,     2,     2,     2,   134,   136,
    636      129,   135,   130,   133,     2,     2,     2,     2,     2,     2,
     635       2,     2,     2,   126,     2,     2,     2,   129,   123,     2,
     636     114,   115,   122,   124,   121,   125,   118,   128,     2,     2,
     637       2,     2,     2,     2,     2,     2,     2,     2,   135,   137,
     638     130,   136,   131,   134,     2,     2,     2,     2,     2,     2,
    637639       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    638640       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    639        2,   115,     2,   116,   131,     2,     2,     2,     2,     2,
     641       2,   116,     2,   117,   132,     2,     2,     2,     2,     2,
    640642       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    641643       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    642        2,     2,     2,   118,   132,   119,   126,     2,     2,     2,
     644       2,     2,     2,   119,   133,   120,   127,     2,     2,     2,
    643645       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    644646       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    664666      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    665667      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    666      105,   106,   107,   108,   109,   110,   111,   112
     668     105,   106,   107,   108,   109,   110,   111,   112,   113
    667669};
    668670
     
    721723    1597,  1600,  1603,  1605,  1608,  1611,  1617,  1623,  1631,  1638,
    722724    1640,  1643,  1646,  1650,  1652,  1655,  1658,  1663,  1666,  1671,
    723     1672,  1677,  1680,  1682,  1684,  1686,  1687,  1690,  1696,  1702,
    724     1716,  1718,  1720,  1724,  1728,  1731,  1735,  1739,  1742,  1747,
    725     1749,  1756,  1766,  1767,  1779,  1781,  1785,  1789,  1793,  1795,
    726     1797,  1803,  1806,  1812,  1813,  1815,  1817,  1821,  1822,  1824,
    727     1826,  1828,  1830,  1831,  1838,  1841,  1843,  1846,  1851,  1854,
    728     1858,  1862,  1866,  1871,  1877,  1883,  1889,  1896,  1898,  1900,
    729     1902,  1906,  1907,  1913,  1914,  1916,  1918,  1921,  1928,  1930,
    730     1934,  1935,  1937,  1942,  1944,  1946,  1948,  1950,  1953,  1955,
    731     1958,  1961,  1963,  1967,  1970,  1974,  1978,  1981,  1986,  1991,
    732     1995,  2004,  2008,  2011,  2013,  2016,  2023,  2032,  2036,  2039,
    733     2043,  2047,  2052,  2057,  2061,  2063,  2065,  2067,  2072,  2079,
    734     2083,  2086,  2090,  2094,  2099,  2104,  2108,  2111,  2113,  2116,
    735     2119,  2121,  2125,  2128,  2132,  2136,  2139,  2144,  2149,  2153,
    736     2160,  2169,  2173,  2176,  2178,  2181,  2184,  2187,  2191,  2195,
    737     2198,  2203,  2208,  2212,  2219,  2228,  2232,  2235,  2237,  2240,
    738     2243,  2245,  2247,  2250,  2254,  2258,  2261,  2266,  2273,  2282,
    739     2284,  2287,  2290,  2292,  2295,  2298,  2302,  2306,  2308,  2313,
    740     2318,  2322,  2328,  2337,  2341,  2344,  2348,  2350,  2356,  2362,
    741     2369,  2376,  2378,  2381,  2384,  2386,  2389,  2392,  2396,  2400,
    742     2402,  2407,  2412,  2416,  2422,  2431,  2435,  2437,  2440,  2442,
    743     2445,  2452,  2458,  2465,  2473,  2481,  2483,  2486,  2489,  2491,
    744     2494,  2497,  2501,  2505,  2507,  2512,  2517,  2521,  2530,  2534,
    745     2536,  2538,  2541,  2543,  2545,  2548,  2552,  2555,  2559,  2562,
    746     2566,  2570,  2573,  2578,  2582,  2585,  2589,  2592,  2597,  2601,
    747     2604,  2611,  2618,  2625,  2633,  2635,  2638,  2640,  2642,  2644,
    748     2647,  2651,  2654,  2658,  2661,  2665,  2669,  2674,  2677,  2681,
    749     2686,  2689,  2695,  2702,  2709,  2710,  2712,  2713
     725    1672,  1677,  1680,  1682,  1684,  1686,  1688,  1689,  1692,  1698,
     726    1704,  1718,  1720,  1722,  1726,  1730,  1733,  1737,  1741,  1744,
     727    1749,  1751,  1758,  1768,  1769,  1781,  1783,  1787,  1791,  1795,
     728    1797,  1799,  1805,  1808,  1814,  1815,  1817,  1819,  1823,  1824,
     729    1826,  1828,  1830,  1832,  1833,  1840,  1843,  1845,  1848,  1853,
     730    1856,  1860,  1864,  1868,  1873,  1879,  1885,  1891,  1898,  1900,
     731    1902,  1904,  1908,  1909,  1915,  1916,  1918,  1920,  1923,  1930,
     732    1932,  1936,  1937,  1939,  1944,  1946,  1948,  1950,  1952,  1955,
     733    1957,  1960,  1963,  1965,  1969,  1972,  1976,  1980,  1983,  1988,
     734    1993,  1997,  2006,  2010,  2013,  2015,  2018,  2025,  2034,  2038,
     735    2041,  2045,  2049,  2054,  2059,  2063,  2065,  2067,  2069,  2074,
     736    2081,  2085,  2088,  2092,  2096,  2101,  2106,  2110,  2113,  2115,
     737    2118,  2121,  2123,  2127,  2130,  2134,  2138,  2141,  2146,  2151,
     738    2155,  2162,  2171,  2175,  2178,  2180,  2183,  2186,  2189,  2193,
     739    2197,  2200,  2205,  2210,  2214,  2221,  2230,  2234,  2237,  2239,
     740    2242,  2245,  2247,  2249,  2252,  2256,  2260,  2263,  2268,  2275,
     741    2284,  2286,  2289,  2292,  2294,  2297,  2300,  2304,  2308,  2310,
     742    2315,  2320,  2324,  2330,  2339,  2343,  2346,  2350,  2352,  2358,
     743    2364,  2371,  2378,  2380,  2383,  2386,  2388,  2391,  2394,  2398,
     744    2402,  2404,  2409,  2414,  2418,  2424,  2433,  2437,  2439,  2442,
     745    2444,  2447,  2454,  2460,  2467,  2475,  2483,  2485,  2488,  2491,
     746    2493,  2496,  2499,  2503,  2507,  2509,  2514,  2519,  2523,  2532,
     747    2536,  2538,  2540,  2543,  2545,  2547,  2550,  2554,  2557,  2561,
     748    2564,  2568,  2572,  2575,  2580,  2584,  2587,  2591,  2594,  2599,
     749    2603,  2606,  2613,  2620,  2627,  2635,  2637,  2640,  2642,  2644,
     750    2646,  2649,  2653,  2656,  2660,  2663,  2667,  2671,  2676,  2679,
     751    2683,  2688,  2691,  2697,  2704,  2711,  2712,  2714,  2715
    750752};
    751753
     
    753755static const yytype_int16 yyrhs[] =
    754756{
    755      308,     0,    -1,    -1,    -1,    81,    -1,    84,    -1,    85,
    756       -1,    86,    -1,    82,    -1,    74,    -1,    78,    -1,   144,
    757       -1,    74,    -1,    78,    -1,    74,    -1,   144,    -1,    87,
    758       -1,    88,    -1,   146,    -1,    83,    -1,   146,    83,    -1,
    759       74,    -1,   144,    -1,   174,    -1,   113,   176,   114,    -1,
    760      113,   180,   114,    -1,   147,    -1,   148,   115,   138,   171,
    761      139,   116,    -1,   148,   113,   149,   114,    -1,   148,   117,
    762      143,    -1,   148,   117,   115,   138,   151,   139,   116,    -1,
    763      148,    85,    -1,   148,    89,   143,    -1,   148,    89,   115,
    764      138,   151,   139,   116,    -1,   148,    90,    -1,   148,    91,
    765       -1,   113,   281,   114,   118,   285,   378,   119,    -1,   148,
    766      118,   149,   119,    -1,   150,    -1,   149,   120,   150,    -1,
    767       -1,   171,    -1,   152,    -1,   151,   120,   152,    -1,   153,
    768       -1,    84,   152,    -1,    84,   115,   138,   151,   139,   116,
    769       -1,   153,   117,   152,    -1,   153,   117,   115,   138,   151,
    770      139,   116,    -1,   153,    89,   152,    -1,   153,    89,   115,
    771      138,   151,   139,   116,    -1,    81,   154,    -1,    86,   154,
    772       -1,   143,   154,    -1,    -1,   154,    85,    -1,   148,    -1,
    773      140,    -1,   145,    -1,    42,   158,    -1,   156,   158,    -1,
    774      157,   158,    -1,    90,   155,    -1,    91,   155,    -1,    39,
    775      155,    -1,    39,   113,   281,   114,    -1,    68,   155,    -1,
    776       68,   113,   281,   114,    -1,    40,   113,   281,   120,   143,
    777      114,    -1,    78,    -1,    78,   113,   150,   114,    -1,    78,
    778      113,   282,   114,    -1,   121,    -1,   122,    -1,   123,    -1,
    779      124,    -1,   125,    -1,   126,    -1,   155,    -1,   113,   281,
    780      114,   158,    -1,   158,    -1,   159,   121,   158,    -1,   159,
    781      127,   158,    -1,   159,   128,   158,    -1,   159,    -1,   160,
    782      123,   159,    -1,   160,   124,   159,    -1,   160,    -1,   161,
    783       92,   160,    -1,   161,    93,   160,    -1,   161,    -1,   162,
    784      129,   161,    -1,   162,   130,   161,    -1,   162,    94,   161,
    785       -1,   162,    95,   161,    -1,   162,    -1,   163,    96,   162,
    786       -1,   163,    97,   162,    -1,   163,    -1,   164,   122,   163,
    787       -1,   164,    -1,   165,   131,   164,    -1,   165,    -1,   166,
    788      132,   165,    -1,   166,    -1,   167,    98,   166,    -1,   167,
    789       -1,   168,    99,   167,    -1,   168,    -1,   168,   133,   176,
    790      134,   169,    -1,   168,   133,   134,   169,    -1,   169,    -1,
    791      169,    -1,   155,   173,   171,    -1,    -1,   171,    -1,   135,
    792       -1,   111,    -1,   101,    -1,   102,    -1,   103,    -1,   104,
    793       -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,   109,
    794       -1,   110,    -1,   115,   138,   120,   175,   139,   116,    -1,
    795      115,   138,   171,   120,   175,   139,   116,    -1,   172,    -1,
    796      175,   120,   172,    -1,   171,    -1,   176,   120,   171,    -1,
    797       -1,   176,    -1,   179,    -1,   180,    -1,   184,    -1,   185,
    798       -1,   197,    -1,   199,    -1,   200,    -1,   205,    -1,   131,
    799      148,   118,   149,   119,   136,    -1,    74,   134,   318,   178,
    800       -1,   118,   119,    -1,   118,   138,   138,   216,   181,   139,
    801      119,    -1,   182,    -1,   181,   138,   182,    -1,   219,    -1,
    802       42,   219,    -1,   314,    -1,   178,   139,    -1,   178,    -1,
    803      183,   178,    -1,   177,   136,    -1,    43,   113,   176,   114,
    804      178,    -1,    43,   113,   176,   114,   178,    44,   178,    -1,
    805       45,   113,   176,   114,   190,    -1,    45,   113,   176,   114,
    806      118,   138,   212,   191,   119,    -1,    55,   113,   176,   114,
    807      190,    -1,    55,   113,   176,   114,   118,   138,   212,   193,
    808      119,    -1,   170,    -1,   170,   100,   170,    -1,   316,    -1,
    809      186,    -1,   187,   120,   186,    -1,    46,   187,   134,    -1,
    810       47,   134,    -1,   188,    -1,   189,   188,    -1,   189,   178,
    811       -1,    -1,   192,    -1,   189,   183,    -1,   192,   189,   183,
    812       -1,    -1,   194,    -1,   189,   196,    -1,   189,   183,   195,
    813       -1,   194,   189,   196,    -1,   194,   189,   183,   195,    -1,
    814       -1,   196,    -1,    58,    -1,    58,   136,    -1,    49,   113,
    815      176,   114,   178,    -1,    48,   178,    49,   113,   176,   114,
    816      136,    -1,    50,   113,   138,   198,   114,   178,    -1,   177,
    817      139,   136,   177,   136,   177,    -1,   219,   177,   136,   177,
    818       -1,    53,    74,   136,    -1,    53,   121,   176,   136,    -1,
    819       52,   136,    -1,    52,    74,   136,    -1,    51,   136,    -1,
    820       51,    74,   136,    -1,    54,   177,   136,    -1,    63,   172,
    821      136,    -1,    64,   172,   136,    -1,    64,   172,    65,   171,
    822      136,    -1,    59,   180,   201,    -1,    59,   180,   203,    -1,
    823       59,   180,   201,   203,    -1,   202,    -1,    60,   113,   100,
    824      114,   180,    -1,   202,    60,   113,   100,   114,   180,    -1,
    825       61,   113,   100,   114,   180,    -1,   202,    61,   113,   100,
    826      114,   180,    -1,    60,   113,   138,   138,   204,   139,   114,
    827      180,   139,    -1,   202,    60,   113,   138,   138,   204,   139,
    828      114,   180,   139,    -1,    61,   113,   138,   138,   204,   139,
    829      114,   180,   139,    -1,   202,    61,   113,   138,   138,   204,
    830      139,   114,   180,   139,    -1,    62,   180,    -1,   232,    -1,
    831      232,   315,    -1,   232,   363,    -1,   372,   143,    -1,   372,
    832       -1,    66,   206,   113,   145,   114,   136,    -1,    66,   206,
    833      113,   145,   134,   207,   114,   136,    -1,    66,   206,   113,
    834      145,   134,   207,   134,   207,   114,   136,    -1,    66,   206,
    835      113,   145,   134,   207,   134,   207,   134,   210,   114,   136,
    836       -1,    66,   206,    53,   113,   145,   134,   134,   207,   134,
    837      210,   134,   211,   114,   136,    -1,    -1,    11,    -1,    -1,
    838      208,    -1,   209,    -1,   208,   120,   209,    -1,   145,   113,
    839      170,   114,    -1,   115,   170,   116,   145,   113,   170,   114,
    840       -1,    -1,   145,    -1,   210,   120,   145,    -1,   143,    -1,
    841      211,   120,   143,    -1,   139,    -1,   213,    -1,   219,    -1,
    842      213,   138,   219,    -1,   139,    -1,   215,    -1,   229,    -1,
    843      215,   138,   229,    -1,    -1,   217,    -1,    31,   218,   136,
    844       -1,   217,    31,   218,   136,    -1,   280,    -1,   218,   120,
    845      280,    -1,   220,    -1,   229,    -1,   221,   139,   136,    -1,
    846      226,   139,   136,    -1,   223,   139,   136,    -1,   299,   139,
    847      136,    -1,   302,   139,   136,    -1,   222,   283,    -1,   238,
    848      222,   283,    -1,   221,   139,   120,   138,   278,   283,    -1,
    849      373,   278,   317,    -1,   376,   278,   317,    -1,   234,   376,
    850      278,   317,    -1,   224,    -1,   234,   224,    -1,   238,   224,
    851       -1,   238,   234,   224,    -1,   223,   139,   120,   138,   278,
    852       -1,   376,   278,   113,   138,   266,   139,   114,    -1,   225,
    853      278,   113,   138,   266,   139,   114,    -1,   115,   138,   268,
    854      139,   116,    -1,   115,   138,   268,   139,   120,   138,   269,
    855      139,   116,    -1,     3,   222,    -1,     3,   224,    -1,   226,
    856      139,   120,   138,   143,    -1,     3,   232,   315,    -1,   227,
    857      139,   120,   138,   315,    -1,   234,     3,   232,   315,    -1,
    858      232,     3,   315,    -1,   232,     3,   234,   315,    -1,     3,
    859      143,   135,   171,    -1,   228,   139,   120,   138,   143,   135,
    860      171,    -1,   230,   139,   136,    -1,   227,   139,   136,    -1,
    861      228,   139,   136,    -1,   246,   139,   136,    -1,   231,   315,
    862      317,   283,    -1,   230,   120,   318,   315,   317,   283,    -1,
    863      242,    -1,   246,    -1,   248,    -1,   289,    -1,   243,    -1,
    864      247,    -1,   249,    -1,   290,    -1,    -1,   234,    -1,   235,
    865       -1,   234,   235,    -1,   236,    -1,   320,    -1,    10,    -1,
    866       12,    -1,    11,    -1,    14,    -1,    69,    -1,    -1,    13,
    867      113,   237,   292,   114,    -1,   239,    -1,   234,   239,    -1,
    868      238,   234,   239,    -1,   240,    -1,   239,   240,    -1,     5,
     757     309,     0,    -1,    -1,    -1,    82,    -1,    85,    -1,    86,
     758      -1,    87,    -1,    83,    -1,    75,    -1,    79,    -1,   145,
     759      -1,    75,    -1,    79,    -1,    75,    -1,   145,    -1,    88,
     760      -1,    89,    -1,   147,    -1,    84,    -1,   147,    84,    -1,
     761      75,    -1,   145,    -1,   175,    -1,   114,   177,   115,    -1,
     762     114,   181,   115,    -1,   148,    -1,   149,   116,   139,   172,
     763     140,   117,    -1,   149,   114,   150,   115,    -1,   149,   118,
     764     144,    -1,   149,   118,   116,   139,   152,   140,   117,    -1,
     765     149,    86,    -1,   149,    90,   144,    -1,   149,    90,   116,
     766     139,   152,   140,   117,    -1,   149,    91,    -1,   149,    92,
     767      -1,   114,   282,   115,   119,   286,   379,   120,    -1,   149,
     768     119,   150,   120,    -1,   151,    -1,   150,   121,   151,    -1,
     769      -1,   172,    -1,   153,    -1,   152,   121,   153,    -1,   154,
     770      -1,    85,   153,    -1,    85,   116,   139,   152,   140,   117,
     771      -1,   154,   118,   153,    -1,   154,   118,   116,   139,   152,
     772     140,   117,    -1,   154,    90,   153,    -1,   154,    90,   116,
     773     139,   152,   140,   117,    -1,    82,   155,    -1,    87,   155,
     774      -1,   144,   155,    -1,    -1,   155,    86,    -1,   149,    -1,
     775     141,    -1,   146,    -1,    43,   159,    -1,   157,   159,    -1,
     776     158,   159,    -1,    91,   156,    -1,    92,   156,    -1,    40,
     777     156,    -1,    40,   114,   282,   115,    -1,    69,   156,    -1,
     778      69,   114,   282,   115,    -1,    41,   114,   282,   121,   144,
     779     115,    -1,    79,    -1,    79,   114,   151,   115,    -1,    79,
     780     114,   283,   115,    -1,   122,    -1,   123,    -1,   124,    -1,
     781     125,    -1,   126,    -1,   127,    -1,   156,    -1,   114,   282,
     782     115,   159,    -1,   159,    -1,   160,   122,   159,    -1,   160,
     783     128,   159,    -1,   160,   129,   159,    -1,   160,    -1,   161,
     784     124,   160,    -1,   161,   125,   160,    -1,   161,    -1,   162,
     785      93,   161,    -1,   162,    94,   161,    -1,   162,    -1,   163,
     786     130,   162,    -1,   163,   131,   162,    -1,   163,    95,   162,
     787      -1,   163,    96,   162,    -1,   163,    -1,   164,    97,   163,
     788      -1,   164,    98,   163,    -1,   164,    -1,   165,   123,   164,
     789      -1,   165,    -1,   166,   132,   165,    -1,   166,    -1,   167,
     790     133,   166,    -1,   167,    -1,   168,    99,   167,    -1,   168,
     791      -1,   169,   100,   168,    -1,   169,    -1,   169,   134,   177,
     792     135,   170,    -1,   169,   134,   135,   170,    -1,   170,    -1,
     793     170,    -1,   156,   174,   172,    -1,    -1,   172,    -1,   136,
     794      -1,   112,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
     795      -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,   110,
     796      -1,   111,    -1,   116,   139,   121,   176,   140,   117,    -1,
     797     116,   139,   172,   121,   176,   140,   117,    -1,   173,    -1,
     798     176,   121,   173,    -1,   172,    -1,   177,   121,   172,    -1,
     799      -1,   177,    -1,   180,    -1,   181,    -1,   185,    -1,   186,
     800      -1,   198,    -1,   200,    -1,   201,    -1,   206,    -1,   132,
     801     149,   119,   150,   120,   137,    -1,    75,   135,   319,   179,
     802      -1,   119,   120,    -1,   119,   139,   139,   217,   182,   140,
     803     120,    -1,   183,    -1,   182,   139,   183,    -1,   220,    -1,
     804      43,   220,    -1,   315,    -1,   179,   140,    -1,   179,    -1,
     805     184,   179,    -1,   178,   137,    -1,    44,   114,   177,   115,
     806     179,    -1,    44,   114,   177,   115,   179,    45,   179,    -1,
     807      46,   114,   177,   115,   191,    -1,    46,   114,   177,   115,
     808     119,   139,   213,   192,   120,    -1,    56,   114,   177,   115,
     809     191,    -1,    56,   114,   177,   115,   119,   139,   213,   194,
     810     120,    -1,   171,    -1,   171,   101,   171,    -1,   317,    -1,
     811     187,    -1,   188,   121,   187,    -1,    47,   188,   135,    -1,
     812      48,   135,    -1,   189,    -1,   190,   189,    -1,   190,   179,
     813      -1,    -1,   193,    -1,   190,   184,    -1,   193,   190,   184,
     814      -1,    -1,   195,    -1,   190,   197,    -1,   190,   184,   196,
     815      -1,   195,   190,   197,    -1,   195,   190,   184,   196,    -1,
     816      -1,   197,    -1,    59,    -1,    59,   137,    -1,    50,   114,
     817     177,   115,   179,    -1,    49,   179,    50,   114,   177,   115,
     818     137,    -1,    51,   114,   139,   199,   115,   179,    -1,   178,
     819     140,   137,   178,   137,   178,    -1,   220,   178,   137,   178,
     820      -1,    54,    75,   137,    -1,    54,   122,   177,   137,    -1,
     821      53,   137,    -1,    53,    75,   137,    -1,    52,   137,    -1,
     822      52,    75,   137,    -1,    55,   178,   137,    -1,    64,   173,
     823     137,    -1,    65,   173,   137,    -1,    65,   173,    66,   172,
     824     137,    -1,    60,   181,   202,    -1,    60,   181,   204,    -1,
     825      60,   181,   202,   204,    -1,   203,    -1,    61,   114,   101,
     826     115,   181,    -1,   203,    61,   114,   101,   115,   181,    -1,
     827      62,   114,   101,   115,   181,    -1,   203,    62,   114,   101,
     828     115,   181,    -1,    61,   114,   139,   139,   205,   140,   115,
     829     181,   140,    -1,   203,    61,   114,   139,   139,   205,   140,
     830     115,   181,   140,    -1,    62,   114,   139,   139,   205,   140,
     831     115,   181,   140,    -1,   203,    62,   114,   139,   139,   205,
     832     140,   115,   181,   140,    -1,    63,   181,    -1,   233,    -1,
     833     233,   316,    -1,   233,   364,    -1,   373,   144,    -1,   373,
     834      -1,    67,   207,   114,   146,   115,   137,    -1,    67,   207,
     835     114,   146,   135,   208,   115,   137,    -1,    67,   207,   114,
     836     146,   135,   208,   135,   208,   115,   137,    -1,    67,   207,
     837     114,   146,   135,   208,   135,   208,   135,   211,   115,   137,
     838      -1,    67,   207,    54,   114,   146,   135,   135,   208,   135,
     839     211,   135,   212,   115,   137,    -1,    -1,    11,    -1,    -1,
     840     209,    -1,   210,    -1,   209,   121,   210,    -1,   146,   114,
     841     171,   115,    -1,   116,   171,   117,   146,   114,   171,   115,
     842      -1,    -1,   146,    -1,   211,   121,   146,    -1,   144,    -1,
     843     212,   121,   144,    -1,   140,    -1,   214,    -1,   220,    -1,
     844     214,   139,   220,    -1,   140,    -1,   216,    -1,   230,    -1,
     845     216,   139,   230,    -1,    -1,   218,    -1,    31,   219,   137,
     846      -1,   218,    31,   219,   137,    -1,   281,    -1,   219,   121,
     847     281,    -1,   221,    -1,   230,    -1,   222,   140,   137,    -1,
     848     227,   140,   137,    -1,   224,   140,   137,    -1,   300,   140,
     849     137,    -1,   303,   140,   137,    -1,   223,   284,    -1,   239,
     850     223,   284,    -1,   222,   140,   121,   139,   279,   284,    -1,
     851     374,   279,   318,    -1,   377,   279,   318,    -1,   235,   377,
     852     279,   318,    -1,   225,    -1,   235,   225,    -1,   239,   225,
     853      -1,   239,   235,   225,    -1,   224,   140,   121,   139,   279,
     854      -1,   377,   279,   114,   139,   267,   140,   115,    -1,   226,
     855     279,   114,   139,   267,   140,   115,    -1,   116,   139,   269,
     856     140,   117,    -1,   116,   139,   269,   140,   121,   139,   270,
     857     140,   117,    -1,     3,   223,    -1,     3,   225,    -1,   227,
     858     140,   121,   139,   144,    -1,     3,   233,   316,    -1,   228,
     859     140,   121,   139,   316,    -1,   235,     3,   233,   316,    -1,
     860     233,     3,   316,    -1,   233,     3,   235,   316,    -1,     3,
     861     144,   136,   172,    -1,   229,   140,   121,   139,   144,   136,
     862     172,    -1,   231,   140,   137,    -1,   228,   140,   137,    -1,
     863     229,   140,   137,    -1,   247,   140,   137,    -1,   232,   316,
     864     318,   284,    -1,   231,   121,   319,   316,   318,   284,    -1,
     865     243,    -1,   247,    -1,   249,    -1,   290,    -1,   244,    -1,
     866     248,    -1,   250,    -1,   291,    -1,    -1,   235,    -1,   236,
     867      -1,   235,   236,    -1,   237,    -1,   321,    -1,    10,    -1,
     868      12,    -1,    11,    -1,    14,    -1,    70,    -1,    -1,    13,
     869     114,   238,   293,   115,    -1,   240,    -1,   235,   240,    -1,
     870     239,   235,   240,    -1,   241,    -1,   240,   241,    -1,     5,
    869871      -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
    870       -1,    71,    -1,    73,    -1,    16,    -1,    21,    -1,    20,
     872      -1,    72,    -1,    74,    -1,    16,    -1,    21,    -1,    20,
    871873      -1,    18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,
    872874      -1,    15,    -1,    27,    -1,    28,    -1,    29,    -1,    26,
    873       -1,    24,    -1,    25,    -1,   243,    -1,   238,   243,    -1,
    874      242,   240,    -1,   242,   240,   234,    -1,   242,   240,   243,
    875       -1,   244,    -1,   233,   245,   233,    -1,   241,    -1,   234,
    876      241,    -1,   244,   235,    -1,   244,   241,    -1,    30,   113,
    877      282,   114,    -1,    30,   113,   176,   114,    -1,    80,   113,
    878      282,   114,    -1,    80,   113,   176,   114,    -1,   247,    -1,
    879      238,   247,    -1,   246,   240,    -1,   246,   240,   234,    -1,
    880      250,    -1,   234,   250,    -1,   247,   235,    -1,   249,    -1,
    881      238,   249,    -1,   248,   240,    -1,   248,   240,   234,    -1,
    882       76,    -1,   234,    76,    -1,   249,   235,    -1,   251,    -1,
    883      262,    -1,   253,   118,   254,   119,    -1,   253,   280,    -1,
    884       -1,   253,   280,   252,   118,   254,   119,    -1,   253,   113,
    885      298,   114,   118,   254,   119,    -1,   253,   291,    -1,    33,
    886      318,    -1,    34,   318,    -1,    -1,   254,   255,    -1,   256,
    887      136,    -1,    42,   256,   136,    -1,   257,   136,    -1,    42,
    888      257,   136,    -1,   372,    -1,   372,   280,    -1,   256,   120,
    889      280,    -1,   256,   120,    -1,   232,   258,    -1,   257,   120,
    890      318,   258,    -1,    -1,   260,    -1,   324,   259,    -1,   337,
    891      259,    -1,   363,    -1,    -1,   260,    -1,   134,   170,    -1,
    892       32,   318,    -1,   261,   118,   264,   378,   119,    -1,   261,
    893      280,    -1,    -1,   261,   280,   263,   118,   264,   378,   119,
    894       -1,   280,   265,    -1,   264,   120,   280,   265,    -1,    -1,
    895      135,   170,    -1,    -1,   267,    -1,   269,    -1,   268,    -1,
    896      268,   139,   120,   138,   269,    -1,   269,   139,   120,   138,
    897      100,    -1,   268,   139,   120,   138,   100,    -1,   273,    -1,
    898      269,   139,   120,   138,   273,    -1,   268,   139,   120,   138,
    899      273,    -1,   268,   139,   120,   138,   269,   139,   120,   138,
    900      273,    -1,   274,    -1,   269,   139,   120,   138,   274,    -1,
    901       -1,   271,    -1,   272,    -1,   272,   139,   120,   138,   100,
    902       -1,   276,    -1,   275,    -1,   272,   139,   120,   138,   276,
    903       -1,   272,   139,   120,   138,   275,    -1,   275,    -1,   368,
    904      278,   379,    -1,   376,   278,   379,    -1,   234,   376,   278,
    905      379,    -1,   224,    -1,   276,    -1,   368,    -1,   376,    -1,
    906      234,   376,    -1,   377,    -1,   231,   342,   379,    -1,   231,
    907      346,   379,    -1,   231,    -1,   231,   357,    -1,   143,    -1,
    908      277,   120,   143,    -1,   141,    -1,    76,    -1,    77,    -1,
    909      142,    -1,    76,    -1,    77,    -1,   143,    -1,    76,    -1,
    910       77,    -1,   372,    -1,   232,    -1,   232,   363,    -1,   372,
    911       -1,   377,    -1,   232,    -1,   232,   351,    -1,    -1,   135,
    912      284,    -1,   111,   284,    -1,   171,    -1,   118,   285,   378,
    913      119,    -1,    -1,   284,    -1,   286,   284,    -1,   285,   120,
    914      284,    -1,   285,   120,   286,   284,    -1,   287,   134,    -1,
    915      280,   134,    -1,   288,    -1,   287,   288,    -1,   117,   280,
    916       -1,   115,   138,   171,   139,   116,    -1,   115,   138,   316,
    917      139,   116,    -1,   115,   138,   170,   100,   170,   139,   116,
    918       -1,   117,   115,   138,   151,   139,   116,    -1,   290,    -1,
    919      238,   290,    -1,   289,   240,    -1,   289,   240,   234,    -1,
    920      291,    -1,   234,   291,    -1,   290,   235,    -1,    77,   113,
    921      298,   114,    -1,   293,   379,    -1,   292,   120,   293,   379,
    922       -1,    -1,   295,   280,   294,   296,    -1,   232,   342,    -1,
    923       35,    -1,    37,    -1,    36,    -1,    -1,   296,   297,    -1,
    924      132,   280,   113,   298,   114,    -1,   132,   118,   138,   304,
    925      119,    -1,   132,   113,   138,   292,   139,   114,   118,   138,
    926      304,   119,   113,   298,   114,    -1,   282,    -1,   171,    -1,
    927      298,   120,   282,    -1,   298,   120,   171,    -1,    35,   300,
    928       -1,   239,    35,   300,    -1,   299,   120,   300,    -1,   301,
    929      296,    -1,   301,   296,   135,   282,    -1,   280,    -1,   279,
    930      113,   138,   292,   139,   114,    -1,    38,   280,   113,   138,
    931      292,   139,   114,   118,   119,    -1,    -1,    38,   280,   113,
    932      138,   292,   139,   114,   118,   303,   304,   119,    -1,   305,
    933       -1,   304,   138,   305,    -1,   306,   139,   136,    -1,   307,
    934      139,   136,    -1,   222,    -1,   224,    -1,   306,   139,   120,
    935      138,   278,    -1,   232,   315,    -1,   307,   139,   120,   138,
    936      315,    -1,    -1,   309,    -1,   311,    -1,   309,   138,   311,
    937       -1,    -1,   309,    -1,   219,    -1,   313,    -1,   205,    -1,
    938       -1,     5,    83,   312,   118,   310,   119,    -1,    42,   311,
    939       -1,   314,    -1,   329,   180,    -1,   333,   138,   214,   180,
    940       -1,   223,   180,    -1,   231,   329,   180,    -1,   234,   329,
    941      180,    -1,   238,   329,   180,    -1,   238,   234,   329,   180,
    942       -1,   231,   333,   138,   214,   180,    -1,   234,   333,   138,
    943      214,   180,    -1,   238,   333,   138,   214,   180,    -1,   238,
    944      234,   333,   138,   214,   180,    -1,   324,    -1,   337,    -1,
    945      329,    -1,   170,   126,   170,    -1,    -1,    66,   113,   145,
    946      114,   318,    -1,    -1,   319,    -1,   320,    -1,   319,   320,
    947       -1,    41,   113,   113,   321,   114,   114,    -1,   322,    -1,
    948      321,   120,   322,    -1,    -1,   323,    -1,   323,   113,   177,
    949      114,    -1,   278,    -1,   240,    -1,   241,    -1,   235,    -1,
    950      325,   318,    -1,   326,    -1,   327,   318,    -1,   328,   318,
    951       -1,   141,    -1,   113,   325,   114,    -1,   156,   324,    -1,
    952      156,   234,   324,    -1,   113,   326,   114,    -1,   325,   355,
    953       -1,   113,   326,   114,   355,    -1,   113,   327,   114,   356,
    954       -1,   113,   327,   114,    -1,   113,   326,   114,   113,   138,
    955      270,   139,   114,    -1,   113,   328,   114,    -1,   330,   318,
    956       -1,   331,    -1,   332,   318,    -1,   325,   113,   138,   270,
    957      139,   114,    -1,   113,   331,   114,   113,   138,   270,   139,
    958      114,    -1,   113,   330,   114,    -1,   156,   329,    -1,   156,
    959      234,   329,    -1,   113,   331,   114,    -1,   113,   331,   114,
    960      355,    -1,   113,   332,   114,   356,    -1,   113,   332,   114,
    961       -1,   334,    -1,   335,    -1,   336,    -1,   325,   113,   277,
    962      114,    -1,   113,   335,   114,   113,   277,   114,    -1,   113,
    963      334,   114,    -1,   156,   333,    -1,   156,   234,   333,    -1,
    964      113,   335,   114,    -1,   113,   335,   114,   355,    -1,   113,
    965      336,   114,   356,    -1,   113,   336,   114,    -1,   338,   318,
    966       -1,   339,    -1,   340,   318,    -1,   341,   318,    -1,   347,
    967       -1,   113,   338,   114,    -1,   156,   337,    -1,   156,   234,
    968      337,    -1,   113,   339,   114,    -1,   338,   355,    -1,   113,
    969      339,   114,   355,    -1,   113,   340,   114,   356,    -1,   113,
    970      340,   114,    -1,   338,   113,   138,   270,   139,   114,    -1,
    971      113,   339,   114,   113,   138,   270,   139,   114,    -1,   113,
    972      341,   114,    -1,   325,   318,    -1,   343,    -1,   344,   318,
    973       -1,   345,   318,    -1,   156,   342,    -1,   156,   234,   342,
    974       -1,   113,   343,   114,    -1,   325,   361,    -1,   113,   343,
    975      114,   355,    -1,   113,   344,   114,   356,    -1,   113,   344,
    976      114,    -1,   325,   113,   138,   270,   139,   114,    -1,   113,
    977      343,   114,   113,   138,   270,   139,   114,    -1,   113,   345,
    978      114,    -1,   347,   318,    -1,   348,    -1,   349,   318,    -1,
    979      350,   318,    -1,    76,    -1,    77,    -1,   156,   346,    -1,
    980      156,   234,   346,    -1,   113,   348,   114,    -1,   347,   361,
    981       -1,   113,   348,   114,   361,    -1,   347,   113,   138,   270,
    982      139,   114,    -1,   113,   348,   114,   113,   138,   270,   139,
    983      114,    -1,   352,    -1,   353,   318,    -1,   354,   318,    -1,
    984      156,    -1,   156,   234,    -1,   156,   351,    -1,   156,   234,
    985      351,    -1,   113,   352,   114,    -1,   355,    -1,   113,   352,
    986      114,   355,    -1,   113,   353,   114,   356,    -1,   113,   353,
    987      114,    -1,   113,   138,   270,   139,   114,    -1,   113,   352,
    988      114,   113,   138,   270,   139,   114,    -1,   113,   354,   114,
    989       -1,   115,   116,    -1,   115,   116,   356,    -1,   356,    -1,
    990      115,   138,   171,   139,   116,    -1,   115,   138,   121,   139,
    991      116,    -1,   356,   115,   138,   171,   139,   116,    -1,   356,
    992      115,   138,   121,   139,   116,    -1,   358,    -1,   359,   318,
    993       -1,   360,   318,    -1,   156,    -1,   156,   234,    -1,   156,
    994      357,    -1,   156,   234,   357,    -1,   113,   358,   114,    -1,
    995      361,    -1,   113,   358,   114,   361,    -1,   113,   359,   114,
    996      356,    -1,   113,   359,   114,    -1,   113,   138,   270,   139,
    997      114,    -1,   113,   358,   114,   113,   138,   270,   139,   114,
    998       -1,   113,   360,   114,    -1,   362,    -1,   362,   356,    -1,
    999      356,    -1,   115,   116,    -1,   115,   138,   234,   121,   139,
    1000      116,    -1,   115,   138,   234,   139,   116,    -1,   115,   138,
    1001      234,   171,   139,   116,    -1,   115,   138,     7,   233,   171,
    1002      139,   116,    -1,   115,   138,   234,     7,   171,   139,   116,
    1003       -1,   364,    -1,   365,   318,    -1,   366,   318,    -1,   156,
    1004       -1,   156,   234,    -1,   156,   363,    -1,   156,   234,   363,
    1005       -1,   113,   364,   114,    -1,   355,    -1,   113,   364,   114,
    1006      355,    -1,   113,   365,   114,   356,    -1,   113,   365,   114,
    1007       -1,   113,   364,   114,   113,   138,   270,   139,   114,    -1,
    1008      113,   366,   114,    -1,   368,    -1,   376,    -1,   234,   376,
    1009       -1,   369,    -1,   370,    -1,   156,   232,    -1,   234,   156,
    1010      232,    -1,   156,   377,    -1,   234,   156,   377,    -1,   156,
    1011      367,    -1,   234,   156,   367,    -1,   115,   116,   232,    -1,
    1012      371,   232,    -1,   115,   116,   356,   232,    -1,   371,   356,
    1013      232,    -1,   356,   232,    -1,   115,   116,   369,    -1,   371,
    1014      369,    -1,   115,   116,   356,   369,    -1,   371,   356,   369,
    1015       -1,   356,   369,    -1,   115,   138,   234,   121,   139,   116,
    1016       -1,   115,   138,   234,   171,   139,   116,    -1,   115,   138,
    1017      238,   171,   139,   116,    -1,   115,   138,   238,   234,   171,
    1018      139,   116,    -1,   376,    -1,   234,   376,    -1,   373,    -1,
    1019      374,    -1,   375,    -1,   156,   232,    -1,   234,   156,   232,
    1020       -1,   156,   377,    -1,   234,   156,   377,    -1,   156,   372,
    1021       -1,   234,   156,   372,    -1,   115,   116,   232,    -1,   115,
    1022      116,   356,   232,    -1,   356,   232,    -1,   115,   116,   374,
    1023       -1,   115,   116,   356,   374,    -1,   356,   374,    -1,   115,
    1024      138,   269,   139,   116,    -1,   376,   113,   138,   266,   139,
    1025      114,    -1,   225,   113,   138,   266,   139,   114,    -1,    -1,
    1026      120,    -1,    -1,   135,   171,    -1
     875      -1,    24,    -1,    25,    -1,   244,    -1,   239,   244,    -1,
     876     243,   241,    -1,   243,   241,   235,    -1,   243,   241,   244,
     877      -1,   245,    -1,   234,   246,   234,    -1,   242,    -1,   235,
     878     242,    -1,   245,   236,    -1,   245,   242,    -1,    30,   114,
     879     283,   115,    -1,    30,   114,   177,   115,    -1,    81,   114,
     880     283,   115,    -1,    81,   114,   177,   115,    -1,   248,    -1,
     881     239,   248,    -1,   247,   241,    -1,   247,   241,   235,    -1,
     882     251,    -1,   235,   251,    -1,   248,   236,    -1,   250,    -1,
     883     239,   250,    -1,   249,   241,    -1,   249,   241,   235,    -1,
     884      77,    -1,   235,    77,    -1,   250,   236,    -1,   252,    -1,
     885     263,    -1,   254,   119,   255,   120,    -1,   254,   281,    -1,
     886      -1,   254,   281,   253,   119,   255,   120,    -1,   254,   114,
     887     299,   115,   119,   255,   120,    -1,   254,   292,    -1,    33,
     888     319,    -1,    34,   319,    -1,    -1,   255,   256,    -1,   257,
     889     137,    -1,    43,   257,   137,    -1,   258,   137,    -1,    43,
     890     258,   137,    -1,   373,    -1,   373,   281,    -1,   257,   121,
     891     281,    -1,   257,   121,    -1,   233,   259,    -1,   258,   121,
     892     319,   259,    -1,    -1,   261,    -1,   325,   260,    -1,   338,
     893     260,    -1,   364,    -1,    -1,   261,    -1,   135,   171,    -1,
     894      32,   319,    -1,   262,   119,   265,   379,   120,    -1,   262,
     895     281,    -1,    -1,   262,   281,   264,   119,   265,   379,   120,
     896      -1,   281,   266,    -1,   265,   121,   281,   266,    -1,    -1,
     897     136,   171,    -1,    -1,   268,    -1,   270,    -1,   269,    -1,
     898     269,   140,   121,   139,   270,    -1,   270,   140,   121,   139,
     899     101,    -1,   269,   140,   121,   139,   101,    -1,   274,    -1,
     900     270,   140,   121,   139,   274,    -1,   269,   140,   121,   139,
     901     274,    -1,   269,   140,   121,   139,   270,   140,   121,   139,
     902     274,    -1,   275,    -1,   270,   140,   121,   139,   275,    -1,
     903      -1,   272,    -1,   273,    -1,   273,   140,   121,   139,   101,
     904      -1,   277,    -1,   276,    -1,   273,   140,   121,   139,   277,
     905      -1,   273,   140,   121,   139,   276,    -1,   276,    -1,   369,
     906     279,   380,    -1,   377,   279,   380,    -1,   235,   377,   279,
     907     380,    -1,   225,    -1,   277,    -1,   369,    -1,   377,    -1,
     908     235,   377,    -1,   378,    -1,   232,   343,   380,    -1,   232,
     909     347,   380,    -1,   232,    -1,   232,   358,    -1,   144,    -1,
     910     278,   121,   144,    -1,   142,    -1,    77,    -1,    78,    -1,
     911     143,    -1,    77,    -1,    78,    -1,   144,    -1,    77,    -1,
     912      78,    -1,   373,    -1,   233,    -1,   233,   364,    -1,   373,
     913      -1,   378,    -1,   233,    -1,   233,   352,    -1,    -1,   136,
     914     285,    -1,   112,   285,    -1,   172,    -1,   119,   286,   379,
     915     120,    -1,    -1,   285,    -1,   287,   285,    -1,   286,   121,
     916     285,    -1,   286,   121,   287,   285,    -1,   288,   135,    -1,
     917     281,   135,    -1,   289,    -1,   288,   289,    -1,   118,   281,
     918      -1,   116,   139,   172,   140,   117,    -1,   116,   139,   317,
     919     140,   117,    -1,   116,   139,   171,   101,   171,   140,   117,
     920      -1,   118,   116,   139,   152,   140,   117,    -1,   291,    -1,
     921     239,   291,    -1,   290,   241,    -1,   290,   241,   235,    -1,
     922     292,    -1,   235,   292,    -1,   291,   236,    -1,    78,   114,
     923     299,   115,    -1,   294,   380,    -1,   293,   121,   294,   380,
     924      -1,    -1,   296,   281,   295,   297,    -1,   233,   343,    -1,
     925      35,    -1,    37,    -1,    36,    -1,    38,    -1,    -1,   297,
     926     298,    -1,   133,   281,   114,   299,   115,    -1,   133,   119,
     927     139,   305,   120,    -1,   133,   114,   139,   293,   140,   115,
     928     119,   139,   305,   120,   114,   299,   115,    -1,   283,    -1,
     929     172,    -1,   299,   121,   283,    -1,   299,   121,   172,    -1,
     930      35,   301,    -1,   240,    35,   301,    -1,   300,   121,   301,
     931      -1,   302,   297,    -1,   302,   297,   136,   283,    -1,   281,
     932      -1,   280,   114,   139,   293,   140,   115,    -1,    39,   281,
     933     114,   139,   293,   140,   115,   119,   120,    -1,    -1,    39,
     934     281,   114,   139,   293,   140,   115,   119,   304,   305,   120,
     935      -1,   306,    -1,   305,   139,   306,    -1,   307,   140,   137,
     936      -1,   308,   140,   137,    -1,   223,    -1,   225,    -1,   307,
     937     140,   121,   139,   279,    -1,   233,   316,    -1,   308,   140,
     938     121,   139,   316,    -1,    -1,   310,    -1,   312,    -1,   310,
     939     139,   312,    -1,    -1,   310,    -1,   220,    -1,   314,    -1,
     940     206,    -1,    -1,     5,    84,   313,   119,   311,   120,    -1,
     941      43,   312,    -1,   315,    -1,   330,   181,    -1,   334,   139,
     942     215,   181,    -1,   224,   181,    -1,   232,   330,   181,    -1,
     943     235,   330,   181,    -1,   239,   330,   181,    -1,   239,   235,
     944     330,   181,    -1,   232,   334,   139,   215,   181,    -1,   235,
     945     334,   139,   215,   181,    -1,   239,   334,   139,   215,   181,
     946      -1,   239,   235,   334,   139,   215,   181,    -1,   325,    -1,
     947     338,    -1,   330,    -1,   171,   127,   171,    -1,    -1,    67,
     948     114,   146,   115,   319,    -1,    -1,   320,    -1,   321,    -1,
     949     320,   321,    -1,    42,   114,   114,   322,   115,   115,    -1,
     950     323,    -1,   322,   121,   323,    -1,    -1,   324,    -1,   324,
     951     114,   178,   115,    -1,   279,    -1,   241,    -1,   242,    -1,
     952     236,    -1,   326,   319,    -1,   327,    -1,   328,   319,    -1,
     953     329,   319,    -1,   142,    -1,   114,   326,   115,    -1,   157,
     954     325,    -1,   157,   235,   325,    -1,   114,   327,   115,    -1,
     955     326,   356,    -1,   114,   327,   115,   356,    -1,   114,   328,
     956     115,   357,    -1,   114,   328,   115,    -1,   114,   327,   115,
     957     114,   139,   271,   140,   115,    -1,   114,   329,   115,    -1,
     958     331,   319,    -1,   332,    -1,   333,   319,    -1,   326,   114,
     959     139,   271,   140,   115,    -1,   114,   332,   115,   114,   139,
     960     271,   140,   115,    -1,   114,   331,   115,    -1,   157,   330,
     961      -1,   157,   235,   330,    -1,   114,   332,   115,    -1,   114,
     962     332,   115,   356,    -1,   114,   333,   115,   357,    -1,   114,
     963     333,   115,    -1,   335,    -1,   336,    -1,   337,    -1,   326,
     964     114,   278,   115,    -1,   114,   336,   115,   114,   278,   115,
     965      -1,   114,   335,   115,    -1,   157,   334,    -1,   157,   235,
     966     334,    -1,   114,   336,   115,    -1,   114,   336,   115,   356,
     967      -1,   114,   337,   115,   357,    -1,   114,   337,   115,    -1,
     968     339,   319,    -1,   340,    -1,   341,   319,    -1,   342,   319,
     969      -1,   348,    -1,   114,   339,   115,    -1,   157,   338,    -1,
     970     157,   235,   338,    -1,   114,   340,   115,    -1,   339,   356,
     971      -1,   114,   340,   115,   356,    -1,   114,   341,   115,   357,
     972      -1,   114,   341,   115,    -1,   339,   114,   139,   271,   140,
     973     115,    -1,   114,   340,   115,   114,   139,   271,   140,   115,
     974      -1,   114,   342,   115,    -1,   326,   319,    -1,   344,    -1,
     975     345,   319,    -1,   346,   319,    -1,   157,   343,    -1,   157,
     976     235,   343,    -1,   114,   344,   115,    -1,   326,   362,    -1,
     977     114,   344,   115,   356,    -1,   114,   345,   115,   357,    -1,
     978     114,   345,   115,    -1,   326,   114,   139,   271,   140,   115,
     979      -1,   114,   344,   115,   114,   139,   271,   140,   115,    -1,
     980     114,   346,   115,    -1,   348,   319,    -1,   349,    -1,   350,
     981     319,    -1,   351,   319,    -1,    77,    -1,    78,    -1,   157,
     982     347,    -1,   157,   235,   347,    -1,   114,   349,   115,    -1,
     983     348,   362,    -1,   114,   349,   115,   362,    -1,   348,   114,
     984     139,   271,   140,   115,    -1,   114,   349,   115,   114,   139,
     985     271,   140,   115,    -1,   353,    -1,   354,   319,    -1,   355,
     986     319,    -1,   157,    -1,   157,   235,    -1,   157,   352,    -1,
     987     157,   235,   352,    -1,   114,   353,   115,    -1,   356,    -1,
     988     114,   353,   115,   356,    -1,   114,   354,   115,   357,    -1,
     989     114,   354,   115,    -1,   114,   139,   271,   140,   115,    -1,
     990     114,   353,   115,   114,   139,   271,   140,   115,    -1,   114,
     991     355,   115,    -1,   116,   117,    -1,   116,   117,   357,    -1,
     992     357,    -1,   116,   139,   172,   140,   117,    -1,   116,   139,
     993     122,   140,   117,    -1,   357,   116,   139,   172,   140,   117,
     994      -1,   357,   116,   139,   122,   140,   117,    -1,   359,    -1,
     995     360,   319,    -1,   361,   319,    -1,   157,    -1,   157,   235,
     996      -1,   157,   358,    -1,   157,   235,   358,    -1,   114,   359,
     997     115,    -1,   362,    -1,   114,   359,   115,   362,    -1,   114,
     998     360,   115,   357,    -1,   114,   360,   115,    -1,   114,   139,
     999     271,   140,   115,    -1,   114,   359,   115,   114,   139,   271,
     1000     140,   115,    -1,   114,   361,   115,    -1,   363,    -1,   363,
     1001     357,    -1,   357,    -1,   116,   117,    -1,   116,   139,   235,
     1002     122,   140,   117,    -1,   116,   139,   235,   140,   117,    -1,
     1003     116,   139,   235,   172,   140,   117,    -1,   116,   139,     7,
     1004     234,   172,   140,   117,    -1,   116,   139,   235,     7,   172,
     1005     140,   117,    -1,   365,    -1,   366,   319,    -1,   367,   319,
     1006      -1,   157,    -1,   157,   235,    -1,   157,   364,    -1,   157,
     1007     235,   364,    -1,   114,   365,   115,    -1,   356,    -1,   114,
     1008     365,   115,   356,    -1,   114,   366,   115,   357,    -1,   114,
     1009     366,   115,    -1,   114,   365,   115,   114,   139,   271,   140,
     1010     115,    -1,   114,   367,   115,    -1,   369,    -1,   377,    -1,
     1011     235,   377,    -1,   370,    -1,   371,    -1,   157,   233,    -1,
     1012     235,   157,   233,    -1,   157,   378,    -1,   235,   157,   378,
     1013      -1,   157,   368,    -1,   235,   157,   368,    -1,   116,   117,
     1014     233,    -1,   372,   233,    -1,   116,   117,   357,   233,    -1,
     1015     372,   357,   233,    -1,   357,   233,    -1,   116,   117,   370,
     1016      -1,   372,   370,    -1,   116,   117,   357,   370,    -1,   372,
     1017     357,   370,    -1,   357,   370,    -1,   116,   139,   235,   122,
     1018     140,   117,    -1,   116,   139,   235,   172,   140,   117,    -1,
     1019     116,   139,   239,   172,   140,   117,    -1,   116,   139,   239,
     1020     235,   172,   140,   117,    -1,   377,    -1,   235,   377,    -1,
     1021     374,    -1,   375,    -1,   376,    -1,   157,   233,    -1,   235,
     1022     157,   233,    -1,   157,   378,    -1,   235,   157,   378,    -1,
     1023     157,   373,    -1,   235,   157,   373,    -1,   116,   117,   233,
     1024      -1,   116,   117,   357,   233,    -1,   357,   233,    -1,   116,
     1025     117,   375,    -1,   116,   117,   357,   375,    -1,   357,   375,
     1026      -1,   116,   139,   270,   140,   117,    -1,   377,   114,   139,
     1027     267,   140,   115,    -1,   226,   114,   139,   267,   140,   115,
     1028      -1,    -1,   121,    -1,    -1,   136,   172,    -1
    10271029};
    10281030
     
    10791081    1810,  1811,  1816,  1817,  1823,  1825,  1828,  1830,  1832,  1855,
    10801082    1856,  1858,  1860,  1865,  1866,  1868,  1873,  1878,  1879,  1885,
    1081     1884,  1888,  1892,  1894,  1896,  1902,  1903,  1908,  1913,  1915,
    1082     1920,  1922,  1923,  1925,  1930,  1932,  1934,  1939,  1941,  1946,
    1083     1951,  1959,  1965,  1964,  1978,  1979,  1984,  1985,  1989,  1994,
    1084     1999,  2007,  2012,  2023,  2024,  2029,  2030,  2036,  2037,  2041,
    1085     2042,  2043,  2046,  2045,  2056,  2065,  2071,  2077,  2086,  2092,
    1086     2098,  2104,  2110,  2118,  2124,  2132,  2138,  2147,  2148,  2149,
    1087     2153,  2159,  2160,  2166,  2167,  2171,  2172,  2177,  2183,  2184,
    1088     2187,  2189,  2190,  2194,  2195,  2196,  2197,  2231,  2233,  2234,
    1089     2236,  2241,  2246,  2251,  2253,  2255,  2260,  2262,  2264,  2266,
    1090     2271,  2273,  2282,  2284,  2285,  2290,  2292,  2294,  2299,  2301,
    1091     2303,  2308,  2310,  2312,  2321,  2322,  2323,  2327,  2329,  2331,
    1092     2336,  2338,  2340,  2345,  2347,  2349,  2364,  2366,  2367,  2369,
    1093     2374,  2375,  2380,  2382,  2384,  2389,  2391,  2393,  2395,  2400,
    1094     2402,  2404,  2414,  2416,  2417,  2419,  2424,  2426,  2428,  2433,
    1095     2435,  2437,  2439,  2444,  2446,  2448,  2479,  2481,  2482,  2484,
    1096     2489,  2494,  2502,  2504,  2506,  2511,  2513,  2518,  2520,  2534,
    1097     2535,  2537,  2542,  2544,  2546,  2548,  2550,  2555,  2556,  2558,
    1098     2560,  2565,  2567,  2569,  2575,  2577,  2579,  2583,  2585,  2587,
    1099     2589,  2603,  2604,  2606,  2611,  2613,  2615,  2617,  2619,  2624,
    1100     2625,  2627,  2629,  2634,  2636,  2638,  2644,  2645,  2647,  2656,
    1101     2659,  2661,  2664,  2666,  2668,  2681,  2682,  2684,  2689,  2691,
    1102     2693,  2695,  2697,  2702,  2703,  2705,  2707,  2712,  2714,  2722,
    1103     2723,  2724,  2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,
    1104     2751,  2753,  2755,  2757,  2759,  2762,  2764,  2766,  2768,  2770,
    1105     2775,  2777,  2779,  2784,  2810,  2811,  2813,  2817,  2818,  2822,
    1106     2824,  2826,  2828,  2830,  2832,  2839,  2841,  2843,  2845,  2847,
    1107     2849,  2854,  2861,  2863,  2881,  2883,  2888,  2889
     1083    1884,  1888,  1892,  1894,  1896,  1898,  1904,  1905,  1910,  1915,
     1084    1917,  1922,  1924,  1925,  1927,  1932,  1934,  1936,  1941,  1943,
     1085    1948,  1953,  1961,  1967,  1966,  1980,  1981,  1986,  1987,  1991,
     1086    1996,  2001,  2009,  2014,  2025,  2026,  2031,  2032,  2038,  2039,
     1087    2043,  2044,  2045,  2048,  2047,  2058,  2067,  2073,  2079,  2088,
     1088    2094,  2100,  2106,  2112,  2120,  2126,  2134,  2140,  2149,  2150,
     1089    2151,  2155,  2161,  2162,  2168,  2169,  2173,  2174,  2179,  2185,
     1090    2186,  2189,  2191,  2192,  2196,  2197,  2198,  2199,  2233,  2235,
     1091    2236,  2238,  2243,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
     1092    2268,  2273,  2275,  2284,  2286,  2287,  2292,  2294,  2296,  2301,
     1093    2303,  2305,  2310,  2312,  2314,  2323,  2324,  2325,  2329,  2331,
     1094    2333,  2338,  2340,  2342,  2347,  2349,  2351,  2366,  2368,  2369,
     1095    2371,  2376,  2377,  2382,  2384,  2386,  2391,  2393,  2395,  2397,
     1096    2402,  2404,  2406,  2416,  2418,  2419,  2421,  2426,  2428,  2430,
     1097    2435,  2437,  2439,  2441,  2446,  2448,  2450,  2481,  2483,  2484,
     1098    2486,  2491,  2496,  2504,  2506,  2508,  2513,  2515,  2520,  2522,
     1099    2536,  2537,  2539,  2544,  2546,  2548,  2550,  2552,  2557,  2558,
     1100    2560,  2562,  2567,  2569,  2571,  2577,  2579,  2581,  2585,  2587,
     1101    2589,  2591,  2605,  2606,  2608,  2613,  2615,  2617,  2619,  2621,
     1102    2626,  2627,  2629,  2631,  2636,  2638,  2640,  2646,  2647,  2649,
     1103    2658,  2661,  2663,  2666,  2668,  2670,  2683,  2684,  2686,  2691,
     1104    2693,  2695,  2697,  2699,  2704,  2705,  2707,  2709,  2714,  2716,
     1105    2724,  2725,  2726,  2731,  2732,  2736,  2738,  2740,  2742,  2744,
     1106    2746,  2753,  2755,  2757,  2759,  2761,  2764,  2766,  2768,  2770,
     1107    2772,  2777,  2779,  2781,  2786,  2812,  2813,  2815,  2819,  2820,
     1108    2824,  2826,  2828,  2830,  2832,  2834,  2841,  2843,  2845,  2847,
     1109    2849,  2851,  2856,  2863,  2865,  2883,  2885,  2890,  2891
    11081110};
    11091111#endif
     
    11191121  "SIGNED", "UNSIGNED", "ZERO_T", "ONE_T", "VALIST", "BOOL", "COMPLEX",
    11201122  "IMAGINARY", "TYPEOF", "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE",
    1121   "FTYPE", "DTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
     1123  "FTYPE", "DTYPE", "TTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
    11221124  "EXTENSION", "IF", "ELSE", "SWITCH", "CASE", "DEFAULT", "DO", "WHILE",
    11231125  "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN", "CHOOSE", "DISABLE",
     
    12401242     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    12411243     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
    1242      365,   366,   367,    40,    41,    91,    93,    46,   123,   125,
    1243       44,    42,    38,    43,    45,    33,   126,    47,    37,    60,
    1244       62,    94,   124,    63,    58,    61,    59
     1244     365,   366,   367,   368,    40,    41,    91,    93,    46,   123,
     1245     125,    44,    42,    38,    43,    45,    33,   126,    47,    37,
     1246      60,    62,    94,   124,    63,    58,    61,    59
    12451247};
    12461248# endif
     
    12491251static const yytype_uint16 yyr1[] =
    12501252{
    1251        0,   137,   138,   139,   140,   140,   140,   140,   140,   141,
    1252      141,   141,   142,   142,   143,   143,   144,   144,   145,   146,
    1253      146,   147,   147,   147,   147,   147,   148,   148,   148,   148,
    1254      148,   148,   148,   148,   148,   148,   148,   148,   149,   149,
    1255      150,   150,   151,   151,   152,   152,   152,   152,   152,   152,
    1256      152,   153,   153,   153,   154,   154,   155,   155,   155,   155,
    1257      155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
    1258      155,   155,   156,   156,   157,   157,   157,   157,   158,   158,
    1259      159,   159,   159,   159,   160,   160,   160,   161,   161,   161,
    1260      162,   162,   162,   162,   162,   163,   163,   163,   164,   164,
    1261      165,   165,   166,   166,   167,   167,   168,   168,   169,   169,
    1262      169,   170,   171,   171,   172,   172,   173,   173,   173,   173,
    1263      173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
    1264      175,   175,   176,   176,   177,   177,   178,   178,   178,   178,
    1265      178,   178,   178,   178,   178,   179,   180,   180,   181,   181,
    1266      182,   182,   182,   182,   183,   183,   184,   185,   185,   185,
    1267      185,   185,   185,   186,   186,   186,   187,   187,   188,   188,
    1268      189,   189,   190,   191,   191,   192,   192,   193,   193,   194,
    1269      194,   194,   194,   195,   195,   196,   196,   197,   197,   197,
    1270      198,   198,   199,   199,   199,   199,   199,   199,   199,   199,
    1271      199,   199,   200,   200,   200,   201,   201,   201,   201,   201,
    1272      202,   202,   202,   202,   203,   204,   204,   204,   204,   204,
    1273      205,   205,   205,   205,   205,   206,   206,   207,   207,   208,
    1274      208,   209,   209,   210,   210,   210,   211,   211,   212,   212,
    1275      213,   213,   214,   214,   215,   215,   216,   216,   217,   217,
    1276      218,   218,   219,   219,   220,   220,   220,   220,   220,   221,
    1277      221,   221,   222,   222,   222,   223,   223,   223,   223,   223,
    1278      224,   224,   225,   225,   226,   226,   226,   227,   227,   227,
    1279      227,   227,   228,   228,   229,   229,   229,   229,   230,   230,
    1280      231,   231,   231,   231,   232,   232,   232,   232,   233,   233,
    1281      234,   234,   235,   235,   236,   236,   236,   236,   236,   237,
    1282      236,   238,   238,   238,   239,   239,   240,   240,   240,   240,
    1283      240,   240,   240,   240,   241,   241,   241,   241,   241,   241,
    1284      241,   241,   241,   241,   241,   241,   241,   241,   241,   242,
    1285      242,   242,   242,   242,   243,   243,   244,   244,   244,   244,
    1286      245,   245,   245,   245,   246,   246,   246,   246,   247,   247,
    1287      247,   248,   248,   248,   248,   249,   249,   249,   250,   250,
    1288      251,   251,   252,   251,   251,   251,   253,   253,   254,   254,
    1289      255,   255,   255,   255,   256,   256,   256,   256,   257,   257,
    1290      258,   258,   258,   258,   258,   259,   259,   260,   261,   262,
    1291      262,   263,   262,   264,   264,   265,   265,   266,   266,   267,
    1292      267,   267,   267,   267,   268,   268,   268,   268,   269,   269,
    1293      270,   270,   271,   271,   272,   272,   272,   272,   273,   273,
    1294      273,   273,   273,   274,   274,   274,   274,   274,   275,   275,
    1295      276,   276,   277,   277,   278,   278,   278,   279,   279,   279,
    1296      280,   280,   280,   281,   281,   281,   282,   282,   282,   282,
    1297      283,   283,   283,   284,   284,   285,   285,   285,   285,   285,
    1298      286,   286,   287,   287,   288,   288,   288,   288,   288,   289,
    1299      289,   289,   289,   290,   290,   290,   291,   292,   292,   294,
    1300      293,   293,   295,   295,   295,   296,   296,   297,   297,   297,
    1301      298,   298,   298,   298,   299,   299,   299,   300,   300,   301,
    1302      301,   302,   303,   302,   304,   304,   305,   305,   306,   306,
    1303      306,   307,   307,   308,   308,   309,   309,   310,   310,   311,
    1304      311,   311,   312,   311,   311,   313,   313,   313,   314,   314,
    1305      314,   314,   314,   314,   314,   314,   314,   315,   315,   315,
    1306      316,   317,   317,   318,   318,   319,   319,   320,   321,   321,
    1307      322,   322,   322,   323,   323,   323,   323,   324,   324,   324,
    1308      324,   325,   325,   326,   326,   326,   327,   327,   327,   327,
    1309      328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
    1310      331,   332,   332,   332,   333,   333,   333,   334,   334,   334,
    1311      335,   335,   335,   336,   336,   336,   337,   337,   337,   337,
    1312      338,   338,   339,   339,   339,   340,   340,   340,   340,   341,
    1313      341,   341,   342,   342,   342,   342,   343,   343,   343,   344,
    1314      344,   344,   344,   345,   345,   345,   346,   346,   346,   346,
    1315      347,   347,   348,   348,   348,   349,   349,   350,   350,   351,
    1316      351,   351,   352,   352,   352,   352,   352,   353,   353,   353,
    1317      353,   354,   354,   354,   355,   355,   355,   356,   356,   356,
    1318      356,   357,   357,   357,   358,   358,   358,   358,   358,   359,
    1319      359,   359,   359,   360,   360,   360,   361,   361,   361,   362,
    1320      362,   362,   362,   362,   362,   363,   363,   363,   364,   364,
    1321      364,   364,   364,   365,   365,   365,   365,   366,   366,   367,
    1322      367,   367,   368,   368,   369,   369,   369,   369,   369,   369,
    1323      370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
    1324      371,   371,   371,   371,   372,   372,   372,   373,   373,   374,
    1325      374,   374,   374,   374,   374,   375,   375,   375,   375,   375,
    1326      375,   376,   377,   377,   378,   378,   379,   379
     1253       0,   138,   139,   140,   141,   141,   141,   141,   141,   142,
     1254     142,   142,   143,   143,   144,   144,   145,   145,   146,   147,
     1255     147,   148,   148,   148,   148,   148,   149,   149,   149,   149,
     1256     149,   149,   149,   149,   149,   149,   149,   149,   150,   150,
     1257     151,   151,   152,   152,   153,   153,   153,   153,   153,   153,
     1258     153,   154,   154,   154,   155,   155,   156,   156,   156,   156,
     1259     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
     1260     156,   156,   157,   157,   158,   158,   158,   158,   159,   159,
     1261     160,   160,   160,   160,   161,   161,   161,   162,   162,   162,
     1262     163,   163,   163,   163,   163,   164,   164,   164,   165,   165,
     1263     166,   166,   167,   167,   168,   168,   169,   169,   170,   170,
     1264     170,   171,   172,   172,   173,   173,   174,   174,   174,   174,
     1265     174,   174,   174,   174,   174,   174,   174,   174,   175,   175,
     1266     176,   176,   177,   177,   178,   178,   179,   179,   179,   179,
     1267     179,   179,   179,   179,   179,   180,   181,   181,   182,   182,
     1268     183,   183,   183,   183,   184,   184,   185,   186,   186,   186,
     1269     186,   186,   186,   187,   187,   187,   188,   188,   189,   189,
     1270     190,   190,   191,   192,   192,   193,   193,   194,   194,   195,
     1271     195,   195,   195,   196,   196,   197,   197,   198,   198,   198,
     1272     199,   199,   200,   200,   200,   200,   200,   200,   200,   200,
     1273     200,   200,   201,   201,   201,   202,   202,   202,   202,   202,
     1274     203,   203,   203,   203,   204,   205,   205,   205,   205,   205,
     1275     206,   206,   206,   206,   206,   207,   207,   208,   208,   209,
     1276     209,   210,   210,   211,   211,   211,   212,   212,   213,   213,
     1277     214,   214,   215,   215,   216,   216,   217,   217,   218,   218,
     1278     219,   219,   220,   220,   221,   221,   221,   221,   221,   222,
     1279     222,   222,   223,   223,   223,   224,   224,   224,   224,   224,
     1280     225,   225,   226,   226,   227,   227,   227,   228,   228,   228,
     1281     228,   228,   229,   229,   230,   230,   230,   230,   231,   231,
     1282     232,   232,   232,   232,   233,   233,   233,   233,   234,   234,
     1283     235,   235,   236,   236,   237,   237,   237,   237,   237,   238,
     1284     237,   239,   239,   239,   240,   240,   241,   241,   241,   241,
     1285     241,   241,   241,   241,   242,   242,   242,   242,   242,   242,
     1286     242,   242,   242,   242,   242,   242,   242,   242,   242,   243,
     1287     243,   243,   243,   243,   244,   244,   245,   245,   245,   245,
     1288     246,   246,   246,   246,   247,   247,   247,   247,   248,   248,
     1289     248,   249,   249,   249,   249,   250,   250,   250,   251,   251,
     1290     252,   252,   253,   252,   252,   252,   254,   254,   255,   255,
     1291     256,   256,   256,   256,   257,   257,   257,   257,   258,   258,
     1292     259,   259,   259,   259,   259,   260,   260,   261,   262,   263,
     1293     263,   264,   263,   265,   265,   266,   266,   267,   267,   268,
     1294     268,   268,   268,   268,   269,   269,   269,   269,   270,   270,
     1295     271,   271,   272,   272,   273,   273,   273,   273,   274,   274,
     1296     274,   274,   274,   275,   275,   275,   275,   275,   276,   276,
     1297     277,   277,   278,   278,   279,   279,   279,   280,   280,   280,
     1298     281,   281,   281,   282,   282,   282,   283,   283,   283,   283,
     1299     284,   284,   284,   285,   285,   286,   286,   286,   286,   286,
     1300     287,   287,   288,   288,   289,   289,   289,   289,   289,   290,
     1301     290,   290,   290,   291,   291,   291,   292,   293,   293,   295,
     1302     294,   294,   296,   296,   296,   296,   297,   297,   298,   298,
     1303     298,   299,   299,   299,   299,   300,   300,   300,   301,   301,
     1304     302,   302,   303,   304,   303,   305,   305,   306,   306,   307,
     1305     307,   307,   308,   308,   309,   309,   310,   310,   311,   311,
     1306     312,   312,   312,   313,   312,   312,   314,   314,   314,   315,
     1307     315,   315,   315,   315,   315,   315,   315,   315,   316,   316,
     1308     316,   317,   318,   318,   319,   319,   320,   320,   321,   322,
     1309     322,   323,   323,   323,   324,   324,   324,   324,  &nb