diff --git a/src/coreclr/ilasm/asmparse.h b/src/coreclr/ilasm/asmparse.h index 5300a092b4e27..29d4ec60c2733 100644 --- a/src/coreclr/ilasm/asmparse.h +++ b/src/coreclr/ilasm/asmparse.h @@ -315,6 +315,7 @@ class AsmParse : public ErrorReporter friend int ProcessEOF(); friend unsigned __int8* skipType(unsigned __int8* ptr, BOOL fFixupType); friend void FixupConstraints(); + friend void ResolveTyParList(TyParList* list); Assembler* assem; // This does most of the semantic processing bool success; // overall success of the compilation diff --git a/src/coreclr/ilasm/asmparse.y b/src/coreclr/ilasm/asmparse.y index 73ef9a892b5ef..838bd96c69cfe 100644 --- a/src/coreclr/ilasm/asmparse.y +++ b/src/coreclr/ilasm/asmparse.y @@ -146,13 +146,14 @@ /* nonTerminals */ %type dottedName id methodName atOpt slashedName %type labels -%type callConv callKind int32 customHead customHeadWithOwner vtfixupAttr paramAttr ddItemCount variantType repeatOpt truefalse typarAttrib typarAttribs +%type callConv callKind int32 customHead customHeadWithOwner vtfixupAttr paramAttr ddItemCount variantType repeatOpt truefalse typarAttrib typarAttribs conTyparAttrib conTyparAttribs %type iidParamIndex genArity genArityNotEmpty %type float64 %type int64 %type sigArgs0 sigArgs1 sigArg type bound bounds1 bytes hexbytes nativeType marshalBlob initOpt compQstring caValue %type marshalClause %type fieldInit serInit fieldSerInit +%type constTypeArg %type f32seq f64seq i8seq i16seq i32seq i64seq boolSeq sqstringSeq classSeq objSeq %type simpleType %type tyArgs0 tyArgs1 tyArgs2 typeList typeListNotEmpty tyBound @@ -479,7 +480,7 @@ typeListNotEmpty : typeSpec { $$ = new BinStr(); ; typarsClause : /* EMPTY */ { $$ = NULL; PASM->m_TyParList = NULL;} - | '<' typars '>' { $$ = $2; PASM->m_TyParList = $2;} + | '<' typars '>' { PASM->m_TyParList = $2; ResolveTyParList(PASM->m_TyParList); $$ = PASM->m_TyParList; } ; typarAttrib : '+' { $$ = gpCovariant; } @@ -495,7 +496,16 @@ typarAttribs : /* EMPTY */ { $$ = 0; } | typarAttrib typarAttribs { $$ = $1 | $2; } ; -typars : typarAttribs tyBound dottedName typarsRest {$$ = new TyParList($1, $2, $3, $4);} +conTyparAttrib : FLAGS_ '(' int32 ')' { $$ = (CorGenericParamAttr)$3; } + ; + +conTyparAttribs : /* EMPTY */ { $$ = 0; } + | conTyparAttrib conTyparAttribs { $$ = $1 | $2; } + ; + +typars : LITERAL_ conTyparAttribs type tyBound dottedName typarsRest {$$ = new TyParList($2, $3, $4, $5, $6); } + | LITERAL_ conTyparAttribs type dottedName typarsRest {$$ = new TyParList($2, $3, NULL, $4, $5); } + | typarAttribs tyBound dottedName typarsRest {$$ = new TyParList($1, $2, $3, $4);} | typarAttribs dottedName typarsRest {$$ = new TyParList($1, NULL, $2, $3);} ; @@ -1254,6 +1264,45 @@ serInit : fieldSerInit { $$ = $1; } $$->insertInt8(ELEMENT_TYPE_SZARRAY); } ; +constTypeArg : FLOAT32_ '(' float64 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_R4); + float f = (float)(*$3); + $$->appendInt32(*((__int32*)&f)); delete $3; } + | FLOAT64_ '(' float64 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_R8); + $$->appendInt64((__int64 *)$3); delete $3; } + | FLOAT32_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_R4); + $$->appendInt32($3); } + | FLOAT64_ '(' int64 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_R8); + $$->appendInt64((__int64 *)$3); delete $3; } + | INT64_ '(' int64 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_I8); + $$->appendInt64((__int64 *)$3); delete $3; } + | INT32_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_I4); + $$->appendInt32($3); } + | INT16_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_I2); + $$->appendInt16($3); } + | INT8_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_I1); + $$->appendInt8($3); } + | UNSIGNED_ INT64_ '(' int64 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U8); + $$->appendInt64((__int64 *)$4); delete $4; } + | UNSIGNED_ INT32_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U4); + $$->appendInt32($4); } + | UNSIGNED_ INT16_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U2); + $$->appendInt16($4); } + | UNSIGNED_ INT8_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U1); + $$->appendInt8($4); } + | UINT64_ '(' int64 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U8); + $$->appendInt64((__int64 *)$3); delete $3; } + | UINT32_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U4); + $$->appendInt32($3); } + | UINT16_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U2); + $$->appendInt16($3); } + | UINT8_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_U1); + $$->appendInt8($3); } + | CHAR_ '(' int32 ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_CHAR); + $$->appendInt16($3); } + | BOOL_ '(' truefalse ')' { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_BOOLEAN); + $$->appendInt8($3);} + ; + f32seq : /* EMPTY */ { $$ = new BinStr(); } | f32seq float64 { $$ = $1; @@ -1677,6 +1726,7 @@ type : CLASS_ className { if($2 == PASM->m | OBJECT_ { $$ = new BinStr(); $$->appendInt8(ELEMENT_TYPE_OBJECT); } | VALUE_ CLASS_ className { $$ = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, $3); } | VALUETYPE_ className { $$ = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, $2); } + | constTypeArg { $$ = $1; $$->insertInt8(ELEMENT_TYPE_CTARG); } | type '[' ']' { $$ = $1; $$->insertInt8(ELEMENT_TYPE_SZARRAY); } | type '[' bounds1 ']' { $$ = parser->MakeTypeArray(ELEMENT_TYPE_ARRAY, $1, $3); } | type '&' { $$ = $1; $$->insertInt8(ELEMENT_TYPE_BYREF); } diff --git a/src/coreclr/ilasm/assem.cpp b/src/coreclr/ilasm/assem.cpp index 2bd90fadb8f91..fda709d9ab5ce 100644 --- a/src/coreclr/ilasm/assem.cpp +++ b/src/coreclr/ilasm/assem.cpp @@ -684,7 +684,7 @@ BOOL Assembler::EmitMethod(Method *pMethod) mdGenericParam tkGP = mdTokenNil; for(i = 0; i < pMethod->m_NumTyPars; i++) { - if (FAILED(m_pEmitter->DefineGenericParam(MethodToken, i, pMethod->m_TyPars[i].Attrs(), pMethod->m_TyPars[i].Name(), 0, &tkNil, &tkGP))) + if (FAILED(m_pEmitter->DefineGenericParam(MethodToken, i, pMethod->m_TyPars[i].Attrs(), pMethod->m_TyPars[i].Name(), pMethod->m_TyPars[i].Type(), &tkNil, &tkGP))) { report->error("Unable to define generic param: %s'\n", pMethod->m_TyPars[i].Name()); } @@ -1118,7 +1118,7 @@ BOOL Assembler::EmitClass(Class *pClass) mdGenericParam tkGP = mdTokenNil; for(i = 0; i < pClass->m_NumTyPars; i++) { - if (FAILED(m_pEmitter->DefineGenericParam(pClass->m_cl, i, pClass->m_TyPars[i].Attrs(), pClass->m_TyPars[i].Name(), 0, &tkNil, &tkGP))) + if (FAILED(m_pEmitter->DefineGenericParam(pClass->m_cl, i, pClass->m_TyPars[i].Attrs(), pClass->m_TyPars[i].Name(), pClass->m_TyPars[i].Type(), &tkNil, &tkGP))) { report->error("Unable to define generic param: %s'\n", pClass->m_TyPars[i].Name()); } diff --git a/src/coreclr/ilasm/assembler.h b/src/coreclr/ilasm/assembler.h index b80ef9a16d3c7..a335bc29a8f25 100644 --- a/src/coreclr/ilasm/assembler.h +++ b/src/coreclr/ilasm/assembler.h @@ -869,7 +869,7 @@ class Assembler { void SetStdMapping(BOOL val = TRUE) { m_fStdMapping = val; }; //-------------------------------------------------------------------------------- - BOOL isShort(unsigned instr) { return ((OpcodeInfo[instr].Type & 16) != 0); }; + BOOL isShort(unsigned instr) { return ((OpcodeInfo[instr].Type & opcode_format_t::ShortInline) != 0); }; unsigned ShortOf(unsigned opcode); void SetErrorReporter(ErrorReporter* aReport) { report = aReport; if(m_pManifest) m_pManifest->SetErrorReporter(aReport); } diff --git a/src/coreclr/ilasm/grammar_after.cpp b/src/coreclr/ilasm/grammar_after.cpp index 45591afc9c57a..2e62efeb1feda 100644 --- a/src/coreclr/ilasm/grammar_after.cpp +++ b/src/coreclr/ilasm/grammar_after.cpp @@ -47,7 +47,7 @@ static Keywords keywords[] = { #define InlineR INSTR_R #define ShortInlineR INSTR_R #define InlineBrTarget INSTR_BRTARGET -#define ShortInlineBrTarget INSTR_BRTARGET +#define ShortInlineBrTarget INSTR_BRTARGET #define InlineMethod INSTR_METHOD #define InlineField INSTR_FIELD #define InlineType INSTR_TYPE @@ -1329,7 +1329,6 @@ static void corEmitInt(BinStr* buff, unsigned data) buff->remove(5 - cnt); } - /**************************************************************************/ /* move 'ptr past the exactly one type description */ @@ -1360,11 +1359,13 @@ unsigned __int8* skipType(unsigned __int8* ptr, BOOL fFixupType) /* do nothing */ break; - case ELEMENT_TYPE_VALUETYPE : + case ELEMENT_TYPE_VALUETYPE : case ELEMENT_TYPE_CLASS : ptr += CorSigUncompressToken(ptr, &tk); break; - + case ELEMENT_TYPE_CTARG : + ptr += CorSigUncompressConstTypeArgData((PCCOR_SIGNATURE&) ptr); // const type argument + break; case ELEMENT_TYPE_CMOD_REQD : case ELEMENT_TYPE_CMOD_OPT : ptr += CorSigUncompressToken(ptr, &tk); @@ -1530,7 +1531,6 @@ unsigned __int8* skipType(unsigned __int8* ptr, BOOL fFixupType) } } break; - default: case ELEMENT_TYPE_END : _ASSERTE(!"Unknown Type"); @@ -1557,6 +1557,20 @@ void FixupTyPars(BinStr* pbstype) FixupTyPars((PCOR_SIGNATURE)(pbstype->ptr()),(ULONG)(pbstype->length())); } /**************************************************************************/ +void ResolveTyParList(TyParList* list) +{ + TyParList* cur = list; + while (cur != NULL) + { + if (cur->unresolvedType != NULL && cur->type == 0) + { + FixupTyPars(cur->unresolvedType); + cur->type = PASM->ResolveTypeSpec(cur->unresolvedType); + } + cur = cur->Next(); + } +} +/**************************************************************************/ static unsigned corCountArgs(BinStr* args) { unsigned __int8* ptr = args->ptr(); diff --git a/src/coreclr/ilasm/grammar_before.cpp b/src/coreclr/ilasm/grammar_before.cpp index b49a382f7d890..e5775db054ee9 100644 --- a/src/coreclr/ilasm/grammar_before.cpp +++ b/src/coreclr/ilasm/grammar_before.cpp @@ -51,6 +51,11 @@ static char* newString(_In_ __nullterminated const char* str1); static void corEmitInt(BinStr* buff, unsigned data); static void AppendStringWithLength(BinStr* pbs, _In_ __nullterminated char* sz); static void AppendFieldToCustomBlob(BinStr* pBlob, _In_ BinStr* pField); +static unsigned corCountArgs(BinStr* args); +void yyerror(_In_ __nullterminated const char*); +Instr* SetupInstr(unsigned short); +int yylex(); +void ResolveTyParList(TyParList* list); bool bParsingByteArray = FALSE; int iOpcodeLen = 0; int iCallConv = 0; diff --git a/src/coreclr/ilasm/prebuilt/asmparse.cpp b/src/coreclr/ilasm/prebuilt/asmparse.cpp index 6bf91f56c57f4..0340ae1d90209 100644 --- a/src/coreclr/ilasm/prebuilt/asmparse.cpp +++ b/src/coreclr/ilasm/prebuilt/asmparse.cpp @@ -1,522 +1,1282 @@ -/* - * Created by Microsoft VCBU Internal YACC from "asmparse.y" - */ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ -#line 2 "asmparse.y" +#define YYBYACC 1 +#define YYMAJOR 2 +#define YYMINOR 0 +#define YYPATCH 20220114 -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -// -// File asmparse.y -// -#include "ilasmpch.h" - -#include "grammar_before.cpp" +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 +#undef YYBTYACC +#define YYBTYACC 0 +#define YYDEBUGSTR YYPREFIX "debug" +#define YYPREFIX "yy" +#define YYPURE 0 +#line 1 "asmparse.y" + + +/* Licensed to the .NET Foundation under one or more agreements. */ +/* The .NET Foundation licenses this file to you under the MIT license. */ + +/* */ +/* File asmparse.y */ +/* */ +#include "ilasmpch.h" + +#include "grammar_before.cpp" + +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 #line 15 "asmparse.y" - -#define UNION 1 -typedef union { - CorRegTypeAttr classAttr; - CorMethodAttr methAttr; - CorFieldAttr fieldAttr; - CorMethodImpl implAttr; - CorEventAttr eventAttr; - CorPropertyAttr propAttr; - CorPinvokeMap pinvAttr; - CorDeclSecurity secAct; - CorFileFlags fileAttr; - CorAssemblyFlags asmAttr; - CorAssemblyFlags asmRefAttr; - CorTypeAttr exptAttr; - CorManifestResourceFlags manresAttr; - double* float64; - __int64* int64; - __int32 int32; - char* string; - BinStr* binstr; - Labels* labels; - Instr* instr; // instruction opcode - NVPair* pair; - pTyParList typarlist; - mdToken token; - TypeDefDescr* tdd; - CustomDescr* cad; - unsigned short opcode; +typedef union YYSTYPE { + CorRegTypeAttr classAttr; + CorMethodAttr methAttr; + CorFieldAttr fieldAttr; + CorMethodImpl implAttr; + CorEventAttr eventAttr; + CorPropertyAttr propAttr; + CorPinvokeMap pinvAttr; + CorDeclSecurity secAct; + CorFileFlags fileAttr; + CorAssemblyFlags asmAttr; + CorAssemblyFlags asmRefAttr; + CorTypeAttr exptAttr; + CorManifestResourceFlags manresAttr; + double* float64; + __int64* int64; + __int32 int32; + char* string; + BinStr* binstr; + Labels* labels; + Instr* instr; /* instruction opcode */ + NVPair* pair; + pTyParList typarlist; + mdToken token; + TypeDefDescr* tdd; + CustomDescr* cad; + unsigned short opcode; } YYSTYPE; -# define ERROR_ 257 -# define BAD_COMMENT_ 258 -# define BAD_LITERAL_ 259 -# define ID 260 -# define DOTTEDNAME 261 -# define QSTRING 262 -# define SQSTRING 263 -# define INT32 264 -# define INT64 265 -# define FLOAT64 266 -# define HEXBYTE 267 -# define TYPEDEF_T 268 -# define TYPEDEF_M 269 -# define TYPEDEF_F 270 -# define TYPEDEF_TS 271 -# define TYPEDEF_MR 272 -# define TYPEDEF_CA 273 -# define DCOLON 274 -# define ELLIPSIS 275 -# define VOID_ 276 -# define BOOL_ 277 -# define CHAR_ 278 -# define UNSIGNED_ 279 -# define INT_ 280 -# define INT8_ 281 -# define INT16_ 282 -# define INT32_ 283 -# define INT64_ 284 -# define FLOAT_ 285 -# define FLOAT32_ 286 -# define FLOAT64_ 287 -# define BYTEARRAY_ 288 -# define UINT_ 289 -# define UINT8_ 290 -# define UINT16_ 291 -# define UINT32_ 292 -# define UINT64_ 293 -# define FLAGS_ 294 -# define CALLCONV_ 295 -# define MDTOKEN_ 296 -# define OBJECT_ 297 -# define STRING_ 298 -# define NULLREF_ 299 -# define DEFAULT_ 300 -# define CDECL_ 301 -# define VARARG_ 302 -# define STDCALL_ 303 -# define THISCALL_ 304 -# define FASTCALL_ 305 -# define CLASS_ 306 -# define BYREFLIKE_ 307 -# define GENCONSTRAINT_ 308 -# define TYPEDREF_ 309 -# define UNMANAGED_ 310 -# define FINALLY_ 311 -# define HANDLER_ 312 -# define CATCH_ 313 -# define FILTER_ 314 -# define FAULT_ 315 -# define EXTENDS_ 316 -# define IMPLEMENTS_ 317 -# define TO_ 318 -# define AT_ 319 -# define TLS_ 320 -# define TRUE_ 321 -# define FALSE_ 322 -# define _INTERFACEIMPL 323 -# define VALUE_ 324 -# define VALUETYPE_ 325 -# define NATIVE_ 326 -# define INSTANCE_ 327 -# define SPECIALNAME_ 328 -# define FORWARDER_ 329 -# define STATIC_ 330 -# define PUBLIC_ 331 -# define PRIVATE_ 332 -# define FAMILY_ 333 -# define FINAL_ 334 -# define SYNCHRONIZED_ 335 -# define INTERFACE_ 336 -# define SEALED_ 337 -# define NESTED_ 338 -# define ABSTRACT_ 339 -# define AUTO_ 340 -# define SEQUENTIAL_ 341 -# define EXPLICIT_ 342 -# define ANSI_ 343 -# define UNICODE_ 344 -# define AUTOCHAR_ 345 -# define IMPORT_ 346 -# define ENUM_ 347 -# define VIRTUAL_ 348 -# define NOINLINING_ 349 -# define AGGRESSIVEINLINING_ 350 -# define NOOPTIMIZATION_ 351 -# define AGGRESSIVEOPTIMIZATION_ 352 -# define UNMANAGEDEXP_ 353 -# define BEFOREFIELDINIT_ 354 -# define STRICT_ 355 -# define RETARGETABLE_ 356 -# define WINDOWSRUNTIME_ 357 -# define NOPLATFORM_ 358 -# define METHOD_ 359 -# define FIELD_ 360 -# define PINNED_ 361 -# define MODREQ_ 362 -# define MODOPT_ 363 -# define SERIALIZABLE_ 364 -# define PROPERTY_ 365 -# define TYPE_ 366 -# define ASSEMBLY_ 367 -# define FAMANDASSEM_ 368 -# define FAMORASSEM_ 369 -# define PRIVATESCOPE_ 370 -# define HIDEBYSIG_ 371 -# define NEWSLOT_ 372 -# define RTSPECIALNAME_ 373 -# define PINVOKEIMPL_ 374 -# define _CTOR 375 -# define _CCTOR 376 -# define LITERAL_ 377 -# define NOTSERIALIZED_ 378 -# define INITONLY_ 379 -# define REQSECOBJ_ 380 -# define CIL_ 381 -# define OPTIL_ 382 -# define MANAGED_ 383 -# define FORWARDREF_ 384 -# define PRESERVESIG_ 385 -# define RUNTIME_ 386 -# define INTERNALCALL_ 387 -# define _IMPORT 388 -# define NOMANGLE_ 389 -# define LASTERR_ 390 -# define WINAPI_ 391 -# define AS_ 392 -# define BESTFIT_ 393 -# define ON_ 394 -# define OFF_ 395 -# define CHARMAPERROR_ 396 -# define INSTR_NONE 397 -# define INSTR_VAR 398 -# define INSTR_I 399 -# define INSTR_I8 400 -# define INSTR_R 401 -# define INSTR_BRTARGET 402 -# define INSTR_METHOD 403 -# define INSTR_FIELD 404 -# define INSTR_TYPE 405 -# define INSTR_STRING 406 -# define INSTR_SIG 407 -# define INSTR_TOK 408 -# define INSTR_SWITCH 409 -# define _CLASS 410 -# define _NAMESPACE 411 -# define _METHOD 412 -# define _FIELD 413 -# define _DATA 414 -# define _THIS 415 -# define _BASE 416 -# define _NESTER 417 -# define _EMITBYTE 418 -# define _TRY 419 -# define _MAXSTACK 420 -# define _LOCALS 421 -# define _ENTRYPOINT 422 -# define _ZEROINIT 423 -# define _EVENT 424 -# define _ADDON 425 -# define _REMOVEON 426 -# define _FIRE 427 -# define _OTHER 428 -# define _PROPERTY 429 -# define _SET 430 -# define _GET 431 -# define _PERMISSION 432 -# define _PERMISSIONSET 433 -# define REQUEST_ 434 -# define DEMAND_ 435 -# define ASSERT_ 436 -# define DENY_ 437 -# define PERMITONLY_ 438 -# define LINKCHECK_ 439 -# define INHERITCHECK_ 440 -# define REQMIN_ 441 -# define REQOPT_ 442 -# define REQREFUSE_ 443 -# define PREJITGRANT_ 444 -# define PREJITDENY_ 445 -# define NONCASDEMAND_ 446 -# define NONCASLINKDEMAND_ 447 -# define NONCASINHERITANCE_ 448 -# define _LINE 449 -# define P_LINE 450 -# define _LANGUAGE 451 -# define _CUSTOM 452 -# define INIT_ 453 -# define _SIZE 454 -# define _PACK 455 -# define _VTABLE 456 -# define _VTFIXUP 457 -# define FROMUNMANAGED_ 458 -# define CALLMOSTDERIVED_ 459 -# define _VTENTRY 460 -# define RETAINAPPDOMAIN_ 461 -# define _FILE 462 -# define NOMETADATA_ 463 -# define _HASH 464 -# define _ASSEMBLY 465 -# define _PUBLICKEY 466 -# define _PUBLICKEYTOKEN 467 -# define ALGORITHM_ 468 -# define _VER 469 -# define _LOCALE 470 -# define EXTERN_ 471 -# define _MRESOURCE 472 -# define _MODULE 473 -# define _EXPORT 474 -# define LEGACY_ 475 -# define LIBRARY_ 476 -# define X86_ 477 -# define AMD64_ 478 -# define ARM_ 479 -# define ARM64_ 480 -# define MARSHAL_ 481 -# define CUSTOM_ 482 -# define SYSSTRING_ 483 -# define FIXED_ 484 -# define VARIANT_ 485 -# define CURRENCY_ 486 -# define SYSCHAR_ 487 -# define DECIMAL_ 488 -# define DATE_ 489 -# define BSTR_ 490 -# define TBSTR_ 491 -# define LPSTR_ 492 -# define LPWSTR_ 493 -# define LPTSTR_ 494 -# define OBJECTREF_ 495 -# define IUNKNOWN_ 496 -# define IDISPATCH_ 497 -# define STRUCT_ 498 -# define SAFEARRAY_ 499 -# define BYVALSTR_ 500 -# define LPVOID_ 501 -# define ANY_ 502 -# define ARRAY_ 503 -# define LPSTRUCT_ 504 -# define IIDPARAM_ 505 -# define IN_ 506 -# define OUT_ 507 -# define OPT_ 508 -# define _PARAM 509 -# define _OVERRIDE 510 -# define WITH_ 511 -# define NULL_ 512 -# define HRESULT_ 513 -# define CARRAY_ 514 -# define USERDEFINED_ 515 -# define RECORD_ 516 -# define FILETIME_ 517 -# define BLOB_ 518 -# define STREAM_ 519 -# define STORAGE_ 520 -# define STREAMED_OBJECT_ 521 -# define STORED_OBJECT_ 522 -# define BLOB_OBJECT_ 523 -# define CF_ 524 -# define CLSID_ 525 -# define VECTOR_ 526 -# define _SUBSYSTEM 527 -# define _CORFLAGS 528 -# define ALIGNMENT_ 529 -# define _IMAGEBASE 530 -# define _STACKRESERVE 531 -# define _TYPEDEF 532 -# define _TEMPLATE 533 -# define _TYPELIST 534 -# define _MSCORLIB 535 -# define P_DEFINE 536 -# define P_UNDEF 537 -# define P_IFDEF 538 -# define P_IFNDEF 539 -# define P_ELSE 540 -# define P_ENDIF 541 -# define P_INCLUDE 542 -# define CONSTRAINT_ 543 -#define yyclearin yychar = -1 -#define yyerrok yyerrflag = 0 -#ifndef YYMAXDEPTH -#define YYMAXDEPTH 150 -#endif -YYSTYPE yylval, yyval; -#ifndef YYFARDATA -#define YYFARDATA /*nothing*/ -#endif -#if ! defined YYSTATIC -#define YYSTATIC /*nothing*/ -#endif -#if ! defined YYCONST -#define YYCONST /*nothing*/ -#endif -#ifndef YYACT -#define YYACT yyact -#endif -#ifndef YYPACT -#define YYPACT yypact -#endif -#ifndef YYPGO -#define YYPGO yypgo -#endif -#ifndef YYR1 -#define YYR1 yyr1 -#endif -#ifndef YYR2 -#define YYR2 yyr2 -#endif -#ifndef YYCHK -#define YYCHK yychk -#endif -#ifndef YYDEF -#define YYDEF yydef -#endif -#ifndef YYV -#define YYV yyv -#endif -#ifndef YYS -#define YYS yys -#endif -#ifndef YYLOCAL -#define YYLOCAL -#endif -#ifndef YYR_T -#define YYR_T int -#endif -typedef YYR_T yyr_t; -#ifndef YYEXIND_T -#define YYEXIND_T unsigned int -#endif -typedef YYEXIND_T yyexind_t; -#ifndef YYOPTTIME -#define YYOPTTIME 0 -#endif -# define YYERRCODE 256 - -#line 2063 "asmparse.y" +#endif /* !YYSTYPE_IS_DECLARED */ +#line 73 "asmparse.cpp" - -#include "grammar_after.cpp" -YYSTATIC YYCONST short yyexca[] = { -#if !(YYOPTTIME) --1, 1, -#endif - 0, -1, - -2, 0, -#if !(YYOPTTIME) --1, 452, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 622, -#endif - 274, 557, - 47, 557, - -2, 232, -#if !(YYOPTTIME) --1, 643, -#endif - 40, 312, - 60, 312, - -2, 557, -#if !(YYOPTTIME) --1, 665, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 690, -#endif - 274, 557, - 47, 557, - -2, 518, -#if !(YYOPTTIME) --1, 811, -#endif - 123, 237, - -2, 557, -#if !(YYOPTTIME) --1, 838, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 963, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 997, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 998, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1328, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1329, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1336, -#endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1344, +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) #endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1470, + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() #endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1502, + +#if !(defined(yylex) || defined(YYSTATE)) +int YYLEX_DECL(); #endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1569, + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) #endif - 41, 540, - -2, 313, -#if !(YYOPTTIME) --1, 1586, +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) #endif - 41, 540, - -2, 313, -}; +extern int YYPARSE_DECL(); -# define YYNPROD 846 -#if YYOPTTIME -YYSTATIC YYCONST yyexind_t yyexcaind[] = { +#define ERROR_ 257 +#define BAD_COMMENT_ 258 +#define BAD_LITERAL_ 259 +#define ID 260 +#define DOTTEDNAME 261 +#define QSTRING 262 +#define SQSTRING 263 +#define INT32 264 +#define INT64 265 +#define FLOAT64 266 +#define HEXBYTE 267 +#define TYPEDEF_T 268 +#define TYPEDEF_M 269 +#define TYPEDEF_F 270 +#define TYPEDEF_TS 271 +#define TYPEDEF_MR 272 +#define TYPEDEF_CA 273 +#define DCOLON 274 +#define ELLIPSIS 275 +#define VOID_ 276 +#define BOOL_ 277 +#define CHAR_ 278 +#define UNSIGNED_ 279 +#define INT_ 280 +#define INT8_ 281 +#define INT16_ 282 +#define INT32_ 283 +#define INT64_ 284 +#define FLOAT_ 285 +#define FLOAT32_ 286 +#define FLOAT64_ 287 +#define BYTEARRAY_ 288 +#define UINT_ 289 +#define UINT8_ 290 +#define UINT16_ 291 +#define UINT32_ 292 +#define UINT64_ 293 +#define FLAGS_ 294 +#define CALLCONV_ 295 +#define MDTOKEN_ 296 +#define OBJECT_ 297 +#define STRING_ 298 +#define NULLREF_ 299 +#define DEFAULT_ 300 +#define CDECL_ 301 +#define VARARG_ 302 +#define STDCALL_ 303 +#define THISCALL_ 304 +#define FASTCALL_ 305 +#define CLASS_ 306 +#define BYREFLIKE_ 307 +#define TYPEDREF_ 308 +#define UNMANAGED_ 309 +#define FINALLY_ 310 +#define HANDLER_ 311 +#define CATCH_ 312 +#define FILTER_ 313 +#define FAULT_ 314 +#define EXTENDS_ 315 +#define IMPLEMENTS_ 316 +#define TO_ 317 +#define AT_ 318 +#define TLS_ 319 +#define TRUE_ 320 +#define FALSE_ 321 +#define _INTERFACEIMPL 322 +#define VALUE_ 323 +#define VALUETYPE_ 324 +#define NATIVE_ 325 +#define INSTANCE_ 326 +#define SPECIALNAME_ 327 +#define FORWARDER_ 328 +#define STATIC_ 329 +#define PUBLIC_ 330 +#define PRIVATE_ 331 +#define FAMILY_ 332 +#define FINAL_ 333 +#define SYNCHRONIZED_ 334 +#define INTERFACE_ 335 +#define SEALED_ 336 +#define NESTED_ 337 +#define ABSTRACT_ 338 +#define AUTO_ 339 +#define SEQUENTIAL_ 340 +#define EXPLICIT_ 341 +#define ANSI_ 342 +#define UNICODE_ 343 +#define AUTOCHAR_ 344 +#define IMPORT_ 345 +#define ENUM_ 346 +#define VIRTUAL_ 347 +#define NOINLINING_ 348 +#define AGGRESSIVEINLINING_ 349 +#define NOOPTIMIZATION_ 350 +#define AGGRESSIVEOPTIMIZATION_ 351 +#define UNMANAGEDEXP_ 352 +#define BEFOREFIELDINIT_ 353 +#define STRICT_ 354 +#define RETARGETABLE_ 355 +#define WINDOWSRUNTIME_ 356 +#define NOPLATFORM_ 357 +#define METHOD_ 358 +#define FIELD_ 359 +#define PINNED_ 360 +#define MODREQ_ 361 +#define MODOPT_ 362 +#define SERIALIZABLE_ 363 +#define PROPERTY_ 364 +#define TYPE_ 365 +#define ASSEMBLY_ 366 +#define FAMANDASSEM_ 367 +#define FAMORASSEM_ 368 +#define PRIVATESCOPE_ 369 +#define HIDEBYSIG_ 370 +#define NEWSLOT_ 371 +#define RTSPECIALNAME_ 372 +#define PINVOKEIMPL_ 373 +#define _CTOR 374 +#define _CCTOR 375 +#define LITERAL_ 376 +#define NOTSERIALIZED_ 377 +#define INITONLY_ 378 +#define REQSECOBJ_ 379 +#define CIL_ 380 +#define OPTIL_ 381 +#define MANAGED_ 382 +#define FORWARDREF_ 383 +#define PRESERVESIG_ 384 +#define RUNTIME_ 385 +#define INTERNALCALL_ 386 +#define _IMPORT 387 +#define NOMANGLE_ 388 +#define LASTERR_ 389 +#define WINAPI_ 390 +#define AS_ 391 +#define BESTFIT_ 392 +#define ON_ 393 +#define OFF_ 394 +#define CHARMAPERROR_ 395 +#define INSTR_NONE 396 +#define INSTR_VAR 397 +#define INSTR_I 398 +#define INSTR_I8 399 +#define INSTR_R 400 +#define INSTR_BRTARGET 401 +#define INSTR_METHOD 402 +#define INSTR_FIELD 403 +#define INSTR_TYPE 404 +#define INSTR_STRING 405 +#define INSTR_SIG 406 +#define INSTR_TOK 407 +#define INSTR_SWITCH 408 +#define _CLASS 409 +#define _NAMESPACE 410 +#define _METHOD 411 +#define _FIELD 412 +#define _DATA 413 +#define _THIS 414 +#define _BASE 415 +#define _NESTER 416 +#define _EMITBYTE 417 +#define _TRY 418 +#define _MAXSTACK 419 +#define _LOCALS 420 +#define _ENTRYPOINT 421 +#define _ZEROINIT 422 +#define _EVENT 423 +#define _ADDON 424 +#define _REMOVEON 425 +#define _FIRE 426 +#define _OTHER 427 +#define _PROPERTY 428 +#define _SET 429 +#define _GET 430 +#define _PERMISSION 431 +#define _PERMISSIONSET 432 +#define REQUEST_ 433 +#define DEMAND_ 434 +#define ASSERT_ 435 +#define DENY_ 436 +#define PERMITONLY_ 437 +#define LINKCHECK_ 438 +#define INHERITCHECK_ 439 +#define REQMIN_ 440 +#define REQOPT_ 441 +#define REQREFUSE_ 442 +#define PREJITGRANT_ 443 +#define PREJITDENY_ 444 +#define NONCASDEMAND_ 445 +#define NONCASLINKDEMAND_ 446 +#define NONCASINHERITANCE_ 447 +#define _LINE 448 +#define P_LINE 449 +#define _LANGUAGE 450 +#define _CUSTOM 451 +#define INIT_ 452 +#define _SIZE 453 +#define _PACK 454 +#define _VTABLE 455 +#define _VTFIXUP 456 +#define FROMUNMANAGED_ 457 +#define CALLMOSTDERIVED_ 458 +#define _VTENTRY 459 +#define RETAINAPPDOMAIN_ 460 +#define _FILE 461 +#define NOMETADATA_ 462 +#define _HASH 463 +#define _ASSEMBLY 464 +#define _PUBLICKEY 465 +#define _PUBLICKEYTOKEN 466 +#define ALGORITHM_ 467 +#define _VER 468 +#define _LOCALE 469 +#define EXTERN_ 470 +#define _MRESOURCE 471 +#define _MODULE 472 +#define _EXPORT 473 +#define LEGACY_ 474 +#define LIBRARY_ 475 +#define X86_ 476 +#define AMD64_ 477 +#define ARM_ 478 +#define ARM64_ 479 +#define MARSHAL_ 480 +#define CUSTOM_ 481 +#define SYSSTRING_ 482 +#define FIXED_ 483 +#define VARIANT_ 484 +#define CURRENCY_ 485 +#define SYSCHAR_ 486 +#define DECIMAL_ 487 +#define DATE_ 488 +#define BSTR_ 489 +#define TBSTR_ 490 +#define LPSTR_ 491 +#define LPWSTR_ 492 +#define LPTSTR_ 493 +#define OBJECTREF_ 494 +#define IUNKNOWN_ 495 +#define IDISPATCH_ 496 +#define STRUCT_ 497 +#define SAFEARRAY_ 498 +#define BYVALSTR_ 499 +#define LPVOID_ 500 +#define ANY_ 501 +#define ARRAY_ 502 +#define LPSTRUCT_ 503 +#define IIDPARAM_ 504 +#define IN_ 505 +#define OUT_ 506 +#define OPT_ 507 +#define _PARAM 508 +#define _OVERRIDE 509 +#define WITH_ 510 +#define NULL_ 511 +#define HRESULT_ 512 +#define CARRAY_ 513 +#define USERDEFINED_ 514 +#define RECORD_ 515 +#define FILETIME_ 516 +#define BLOB_ 517 +#define STREAM_ 518 +#define STORAGE_ 519 +#define STREAMED_OBJECT_ 520 +#define STORED_OBJECT_ 521 +#define BLOB_OBJECT_ 522 +#define CF_ 523 +#define CLSID_ 524 +#define VECTOR_ 525 +#define _SUBSYSTEM 526 +#define _CORFLAGS 527 +#define ALIGNMENT_ 528 +#define _IMAGEBASE 529 +#define _STACKRESERVE 530 +#define _TYPEDEF 531 +#define _TEMPLATE 532 +#define _TYPELIST 533 +#define _MSCORLIB 534 +#define P_DEFINE 535 +#define P_UNDEF 536 +#define P_IFDEF 537 +#define P_IFNDEF 538 +#define P_ELSE 539 +#define P_ENDIF 540 +#define P_INCLUDE 541 +#define CONSTRAINT_ 542 +#define YYERRCODE 256 +typedef int YYINT; +static const YYINT yylhs[] = { -1, + 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 138, 138, + 38, 38, 135, 135, 135, 2, 2, 1, 1, 1, + 9, 26, 26, 25, 25, 25, 136, 136, 136, 136, + 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 96, 96, 96, 96, 97, 97, 97, 97, 10, 11, + 76, 75, 75, 62, 64, 64, 64, 65, 65, 65, + 68, 68, 134, 134, 134, 63, 63, 63, 63, 63, + 63, 132, 132, 132, 121, 12, 12, 12, 12, 12, + 12, 120, 139, 115, 140, 141, 113, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 142, 142, 143, 143, 114, 114, + 144, 144, 59, 59, 60, 60, 72, 72, 18, 18, + 18, 18, 18, 18, 18, 19, 19, 20, 21, 21, + 71, 71, 71, 71, 70, 70, 61, 23, 23, 24, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 118, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, 4, 4, + 37, 37, 16, 16, 78, 78, 78, 78, 78, 78, + 78, 7, 7, 7, 7, 8, 8, 8, 8, 8, + 8, 8, 8, 79, 77, 77, 77, 77, 77, 77, + 146, 146, 84, 84, 84, 147, 147, 152, 152, 152, + 152, 152, 152, 152, 152, 148, 85, 85, 85, 149, + 149, 153, 153, 153, 153, 153, 153, 153, 154, 40, + 40, 36, 36, 155, 116, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 3, 3, 3, 13, 13, 13, + 13, 13, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 156, 117, + 117, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 160, 161, 158, + 163, 163, 162, 162, 162, 165, 164, 164, 164, 164, + 168, 168, 168, 171, 166, 169, 170, 167, 167, 167, + 119, 172, 172, 174, 174, 174, 173, 173, 175, 175, + 14, 14, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 177, 33, 33, 34, + 34, 41, 41, 41, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, + 45, 46, 46, 46, 50, 50, 49, 49, 48, 48, + 47, 47, 51, 51, 52, 52, 52, 53, 53, 53, + 53, 54, 54, 151, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 6, 6, 6, 6, 6, 56, 56, 57, 57, + 58, 58, 27, 27, 28, 28, 29, 29, 29, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 5, + 5, 74, 74, 74, 74, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 22, 22, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 32, 32, 31, 31, 31, 31, + 31, 133, 133, 133, 133, 133, 133, 67, 67, 67, + 66, 66, 90, 90, 87, 87, 88, 17, 17, 39, + 39, 39, 39, 39, 39, 39, 39, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 178, 178, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 123, 123, 91, 91, 92, + 92, 179, 124, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 125, 125, 180, 180, 180, 69, 69, + 181, 181, 181, 181, 181, 181, 182, 184, 183, 126, + 126, 127, 127, 185, 185, 185, 185, 128, 150, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 129, + 129, 186, 186, 186, 186, 186, 186, 186, 130, 130, + 95, 95, 95, 131, 131, 187, 187, 187, 187, +}; +static const YYINT yylen[] = { 2, + 0, 2, 4, 4, 3, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 4, 1, 1, 1, 2, 2, + 3, 2, 2, 1, 1, 1, 4, 1, 0, 2, + 1, 3, 2, 4, 6, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, + 4, 2, 3, 2, 2, 2, 1, 1, 2, 1, + 2, 4, 6, 3, 5, 7, 9, 3, 4, 7, + 1, 1, 1, 2, 0, 2, 2, 0, 6, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, + 3, 1, 2, 3, 7, 0, 2, 2, 2, 2, + 2, 3, 3, 2, 1, 4, 3, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 5, 0, 2, 0, 2, 0, 2, + 3, 1, 0, 1, 1, 3, 0, 3, 1, 1, + 1, 1, 1, 1, 4, 0, 2, 4, 0, 2, + 6, 5, 4, 3, 0, 2, 3, 0, 1, 5, + 3, 4, 4, 4, 1, 1, 1, 1, 1, 2, + 2, 4, 13, 22, 1, 1, 5, 3, 7, 5, + 4, 7, 0, 2, 2, 2, 2, 2, 2, 2, + 5, 2, 2, 2, 2, 2, 2, 5, 0, 2, + 0, 2, 0, 3, 9, 9, 7, 7, 1, 1, + 1, 2, 2, 1, 4, 0, 1, 1, 2, 2, + 2, 2, 1, 4, 2, 5, 3, 2, 2, 1, + 4, 3, 0, 2, 2, 0, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 9, 0, 2, 2, 0, + 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, + 4, 1, 3, 1, 13, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 5, 8, 6, 5, 0, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, + 4, 4, 4, 5, 1, 1, 1, 0, 4, 4, + 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 5, 1, 0, + 2, 2, 1, 2, 4, 5, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 4, 6, 4, 4, + 11, 1, 5, 3, 7, 5, 5, 3, 1, 2, + 2, 1, 2, 4, 4, 1, 2, 2, 2, 2, + 2, 2, 2, 1, 2, 1, 1, 1, 4, 4, + 2, 4, 2, 0, 1, 1, 3, 1, 3, 1, + 0, 3, 5, 4, 3, 5, 5, 5, 5, 5, + 5, 2, 2, 2, 2, 2, 2, 4, 4, 4, + 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, + 4, 4, 4, 4, 4, 3, 2, 0, 1, 1, + 2, 1, 1, 1, 1, 4, 4, 5, 4, 4, + 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, + 5, 5, 4, 4, 4, 4, 4, 4, 0, 2, + 2, 0, 2, 2, 0, 2, 0, 2, 0, 2, + 0, 2, 0, 2, 0, 2, 2, 0, 2, 3, + 2, 0, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, + 2, 2, 2, 2, 2, 3, 2, 2, 2, 5, + 3, 2, 2, 2, 2, 2, 5, 4, 6, 2, + 4, 0, 3, 3, 1, 1, 0, 3, 0, 1, + 1, 3, 0, 1, 1, 3, 1, 3, 4, 4, + 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 3, 4, 1, 0, 10, 6, 5, 6, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, + 2, 3, 4, 6, 5, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 1, 2, 2, 4, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, + 0, 5, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, + 1, 1, 1, 3, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 3, 2, 1, 3, 4, 2, 2, + 2, 5, 5, 7, 4, 3, 2, 3, 2, 1, + 1, 2, 3, 2, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, + 1, 1, 1, 1, 1, 3, 0, 1, 1, 3, + 2, 6, 7, 3, 3, 3, 6, 0, 1, 3, + 5, 6, 4, 4, 1, 3, 3, 1, 1, 1, + 1, 4, 1, 6, 6, 6, 4, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 2, 5, 4, 7, 6, + 7, 6, 9, 8, 3, 8, 4, 0, 2, 0, + 1, 3, 3, 0, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 0, 2, 3, 1, 1, 1, 1, + 3, 8, 2, 3, 1, 1, 3, 3, 3, 4, + 6, 0, 2, 3, 1, 3, 1, 4, 3, 0, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 0, + 2, 2, 3, 3, 4, 2, 1, 1, 3, 5, + 0, 2, 2, 0, 2, 4, 3, 1, 1, +}; +static const YYINT yydefred[] = { 1, + 0, 85, 0, 0, 269, 0, 0, 0, 0, 783, + 784, 0, 0, 0, 0, 0, 0, 861, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, + 57, 58, 0, 60, 0, 0, 0, 83, 84, 2, + 0, 0, 340, 6, 7, 8, 9, 10, 11, 0, + 0, 0, 0, 16, 17, 18, 24, 25, 26, 0, + 108, 0, 276, 0, 0, 840, 36, 39, 37, 0, + 38, 0, 193, 395, 396, 0, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 0, 0, 0, 220, 221, 0, 0, 227, 228, + 0, 0, 0, 0, 0, 224, 0, 71, 219, 0, + 0, 0, 0, 804, 0, 0, 0, 0, 41, 19, + 20, 43, 42, 22, 23, 576, 734, 0, 711, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 693, 718, 0, 710, 0, 0, 0, 514, + 0, 577, 578, 579, 0, 0, 0, 0, 0, 696, + 715, 0, 0, 240, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 440, 0, 0, 0, 0, 139, 1, + 0, 814, 832, 850, 864, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 391, 398, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 582, 0, 575, 0, 31, 0, 0, 0, 0, + 0, 0, 229, 230, 231, 232, 222, 223, 72, 0, + 73, 0, 0, 103, 0, 21, 799, 0, 0, 805, + 806, 807, 809, 0, 810, 811, 812, 813, 0, 862, + 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 692, 0, 695, 0, 712, 714, 238, 239, 0, 0, + 0, 0, 0, 0, 0, 707, 0, 701, 0, 0, + 0, 0, 0, 700, 699, 0, 0, 0, 0, 0, + 235, 0, 0, 0, 64, 441, 68, 745, 0, 0, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 0, 376, 0, 339, 347, 348, 0, + 0, 0, 0, 369, 5, 0, 529, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 349, 353, 352, 355, 354, 356, 0, 341, 343, 350, + 362, 340, 0, 0, 0, 0, 0, 0, 102, 0, + 111, 132, 109, 110, 113, 114, 0, 115, 116, 117, + 118, 119, 120, 121, 122, 112, 131, 124, 123, 133, + 0, 136, 0, 107, 0, 282, 277, 278, 279, 280, + 281, 285, 283, 293, 284, 286, 287, 288, 289, 290, + 291, 292, 0, 294, 318, 0, 0, 0, 417, 0, + 416, 0, 415, 0, 414, 0, 412, 0, 413, 437, + 0, 0, 0, 0, 795, 785, 0, 0, 843, 842, + 841, 0, 0, 0, 214, 0, 200, 194, 195, 196, + 197, 202, 203, 204, 205, 199, 206, 207, 198, 0, + 0, 392, 0, 0, 0, 0, 0, 754, 0, 753, + 0, 0, 0, 0, 0, 315, 316, 0, 0, 0, + 0, 75, 69, 0, 96, 801, 0, 0, 808, 0, + 758, 759, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 694, 713, 0, 0, 0, 0, 0, + 0, 0, 706, 0, 0, 0, 0, 738, 697, 0, + 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 27, 0, 105, 243, 257, 0, 0, 840, 0, + 0, 3, 0, 340, 175, 176, 178, 177, 179, 185, + 186, 140, 0, 0, 0, 4, 342, 344, 0, 0, + 0, 0, 0, 0, 0, 351, 531, 530, 532, 533, + 528, 534, 535, 538, 537, 539, 543, 544, 0, 542, + 545, 0, 0, 0, 0, 550, 0, 0, 0, 0, + 0, 386, 0, 384, 387, 370, 0, 0, 0, 0, + 0, 0, 0, 0, 373, 0, 0, 0, 0, 12, + 817, 825, 826, 815, 818, 0, 0, 837, 0, 0, + 13, 0, 835, 0, 833, 0, 0, 0, 0, 14, + 857, 858, 851, 0, 0, 15, 868, 869, 865, 0, + 125, 126, 127, 128, 129, 130, 0, 106, 142, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 397, 0, 0, 405, 0, 0, 844, 845, 846, + 847, 848, 849, 0, 0, 0, 0, 0, 0, 0, + 0, 75, 0, 0, 0, 0, 0, 32, 0, 225, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 488, 487, 0, 0, 0, 0, 478, 477, + 476, 475, 0, 0, 473, 471, 472, 474, 486, 485, + 484, 483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 698, 705, 0, 0, 0, 0, 0, 180, 181, + 0, 0, 0, 0, 0, 139, 0, 246, 260, 850, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 536, 0, 567, + 0, 0, 0, 565, 368, 385, 371, 0, 388, 377, + 378, 379, 380, 382, 383, 381, 0, 0, 0, 0, + 820, 819, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 856, 0, 0, 0, 0, 0, 0, + 151, 153, 152, 154, 0, 149, 150, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, + 0, 0, 0, 0, 399, 404, 0, 787, 0, 0, + 602, 640, 594, 595, 0, 629, 596, 597, 598, 599, + 600, 601, 631, 607, 608, 609, 610, 0, 0, 0, + 637, 0, 0, 0, 0, 592, 593, 616, 617, 618, + 635, 619, 620, 621, 622, 0, 0, 625, 0, 633, + 639, 274, 0, 0, 0, 0, 0, 0, 0, 742, + 0, 0, 0, 0, 747, 0, 35, 0, 0, 0, + 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 76, 445, 0, 77, 0, 97, 98, 0, 99, + 100, 101, 0, 0, 482, 481, 480, 479, 0, 0, + 0, 0, 702, 703, 740, 736, 0, 0, 0, 245, + 244, 0, 0, 259, 258, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 171, 0, 0, 0, 359, 0, + 0, 0, 0, 0, 0, 360, 0, 0, 548, 0, + 0, 551, 0, 0, 0, 345, 0, 0, 0, 374, + 375, 816, 827, 0, 829, 821, 824, 802, 828, 834, + 836, 0, 0, 0, 0, 0, 134, 0, 0, 0, + 0, 157, 0, 0, 0, 148, 141, 295, 0, 0, + 0, 306, 307, 308, 309, 301, 302, 303, 300, 304, + 305, 0, 0, 298, 0, 0, 0, 0, 0, 0, + 403, 411, 410, 409, 408, 406, 407, 0, 0, 208, + 630, 603, 604, 605, 606, 0, 626, 632, 634, 638, + 0, 0, 0, 636, 623, 624, 678, 647, 648, 0, + 675, 649, 650, 651, 652, 653, 654, 677, 659, 660, + 661, 662, 645, 646, 667, 668, 669, 670, 671, 672, + 673, 674, 644, 679, 680, 681, 682, 683, 684, 685, + 686, 687, 688, 689, 690, 691, 663, 0, 0, 611, + 201, 0, 210, 0, 192, 0, 761, 760, 0, 757, + 0, 756, 743, 0, 750, 78, 75, 70, 0, 0, + 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, + 82, 0, 80, 0, 95, 0, 45, 46, 0, 0, + 191, 0, 0, 0, 0, 0, 0, 0, 172, 0, + 0, 0, 0, 173, 252, 253, 254, 255, 247, 0, + 0, 0, 174, 266, 265, 267, 268, 261, 182, 0, + 363, 0, 366, 367, 0, 0, 547, 0, 553, 554, + 346, 0, 566, 0, 0, 0, 855, 866, 0, 0, + 160, 0, 0, 0, 145, 0, 164, 0, 0, 297, + 0, 0, 0, 319, 320, 321, 322, 0, 0, 791, + 0, 789, 0, 0, 0, 0, 676, 655, 656, 657, + 658, 665, 0, 0, 666, 0, 612, 0, 273, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 444, 0, 212, 442, 0, 0, 78, 0, + 0, 0, 218, 217, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, + 717, 0, 720, 721, 722, 723, 724, 725, 730, 731, + 732, 733, 88, 0, 87, 86, 0, 436, 796, 704, + 0, 187, 0, 190, 0, 0, 248, 249, 250, 251, + 264, 262, 263, 358, 0, 0, 549, 569, 389, 390, + 0, 155, 0, 0, 0, 167, 0, 166, 163, 0, + 0, 310, 311, 312, 313, 0, 0, 0, 0, 0, + 0, 0, 0, 664, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 751, 67, 170, + 0, 0, 435, 0, 434, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 425, 0, 424, 0, 423, 0, + 422, 0, 420, 418, 0, 419, 421, 0, 433, 0, + 432, 0, 431, 0, 430, 0, 451, 0, 447, 446, + 0, 450, 0, 449, 0, 726, 727, 728, 729, 0, + 90, 0, 0, 0, 0, 0, 0, 365, 0, 0, + 158, 162, 0, 146, 296, 314, 271, 0, 793, 0, + 0, 589, 0, 615, 0, 762, 0, 0, 0, 767, + 752, 216, 215, 503, 499, 429, 0, 428, 0, 427, + 0, 426, 0, 501, 499, 497, 495, 489, 492, 501, + 499, 497, 495, 512, 505, 448, 508, 89, 91, 0, + 0, 189, 0, 0, 0, 0, 169, 0, 161, 0, + 642, 0, 588, 0, 614, 0, 0, 0, 0, 0, + 501, 499, 497, 495, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, + 0, 0, 822, 323, 0, 764, 765, 766, 467, 504, + 466, 500, 0, 0, 0, 0, 457, 502, 456, 455, + 498, 454, 496, 452, 491, 490, 453, 493, 494, 461, + 460, 459, 458, 470, 513, 507, 506, 468, 509, 0, + 469, 511, 256, 0, 0, 0, 0, 0, 465, 464, + 463, 462, 510, 0, 0, 361, 0, 328, 324, 333, + 334, 335, 336, 337, 325, 326, 327, 329, 330, 331, + 332, 275, 0, 0, 0, 0, 587, 0, 0, 0, + 0, 183, 338, 0, 0, 0, 0, 0, 0, 0, + 0, 184, +}; +#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) +static const YYINT yystos[] = { 0, + 544, 273, 409, 410, 411, 412, 413, 431, 432, 448, + 449, 450, 451, 455, 456, 461, 464, 471, 472, 526, + 527, 529, 530, 531, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 59, 554, 555, 634, 640, 641, 656, + 657, 659, 660, 662, 663, 664, 665, 666, 667, 668, + 670, 672, 674, 676, 677, 678, 679, 680, 681, 683, + 684, 685, 698, 716, 722, 470, 260, 261, 263, 545, + 546, 91, 560, 319, 380, 718, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 633, 633, 263, 269, 272, 295, 296, 300, 302, + 309, 326, 341, 40, 551, 552, 620, 622, 623, 61, + 91, 528, 635, 470, 637, 639, 470, 545, 264, 553, + 553, 264, 265, 570, 570, 268, 271, 275, 276, 277, + 278, 279, 281, 282, 283, 284, 286, 287, 290, 291, + 292, 293, 297, 298, 306, 308, 323, 324, 325, 358, + 359, 414, 415, 416, 91, 33, 545, 549, 574, 588, + 599, 617, 621, 623, 640, 641, 695, 123, 545, 545, + 545, 545, 262, 267, 577, 578, 577, 577, 123, 123, + 661, 123, 123, 123, 123, 577, 624, 315, 686, 625, + 278, 281, 282, 283, 284, 286, 287, 288, 123, 38, + 717, 720, 721, 553, 638, 46, 553, 626, 546, 91, + 574, 617, 618, 623, 695, 262, 288, 61, 582, 44, + 40, 40, 301, 303, 304, 305, 551, 551, 618, 619, + 621, 574, 61, 40, 553, 553, 462, 545, 637, 355, + 356, 357, 380, 474, 476, 477, 478, 479, 545, 330, + 331, 545, 545, 574, 40, 40, 281, 282, 283, 284, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 617, 306, 617, 279, 280, 289, 270, 272, 574, 472, + 42, 545, 623, 33, 545, 553, 47, 360, 361, 362, + 391, 91, 60, 42, 38, 391, 391, 391, 391, 551, + 622, 617, 682, 582, 41, 267, 41, 41, 658, 544, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 417, 418, 419, 420, 421, 422, 459, + 473, 508, 509, 123, 125, 546, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 663, 666, 677, 678, 679, 681, 700, 701, 702, 703, + 704, 705, 706, 709, 669, 671, 673, 675, 41, 294, + 323, 327, 330, 331, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 353, 356, 363, 372, + 545, 618, 316, 687, 294, 327, 329, 330, 331, 332, + 333, 338, 347, 352, 354, 366, 367, 368, 369, 370, + 371, 372, 373, 379, 551, 42, 40, 91, 558, 40, + 558, 40, 558, 40, 558, 40, 558, 40, 558, 40, + 719, 720, 40, 577, 262, 263, 44, 58, 328, 330, + 331, 337, 545, 545, 93, 294, 327, 329, 330, 331, + 332, 366, 367, 368, 369, 372, 376, 377, 378, 480, + 574, 61, 472, 545, 40, 61, 551, 40, 123, 40, + 43, 263, 553, 553, 41, 374, 375, 91, 545, 547, + 618, 123, 40, 582, 93, 421, 636, 545, 475, 391, + 320, 321, 561, 553, 40, 40, 40, 40, 553, 553, + 553, 570, 266, 286, 287, 553, 569, 569, 570, 553, + 553, 553, 570, 617, 280, 545, 618, 545, 93, 93, + 93, 545, 553, 545, 40, 40, 545, 275, 93, 553, + 575, 576, 574, 601, 602, 545, 545, 545, 545, 574, + 682, 125, 322, 409, 423, 428, 453, 454, 473, 508, + 509, 125, 657, 660, 662, 663, 666, 677, 678, 679, + 681, 689, 690, 692, 694, 125, 553, 553, 553, 91, + 365, 542, 91, 358, 618, 58, 546, 553, 553, 570, + 40, 569, 570, 546, 553, 622, 270, 272, 574, 623, + 618, 342, 582, 721, 551, 619, 40, 577, 452, 40, + 661, 310, 312, 313, 314, 707, 708, 710, 712, 713, + 714, 715, 546, 553, 704, 463, 465, 468, 469, 125, + 677, 678, 681, 724, 725, 726, 727, 339, 463, 466, + 125, 723, 725, 728, 729, 296, 409, 461, 464, 125, + 678, 681, 730, 461, 464, 125, 678, 681, 731, 40, + 330, 331, 332, 366, 367, 368, 60, 616, 618, 688, + 40, 40, 557, 40, 553, 553, 553, 553, 570, 569, + 569, 125, 44, 546, 41, 553, 553, 330, 331, 332, + 366, 367, 368, 40, 40, 545, 545, 93, 582, 631, + 632, 123, 574, 306, 610, 611, 618, 262, 44, 41, + 41, 620, 60, 568, 600, 274, 606, 608, 556, 723, + 391, 545, 41, 41, 553, 553, 553, 570, 41, 41, + 41, 41, 40, 40, 41, 41, 41, 41, 41, 41, + 41, 41, 274, 93, 549, 549, 549, 618, 618, 275, + 44, 93, 62, 44, 42, 365, 628, 629, 553, 553, + 638, 365, 542, 358, 618, 123, 661, 123, 123, 123, + 58, 553, 91, 545, 91, 545, 553, 551, 274, 545, + 618, 40, 577, 574, 546, 550, 553, 41, 40, 275, + 557, 571, 572, 573, 125, 618, 707, 311, 704, 711, + 711, 711, 711, 546, 553, 704, 317, 317, 467, 61, + 42, 553, 613, 61, 582, 577, 577, 61, 61, 577, + 577, 40, 470, 553, 545, 470, 545, 470, 553, 294, + 306, 307, 324, 374, 376, 43, 45, 562, 563, 615, + 44, 553, 582, 630, 91, 574, 582, 41, 93, 41, + 41, 41, 41, 41, 719, 41, 58, 263, 44, 553, + 257, 271, 276, 277, 279, 280, 281, 282, 283, 284, + 286, 287, 289, 290, 291, 292, 293, 335, 337, 342, + 358, 391, 481, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 503, 123, 579, 580, 699, 318, 548, 93, 61, 41, + 44, 606, 263, 44, 125, 61, 263, 61, 91, 601, + 40, 40, 545, 547, 125, 277, 278, 279, 281, 282, + 283, 284, 286, 287, 290, 291, 292, 293, 297, 298, + 365, 586, 587, 609, 681, 721, 283, 284, 318, 457, + 458, 460, 577, 545, 41, 41, 41, 41, 553, 570, + 545, 549, 41, 41, 553, 575, 574, 40, 618, 327, + 372, 545, 618, 327, 372, 551, 545, 91, 545, 91, + 545, 551, 274, 658, 125, 691, 693, 673, 553, 93, + 553, 553, 44, 93, 574, 547, 274, 582, 41, 40, + 44, 41, 44, 571, 574, 41, 44, 546, 553, 546, + 553, 553, 40, 58, 40, 41, 41, 40, 40, 41, + 41, 553, 549, 545, 318, 545, 41, 40, 294, 564, + 565, 563, 40, 545, 605, 62, 618, 41, 391, 630, + 294, 301, 303, 304, 305, 342, 343, 344, 388, 389, + 390, 392, 395, 41, 505, 506, 507, 553, 480, 584, + 41, 558, 558, 558, 558, 558, 558, 553, 553, 41, + 280, 281, 282, 283, 284, 40, 566, 497, 489, 501, + 40, 482, 502, 277, 566, 566, 257, 276, 277, 279, + 280, 281, 282, 283, 284, 286, 287, 289, 290, 291, + 292, 293, 484, 485, 487, 488, 489, 491, 492, 495, + 496, 498, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 42, 559, 91, 42, + 41, 578, 546, 61, 581, 283, 553, 561, 582, 583, + 617, 631, 125, 61, 611, 123, 123, 40, 582, 553, + 62, 571, 571, 568, 600, 40, 91, 40, 91, 281, + 282, 283, 284, 40, 91, 40, 91, 40, 91, 40, + 91, 40, 91, 40, 91, 40, 91, 40, 91, 40, + 91, 40, 91, 40, 91, 40, 91, 40, 91, 359, + 364, 612, 681, 577, 546, 41, 41, 41, 571, 451, + 640, 545, 574, 553, 553, 44, 574, 547, 125, 424, + 425, 426, 427, 125, 666, 678, 679, 681, 696, 427, + 429, 430, 125, 666, 678, 679, 681, 697, 125, 391, + 93, 93, 618, 581, 618, 545, 41, 571, 550, 550, + 41, 584, 573, 317, 317, 613, 41, 553, 553, 40, + 565, 574, 603, 604, 618, 44, 614, 545, 582, 41, + 40, 58, 58, 93, 93, 93, 93, 40, 547, 263, + 44, 263, 504, 582, 91, 91, 280, 281, 282, 283, + 284, 525, 44, 91, 38, 43, 93, 553, 125, 277, + 278, 279, 281, 282, 283, 284, 286, 287, 290, 291, + 292, 293, 299, 582, 585, 587, 40, 40, 123, 609, + 606, 93, 41, 41, 40, 40, 561, 553, 553, 553, + 40, 91, 40, 91, 40, 91, 40, 91, 553, 553, + 553, 553, 553, 553, 570, 553, 553, 569, 553, 569, + 570, 553, 553, 553, 553, 553, 553, 553, 570, 553, + 586, 553, 263, 299, 553, 299, 306, 617, 553, 277, + 278, 279, 281, 282, 283, 284, 286, 287, 290, 291, + 292, 293, 297, 346, 365, 599, 607, 41, 636, 41, + 545, 93, 93, 618, 618, 510, 622, 622, 622, 622, + 622, 622, 622, 546, 44, 274, 41, 546, 546, 553, + 58, 41, 553, 545, 605, 41, 44, 615, 614, 630, + 553, 393, 394, 393, 394, 580, 616, 553, 61, 44, + 553, 553, 582, 93, 553, 43, 93, 281, 282, 283, + 284, 553, 281, 282, 283, 553, 609, 125, 125, 62, + 571, 571, 41, 93, 41, 93, 553, 553, 553, 553, + 553, 553, 570, 553, 41, 93, 41, 93, 41, 93, + 41, 93, 41, 41, 93, 41, 41, 93, 41, 93, + 41, 93, 41, 93, 41, 93, 41, 93, 41, 41, + 93, 41, 263, 41, 93, 281, 282, 283, 284, 306, + 617, 91, 545, 40, 44, 274, 551, 618, 547, 613, + 41, 614, 545, 618, 41, 41, 41, 40, 263, 553, + 582, 93, 93, 93, 553, 41, 58, 58, 58, 41, + 125, 41, 41, 40, 40, 41, 93, 41, 93, 41, + 93, 41, 93, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 41, 40, 263, 93, 61, + 571, 618, 547, 574, 60, 567, 568, 58, 614, 571, + 41, 44, 41, 579, 93, 553, 553, 553, 595, 592, + 40, 40, 40, 40, 591, 592, 593, 594, 589, 590, + 591, 592, 593, 594, 598, 596, 597, 586, 41, 567, + 618, 40, 613, 41, 582, 41, 41, 41, 41, 561, + 41, 553, 591, 592, 593, 594, 41, 553, 41, 41, + 553, 41, 570, 41, 553, 569, 41, 569, 570, 41, + 41, 41, 41, 41, 586, 263, 299, 41, 299, 306, + 41, 617, 581, 40, 274, 571, 627, 44, 41, 41, + 41, 41, 263, 571, 547, 41, 294, 309, 325, 334, + 348, 349, 350, 351, 380, 381, 382, 383, 384, 385, + 386, 123, 582, 41, 40, 40, 41, 510, 571, 553, + 358, 41, 41, 551, 574, 618, 274, 547, 567, 40, + 571, 41, +}; +#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ +static const YYINT yydgoto[] = { 1, + 157, 71, 480, 897, 158, 776, 105, 106, 802, 35, + 36, 709, 781, 419, 1118, 73, 493, 828, 829, 1020, + 1021, 1067, 1546, 1547, 507, 1603, 782, 783, 784, 211, + 531, 532, 175, 176, 893, 894, 1125, 689, 1130, 1050, + 1295, 932, 933, 160, 1569, 1570, 1565, 1560, 1567, 1568, + 1559, 1576, 1577, 1575, 161, 705, 534, 535, 1243, 1244, + 1025, 707, 1367, 708, 934, 695, 696, 1182, 803, 1247, + 830, 658, 212, 229, 230, 107, 231, 108, 214, 187, + 190, 208, 1627, 747, 748, 834, 690, 691, 92, 37, + 113, 487, 115, 205, 116, 38, 39, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 40, 41, 309, 42, 43, 181, 44, 351, 46, + 47, 352, 49, 50, 365, 51, 366, 52, 367, 53, + 368, 54, 353, 354, 355, 58, 356, 303, 60, 61, + 62, 189, 394, 660, 562, 563, 976, 564, 977, 565, + 215, 1209, 1218, 63, 895, 357, 358, 359, 360, 789, + 362, 363, 606, 607, 364, 608, 790, 609, 610, 611, + 612, 64, 201, 76, 431, 432, 936, 65, 632, 624, + 625, 626, 627, 634, 635, 643, 649, +}; +static const YYINT yysindex[] = { 0, +17429, 0, -347, 566, 0, 55, -247, 1763, 1763, 0, + 0, -136, 260, 110, 70, -338, -271, 0, -34, -39, + -39, 473, 473,14390, 93, 0, 566, 566, 566, 566, + 0, 0, -21, 0, 12, 12, 12, 0, 0, 0, + 175, 243, 0, 0, 0, 0, 0, 0, 0, 251, + 333, 352, 414, 0, 0, 0, 0, 0, 0, 12, + 0, 227, 0, 1197, -39, 0, 0, 0, 0, 550, + 0, -39, 0, 0, 0, 429, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,18521, 1, 262, 0, 0, 531, 593, 0, 0, + 701, 775, 775,16114,10230, 0, 547, 0, 0, 635, + -39, -39, -27, 0, 2202, -113, 566, 550, 0, 0, + 0, 0, 0, 0, 0, 0, 0,10230, 0, 726, + 770, 799, 778, 784, 792, 814, 820, 831, 845, 855, + 860, 878, 0, 0, 1561, 0, 643, 1561, 662, 0, +10068, 0, 0, 0, 112, 234, 550, 911, 78, 0, + 0, 569, 573, 0, 584, 586, 1696, 1561, 28, 550, + 550, 550, 0, 0, 921, 703, 949, 957, 0, 0, + 1613, 0, 0, 0, 0, 959, 9944,18521, 699,11828, + 977, 62, 96, 116, 155, 156, 410, 985, 1346, 997, + 0, 0, 12, 568, 705, 566, 962,17771, 1006, 126, + 102, 0, 393, 0, 775, 0, 1036, 59, 1042, 841, + -39, -39, 0, 0, 0, 0, 0, 0, 0, 1068, + 0,18018, 99, 0, 1021, 0, 0, 8, 2202, 0, + 0, 0, 0, 640, 0, 0, 0, 0, 550, 0, + 0, 18, 550, 102, 603, -39, 1077, 1085, 1099, 1113, + -39, -39, -39, 473, 707, 731, -39, -39, -39, 473, + 0, 1561, 0, 877, 0, 0, 0, 0,18339, 566, + 1072, 44, 1074, 1055, 550, 0, 566, 0, 1129, 1139, + 566, -16,10230, 0, 0, 566, 566, 566, 566,10230, + 0, 1561, 1070, 1042, 0, 0, 0, 0,11211,17296, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -39, 0, -39, 0, 0, 0, -39, + 1102, -57,18617, 0, 0, 1138, 0, 760, -39, 473, + 359, 760, 1696, 9758,18521, -166, 775,16114, 1158, 12, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 823, 416, 788, 42, 9, 1009, 0, 1160, + 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 467, 0,18521, 0, 1162, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1163, 0, 0, 1168, -39, -39, 0, -39, + 0, -39, 0, 473, 0, -168, 0, -168, 0, 0, + 1086, 1166, 429, 1183, 0, 0, -39, -39, 0, 0, + 0, 1027, 550, 550, 0, 1185, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1186, + 1350, 0, 566, 441, 967, 1108,10230, 0,18695, 0, + 970, 1190, 1199, 1206, 1696, 0, 0, 66, 550, 1189, + 978, 0, 0, 1042, 0, 0, 797, 21, 0, 566, + 0, 0, 1214, 1221, -39, -39, -39, 473, 1224, 1227, + 1234, 1239, 0, 1241, 1244, 1248, 1251, 1253, 1255, 1258, + 1262, 1269, 1271, 0, 0, 550, 993, 659, 566, 566, + 566, 550, 0, 550,18521,18521, 550, 0, 0, 1046, + 0, 73, 102, 1260, 1273, 550, 550, 550, 550,18175, + 0, 0, 971, 0, 0, 0, -39, -39, 0, -268, +18783, 0, 1212, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1217, 1219, 1220, 0, 0, 0, 1279, -39, + 130, 548, -39, 775, 1075, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,18339, 0, + 0, 1304, 1042, 12,10230, 0, 760, 1309, 1313, 1081, +16377, 0,18521, 0, 0, 0, 823, 65, 65, 65, + 65, 416, 1043, 1045, 0, 897, 1315, 88, -5, 0, + 0, 0, 0, 0, 0, 12, 12, 0, 1317, 1318, + 0, 12, 0, 12, 0, 1334, -198, 566, 907, 0, + 0, 0, 0, 566, 915, 0, 0, 0, 0, -39, + 0, 0, 0, 0, 0, 0, 308, 0, 0, 1337, + -39, 967,10378, 967, 1345, 1294, 1348, 1349, 1355, 1356, + 1357, 0, 1346, 1358, 0, 1342, 71, 0, 0, 0, + 0, 0, 0, -39,18842, 25, 695, 566, 733, 1360, + 1359, 0, 861, 1895, 1361, 1281, 1343, 0, 1145, 0, + 0, 1365,10688, 1377, 1378, -135, 1295, 591, 480, 12, + 566, 550, 0, 0, 1381, 1387, 1390, 1391, 0, 0, + 0, 0, -39, 473, 0, 0, 0, 0, 0, 0, + 0, 0, 566, 566, 911, 911, 911, 1392, 1394, -39, + 389, 0, 0,10230, 1379,18521,18443, 1039, 0, 0, + 705, 560, 578, 775, 1173, 0,16528, 0, 0, 0, + -39, 1347, -39, 550, -39, 574, 1363,10230, -135, 550, + 1177, 967, 1425, 702, 1423, 1430, 1428, 0, 1081, 0, +10378, 1436, 1442, 0, 0, 0, 0, 760, 0, 0, + 0, 0, 0, 0, 0, 0, 429, -39, -39, 1447, + 0, 0, 1431, 1450, 1042, 1452, 1455, 1451, 1458, 1463, + 1464, -39, 566, 0, 550, 566, 41, 566, 1466, 1469, + 0, 0, 0, 0, 1216, 0, 0, 461, 137, 1449, +18521, 1471, 14, 427, -80, 3, 642, 1426, 0, 1426, + 1426, 1426, 1426, 1426, 0, 0, -39, 0, -39, 1477, + 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1479, 1023, 1032, + 0, 1031, 1491, 147, 1256, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1479, 1479, 0,12114, 0, + 0, 0, 101, 1494, 12, 429, 1476, 566, 2196, 0, + 967, 1413, 1478,18695, 0, 1418, 0, 145, -39, 1480, + 1081, 1081, 550, 1189, 0, 418, 426, 839, 437, 452, + 525, 530, 536, 557, 571, 579, 623, 628, 634, 648, + 654, 0, 0, 551, 0, 12, 0, 0, 429, 0, + 0, 0, 1510, 550, 0, 0, 0, 0, 1511, 1513, + 550, 911, 0, 0, 0, 0, 102, 1081, 1104, 0, + 0, 550, 566, 0, 0,10230, 550, -39, 550, -39, + 753,10230, -135,15790, 0, 988, 1065, 326, 0, 1165, + 1468, 1470,18521, 1476,18339, 0, 566, 710, 0, 1081, + 760, 0, 760, 1516, 3, 0, 1081, 1250, 1254, 0, + 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, + 0, 1527, 911, 550, -39, 550, 0, -39, 1530, 1216, +10230, 0,18521, 806, 566, 0, 0, 0, 967, 1659, + 1532, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1517, 1522, 0, 1488, 1489, 1490, 1492, 1549, -135, + 0, 0, 0, 0, 0, 0, 0, 77, 1327, 0, + 0, 0, 0, 0, 0, 1087, 0, 0, 0, 0, + 967, 1501, 1503, 0, 0, 0, 0, 0, 0, 990, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -11, 38, 0, + 0, -37, 0, 2336, 0, 1555, 0, 0, 1042, 0, + 1556, 0, 0, 1474, 0, 0, 0, 0, 1042, 1505, + 0, 1558, 1567, 1569, 1583, 603, -39, -39, -39, 669, + 683, 684, 687, -39, -39, -39, -39, -39, -39, 473, + -39, 707, -39, 731, -39, -39, -39, -39, -39, -39, + -39, 473, -39, 2085, -39, 296, -39, 2340, -39, 0, + 0, 2936, 0, 1584, 0, 1205, 0, 0, 1590, 1696, + 0, 550, 1350, 1543, 1544,18521,18339, 1128, 0, 1696, + 1696, 1696, 1696, 0, 0, 0, 0, 0, 0, 1696, + 1696, 1696, 0, 0, 0, 0, 0, 0, 0, 429, + 0, 1595, 0, 0, 1366, 550, 0, 1600, 0, 0, + 0, 429, 0, 429, -39, 1589, 0, 0, 1607, -39, + 0, 440, 1609, 1611, 0, 308, 0, 806, 1042, 0, + -39, 660, 672, 0, 0, 0, 0,18842, 1593, 0, + -39, 0, 1617, 938, -39, -39, 0, 0, 0, 0, + 0, 0, 967, 1575, 0, -39, 0, 115, 0, 1643, + 1644, 862, 1646, 1648, 1652, 1653, 1655, 1656, 1657, 1662, + 1663, 1664, 0, 1042, 0, 0, -39, 645, 0, -15, + 1588, 1654, 0, 0, 1081, 1081, 1668, 1622, 1677, 1626, + -39, -39, -39, -39, -39, -39, 473, -39, 1679, 1628, + 1682, 1631, 1684, 1633, 1686, 1635, 1688, 1692, 1641, 1694, + 1698, 1658, 1699, 1660, 1705, 1661, 1708, 1666, 1709, 1667, + 1711, 1675, 1714, 1715, 1676, 1730, 1509, 1732, 1683, 0, + 0, 1049, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1316, 0, 0, 596, 0, 0, 0, + 198, 0, 1693, 0, 1504, 775, 0, 0, 0, 0, + 0, 0, 0, 0,18521, -135, 0, 0, 0, 0, + 88, 0, 1734, 806, 566, 0,18521, 0, 0, 2001, + 1736, 0, 0, 0, 0, 1775, 1777, 1560, -39, 967, + 1725, 1726, 1042, 0, 1733, -39, 0, 1785, 1787, 1788, + 1790, 1794, 1782, 1783, 1792, 1802, 120, 0, 0, 0, + 1804, 1818, 0, 1825, 0, 1826, 1827, 1776, 1829, 1778, + 1831, 1781, 1834, 1784, 0, 1838, 0, 1843, 0, 1844, + 0, 1845, 0, 0, 1847, 0, 0, 1848, 0, 1849, + 0, 1850, 0, 1854, 0, 1856, 0, 1857, 0, 0, + 1858, 0, 1859, 0, 1861, 0, 0, 0, 0, 1636, + 0, 1809, 469, 1081,18521, -135,10230, 0, 1846, 1868, + 0, 0, 806, 0, 0, 0, 0, 1081, 0, 1862, + 1030, 0,19121, 0, 1811, 0, -39, -39, -39, 0, + 0, 0, 0, 0, 0, 0, 1867, 0, 1875, 0, + 1887, 0, 1892, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2085, + 1896, 0, 1846,18339, 1851, 1898, 0, 88, 0, 1899, + 0, 967, 0, 101, 0, 1900, 1903, 1905, 35, 20, + 0, 0, 0, 0, 32, 50, 52, 45, 157, 765, + 150, 153, 164, 83, 1171, 34, 931, 0, 1476, 1907, + 1665, 1081, 0, 0, 1050, 0, 0, 0, 0, 0, + 0, 0, 168, 170, 183, 119, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1673, + 0, 0, 0, 1081, -135, 1908, 2594, 967, 0, 0, + 0, 0, 0, 1909, 1911, 0, 1912, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 873, 1438, 1081, -39, 0, 1596, 1914, 1915, + 775, 0, 0,10230,18339, 1685, -135, 1846, 1917, 1081, + 1920, 0, +}; +static const YYINT yyrindex[] = { 0, + 0, 0,10874, 0, 0,17880, 2036, 0, 0, 0, + 0, 0,10540, 0, 0, -10, 2810, 0,13211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1925, 1925, 1925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1925, + 0, 100, 0, 0, 0, 0, 0, 0, 0, 1835, + 0, 0, 0, 0, 0, 1647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,12621, 0, 0, 0, 0, 0, 0, +10998,18931,18931, 0, 0, 0,11140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,14824, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4556, + 4860, 0, 5164, 5468, 5772, 6076, 6380, 6684, 6988, 7292, + 7596, 7900, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1820, 2428, 0, 0, + 0, 0, 0, 0, 0, 0,10540, 1842, 9721,10031, +10341,10651, 0, 0, 0, 1928, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1855,18931, + 0,14324,14324,14324,14324,14324,14324, 0, 0, 0, + 0, 0, 1925,12996, 0, 0, 0, 0, 0, 0, +12013, 0,13931, 0,10540, 0, 0, 0,14104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1864, 0, + 0, 1865,14936, 9420, 0, 0, 8204, 8508, 8812, 9116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3948, 0, 0, 0, 0, 0, + 0, 1926, 1910, 0, 0, 0, 0, 0, 0, 0, + 0, 1842, 0,10961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,10540, 0, 0, 0,10540, 0, 0, 1925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1869, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1866, 1383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1870, 0, + 0,12823, 0, 0,10540, 0, 0, 1926, 172, 1931, + 0, 0, 0,11395, 0, 0,15069, 1874, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,16044, 0, 0, 0, 0, + 0, 4252, 0, 2124, 0, 0,15180, 0, 0, 111, + 0, 0, 745, 0, 1937,15211,15366,15507,15538, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,10540, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,16695, 1925, 0, 0, 1932, 0, 0,18993, + 0, 0, 0, 0, 0, 0,16778, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1925, 1925, 0, 0, 0, + 0, 1925, 0, 1925, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 331, 0, 0, 1877, + 0, 9465, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,13180, 0, 0, 0, + 0, 0, 0, 0, 742,14632, 0,12264, 0, 0, + 1933, 0, 0, 0, 1879, 0, 0, 0, 0, 0, + 0,11574, 1910, 0, 0, 0, 0, -46, 0, 1925, + 0, 1883, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2732, 3036, 3340, 0, 0, 159, + 468, 0, 0, 0,18280, 0, 0,10540, 0, 0, + 0, 0, 0,10540, 0, 0, 0, 0, 0, 0, + 0, 0, 0,16861, 0, 0, 0, 0, 0,16294, + 0, 0, 0, 0, 1949, 0, 1952, 0,18993, 0, + 0, 0, 1966, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, + 0, 0, 0, 0,15848, 0, 0, 331, 0, 0, + 0, 0, 9465, 0, 0, 519, 0,14324, 0,14324, +14324,14324,14324,14324, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, + 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 795, 795, 0, -9, 0, + 0, 0, 1967, 0, 0, 0,14793,12448, 0, 0, + 0, 0, 666, 1870, 0, 0, 0, 0, 0, 0, +18993,18993,15829, 1931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1902, 0, 1925, 0, 0, 0, 0, + 0, 0, 0, 1901, 0, 0, 0, 0, 0, 0, +16211, 3644, 0, 0, 0, 0, 857,18993, 0, 0, + 0, 588, 0, 0, 0, 0, 1906, 0,17499, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,17012, + 0, 0, 0,17179, 0, 0, 0, 0, 0,18993, + 1932, 0, 1932, 0, 455, 0,19071, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1079, 1226, 0, 1444, 0, 0, 0,15848, + 0, 0, 1982, 1963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,13372,13556, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1058, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, + 0, 0, 0, 0, 0, 0, 0, 0,11829, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,15649, 0, 0, 0,10540, + 0, 1913, 0, 0, 0, 0, 0, 0, 0,10540, +10540,10540,10540, 0, 0, 0, 0, 0, 0,10540, +10540,10540, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,17262, 0, 0, 0, 0, + 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1987, 0, 331, 0, 1963, 9465, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 1998, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,14491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,18993,18993, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,10540, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,13729, 0, 0, + 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,18993, 0, 0, 0, 0, 1999, 0, + 0, 0, 1963, 0, 0, 0, 0,18993, 0, 0, + 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1999, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2000, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1923, 0, + 0,18993, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,18993, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,18993, 0, 0, 0, 0, 0, +10540, 0, 0, 0, 0, 0, 0, 1999, 0,18993, + 0, 0, +}; +#if YYBTYACC +static const YYINT yycindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -545,7 +1305,6 @@ YYSTATIC YYCONST yyexind_t yyexcaind[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -562,14 +1321,10 @@ YYSTATIC YYCONST yyexind_t yyexcaind[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -581,9 +1336,7 @@ YYSTATIC YYCONST yyexind_t yyexcaind[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -596,10 +1349,8 @@ YYSTATIC YYCONST yyexind_t yyexcaind[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 42, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -632,9 +1383,6 @@ YYSTATIC YYCONST yyexind_t yyexcaind[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 54, - 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, - 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -647,4305 +1395,12494 @@ YYSTATIC YYCONST yyexind_t yyexcaind[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 78 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, }; #endif -# define YYLAST 3872 - -YYSTATIC YYCONST short YYFARDATA YYACT[] = { - 703, 1421, 1136, 640, 660, 1490, 191, 1039, 888, 974, - 1489, 790, 1488, 702, 1487, 1149, 625, 779, 887, 729, - 73, 75, 150, 414, 536, 977, 1422, 1526, 975, 190, - 478, 757, 794, 176, 760, 755, 1080, 110, 106, 107, - 694, 275, 862, 604, 662, 44, 273, 219, 780, 24, - 78, 81, 217, 86, 17, 599, 262, 153, 204, 214, - 301, 7, 6, 654, 85, 5, 76, 3, 188, 1574, - 218, 1210, 10, 1257, 115, 1128, 1072, 264, 461, 74, - 516, 133, 1261, 178, 179, 180, 181, 221, 1258, 26, - 136, 677, 1126, 300, 139, 137, 1073, 278, 1127, 581, - 74, 719, 716, 202, 203, 113, 112, 700, 272, 376, - 322, 265, 520, 1028, 220, 452, 18, 994, 88, 87, - 462, 89, 216, 338, 56, 941, 942, 277, 676, 268, - 68, 56, 537, 1247, 1248, 1259, 352, 305, 1245, 1246, - 353, 343, 591, 88, 87, 327, 89, 368, 339, 277, - 342, 98, 366, 277, 1034, 361, 360, 359, 357, 358, - 225, 940, 656, 352, 1346, 185, 345, 353, 1578, 1042, - 348, 56, 198, 1542, 277, 365, 271, 199, 1041, 200, - 369, 88, 87, 699, 89, 357, 374, 201, 362, 351, - 514, 364, 698, 373, 1141, 1142, 105, 1437, 277, 258, - 84, 379, 417, 418, 195, 816, 748, 749, 750, 450, - 387, 451, 98, 363, 480, 615, 351, 388, 782, 196, - 783, 1510, 664, 1284, 456, 470, 186, 468, 472, 471, - 376, 473, 475, 416, 481, 482, 484, 502, 410, 1074, - 655, 663, 751, 752, 753, 501, 767, 495, 457, 1583, - 815, 493, 441, 24, 1501, 376, 346, 434, 17, 1283, - 476, 479, 491, 597, 433, 7, 486, 432, 269, 74, - 428, 492, 429, 483, 1334, 435, 10, 1218, 307, 487, - 600, 597, 835, 544, 474, 1342, 1341, 1340, 1339, 485, - 803, 793, 442, 26, 777, 541, 641, 642, 500, 668, - 943, 944, 420, 945, 421, 422, 423, 714, 542, 572, - 108, 545, 321, 505, 575, 268, 576, 154, 577, 436, - 18, 864, 865, 866, 1568, 579, 580, 88, 87, 116, - 89, 1567, 192, 80, 79, 480, 499, 571, 46, 574, - 573, 549, 74, 1253, 88, 87, 266, 89, 512, 512, - 529, 535, 601, 459, 1564, 481, 482, 494, 569, 1440, - 627, 628, 629, 177, 88, 87, 267, 89, 613, 80, - 79, 582, 583, 477, 498, 511, 511, 528, 534, 310, - 312, 314, 316, 318, 596, 46, 88, 624, 678, 89, - 371, 370, 607, 608, 609, 610, 630, 631, 632, 606, - 372, 614, 1373, 621, 1357, 519, 1566, 74, 612, 480, - 611, 619, 620, 622, 192, 340, 341, 884, 1131, 352, - 644, 375, 957, 353, 878, 704, 879, 880, 881, 481, - 482, 706, 1157, 586, 74, 585, 584, 1158, 649, 650, - 639, 357, 587, 1512, 635, 600, 1541, 886, 88, 87, - 643, 89, 74, 1141, 1142, 1536, 666, 348, 154, 354, - 355, 356, 674, 600, 652, 669, 873, 874, 875, 788, - 685, 857, 351, 88, 87, 1535, 89, 595, 277, 1511, - 1565, 784, 786, 347, 177, 321, 354, 355, 356, 1522, - 135, 869, 682, 671, 673, 747, 1534, 348, 696, 588, - 785, 546, 1533, 537, 759, 192, 488, 1525, 182, 177, - 154, 689, 872, 876, 877, 1252, 882, 63, 1413, 883, - 506, 690, 1143, 684, 973, 953, 715, 56, 453, 520, - 460, 513, 521, 692, 508, 509, 1133, 693, 1196, 1271, - 543, 705, 566, 375, 41, 43, 701, 74, 727, 707, - 787, 695, 216, 538, 74, 709, 413, 710, 713, 645, - 1531, 683, 999, 1529, 63, 1250, 718, 1527, 745, 88, - 1260, 659, 89, 74, 56, 97, 504, 723, 513, 863, - 728, 508, 509, 730, 675, 1145, 724, 758, 725, 1473, - 225, 1256, 651, 1021, 679, 680, 681, 80, 79, 480, - 734, 49, 50, 51, 52, 53, 54, 55, 49, 50, - 51, 52, 53, 54, 55, 1416, 762, 720, 648, 481, - 482, 1195, 754, 152, 601, 258, 768, 769, 733, 74, - 56, 647, 348, 646, 789, 539, 639, 352, 593, 838, - 1012, 353, 1188, 1187, 1186, 1185, 643, 74, 49, 50, - 51, 52, 53, 54, 55, 88, 87, 542, 89, 357, - 804, 543, 82, 72, 71, 814, 70, 795, 823, 74, - 821, 827, 824, 828, 773, 774, 775, 198, 74, 832, - 809, 810, 199, 69, 200, 98, 377, 833, 806, 808, - 351, 811, 201, 817, 348, 367, 1363, 67, 74, 216, - 843, 844, 825, 80, 79, 799, 820, 792, 802, 195, - 66, 826, 80, 79, 480, 834, 352, 1462, 856, 74, - 353, 592, 1460, 836, 196, 80, 79, 867, 1519, 1349, - 80, 79, 831, 932, 481, 482, 74, 225, 357, 1367, - 325, 46, 354, 355, 356, 860, 946, 947, 870, 277, - 855, 1458, 842, 858, 324, 1132, 969, 56, 193, 859, - 348, 194, 88, 1456, 527, 89, 74, 601, 959, 351, - 952, 111, 854, 350, 1266, 1262, 1263, 1264, 1265, 1348, - 773, 948, 517, 74, 198, 177, 74, 744, 46, 199, - 74, 200, 88, 87, 637, 956, 861, 996, 496, 201, - 155, 1079, 1075, 1076, 1077, 1078, 1024, 1022, 1025, 1255, - 362, 965, 807, 962, 968, 96, 195, 1439, 104, 103, - 102, 101, 958, 99, 100, 105, 1430, 825, 177, 1429, - 970, 196, 88, 87, 964, 89, 74, 825, 606, 1427, - 1000, 696, 696, 1047, 1029, 1412, 1023, 441, 1010, 1019, - 1035, 277, 434, 1038, 1410, 1027, 1030, 1400, 1052, 433, - 1050, 766, 432, 1032, 1031, 428, 1054, 429, 1398, 1045, - 435, 1008, 1018, 382, 383, 384, 385, 636, 525, 976, - 1396, 1048, 1049, 1394, 337, 1392, 74, 442, 1011, 1020, - 529, 1390, 375, 1065, 695, 695, 825, 277, 776, 56, - 1388, 1060, 352, 1359, 1360, 1361, 772, 192, 88, 87, - 765, 89, 805, 1386, 436, 1009, 1017, 528, 1384, 964, - 63, 56, 88, 87, 357, 89, 74, 672, 277, 1070, - 524, 1157, 670, 526, 308, 1381, 1158, 1378, 88, 87, - 1066, 89, 1376, 1016, 722, 1014, 1015, 156, 157, 158, - 1372, 74, 1137, 480, 1082, 351, 1083, 455, 326, 323, - 354, 355, 356, 1356, 61, 62, 47, 63, 1147, 1332, - 1213, 1212, 1154, 481, 482, 616, 88, 87, 762, 89, - 1059, 88, 87, 1139, 89, 1058, 1134, 522, 1057, 1144, - 1056, 1037, 1036, 1153, 1130, 830, 822, 737, 1140, 618, - 1201, 1148, 1199, 1200, 49, 50, 51, 52, 53, 54, - 55, 617, 578, 565, 109, 934, 348, 935, 936, 937, - 938, 939, 92, 1198, 276, 1320, 1068, 1194, 1318, 1197, - 1202, 966, 1316, 1193, 1203, 1204, 1205, 1206, 1314, 354, - 355, 356, 591, 1238, 1207, 1208, 1209, 1211, 1, 1191, - 1214, 49, 50, 51, 52, 53, 54, 55, 1157, 770, - 951, 1040, 1156, 1158, 1215, 1249, 1221, 1354, 1146, 1189, - 1251, 1242, 1222, 145, 1243, 1069, 1321, 995, 1241, 1319, - 1244, 88, 87, 1317, 89, 1183, 1216, 955, 1217, 1315, - 88, 87, 1181, 89, 589, 1237, 88, 87, 1179, 89, - 1192, 88, 87, 1254, 89, 1177, 1175, 49, 50, 51, - 52, 53, 54, 55, 277, 590, 205, 993, 992, 991, - 1190, 986, 985, 984, 983, 712, 981, 982, 105, 1438, - 990, 989, 988, 987, 1267, 46, 1184, 980, 978, 711, - 708, 634, 412, 1182, 187, 97, 277, 1423, 1173, 1180, - 626, 1171, 56, 1169, 796, 1270, 1178, 1176, 527, 1167, - 626, 1285, 1165, 1289, 1273, 1291, 1293, 1294, 1274, 1297, - 1163, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1279, 1307, - 1308, 1309, 1310, 1311, 1312, 1313, 328, 329, 330, 1435, - 1322, 1323, 1290, 1325, 1324, 1296, 1292, 1298, 1295, 1174, - 1161, 56, 1172, 1434, 1170, 1306, 979, 1327, 1287, 1159, - 1168, 332, 317, 1166, 145, 1433, 1424, 1333, 1002, 1240, - 315, 1164, 1337, 1063, 1062, 354, 355, 356, 313, 311, - 94, 309, 846, 746, 49, 50, 51, 52, 53, 54, - 55, 152, 306, 1338, 667, 454, 45, 415, 1150, 1336, - 277, 1162, 825, 1350, 1343, 277, 1352, 1353, 378, 1026, - 1160, 277, 829, 308, 277, 277, 145, 530, 1335, 1358, - 1362, 308, 525, 192, 192, 192, 192, 591, 1563, 308, - 308, 1364, 308, 192, 192, 192, 1475, 1276, 591, 1474, - 1355, 591, 1351, 308, 1219, 140, 138, 192, 56, 1576, - 1365, 591, 1046, 954, 591, 331, 950, 333, 334, 335, - 336, 933, 1366, 591, 63, 841, 1402, 1403, 1404, 1405, - 1406, 1407, 1408, 840, 524, 819, 771, 526, 764, 1369, - 721, 567, 349, 1414, 1415, 591, 303, 1588, 1418, 1579, - 1577, 1420, 1401, 117, 1570, 1546, 1509, 1508, 1507, 1425, - 1426, 1477, 1472, 1469, 1466, 1431, 1465, 1461, 1156, 1419, - 1459, 1457, 258, 1455, 798, 1442, 46, 1436, 825, 1432, - 1411, 1409, 1399, 1397, 1586, 1417, 49, 50, 51, 52, - 53, 54, 55, 1428, 152, 96, 1395, 134, 104, 103, - 102, 101, 56, 99, 100, 105, 1393, 1391, 49, 50, - 51, 52, 53, 54, 55, 1389, 1387, 1385, 1383, 1382, - 88, 87, 348, 89, 74, 46, 1380, 1379, 155, 1377, - 1468, 1375, 1374, 1371, 1370, 1347, 1345, 1331, 1330, 1326, - 1277, 1275, 1272, 1138, 1478, 1479, 1480, 1239, 1471, 1476, - 1129, 1467, 1067, 1053, 1051, 1571, 177, 1513, 1044, 1043, - 1033, 972, 1156, 961, 960, 949, 258, 868, 697, 851, - 1494, 850, 848, 56, 1493, 1492, 1491, 1481, 845, 839, - 837, 1141, 1142, 1569, 1499, 1504, 818, 1503, 797, 778, - 742, 741, 740, 739, 738, 736, 1521, 735, 688, 1528, - 1530, 1532, 638, 1528, 1530, 1532, 570, 152, 425, 88, - 1530, 424, 89, 1543, 1540, 1544, 1506, 1545, 1539, 1538, - 1537, 344, 46, 1518, 1524, 320, 1520, 1523, 1004, 1005, - 1006, 1007, 1502, 152, 1498, 1497, 1496, 1495, 1470, 1001, - 1516, 1464, 1463, 1454, 1453, 825, 1452, 1451, 531, 1528, - 1530, 1532, 61, 62, 47, 63, 1450, 1449, 1448, 1447, - 1446, 1445, 1444, 88, 87, 1443, 89, 56, 1441, 1320, - 1318, 155, 1316, 1314, 523, 156, 157, 158, 1344, 1191, - 1189, 1183, 1575, 1181, 1573, 1179, 1177, 1175, 1173, 1171, - 1169, 1167, 1165, 56, 1329, 1580, 1585, 1584, 1328, 177, - 1269, 1587, 1288, 88, 63, 1572, 89, 1268, 1081, 1286, - 1071, 1064, 1055, 998, 532, 1582, 46, 533, 997, 971, - 963, 853, 852, 849, 847, 732, 731, 825, 717, 691, - 687, 258, 1581, 206, 686, 665, 633, 603, 602, 49, - 50, 51, 52, 53, 54, 55, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 449, - 594, 568, 548, 59, 547, 497, 419, 208, 259, 210, - 228, 212, 213, 411, 386, 319, 88, 87, 304, 89, - 302, 41, 43, 515, 155, 518, 510, 46, 49, 50, - 51, 52, 53, 54, 55, 507, 503, 36, 61, 62, - 47, 63, 88, 87, 56, 89, 184, 93, 33, 223, - 155, 469, 177, 467, 95, 1514, 466, 465, 156, 157, - 158, 464, 1515, 222, 244, 463, 227, 243, 215, 209, - 207, 211, 889, 31, 1013, 1003, 439, 444, 177, 801, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 431, 800, 430, 427, 59, 226, 224, - 540, 208, 259, 210, 228, 212, 213, 270, 88, 83, - 29, 89, 57, 56, 34, 41, 43, 25, 16, 263, - 15, 46, 14, 261, 13, 49, 50, 51, 52, 53, - 54, 55, 61, 62, 47, 63, 260, 12, 11, 9, - 8, 4, 2, 223, 234, 242, 241, 46, 240, 239, - 238, 237, 236, 235, 233, 232, 231, 222, 230, 229, - 114, 77, 42, 756, 448, 152, 58, 32, 59, 658, - 657, 156, 157, 158, 1505, 299, 90, 183, 445, 426, - 1155, 761, 791, 446, 1278, 967, 41, 43, 1152, 1151, - 605, 1484, 226, 224, 1483, 1482, 1500, 156, 157, 158, - 1486, 1485, 1220, 61, 62, 47, 63, 1135, 437, 438, - 598, 661, 781, 91, 1084, 743, 65, 64, 197, 49, - 50, 51, 52, 53, 54, 55, 885, 0, 447, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 0, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 46, 0, - 0, 0, 59, 443, 440, 0, 208, 259, 210, 228, - 212, 213, 1547, 0, 0, 0, 0, 0, 0, 0, - 41, 43, 0, 0, 38, 30, 58, 32, 59, 0, - 49, 50, 51, 52, 53, 54, 55, 61, 62, 47, - 63, 0, 0, 1101, 0, 0, 41, 43, 223, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 61, 62, 47, 63, 46, 0, 0, - 60, 35, 0, 0, 88, 87, 21, 89, 0, 37, - 0, 0, 155, 0, 0, 0, 39, 40, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 226, 224, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 177, 0, 0, 0, 0, 0, 0, 444, 0, 0, - 1368, 0, 0, 0, 49, 50, 51, 52, 53, 54, - 55, 0, 0, 0, 0, 38, 30, 58, 32, 59, - 0, 19, 20, 0, 22, 23, 48, 0, 27, 28, - 49, 50, 51, 52, 53, 54, 55, 41, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 61, 62, 47, 63, 0, 0, - 1061, 60, 35, 1562, 0, 0, 0, 21, 0, 931, - 37, 0, 0, 0, 0, 0, 0, 39, 40, 1552, - 0, 0, 0, 0, 448, 0, 58, 32, 59, 0, - 0, 0, 0, 0, 1517, 1548, 0, 0, 445, 0, - 0, 0, 0, 446, 1557, 0, 41, 43, 0, 156, - 157, 158, 0, 0, 0, 0, 0, 0, 1558, 1559, - 1560, 1561, 0, 61, 62, 47, 63, 0, 437, 438, - 0, 0, 19, 20, 0, 22, 23, 48, 1112, 27, - 28, 49, 50, 51, 52, 53, 54, 55, 447, 0, - 1549, 1550, 1551, 1553, 1554, 1555, 1556, 1088, 1089, 0, - 1096, 1110, 1090, 1091, 1092, 1093, 0, 1094, 1095, 0, - 1111, 1097, 1098, 1099, 1100, 0, 0, 0, 0, 0, - 0, 0, 0, 443, 440, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 903, 0, 0, 0, 0, 0, 0, - 49, 50, 51, 52, 53, 54, 55, 930, 0, 0, - 0, 0, 895, 896, 0, 904, 921, 897, 898, 899, - 900, 0, 901, 902, 0, 922, 905, 906, 907, 908, - 903, 0, 0, 0, 0, 0, 146, 0, 0, 0, - 0, 0, 0, 0, 930, 0, 0, 0, 0, 895, - 896, 0, 904, 921, 897, 898, 899, 900, 0, 901, - 902, 348, 922, 905, 906, 907, 908, 0, 0, 0, - 0, 0, 919, 0, 923, 0, 1236, 1235, 1230, 925, - 1229, 1228, 1227, 1226, 0, 1224, 1225, 105, 189, 1234, - 1233, 1232, 1231, 0, 0, 927, 0, 0, 1223, 0, - 0, 871, 0, 884, 0, 0, 0, 0, 0, 919, - 878, 923, 879, 880, 881, 0, 925, 0, 0, 0, - 993, 992, 991, 0, 986, 985, 984, 983, 928, 981, - 982, 105, 927, 990, 989, 988, 987, 0, 0, 0, - 980, 978, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 873, 874, 875, 0, 1086, 1087, 0, 1102, - 1103, 1104, 0, 1105, 1106, 928, 0, 1107, 1108, 0, - 1109, 0, 0, 0, 0, 0, 0, 0, 0, 146, - 0, 0, 0, 1085, 1113, 1114, 1115, 1116, 1117, 1118, - 1119, 1120, 1121, 1122, 1123, 1124, 1125, 0, 872, 876, - 877, 0, 882, 0, 0, 883, 0, 0, 0, 979, - 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, - 891, 892, 893, 894, 909, 910, 911, 926, 912, 913, - 914, 915, 916, 917, 918, 920, 924, 152, 0, 0, - 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 890, 0, 891, 892, 893, - 894, 909, 910, 911, 926, 912, 913, 914, 915, 916, - 917, 918, 920, 924, 175, 0, 0, 929, 151, 148, - 163, 161, 170, 146, 164, 165, 166, 167, 352, 168, - 169, 0, 772, 171, 172, 173, 174, 564, 0, 0, - 142, 162, 0, 0, 0, 0, 0, 0, 0, 141, - 357, 0, 147, 0, 0, 0, 0, 193, 0, 0, - 194, 0, 0, 0, 0, 0, 0, 143, 144, 149, - 0, 556, 0, 550, 551, 552, 553, 0, 0, 0, - 0, 623, 146, 198, 177, 0, 0, 352, 199, 0, - 200, 353, 0, 0, 884, 0, 0, 0, 201, 0, - 0, 878, 160, 879, 880, 881, 0, 0, 0, 357, - 558, 559, 560, 561, 0, 195, 555, 0, 0, 0, - 562, 563, 554, 0, 0, 0, 0, 0, 0, 0, - 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 623, 0, 0, 873, 874, 875, 88, 87, 0, 89, - 0, 0, 0, 0, 155, 0, 0, 175, 0, 0, - 0, 151, 148, 163, 161, 170, 0, 164, 165, 166, - 167, 0, 168, 169, 0, 0, 171, 172, 173, 174, - 0, 0, 177, 142, 162, 0, 0, 0, 0, 872, - 876, 877, 141, 882, 0, 147, 883, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 143, 144, 149, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 146, 0, 0, 0, 0, 352, 0, 0, - 0, 353, 0, 0, 0, 160, 159, 0, 0, 0, - 88, 87, 0, 89, 0, 0, 0, 0, 155, 357, - 0, 175, 0, 0, 0, 151, 148, 163, 161, 170, - 0, 164, 165, 166, 167, 0, 168, 169, 0, 0, - 171, 172, 173, 174, 0, 0, 177, 142, 162, 0, - 623, 0, 146, 0, 0, 0, 141, 0, 0, 147, - 0, 156, 157, 158, 0, 0, 0, 0, 0, 88, - 87, 0, 89, 0, 143, 144, 149, 155, 0, 0, - 175, 0, 0, 0, 151, 148, 163, 161, 170, 0, - 164, 165, 166, 167, 0, 168, 169, 0, 63, 171, - 172, 173, 174, 0, 0, 177, 142, 162, 0, 160, - 274, 354, 355, 356, 0, 141, 0, 0, 147, 88, - 87, 0, 89, 0, 0, 641, 642, 0, 0, 0, - 0, 0, 0, 143, 144, 149, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 146, 409, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 156, 157, 158, 160, 0, - 354, 355, 356, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 391, 641, 642, 0, 407, 0, 0, - 389, 390, 0, 0, 0, 393, 394, 405, 395, 396, - 397, 398, 399, 400, 401, 402, 392, 0, 0, 0, - 274, 146, 0, 406, 0, 0, 404, 0, 0, 88, - 87, 0, 89, 403, 156, 157, 158, 155, 0, 0, - 175, 0, 408, 0, 151, 148, 163, 161, 170, 0, - 164, 165, 166, 167, 0, 168, 169, 0, 0, 171, - 172, 173, 174, 0, 0, 177, 142, 162, 0, 0, - 0, 0, 0, 0, 0, 141, 0, 0, 147, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, - 87, 0, 89, 143, 144, 149, 0, 155, 0, 0, - 175, 0, 0, 0, 151, 148, 163, 161, 170, 0, - 164, 165, 166, 167, 0, 168, 169, 0, 0, 171, - 172, 173, 174, 146, 0, 177, 142, 162, 160, 0, - 354, 355, 356, 0, 0, 141, 0, 0, 147, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 175, 143, 144, 149, 0, 813, 163, 161, - 170, 0, 164, 165, 166, 167, 0, 168, 169, 0, - 0, 171, 172, 173, 174, 0, 0, 0, 1281, 162, - 0, 274, 146, 0, 156, 157, 158, 0, 160, 88, - 87, 0, 89, 0, 0, 0, 0, 155, 0, 0, - 175, 0, 812, 0, 151, 148, 163, 161, 170, 0, - 164, 165, 166, 167, 0, 168, 169, 0, 0, 171, - 172, 173, 174, 0, 0, 177, 142, 162, 1282, 0, - 0, 0, 0, 0, 0, 141, 0, 0, 147, 0, - 274, 0, 0, 0, 156, 157, 158, 1280, 88, 87, - 0, 89, 0, 143, 144, 149, 155, 0, 0, 175, - 0, 0, 0, 151, 148, 163, 161, 170, 0, 164, - 165, 166, 167, 0, 168, 169, 0, 0, 171, 172, - 173, 174, 146, 0, 177, 142, 162, 0, 160, 159, - 0, 0, 0, 0, 141, 0, 0, 147, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 143, 144, 149, 0, 0, 993, 992, 991, - 0, 986, 985, 984, 983, 0, 981, 982, 105, 0, - 990, 989, 988, 987, 0, 0, 0, 980, 978, 0, - 274, 0, 0, 0, 156, 157, 158, 160, 0, 0, - 88, 87, 0, 89, 0, 0, 0, 0, 155, 0, - 0, 175, 0, 0, 0, 151, 148, 163, 161, 170, - 0, 164, 165, 166, 167, 0, 168, 169, 0, 0, - 171, 172, 173, 174, 0, 0, 177, 142, 162, 0, - 0, 0, 0, 0, 0, 0, 763, 146, 0, 147, - 0, 0, 0, 156, 157, 158, 979, 0, 0, 88, - 87, 0, 89, 0, 143, 144, 149, 155, 0, 0, - 175, 0, 0, 0, 151, 148, 163, 161, 170, 0, - 164, 165, 166, 167, 0, 168, 169, 0, 0, 171, - 172, 173, 174, 0, 0, 177, 142, 162, 0, 160, - 0, 0, 0, 0, 146, 141, 0, 0, 147, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 143, 144, 149, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 156, 157, 158, 653, 88, - 87, 146, 89, 0, 0, 0, 0, 155, 0, 0, - 175, 0, 0, 0, 151, 148, 163, 161, 170, 0, - 164, 165, 166, 167, 0, 168, 169, 0, 0, 171, - 172, 173, 174, 0, 0, 177, 142, 162, 0, 0, - 0, 297, 198, 0, 0, 141, 0, 199, 147, 200, - 0, 0, 0, 146, 156, 157, 158, 201, 0, 999, - 0, 0, 0, 143, 144, 149, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 284, 0, 279, 280, 281, - 282, 283, 0, 0, 0, 0, 287, 0, 0, 196, - 0, 0, 0, 0, 0, 285, 0, 0, 458, 0, - 295, 0, 286, 0, 0, 146, 0, 0, 0, 0, - 0, 726, 0, 0, 288, 289, 290, 291, 292, 293, - 294, 298, 0, 0, 489, 175, 490, 296, 0, 151, - 148, 163, 161, 170, 0, 164, 165, 166, 167, 0, - 168, 169, 0, 0, 171, 172, 173, 174, 0, 0, - 177, 142, 162, 0, 156, 157, 158, 0, 0, 0, - 141, 0, 0, 147, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, - 149, 380, 175, 381, 0, 0, 151, 148, 163, 161, - 170, 0, 164, 165, 166, 167, 0, 168, 169, 0, - 0, 171, 172, 173, 174, 0, 0, 0, 142, 162, - 0, 0, 0, 160, 0, 0, 0, 141, 0, 0, - 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 143, 144, 149, 0, 175, - 0, 0, 0, 151, 148, 163, 161, 170, 0, 164, - 165, 166, 167, 0, 168, 169, 0, 0, 171, 172, - 173, 174, 0, 0, 0, 142, 162, 0, 0, 0, - 160, 0, 0, 0, 141, 0, 0, 147, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 175, 143, 144, 149, 151, 148, 163, 161, 170, - 0, 164, 165, 166, 167, 0, 168, 169, 0, 0, - 171, 172, 173, 174, 0, 0, 0, 142, 162, 0, - 0, 0, 0, 0, 0, 0, 141, 160, 0, 147, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 175, 143, 144, 149, 151, 148, 163, - 161, 170, 0, 164, 165, 166, 167, 0, 168, 169, - 0, 0, 171, 172, 173, 174, 0, 0, 0, 142, - 162, 0, 0, 0, 0, 0, 0, 0, 141, 160, - 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 143, 144, 149, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 160 +static const YYINT yygindex[] = { 1860, + -4, 16, -700, 0, -346, -48, -83, 0, -7, 0, + 0, 0, 1637, -145, 0, 0, -881, 0, 1215, 0, + 1033, 220,-1448, -438, -256, 37, -748, 0, 1053, -22, + 1314, 0, 10, 1161, 554, 800, -973, -55, 0, 1064, + 0,-1134, 936, 0, 0, 0,-1058, -614,-1030, -961, + 0, 0, 0, 0, 883, 1152, 1364, 0, 0, 0, + 826, -656, 0, 0,-1033, 0, 1167, 0, -995,-1205, + 824, 810, -3, 49, 1727, 1598, 2052, -162, 76, 0, + 0, 0, 0, 0, 0, -794, 1176, 0, 2069, 0, + 0, 893, 1968, 1535, 0, -20, 2061, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -308, 1331, 0, -302, -284, -301, 29, 0, + 0, 11, 0, 0, 0, 0, 0, 0, 1329, 0, + 0, 0, 27, 36, 15, 0, 2, 1798, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, -164, + 0, 0, 1483, 0, 0, 0, 434, 0, 0, 0, + 0, 0, 0, 0, 1419, 2041, -42, 0, 1621, 0, + 1743, 0, 0, 0, 0, 0, 0, }; - -YYSTATIC YYCONST short YYFARDATA YYPACT[] = { --1000, 1635,-1000, 587, 574,-1000,-1000,-1000,-1000,-1000, --1000,-1000, 560, 543, 541, 540,-1000,-1000,-1000, 78, - 78, -463, 105, 105,-1000,-1000,-1000, 539,-1000, -116, - 395,-1000, 931, 1107, 43, 923, 78, -365, -366,-1000, - -142, 1445, 43, 1445,-1000,-1000,-1000, 227, 2386, 395, - 395, 395, 395,-1000,-1000, 246,-1000,-1000,-1000, -155, - 1083,-1000,-1000, 2288, 43, 43,-1000,-1000, 1498,-1000, --1000,-1000,-1000,-1000,-1000,-1000, 78, -117,-1000,-1000, --1000,-1000, 1432, -141, 2918, 1219,-1000,-1000,-1000,-1000, - 3187,-1000, 78,-1000, 537,-1000, 1294, 1628, 43, 1202, - 1191, 1189, 1188, 1180, 1172, 1625, 1474, 45,-1000, 78, - 696, 830,-1000,-1000, 84, 1219, 395, 2918,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000, 1470, 195, 1288, 381, -233, -235, -236, - -237, 1432,-1000, -93, 1432, 489, 662,-1000,-1000, 111, --1000, 3512, 213, 1211,-1000,-1000,-1000,-1000,-1000, 3351, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, - 592,-1000,-1000,-1000,-1000,-1000, 1219, 1624, 432, 1219, - 1219, 1219,-1000, 2599, 126,-1000,-1000, 1623, 1081, 2859, --1000, 3512,-1000,-1000,-1000, 382, 382,-1000, 1616,-1000, --1000, 1, 1460, 1457, 1704, 1524,-1000,-1000, 78,-1000, - 78, 75,-1000,-1000,-1000,-1000, 1187,-1000,-1000,-1000, --1000,-1000, 866, 78, 3179,-1000, -13, -86,-1000,-1000, - 309, 78, 105, 333, 43, 309, 489, 3294, 2918, -92, - 382, 2859, 1615,-1000, 502,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, - 112, 65, 862, 1142,-1000, 81,-1000, 428, 1432,-1000, --1000, 2918,-1000,-1000, 67, 125, 382, 395,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000, 1614, 1612, 2243, - 920, 417, 1287, 1611, 126, 1455, -52,-1000, 78, -52, --1000, 105,-1000, 78,-1000, 78,-1000, 78,-1000,-1000, --1000,-1000, 919,-1000, 78, 78,-1000, 1219,-1000,-1000, --1000, -377,-1000,-1000,-1000,-1000,-1000, 830, 104, 107, --1000,-1000, 1219, 1054,-1000, 1292, 598, 1610,-1000, 214, - 395, 170,-1000,-1000,-1000, 1588, 1587, 3512, 395, 395, - 395, 395,-1000, 1432,-1000,-1000, 3512, 572,-1000, 1219, --1000, -65,-1000, 125, 882, 918, 906, 395, 395, 2699, --1000,-1000,-1000,-1000,-1000,-1000, 78, 1292, 1100,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000, 29,-1000,-1000,-1000, 1586, - 1080,-1000, 754, 1451,-1000,-1000, 2549,-1000,-1000, 78, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 510, - 508, 495,-1000,-1000,-1000,-1000,-1000, 78, 78, 469, - 3079,-1000,-1000, -303, -204,-1000,-1000,-1000,-1000,-1000, --1000,-1000, -34, 1585,-1000, 78, 1186, 25, 382, 841, - 836, 78,-1000, -86, 76, 76, 76, 76, 2918, 502, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000, 1584, 1580, 1447,-1000,-1000,-1000, 2699,-1000,-1000, --1000,-1000, 1292, 1579, 43, 3512,-1000, 309, 1333,-1000, - -126, -135,-1000,-1000, -361,-1000,-1000, 43, 383, 370, - 43,-1000,-1000, 1079,-1000,-1000, 43,-1000, 43,-1000, - 1078, 1064,-1000,-1000, 395, -164, -369, 1578,-1000,-1000, --1000,-1000, 395, -370,-1000,-1000, -352,-1000,-1000,-1000, - 1286,-1000, 851, 395, 3512, 1219, 3460, 78, 235, 678, --1000,-1000,-1000,-1000,-1000,-1000,-1000, 1576,-1000,-1000, --1000,-1000,-1000,-1000, 1575,-1000,-1000, 537, 235, 1446, --1000, 1444, 904, 1443, 1442, 1441, 1440, 1439,-1000, 524, - 1175,-1000, 103, 1219,-1000,-1000,-1000, -125, 395, 235, - 464, 242, 3020,-1000,-1000, 1284, 1219,-1000, 817,-1000, --1000, -29, 2918, 2918, 997, 1282, 125, 1219, 1219, 1219, - 1219,-1000, 2490,-1000, 1219,-1000, 395, 395, 395, 805, - 1219, 20, 1219, 188, 1438,-1000, 175,-1000,-1000,-1000, --1000,-1000,-1000, 78,-1000, 1292,-1000,-1000, 489, 17, - 1094,-1000,-1000, 1219, 1437, 1239,-1000,-1000,-1000,-1000, --1000,-1000, 16, 382, 821, 721, 2918, 2759, -123, 104, - 1435, 1281,-1000,-1000, 3460, -34, 903, 78, -79, 3512, - 78, 1219, 78, 1218, 902,-1000,-1000,-1000, 309,-1000, --1000,-1000,-1000,-1000,-1000,-1000, 78, 105,-1000, 8, - 1219, 235, 1429, 599, 1428, 1279, 1271,-1000, 126, 78, - 78, 1427, 1174,-1000,-1000, 1292, 1574, 1421, 1573, 1420, - 1418, 1572, 1571, 1219, 395,-1000, 395, 78, 152, 395, - 43, 2918, 395, 703, 864, 98, -185, 1416, 99, 2300, - 128, 1976, 78,-1000, 1270,-1000, 843,-1000, 843, 843, - 843, 843, 843, -158,-1000, 78, 78, 395,-1000,-1000, --1000,-1000,-1000,-1000, 1219, 1414, 1262, 999,-1000,-1000, - 400, 1259, 1026, 532, 159,-1000, 5, 78, 1413, 1412, --1000, 3512, 1570, 1211, 1211, 1211, 395, 395,-1000, 969, - 716, 175,-1000,-1000,-1000,-1000,-1000,-1000, 1569, 1410, - 399, 840, 1016, -79, 1568, 1563, 3408,-1000,-1000, 1404, - 1093, 515, 468, -79, 3512, 78, 1219, 78, 1215, -339, - 395, 1219,-1000,-1000, 3512,-1000,-1000, 1219,-1000, -34, - 98, 1409, -238,-1000,-1000, 1219, 2699, 899, 898, 2918, - 1000, -140, -149, 1408, 1407, 395, 1261,-1000, -34,-1000, - 309, 309,-1000,-1000,-1000,-1000, 383,-1000,-1000,-1000, --1000,-1000,-1000,-1000, 1211, 1219, 1403, 78, 1219, 1402, --1000, 395, -79, 1562, 897, 895, 892, 887,-1000, 235, - 2049,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000, 1166, 1165, 1561, 1000, 126, 1401, 984, 43, - 1560, -407, -38,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000, 521,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000, 1558, 1558,-1000, 1558, - 1911,-1000,-1000, -406,-1000, -392,-1000,-1000, -427,-1000, --1000,-1000, 1399,-1000,-1000,-1000,-1000,-1000,-1000,-1000, - 126,-1000,-1000,-1000,-1000,-1000, 155, 492, 1219,-1000, - 235, 1150, 397,-1000, 3020, 462, 1007,-1000,-1000,-1000, --1000,-1000, 125, -34, 1211, 1219,-1000, 395, 1204, 2918, --1000, 78,-1000,-1000, 698,-1000,-1000,-1000, 1169, 1160, - 1130, 1122, 1119, 1113, 1111, 1108, 1066, 1065, 1058, 1052, - 1045, 361, 1029, 1009, 43, 498, 1094, -34, -34, 78, - 968,-1000,-1000,-1000, 489, 489, 489, 489,-1000,-1000, --1000,-1000,-1000,-1000, 489, 489, 489,-1000,-1000,-1000, --1000,-1000, -440, 2699, 878, 877, 2918,-1000, 489, 1219, - 678,-1000, 126,-1000, 126, 3,-1000, 1250,-1000,-1000, - 2039, 126, 78,-1000,-1000, 1219,-1000, 1396,-1000,-1000, - 1161,-1000,-1000, -290, 1090, 1976,-1000,-1000,-1000,-1000, - 1292,-1000, -256, -261, 78,-1000,-1000,-1000,-1000, 472, - 218, 235, 718, 500,-1000,-1000,-1000,-1000,-1000,-1000, --1000, -432,-1000,-1000, 44,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000, 494,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000, 78,-1000,-1000,-1000,-1000, 1557, 1292, - 1550,-1000,-1000,-1000,-1000,-1000, 416, 1391, 1204,-1000, - 175, 1390, 1243,-1000, 1389, 2811,-1000,-1000,-1000, -40, - 78, 1293, 78, 2970, 78, 143, 78, 69, 78, 105, - 78, 78, 78, 78, 78, 78, 78, 105, 78, 78, - 78, 78, 78, 78, 78, 998, 992, 988, 985, 78, - 78, -127, 78, 1388, 1292,-1000,-1000, 1548, 1544, 1387, - 1386, 876,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, - 382, 0,-1000, 1224,-1000, 1209,-1000,-1000, -79, 2918, --1000,-1000, 1292,-1000, 1542, 1541, 1540, 1539, 1538, 1537, - 4, 1536, 1535, 1533, 1531, 1530, 1529,-1000,-1000,-1000, - 383,-1000, 1528, 1385, 123,-1000,-1000,-1000,-1000, 1384, --1000, 686, 78,-1000, 1248, 78, 78, 1006, 235, 870, --1000,-1000,-1000,-1000,-1000,-1000,-1000, 141, 78, 622, - 571,-1000,-1000,-1000,-1000,-1000, 2918,-1000, 648,-1000, --1000,-1000, 1724, 1383, 1382, 857, 139, 1381, 1380, 849, - 1378, 844, 1376, 1375, 842, 1368, 1367, 825, 1366, 820, - 1365, 807, 1364, 798, 1356, 792, 1355, 790, 1345, 787, - 1332, 775, 1331, 764, 105, 78, 78, 78, 78, 78, - 78, 78, 1330, 761, 1329, 752,-1000, 393, -34, -34, --1000,-1000, 553, 3512, -79, 2918, -34, 1087,-1000, 1523, - 1522, 1520, 1519, 1158, -34,-1000,-1000,-1000,-1000, 78, - 746, 235, 736, 733, 78, 1292,-1000,-1000, 1328, 1157, - 1145, 1131, 1326,-1000, 72,-1000, 1068, 724, 96,-1000, --1000,-1000, 1518, 1324,-1000,-1000, 1515,-1000, 1512,-1000, --1000, 1511,-1000,-1000, 1510,-1000, 1509,-1000, 1508,-1000, - 1507,-1000, 1506,-1000, 1497,-1000, 1496,-1000, 1494,-1000, - 1493, 1322, 670, 1320, 658, 1319, 629, 1316, 624,-1000, - 1492,-1000, 1491,-1000, 1315, 1313,-1000, 2699, 1087,-1000, - 1312, 1488,-1000, 471, 383, 1311, 496,-1000, 1245,-1000, - 2013, 1310,-1000, 78, 78, 78,-1000,-1000, 2970,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000, 1487,-1000, 1486,-1000, - 1485,-1000, 1484,-1000,-1000,-1000,-1000, -20, 1482, 1000, - -34,-1000,-1000,-1000, 235,-1000, 984,-1000, 1307, 1306, - 1305,-1000, 180, 1406, 2083, 687, 448, 466, 526, 522, - 519, 461, 455, 434, 414,-1000,-1000,-1000,-1000, 405, - 132, -79, -34,-1000, 1304, 1799, 1234,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000, 91,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000, 439, 365, 290, - 283,-1000,-1000,-1000, 1433, 1303,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000, 1405, 235,-1000,-1000,-1000,-1000,-1000, -34, - -442, 78, 1258, 1299, -191, 1298,-1000,-1000, 382,-1000, - 3512, 2699, -25, -79, 1087, 1334, -34, 1296,-1000 +#define YYTABLESIZE 19624 +static const YYINT yytable[] = { 70, + 553, 159, 59, 165, 301, 914, 554, 555, 1236, 508, + 1224, 48, 120, 121, 118, 57, 361, 1128, 227, 228, + 162, 203, 169, 170, 171, 172, 1275, 55, 643, 45, + 994, 643, 1273, 573, 643, 902, 56, 219, 1030, 1341, + 295, 704, 1399, 34, 294, 177, 178, 421, 423, 425, + 427, 429, 600, 206, 167, 804, 471, 204, 124, 125, + 1591, 218, 293, 206, 207, 119, 206, 34, 986, 186, + 206, 74, 1597, 206, 1618, 1589, 529, 601, 78, 1274, + 1276, 643, 232, 300, 582, 1602, 206, 1279, 109, 206, + 1599, 209, 1600, 292, 1580, 216, 752, 503, 470, 164, + 34, 417, 1300, 235, 236, 254, 415, 281, 238, 1428, + 249, 252, 253, 304, 849, 295, 741, 504, 505, 294, + 1261, 198, 66, 1613, 67, 68, 94, 69, 279, 801, + 1277, 467, 75, 640, 167, 420, 520, 293, 483, 295, + 213, 271, 1120, 294, 273, 72, 67, 68, 286, 69, + 282, 285, 418, 281, 739, 422, 203, 1416, 529, 1632, + 111, 293, 1142, 1143, 302, 742, 631, 281, 292, 670, + 110, 671, 735, 736, 737, 592, 1023, 484, 34, 164, + 586, 469, 391, 119, 1138, 461, 418, 334, 1492, 112, + 1610, 1119, 292, 1611, 424, 426, 336, 1604, 114, 615, + 443, 444, 741, 739, 1612, 464, 418, 1417, 1629, 1189, + 1630, 317, 434, 473, 474, 168, 250, 251, 580, 1669, + 763, 482, 135, 1631, 119, 67, 68, 479, 69, 306, + 283, 317, 67, 68, 488, 69, 392, 1484, 476, 477, + 173, 1228, 109, 206, 1511, 418, 418, 119, 494, 798, + 798, 741, 798, 499, 500, 501, 216, 506, 528, 510, + 511, 512, 216, 595, 1307, 1427, 284, 1137, 514, 757, + 533, 813, 1198, 753, 516, 518, 523, 540, 174, 522, + 481, 2, 524, 119, 530, 283, 527, 1549, 217, 216, + 593, 536, 537, 538, 539, 119, 1616, 179, 302, 104, + 502, 119, 509, 594, 636, 220, 513, 571, 122, 123, + 561, 59, 78, 119, 2, 119, 567, 78, 568, 557, + 48, 589, 569, 560, 57, 67, 68, 517, 69, 119, + 578, 579, 1617, 848, 585, 558, 55, 556, 45, 1260, + 528, 736, 896, 1180, 559, 56, 122, 123, 1181, 1259, + 826, 119, 827, 577, 491, 492, 614, 584, 1015, 598, + 216, 98, 288, 289, 290, 180, 623, 623, 642, 648, + 156, 67, 68, 182, 69, 788, 580, 583, 167, 613, + 628, 575, 122, 123, 34, 67, 68, 952, 69, 67, + 68, 621, 69, 591, 147, 1490, 67, 68, 581, 69, + 622, 622, 641, 647, 1029, 1578, 216, 98, 490, 665, + 666, 711, 667, 119, 668, 135, 119, 637, 109, 590, + 119, 98, 503, 164, 1045, 1046, 1047, 119, 486, 676, + 677, 119, 465, 119, 237, 117, 361, 288, 289, 290, + 1615, 659, 504, 505, 693, 580, 119, 796, 674, 428, + 1219, 798, 852, 466, 1400, 183, 686, 1146, 687, 13, + 669, 288, 289, 290, 599, 1148, 1013, 1044, 291, 638, + 530, 1571, 639, 464, 184, 1144, 1154, 295, 1180, 1023, + 1301, 294, 1049, 1181, 572, 712, 206, 715, 716, 717, + 768, 1156, 13, 67, 68, 270, 69, 119, 270, 293, + 418, 1573, 1593, 826, 629, 827, 617, 630, 1147, 618, + 619, 737, 206, 1272, 206, 643, 1149, 697, 852, 27, + 28, 29, 30, 31, 32, 33, 657, 1155, 95, 1540, + 292, 96, 1595, 688, 718, 479, 185, 463, 334, 749, + 750, 188, 1157, 27, 28, 29, 30, 31, 32, 33, + 109, 952, 1583, 283, 97, 98, 1431, 1432, 1343, 99, + 737, 100, 762, 805, 1158, 767, 764, 766, 101, 1160, + 221, 1574, 774, 738, 739, 1162, 27, 28, 29, 30, + 31, 32, 33, 280, 770, 102, 147, 147, 481, 777, + 156, 156, 361, 156, 1344, 206, 1164, 463, 2, 755, + 103, 820, 1596, 773, 795, 1623, 833, 233, 837, 34, + 1166, 437, 775, 821, 822, 1159, 336, 983, 1168, 206, + 1161, 636, 122, 123, 503, 438, 1163, 794, 1072, 814, + 203, 823, 222, 815, 580, 806, 807, 771, 765, 817, + 836, 810, 819, 811, 504, 505, 800, 1165, 1073, 34, + 968, 786, 119, 832, 27, 28, 29, 30, 31, 32, + 33, 1167, 1170, 528, 966, 553, 852, 1172, 970, 1169, + 972, 554, 555, 1174, 234, 67, 850, 1590, 69, 119, + 533, 824, 1051, 825, 471, 1489, 1482, 1176, 67, 852, + 271, 69, 1052, 1178, 1053, 1054, 1055, 1056, 1057, 67, + 68, 913, 69, 37, 206, 800, 944, 37, 1311, 935, + 242, 37, 37, 1171, 270, 949, 988, 270, 1173, 943, + 1031, 957, 1313, 1315, 1175, 37, 1317, 1032, 951, 1033, + 1034, 1035, 955, 530, 637, 1541, 122, 123, 1177, 295, + 206, 990, 962, 294, 1179, 985, 967, 969, 971, 1550, + 1227, 734, 471, 979, 820, 981, 37, 982, 995, 1312, + 950, 293, 937, 938, 913, 255, 821, 822, 1036, 1037, + 1038, 800, 336, 1314, 1316, 471, 13, 1318, 270, 270, + 999, 270, 586, 586, 823, 1543, 638, 898, 561, 639, + 1001, 1002, 292, 899, 959, 963, 1196, 939, 206, 288, + 289, 290, 852, 998, 1012, 1607, 561, 67, 68, 256, + 69, 1014, 1000, 1016, 1039, 1040, 1041, 261, 1042, 67, + 68, 1043, 69, 262, 1024, 67, 68, 1048, 69, 435, + 436, 263, 586, 1626, 824, 641, 641, 67, 68, 1058, + 69, 1059, 763, 1129, 852, 763, 34, 580, 580, 1246, + 580, 206, 1139, 264, 852, 67, 68, 852, 69, 265, + 27, 28, 29, 30, 31, 32, 33, 916, 917, 918, + 266, 919, 920, 921, 922, 1634, 923, 924, 198, 1027, + 925, 926, 927, 928, 267, 641, 568, 929, 930, 568, + 823, 1127, 270, 270, 268, 1131, 591, 591, 295, 269, + 562, 1140, 745, 628, 628, 1328, 1659, 1330, 119, 1180, + 1566, 1123, 620, 1657, 1181, 471, 1572, 270, 562, 800, + 293, 1671, 491, 492, 1635, 1423, 1424, 1425, 852, 852, + 852, 852, 852, 852, 852, 1183, 940, 941, 1191, 942, + 274, 275, 1229, 1193, 1230, 1184, 591, 1594, 272, 1197, + 276, 292, 697, 628, 1185, 931, 823, 287, 1192, 296, + 1194, 305, 1195, 297, 67, 68, 1668, 69, 913, 306, + 119, 1621, 503, 1249, 298, 561, 299, 1208, 1217, 642, + 471, 1410, 1226, 777, 557, 777, 1205, 1214, 560, 307, + 1207, 1216, 504, 505, 122, 123, 503, 308, 1242, 369, + 558, 223, 556, 224, 225, 226, 775, 1238, 775, 559, + 1239, 1206, 1215, 641, 393, 1264, 504, 505, 416, 67, + 1248, 155, 69, 119, 430, 37, 37, 37, 122, 123, + 503, 1223, 439, 1225, 440, 441, 433, 1377, 1378, 1379, + 1380, 442, 791, 792, 793, 913, 34, 1381, 1382, 1383, + 504, 505, 1402, 1403, 445, 800, 800, 800, 800, 800, + 2, 288, 289, 290, 1404, 1405, 462, 34, 1294, 97, + 1553, 1245, 471, 1552, 99, 468, 100, 800, 800, 257, + 258, 259, 260, 101, 471, 27, 28, 29, 30, 31, + 32, 33, 471, 1628, 800, 800, 800, 800, 627, 627, + 102, 800, 800, 472, 823, 1075, 1076, 800, 475, 800, + 800, 1278, 1204, 485, 489, 103, 495, 800, 800, 1150, + 1151, 1152, 1153, 34, 496, 27, 28, 29, 30, 31, + 32, 33, 602, 646, 603, 604, 605, 853, 497, 1308, + 1309, 1310, 1418, 1419, 1420, 1421, 1319, 1320, 1321, 1322, + 1323, 1324, 498, 1326, 1327, 1329, 515, 1332, 1333, 1334, + 1335, 1336, 1337, 1338, 519, 1340, 521, 1342, 525, 1345, + 823, 1349, 800, 800, 1348, 800, 800, 800, 526, 800, + 800, 800, 800, 800, 800, 800, 800, 800, 1371, 1213, + 67, 68, 570, 69, 542, 576, 1325, 597, 126, 650, + 1331, 661, 662, 853, 651, 652, 653, 664, 1339, 673, + 672, 1614, 1061, 1062, 1063, 1064, 1065, 1413, 8, 9, + 288, 289, 290, 675, 684, 685, 98, 1390, 216, 1619, + 692, 698, 1393, 699, 200, 1384, 1620, 1394, 13, 700, + 654, 655, 656, 1401, 1374, 1375, 701, 1388, 703, 1389, + 616, 706, 617, 1408, 713, 618, 619, 1411, 1412, 629, + 2, 714, 823, 823, 719, 109, 733, 720, 1415, 1267, + 1268, 1269, 1270, 1271, 721, 109, 109, 109, 109, 722, + 723, 2, 823, 724, 854, 109, 109, 109, 725, 1422, + 1426, 726, 1487, 727, 823, 728, 823, 823, 729, 823, + 823, 1183, 730, 1437, 1438, 1439, 1440, 1441, 1442, 731, + 1444, 732, 1606, 1608, 67, 68, 744, 69, 119, 199, + 740, 743, 27, 28, 29, 30, 31, 32, 33, 1476, + 1477, 1478, 1479, 97, 756, 746, 761, 2, 99, 758, + 100, 759, 760, 772, 152, 153, 154, 101, 769, 778, + 854, 853, 779, 1443, 1501, 780, 678, 679, 680, 797, + 1481, 798, 1483, 799, 102, 964, 823, 823, 823, 823, + 823, 823, 823, 812, 853, 800, 816, 808, 809, 103, + 831, 913, 40, 200, 818, 838, 839, 295, 840, 841, + 1493, 294, 681, 682, 683, 842, 843, 844, 846, 847, + 900, 1500, 901, 906, 904, 905, 155, 907, 1505, 293, + 965, 1200, 1201, 1202, 1203, 40, 911, 912, 958, 915, + 40, 945, 40, 40, 40, 908, 40, 946, 1183, 40, + 947, 948, 953, 1488, 954, 10, 11, 12, 13, 980, + 292, 40, 40, 40, 40, 1494, 973, 916, 917, 918, + 987, 919, 920, 921, 922, 984, 923, 924, 198, 13, + 925, 926, 927, 928, 1544, 989, 991, 929, 930, 644, + 992, 993, 645, 40, 191, 40, 996, 192, 193, 194, + 195, 913, 196, 197, 198, 997, 1003, 853, 1004, 1005, + 1008, 1210, 1006, 1211, 1212, 1007, 1585, 1009, 854, 1556, + 1557, 1558, 867, 1010, 1011, 40, 1017, 40, 1018, 1019, + 1026, 1028, 10, 11, 12, 13, 418, 1060, 1066, 1068, + 1069, 854, 27, 28, 29, 30, 31, 32, 33, 853, + 1071, 1070, 1074, 1542, 1121, 931, 1124, 1133, 1134, 853, + 1136, 1141, 853, 27, 28, 29, 30, 31, 32, 33, + 1186, 1187, 1592, 1188, 1190, 1220, 1231, 1598, 1592, 1601, + 1221, 1605, 1222, 1598, 1592, 1601, 1234, 1237, 867, 1240, + 1235, 1251, 1653, 1622, 1252, 67, 68, 1664, 69, 1253, + 1254, 1255, 1256, 126, 1257, 1598, 1592, 1601, 1258, 1262, + 1263, 1265, 1581, 1266, 1297, 1298, 1299, 1302, 1303, 27, + 28, 29, 30, 31, 32, 33, 1609, 1304, 1305, 67, + 68, 98, 69, 853, 853, 853, 853, 853, 853, 853, + 913, 1480, 1306, 191, 1368, 486, 192, 193, 194, 195, + 1370, 196, 197, 198, 854, 1372, 1373, 1376, 1385, 1386, + 1387, 1665, 40, 40, 40, 40, 1391, 1392, 1660, 1396, + 40, 155, 657, 40, 1397, 40, 40, 40, 40, 40, + 40, 40, 913, 40, 40, 40, 40, 1414, 40, 40, + 40, 34, 40, 40, 40, 40, 854, 1409, 40, 40, + 40, 40, 1146, 1148, 393, 1154, 854, 1156, 40, 854, + 40, 1158, 1160, 40, 1162, 1164, 1166, 40, 40, 1250, + 40, 1168, 1170, 1172, 40, 40, 40, 40, 1433, 288, + 289, 290, 1429, 1666, 1434, 1430, 867, 1435, 1436, 1445, + 1446, 40, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 152, + 153, 154, 1454, 1455, 1456, 334, 1485, 335, 1457, 1459, + 40, 40, 40, 40, 40, 1461, 40, 40, 1463, 1465, + 1458, 1467, 1460, 1462, 1469, 1470, 40, 40, 1464, 1466, + 854, 854, 854, 854, 854, 854, 854, 1468, 1471, 393, + 1472, 1473, 1474, 40, 1491, 1475, 1496, 1486, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 1497, 1498, 1502, 1503, 580, + 67, 68, 1499, 69, 1311, 1504, 1313, 1315, 126, 1317, + 40, 40, 40, 40, 1506, 40, 40, 40, 40, 1507, + 1508, 40, 1510, 40, 1512, 40, 40, 40, 40, 1509, + 40, 40, 580, 40, 40, 40, 98, 580, 1513, 580, + 580, 580, 40, 580, 1514, 1515, 580, 1516, 1517, 1518, + 1519, 1520, 67, 1521, 1522, 69, 1523, 1524, 580, 580, + 580, 580, 1525, 1526, 1527, 2, 1528, 1529, 1530, 1531, + 40, 40, 40, 1532, 867, 1533, 1534, 1535, 1538, 1536, + 1537, 1539, 1551, 1555, 867, 1545, 1561, 867, 40, 40, + 580, 40, 40, 40, 1562, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 393, 1548, 1563, 393, 393, 393, + 393, 1564, 393, 393, 393, 1633, 1579, 1582, 1625, 1584, + 1586, 909, 580, 1587, 580, 1588, 1624, 1658, 1636, 1654, + 1655, 1656, 1031, 1661, 1662, 1663, 1670, 104, 1667, 1032, + 1672, 1033, 1034, 1035, 95, 438, 29, 96, 439, 737, + 557, 559, 552, 755, 152, 153, 154, 137, 867, 867, + 867, 867, 867, 867, 867, 155, 803, 859, 838, 555, + 97, 98, 556, 400, 748, 99, 830, 100, 560, 138, + 1036, 1037, 1038, 749, 101, 860, 564, 272, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 102, 143, 831, 165, 7, 74, 144, 839, 324, + 325, 326, 327, 328, 329, 241, 103, 147, 168, 310, + 590, 1495, 1022, 8, 9, 211, 1039, 1040, 1041, 1233, + 1042, 663, 1241, 1043, 956, 1122, 1554, 1406, 1232, 1296, + 10, 11, 12, 13, 1366, 1145, 910, 1395, 1407, 1398, + 1135, 330, 702, 394, 596, 163, 1132, 93, 1369, 580, + 580, 239, 580, 751, 166, 331, 974, 580, 978, 787, + 580, 845, 580, 580, 580, 580, 580, 580, 580, 541, + 580, 580, 580, 580, 202, 580, 580, 710, 633, 580, + 580, 580, 580, 0, 0, 580, 580, 580, 580, 0, + 332, 333, 0, 581, 0, 580, 0, 580, 0, 0, + 580, 0, 0, 0, 0, 580, 0, 0, 0, 0, + 0, 580, 580, 580, 580, 0, 0, 27, 28, 29, + 30, 31, 32, 33, 67, 68, 581, 903, 394, 0, + 0, 581, 126, 581, 581, 581, 0, 581, 0, 0, + 581, 0, 0, 0, 0, 0, 0, 580, 0, 580, + 580, 580, 581, 581, 581, 581, 0, 0, 0, 0, + 98, 0, 0, 580, 580, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 580, 0, 0, 0, 581, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 0, 0, 0, 581, 580, 581, 0, + 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 580, 580, 580, + 580, 0, 580, 580, 580, 580, 0, 0, 580, 0, + 580, 0, 580, 580, 580, 0, 155, 580, 580, 0, + 580, 580, 580, 0, 1031, 394, 0, 0, 394, 580, + 0, 1032, 0, 1033, 1034, 1035, 0, 0, 152, 153, + 154, 0, 0, 394, 0, 0, 394, 394, 394, 394, + 0, 394, 394, 394, 0, 0, 0, 580, 580, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1036, 1037, 1038, 580, 580, 0, 580, 580, + 580, 0, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 916, 917, 918, 0, 919, 920, 921, 922, 0, + 923, 924, 198, 0, 925, 926, 927, 928, 0, 0, + 0, 929, 930, 581, 581, 0, 581, 0, 1039, 1040, + 1041, 581, 1042, 0, 581, 1043, 581, 581, 581, 581, + 581, 581, 581, 0, 581, 581, 581, 581, 0, 581, + 581, 0, 0, 581, 581, 581, 581, 0, 0, 581, + 581, 581, 581, 0, 0, 0, 0, 574, 0, 581, + 155, 581, 0, 0, 581, 0, 0, 0, 0, 581, + 0, 0, 0, 0, 0, 581, 581, 581, 581, 931, + 0, 0, 0, 0, 0, 67, 68, 216, 69, 119, + 574, 67, 68, 126, 69, 574, 0, 574, 574, 574, + 0, 574, 0, 0, 0, 0, 0, 0, 1126, 0, + 0, 581, 0, 581, 581, 581, 574, 574, 574, 574, + 0, 98, 0, 0, 0, 0, 0, 581, 581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 581, 491, 492, 0, 574, 581, + 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 581, 581, 0, 0, 0, + 574, 581, 574, 0, 581, 581, 240, 241, 242, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 581, 581, 581, 581, 0, 581, 581, 581, 581, + 0, 243, 581, 0, 581, 0, 581, 581, 581, 0, + 0, 581, 581, 0, 581, 581, 581, 216, 0, 67, + 68, 0, 69, 581, 0, 0, 0, 126, 0, 152, + 153, 154, 1280, 1281, 1282, 0, 1283, 1284, 1285, 1286, + 0, 1287, 1288, 198, 0, 1289, 1290, 1291, 1292, 0, + 0, 581, 581, 0, 1293, 98, 0, 0, 1346, 0, + 0, 0, 0, 0, 0, 1347, 0, 0, 0, 581, + 581, 0, 581, 581, 581, 0, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 245, 246, 247, + 248, 0, 0, 0, 0, 0, 0, 574, 574, 0, + 574, 0, 0, 0, 0, 574, 0, 0, 574, 0, + 574, 574, 574, 574, 574, 574, 574, 0, 574, 574, + 574, 574, 0, 574, 574, 0, 1652, 574, 574, 574, + 574, 0, 0, 574, 574, 574, 574, 0, 0, 0, + 0, 572, 0, 574, 0, 574, 0, 0, 574, 0, + 0, 0, 0, 574, 0, 0, 0, 0, 0, 574, + 574, 574, 574, 152, 153, 154, 0, 0, 0, 0, + 0, 0, 0, 0, 572, 0, 0, 0, 0, 572, + 0, 572, 572, 572, 0, 572, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 574, 0, 574, 574, 574, + 572, 572, 572, 572, 0, 0, 0, 0, 0, 0, + 0, 574, 574, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, + 0, 0, 572, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 0, 0, 0, 572, 574, 572, 0, 574, 574, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 574, 574, 574, 574, 0, + 574, 574, 574, 574, 0, 0, 574, 1637, 574, 0, + 574, 574, 574, 0, 0, 574, 574, 0, 574, 574, + 574, 0, 1638, 0, 0, 0, 0, 574, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, + 0, 0, 0, 0, 0, 0, 0, 1640, 0, 0, + 0, 0, 0, 0, 0, 574, 574, 0, 0, 0, + 0, 1641, 1642, 1643, 1644, 0, 0, 0, 0, 0, + 0, 0, 0, 574, 574, 0, 574, 574, 574, 0, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 0, + 0, 0, 0, 1645, 1646, 1647, 1648, 1649, 1650, 1651, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 572, 572, 0, 572, 0, 0, 0, 0, 572, + 0, 0, 572, 0, 572, 572, 572, 572, 572, 572, + 572, 0, 572, 572, 572, 572, 0, 572, 572, 0, + 0, 572, 572, 572, 572, 0, 0, 572, 572, 572, + 572, 0, 0, 0, 0, 570, 0, 572, 0, 572, + 0, 0, 572, 0, 0, 0, 0, 572, 0, 0, + 0, 0, 0, 572, 572, 572, 572, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 570, 804, + 804, 0, 804, 570, 0, 570, 570, 570, 0, 570, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, + 0, 572, 572, 572, 570, 570, 570, 570, 0, 0, + 0, 0, 0, 0, 0, 572, 572, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 572, 0, 0, 0, 570, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 0, 0, 0, 570, 572, + 570, 0, 572, 572, 804, 804, 804, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, + 572, 572, 572, 0, 572, 572, 572, 572, 0, 804, + 572, 0, 572, 0, 572, 572, 572, 0, 0, 572, + 572, 0, 572, 572, 572, 0, 127, 0, 0, 0, + 0, 572, 1350, 1351, 1352, 0, 1353, 1354, 1355, 1356, + 0, 1357, 1358, 0, 0, 1359, 1360, 1361, 1362, 0, + 0, 0, 1363, 144, 0, 0, 0, 0, 0, 572, + 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 572, 572, 0, + 572, 572, 572, 0, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 0, 0, 0, 0, 0, 0, 0, + 0, 1364, 0, 804, 0, 804, 804, 804, 804, 0, + 0, 0, 0, 0, 0, 570, 570, 0, 570, 0, + 1365, 0, 0, 570, 0, 0, 570, 0, 570, 570, + 570, 570, 570, 570, 570, 0, 570, 570, 570, 570, + 0, 570, 570, 0, 0, 570, 570, 570, 570, 0, + 0, 570, 570, 570, 570, 0, 0, 0, 0, 571, + 0, 570, 0, 570, 0, 0, 570, 0, 0, 0, + 0, 570, 0, 0, 0, 0, 0, 570, 570, 570, + 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 571, 0, 0, 0, 0, 571, 0, 571, + 571, 571, 0, 571, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 570, 0, 570, 570, 570, 571, 571, + 571, 571, 0, 0, 0, 0, 0, 0, 0, 570, + 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, + 571, 570, 570, 570, 570, 570, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 570, 570, 570, 0, + 0, 0, 571, 570, 571, 0, 570, 570, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 570, 570, 570, 570, 0, 570, 570, + 570, 570, 0, 0, 570, 0, 570, 0, 570, 570, + 570, 0, 0, 570, 570, 0, 570, 570, 570, 0, + 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 570, 570, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 570, 570, 0, 570, 570, 570, 0, 570, 570, + 570, 570, 570, 570, 570, 570, 570, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, + 571, 0, 571, 0, 0, 0, 0, 571, 0, 0, + 571, 0, 571, 571, 571, 571, 571, 571, 571, 0, + 571, 571, 571, 571, 0, 571, 571, 0, 0, 571, + 571, 571, 571, 0, 0, 571, 571, 571, 571, 0, + 0, 0, 0, 573, 0, 571, 0, 571, 0, 0, + 571, 0, 0, 0, 0, 571, 0, 0, 0, 0, + 0, 571, 571, 571, 571, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, + 0, 573, 0, 573, 573, 573, 0, 573, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 571, 0, 571, + 571, 571, 573, 573, 573, 573, 0, 0, 0, 0, + 0, 0, 0, 571, 571, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 571, 0, 0, 0, 573, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 0, 0, 0, 573, 571, 573, 0, + 571, 571, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 571, 571, 571, + 571, 0, 571, 571, 571, 571, 0, 0, 571, 0, + 571, 0, 571, 571, 571, 0, 0, 571, 571, 0, + 571, 571, 571, 0, 0, 0, 0, 0, 0, 571, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 571, 571, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 571, 571, 0, 571, 571, + 571, 0, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 573, 573, 0, 573, 0, 0, 0, + 0, 573, 0, 0, 573, 0, 573, 573, 573, 573, + 573, 573, 573, 0, 573, 573, 573, 573, 0, 573, + 573, 0, 0, 573, 573, 573, 573, 0, 0, 573, + 573, 573, 573, 0, 0, 0, 0, 709, 0, 573, + 0, 573, 0, 0, 573, 0, 0, 0, 0, 573, + 0, 0, 0, 0, 0, 573, 573, 573, 573, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 709, 0, 0, 0, 0, 709, 0, 709, 709, 709, + 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 573, 0, 573, 573, 573, 709, 709, 709, 709, + 0, 0, 0, 0, 0, 0, 0, 573, 573, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 573, 0, 0, 0, 709, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 0, 0, 0, + 709, 573, 709, 0, 573, 573, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 573, 573, 573, 573, 0, 573, 573, 573, 573, + 0, 0, 573, 0, 573, 0, 573, 573, 573, 0, + 0, 573, 573, 0, 573, 573, 573, 0, 0, 0, + 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 573, 573, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, + 573, 0, 573, 573, 573, 0, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 709, 709, 0, + 709, 0, 0, 0, 0, 709, 0, 0, 709, 0, + 709, 709, 709, 709, 709, 709, 709, 0, 709, 709, + 709, 709, 0, 709, 709, 0, 0, 709, 709, 709, + 709, 0, 0, 709, 709, 709, 0, 0, 0, 0, + 0, 708, 0, 709, 0, 709, 0, 0, 709, 0, + 0, 0, 0, 709, 0, 0, 0, 0, 0, 709, + 709, 709, 709, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 708, 0, 0, 0, 0, 708, + 0, 708, 708, 708, 0, 708, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 709, 0, 709, 709, 709, + 708, 708, 708, 708, 0, 0, 0, 0, 0, 0, + 0, 709, 709, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, + 0, 0, 708, 709, 709, 709, 709, 709, 709, 709, + 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, + 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, + 709, 0, 0, 0, 708, 709, 708, 0, 709, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 709, 709, 709, 709, 0, + 709, 709, 709, 709, 0, 0, 709, 0, 709, 0, + 709, 709, 709, 0, 0, 709, 709, 0, 709, 709, + 709, 0, 0, 0, 0, 0, 0, 709, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 709, 709, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 709, 709, 0, 709, 709, 709, 0, + 709, 709, 709, 709, 709, 709, 709, 709, 709, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 708, 708, 0, 708, 0, 0, 0, 0, 708, + 0, 0, 708, 0, 708, 708, 708, 708, 708, 708, + 708, 0, 708, 708, 708, 708, 0, 708, 708, 0, + 0, 708, 708, 708, 708, 0, 0, 708, 708, 708, + 0, 0, 0, 0, 0, 719, 0, 708, 0, 708, + 0, 0, 708, 0, 0, 0, 0, 708, 0, 0, + 0, 0, 0, 708, 708, 708, 708, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, + 0, 0, 0, 719, 0, 0, 719, 719, 0, 719, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, + 0, 708, 708, 708, 719, 719, 719, 719, 0, 0, + 0, 0, 0, 0, 0, 708, 708, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 708, 0, 0, 0, 719, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 0, 0, 0, 719, 708, + 719, 0, 708, 708, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, + 708, 708, 708, 0, 708, 708, 708, 708, 0, 0, + 708, 0, 708, 0, 708, 708, 708, 0, 0, 708, + 708, 0, 708, 708, 708, 0, 0, 0, 0, 0, + 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, + 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 708, 708, 0, + 708, 708, 708, 0, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 719, 719, 0, 719, 0, + 0, 0, 0, 719, 0, 0, 719, 0, 719, 719, + 719, 719, 719, 719, 719, 0, 719, 719, 719, 719, + 0, 719, 719, 0, 0, 719, 719, 719, 719, 0, + 0, 719, 719, 719, 0, 0, 0, 0, 0, 717, + 0, 719, 0, 719, 0, 0, 719, 0, 0, 0, + 0, 719, 0, 0, 0, 0, 0, 719, 719, 719, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 717, 0, 0, 0, 0, 717, 0, 0, + 717, 717, 0, 717, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 719, 0, 719, 719, 719, 717, 717, + 717, 717, 0, 0, 0, 0, 0, 0, 0, 719, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, + 717, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 0, + 0, 0, 717, 719, 717, 0, 719, 719, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 719, 719, 719, 719, 0, 719, 719, + 719, 719, 0, 0, 719, 0, 719, 0, 719, 719, + 719, 0, 0, 719, 719, 0, 719, 719, 719, 0, + 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 719, 719, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 719, 719, 0, 719, 719, 719, 0, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, + 717, 0, 717, 0, 0, 0, 0, 717, 0, 0, + 717, 0, 717, 717, 717, 717, 717, 717, 717, 0, + 717, 717, 717, 717, 0, 717, 717, 0, 0, 717, + 717, 717, 717, 0, 0, 717, 717, 717, 0, 0, + 0, 0, 0, 720, 0, 717, 0, 717, 0, 0, + 717, 0, 0, 0, 0, 717, 0, 0, 0, 0, + 0, 717, 717, 717, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, + 0, 720, 0, 0, 720, 720, 0, 720, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 717, 0, 717, + 717, 717, 720, 720, 720, 720, 0, 0, 0, 0, + 0, 0, 0, 717, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 717, 0, 0, 0, 720, 717, 717, 717, 717, 717, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, + 717, 717, 717, 0, 0, 0, 720, 717, 720, 0, + 717, 717, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 717, 717, 717, + 717, 0, 717, 717, 717, 717, 0, 0, 717, 0, + 717, 0, 717, 717, 717, 0, 0, 717, 717, 0, + 717, 717, 717, 0, 0, 0, 0, 0, 0, 717, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 717, 717, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 717, 717, 0, 717, 717, + 717, 0, 717, 717, 717, 717, 717, 717, 717, 717, + 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 720, 720, 0, 720, 0, 0, 0, + 0, 720, 0, 0, 720, 0, 720, 720, 720, 720, + 720, 720, 720, 0, 720, 720, 720, 720, 0, 720, + 720, 0, 0, 720, 720, 720, 720, 0, 0, 720, + 720, 720, 0, 0, 0, 0, 0, 721, 0, 720, + 0, 720, 0, 0, 720, 0, 0, 0, 0, 720, + 0, 0, 0, 0, 0, 720, 720, 720, 720, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 721, 0, 0, 0, 0, 721, 0, 0, 721, 721, + 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 720, 0, 720, 720, 720, 721, 721, 721, 721, + 0, 0, 0, 0, 0, 0, 0, 720, 720, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 720, 0, 0, 0, 721, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 0, 0, 0, + 721, 720, 721, 0, 720, 720, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 720, 720, 720, 720, 0, 720, 720, 720, 720, + 0, 0, 720, 0, 720, 0, 720, 720, 720, 0, + 0, 720, 720, 0, 720, 720, 720, 0, 0, 0, + 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 720, 720, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, + 720, 0, 720, 720, 720, 0, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 721, 721, 0, + 721, 0, 0, 0, 0, 721, 0, 0, 721, 0, + 721, 721, 721, 721, 721, 721, 721, 0, 721, 721, + 721, 721, 0, 721, 721, 0, 0, 721, 721, 721, + 721, 0, 0, 721, 721, 721, 0, 0, 0, 0, + 0, 722, 0, 721, 0, 721, 0, 0, 721, 0, + 0, 0, 0, 721, 0, 0, 0, 0, 0, 721, + 721, 721, 721, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 722, 0, 0, 0, 0, 722, + 0, 0, 722, 722, 0, 722, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 721, 0, 721, 721, 721, + 722, 722, 722, 722, 0, 0, 0, 0, 0, 0, + 0, 721, 721, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, + 0, 0, 722, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 0, 0, 0, 722, 721, 722, 0, 721, 721, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 721, 721, 721, 721, 0, + 721, 721, 721, 721, 0, 0, 721, 0, 721, 0, + 721, 721, 721, 0, 0, 721, 721, 0, 721, 721, + 721, 0, 0, 0, 0, 0, 0, 721, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 721, 721, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 721, 721, 0, 721, 721, 721, 0, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 722, 722, 0, 722, 0, 0, 0, 0, 722, + 0, 0, 722, 0, 722, 722, 722, 722, 722, 722, + 722, 0, 722, 722, 722, 722, 0, 722, 722, 0, + 0, 722, 722, 722, 722, 0, 0, 722, 722, 722, + 0, 0, 0, 0, 0, 723, 0, 722, 0, 722, + 0, 0, 722, 0, 0, 0, 0, 722, 0, 0, + 0, 0, 0, 722, 722, 722, 722, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, + 0, 0, 0, 723, 0, 0, 723, 723, 0, 723, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, + 0, 722, 722, 722, 723, 723, 723, 723, 0, 0, + 0, 0, 0, 0, 0, 722, 722, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 722, 0, 0, 0, 723, 722, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 722, 722, 722, 722, 0, 0, 0, 723, 722, + 723, 0, 722, 722, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, + 722, 722, 722, 0, 722, 722, 722, 722, 0, 0, + 722, 0, 722, 0, 722, 722, 722, 0, 0, 722, + 722, 0, 722, 722, 722, 0, 0, 0, 0, 0, + 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, + 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 722, 722, 0, + 722, 722, 722, 0, 722, 722, 722, 722, 722, 722, + 722, 722, 722, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 723, 723, 0, 723, 0, + 0, 0, 0, 723, 0, 0, 723, 0, 723, 723, + 723, 723, 723, 723, 723, 0, 723, 723, 723, 723, + 0, 723, 723, 0, 0, 723, 723, 723, 723, 0, + 0, 723, 723, 723, 0, 0, 0, 0, 0, 724, + 0, 723, 0, 723, 0, 0, 723, 0, 0, 0, + 0, 723, 0, 0, 0, 0, 0, 723, 723, 723, + 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 724, 0, 0, 0, 0, 724, 0, 0, + 724, 724, 0, 724, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 723, 0, 723, 723, 723, 724, 724, + 724, 724, 0, 0, 0, 0, 0, 0, 0, 723, + 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, + 724, 723, 723, 723, 723, 723, 723, 723, 723, 723, + 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, + 723, 723, 723, 723, 723, 723, 723, 723, 723, 0, + 0, 0, 724, 723, 724, 0, 723, 723, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 723, 723, 723, 723, 0, 723, 723, + 723, 723, 0, 0, 723, 0, 723, 0, 723, 723, + 723, 0, 0, 723, 723, 0, 723, 723, 723, 0, + 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 723, 723, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 723, 723, 0, 723, 723, 723, 0, 723, 723, + 723, 723, 723, 723, 723, 723, 723, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, + 724, 0, 724, 0, 0, 0, 0, 724, 0, 0, + 724, 0, 724, 724, 724, 724, 724, 724, 724, 0, + 724, 724, 724, 724, 0, 724, 724, 0, 0, 724, + 724, 724, 724, 0, 0, 724, 724, 724, 0, 0, + 0, 0, 0, 725, 0, 724, 0, 724, 0, 0, + 724, 0, 0, 0, 0, 724, 0, 0, 0, 0, + 0, 724, 724, 724, 724, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, + 0, 725, 0, 0, 725, 725, 0, 725, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 724, 0, 724, + 724, 724, 725, 725, 725, 725, 0, 0, 0, 0, + 0, 0, 0, 724, 724, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 724, 0, 0, 0, 725, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 0, 0, 0, 725, 724, 725, 0, + 724, 724, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 724, 724, 724, + 724, 0, 724, 724, 724, 724, 0, 0, 724, 0, + 724, 0, 724, 724, 724, 0, 0, 724, 724, 0, + 724, 724, 724, 0, 0, 0, 0, 0, 0, 724, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 724, 724, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 724, 724, 0, 724, 724, + 724, 0, 724, 724, 724, 724, 724, 724, 724, 724, + 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 725, 725, 0, 725, 0, 0, 0, + 0, 725, 0, 0, 725, 0, 725, 725, 725, 725, + 725, 725, 725, 0, 725, 725, 725, 725, 0, 725, + 725, 0, 0, 725, 725, 725, 725, 0, 0, 725, + 725, 725, 0, 0, 0, 0, 0, 730, 0, 725, + 0, 725, 0, 0, 725, 0, 0, 0, 0, 725, + 0, 0, 0, 0, 0, 725, 725, 725, 725, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 730, 0, 0, 0, 0, 730, 0, 0, 730, 730, + 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 725, 0, 725, 725, 725, 730, 730, 730, 730, + 0, 0, 0, 0, 0, 0, 0, 725, 725, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 725, 0, 0, 0, 730, 725, + 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 725, 725, 0, 0, 0, + 730, 725, 730, 0, 725, 725, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 725, 725, 725, 725, 0, 725, 725, 725, 725, + 0, 0, 725, 0, 725, 0, 725, 725, 725, 0, + 0, 725, 725, 0, 725, 725, 725, 0, 0, 0, + 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 725, 725, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, + 725, 0, 725, 725, 725, 0, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 730, 730, 0, + 730, 0, 0, 0, 0, 730, 0, 0, 730, 0, + 730, 730, 730, 730, 730, 730, 730, 0, 730, 730, + 730, 730, 0, 730, 730, 0, 0, 730, 730, 730, + 730, 0, 0, 730, 730, 730, 0, 0, 0, 0, + 0, 731, 0, 730, 0, 730, 0, 0, 730, 0, + 0, 0, 0, 730, 0, 0, 0, 0, 0, 730, + 730, 730, 730, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 731, 0, 0, 0, 0, 731, + 0, 0, 731, 731, 0, 731, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 730, 0, 730, 730, 730, + 731, 731, 731, 731, 0, 0, 0, 0, 0, 0, + 0, 730, 730, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, + 0, 0, 731, 730, 730, 730, 730, 730, 730, 730, + 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, + 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, + 730, 0, 0, 0, 731, 730, 731, 0, 730, 730, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 730, 730, 730, 730, 0, + 730, 730, 730, 730, 0, 0, 730, 0, 730, 0, + 730, 730, 730, 0, 0, 730, 730, 0, 730, 730, + 730, 0, 0, 0, 0, 0, 0, 730, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 730, 730, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 730, 730, 0, 730, 730, 730, 0, + 730, 730, 730, 730, 730, 730, 730, 730, 730, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 731, 731, 0, 731, 0, 0, 0, 0, 731, + 0, 0, 731, 0, 731, 731, 731, 731, 731, 731, + 731, 0, 731, 731, 731, 731, 0, 731, 731, 0, + 0, 731, 731, 731, 731, 0, 0, 731, 731, 731, + 0, 0, 0, 0, 0, 732, 0, 731, 0, 731, + 0, 0, 731, 0, 0, 0, 0, 731, 0, 0, + 0, 0, 0, 731, 731, 731, 731, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, + 0, 0, 0, 732, 0, 0, 732, 732, 0, 732, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, + 0, 731, 731, 731, 732, 732, 732, 732, 0, 0, + 0, 0, 0, 0, 0, 731, 731, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 731, 0, 0, 0, 732, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 0, 0, 0, 732, 731, + 732, 0, 731, 731, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, + 731, 731, 731, 0, 731, 731, 731, 731, 0, 0, + 731, 0, 731, 0, 731, 731, 731, 0, 0, 731, + 731, 0, 731, 731, 731, 0, 0, 0, 0, 0, + 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, + 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 731, 731, 0, + 731, 731, 731, 0, 731, 731, 731, 731, 731, 731, + 731, 731, 731, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 732, 732, 0, 732, 0, + 0, 0, 0, 732, 0, 0, 732, 0, 732, 732, + 732, 732, 732, 732, 732, 0, 732, 732, 732, 732, + 0, 732, 732, 0, 0, 732, 732, 732, 732, 0, + 0, 732, 732, 732, 0, 0, 0, 0, 0, 733, + 0, 732, 0, 732, 0, 0, 732, 0, 0, 0, + 0, 732, 0, 0, 0, 0, 0, 732, 732, 732, + 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 733, 0, 0, 0, 0, 733, 0, 0, + 733, 733, 0, 733, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 732, 0, 732, 732, 732, 733, 733, + 733, 733, 0, 0, 0, 0, 0, 0, 0, 732, + 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, + 733, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 0, + 0, 0, 733, 732, 733, 0, 732, 732, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 732, 732, 732, 732, 0, 732, 732, + 732, 732, 0, 0, 732, 0, 732, 0, 732, 732, + 732, 0, 0, 732, 732, 0, 732, 732, 732, 0, + 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 732, 732, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 732, 732, 0, 732, 732, 732, 0, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, + 733, 0, 733, 0, 0, 0, 0, 733, 0, 0, + 733, 0, 733, 733, 733, 733, 733, 733, 733, 0, + 733, 733, 733, 733, 0, 733, 733, 0, 0, 733, + 733, 733, 733, 0, 0, 733, 733, 733, 0, 0, + 0, 0, 0, 726, 0, 733, 0, 733, 0, 0, + 733, 0, 0, 0, 0, 733, 0, 0, 0, 0, + 0, 733, 733, 733, 733, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, + 0, 726, 0, 0, 726, 726, 0, 726, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 733, 0, 733, + 733, 733, 726, 726, 726, 726, 0, 0, 0, 0, + 0, 0, 0, 733, 733, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 733, 0, 0, 0, 726, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 0, 0, 0, 726, 733, 726, 0, + 733, 733, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 733, 733, 733, + 733, 0, 733, 733, 733, 733, 0, 0, 733, 0, + 733, 0, 733, 733, 733, 0, 0, 733, 733, 0, + 733, 733, 733, 0, 0, 0, 0, 0, 0, 733, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 733, 733, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 733, 733, 0, 733, 733, + 733, 0, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 726, 726, 0, 726, 0, 0, 0, + 0, 726, 0, 0, 726, 0, 726, 726, 726, 726, + 726, 726, 726, 0, 726, 726, 726, 726, 0, 726, + 726, 0, 0, 726, 726, 726, 726, 0, 0, 726, + 726, 726, 0, 0, 0, 0, 0, 727, 0, 726, + 0, 726, 0, 0, 726, 0, 0, 0, 0, 726, + 0, 0, 0, 0, 0, 726, 726, 726, 726, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 727, 0, 0, 0, 0, 727, 0, 0, 727, 727, + 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 726, 0, 726, 726, 726, 727, 727, 727, 727, + 0, 0, 0, 0, 0, 0, 0, 726, 726, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 726, 0, 0, 0, 727, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 0, 0, 0, + 727, 726, 727, 0, 726, 726, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 726, 726, 726, 726, 0, 726, 726, 726, 726, + 0, 0, 726, 0, 726, 0, 726, 726, 726, 0, + 0, 726, 726, 0, 726, 726, 726, 0, 0, 0, + 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 726, 726, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, + 726, 0, 726, 726, 726, 0, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 727, 727, 0, + 727, 0, 0, 0, 0, 727, 0, 0, 727, 0, + 727, 727, 727, 727, 727, 727, 727, 0, 727, 727, + 727, 727, 0, 727, 727, 0, 0, 727, 727, 727, + 727, 0, 0, 727, 727, 727, 0, 0, 0, 0, + 0, 728, 0, 727, 0, 727, 0, 0, 727, 0, + 0, 0, 0, 727, 0, 0, 0, 0, 0, 727, + 727, 727, 727, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 728, 0, 0, 0, 0, 728, + 0, 0, 728, 728, 0, 728, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 727, 0, 727, 727, 727, + 728, 728, 728, 728, 0, 0, 0, 0, 0, 0, + 0, 727, 727, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, + 0, 0, 728, 727, 727, 727, 727, 727, 727, 727, + 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, + 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, + 727, 0, 0, 0, 728, 727, 728, 0, 727, 727, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 727, 727, 727, 727, 0, + 727, 727, 727, 727, 0, 0, 727, 0, 727, 0, + 727, 727, 727, 0, 0, 727, 727, 0, 727, 727, + 727, 0, 0, 0, 0, 0, 0, 727, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 727, 727, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 727, 727, 0, 727, 727, 727, 0, + 727, 727, 727, 727, 727, 727, 727, 727, 727, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 728, 728, 0, 728, 0, 0, 0, 0, 728, + 0, 0, 728, 0, 728, 728, 728, 728, 728, 728, + 728, 0, 728, 728, 728, 728, 0, 728, 728, 0, + 0, 728, 728, 728, 728, 0, 0, 728, 728, 728, + 0, 0, 0, 0, 0, 729, 0, 728, 0, 728, + 0, 0, 728, 0, 0, 0, 0, 728, 0, 0, + 0, 0, 0, 728, 728, 728, 728, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, + 0, 0, 0, 729, 0, 0, 729, 729, 0, 729, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, + 0, 728, 728, 728, 729, 729, 729, 729, 0, 0, + 0, 0, 0, 0, 0, 728, 728, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 728, 0, 0, 0, 729, 728, 728, 728, + 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, + 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, + 728, 728, 728, 728, 728, 0, 0, 0, 729, 728, + 729, 0, 728, 728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, + 728, 728, 728, 0, 728, 728, 728, 728, 0, 0, + 728, 0, 728, 0, 728, 728, 728, 0, 0, 728, + 728, 0, 728, 728, 728, 0, 0, 0, 0, 0, + 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, + 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 728, 728, 0, + 728, 728, 728, 0, 728, 728, 728, 728, 728, 728, + 728, 728, 728, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 729, 729, 0, 729, 0, + 0, 0, 0, 729, 0, 0, 729, 0, 729, 729, + 729, 729, 729, 729, 729, 0, 729, 729, 729, 729, + 0, 729, 729, 0, 0, 729, 729, 729, 729, 0, + 0, 729, 729, 729, 0, 0, 0, 0, 0, 716, + 0, 729, 0, 729, 0, 0, 729, 0, 0, 0, + 0, 729, 0, 0, 0, 0, 0, 729, 729, 729, + 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 716, 0, 0, 0, 0, 0, 0, 716, + 716, 0, 0, 716, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 729, 0, 729, 729, 729, 716, 0, + 716, 716, 0, 0, 0, 0, 0, 0, 0, 729, + 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 299, 729, 0, 0, 0, + 0, 729, 729, 729, 729, 729, 729, 729, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 729, 729, 0, + 0, 0, 716, 729, 716, 0, 729, 729, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 729, 729, 729, 729, 0, 729, 729, + 729, 729, 0, 0, 729, 0, 729, 0, 729, 729, + 729, 0, 0, 729, 729, 0, 729, 729, 729, 0, + 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 729, 729, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 729, 729, 0, 729, 729, 729, 0, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, + 716, 0, 716, 0, 0, 0, 0, 716, 0, 0, + 716, 0, 716, 716, 716, 716, 716, 716, 716, 0, + 716, 716, 716, 716, 0, 716, 716, 0, 0, 716, + 716, 716, 716, 0, 0, 716, 716, 716, 0, 0, + 52, 0, 0, 0, 0, 716, 0, 716, 0, 0, + 716, 0, 0, 0, 0, 716, 0, 0, 0, 0, + 0, 716, 716, 716, 716, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, + 0, 0, 0, 0, 0, 299, 0, 299, 299, 299, + 0, 0, 0, 0, 0, 0, 0, 716, 0, 52, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 716, 716, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 299, 299, 299, 0, + 716, 0, 0, 0, 0, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 52, 0, 52, 0, 716, 0, 0, + 716, 716, 299, 299, 299, 0, 299, 0, 0, 299, + 0, 0, 0, 0, 0, 0, 0, 716, 716, 716, + 716, 0, 716, 716, 716, 716, 0, 0, 716, 0, + 716, 0, 716, 716, 716, 0, 0, 716, 716, 0, + 716, 716, 716, 0, 0, 0, 0, 0, 0, 716, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 716, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 716, 716, 0, 716, 716, + 716, 0, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 0, 52, 52, 52, + 0, 52, 52, 52, 52, 0, 52, 52, 52, 0, + 52, 52, 52, 52, 0, 0, 52, 52, 52, 0, + 0, 0, 0, 0, 0, 0, 0, 587, 127, 588, + 54, 0, 128, 129, 130, 131, 132, 0, 133, 134, + 135, 136, 52, 137, 138, 0, 0, 139, 140, 141, + 142, 0, 0, 98, 143, 144, 0, 0, 0, 52, + 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, + 147, 148, 149, 0, 52, 52, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 150, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 0, 0, 0, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, + 52, 52, 0, 52, 52, 52, 52, 0, 0, 52, + 0, 52, 0, 52, 52, 52, 52, 0, 52, 52, + 0, 52, 52, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 68, 0, 69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, + 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 52, 0, 52, + 52, 52, 0, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 156, 0, 0, 0, 371, 0, 0, 0, + 372, 0, 0, 373, 374, 0, 0, 0, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 54, 0, 0, 54, 0, 0, 387, 0, 0, 388, + 0, 0, 0, 54, 0, 0, 389, 54, 54, 54, + 0, 54, 54, 54, 54, 390, 54, 54, 54, 0, + 54, 54, 54, 54, 0, 0, 54, 54, 54, 0, + 0, 0, 0, 0, 0, 0, 0, 277, 127, 278, + 55, 0, 128, 129, 130, 131, 132, 0, 133, 134, + 135, 136, 54, 137, 138, 0, 0, 139, 140, 141, + 142, 0, 0, 0, 143, 144, 0, 0, 0, 54, + 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 147, 148, 149, 0, 54, 54, 0, 0, 0, 55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 150, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 0, 0, 0, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 55, 0, 55, 0, 0, 835, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, + 54, 54, 0, 54, 54, 54, 54, 0, 0, 54, + 0, 54, 0, 54, 54, 54, 54, 0, 54, 54, + 127, 54, 54, 54, 128, 129, 130, 131, 132, 0, + 133, 134, 135, 136, 0, 137, 138, 0, 0, 139, + 140, 141, 142, 0, 0, 0, 143, 144, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 146, 54, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 147, 148, 149, 0, 54, 54, 0, 54, + 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 226, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 0, 0, 0, 55, 55, 55, + 0, 55, 55, 55, 55, 0, 55, 55, 55, 0, + 55, 55, 55, 55, 0, 0, 55, 55, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, + 56, 0, 128, 129, 130, 131, 132, 0, 133, 134, + 135, 136, 55, 137, 138, 0, 0, 139, 140, 141, + 142, 0, 0, 0, 143, 144, 0, 0, 0, 55, + 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, + 147, 148, 149, 0, 55, 55, 0, 0, 0, 56, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 150, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 0, 0, 0, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 56, 0, 56, 0, 0, 909, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, + 55, 55, 0, 55, 55, 55, 55, 0, 0, 55, + 0, 55, 0, 55, 55, 55, 55, 0, 55, 55, + 226, 55, 55, 55, 226, 226, 226, 226, 226, 0, + 226, 226, 226, 226, 0, 226, 226, 0, 0, 226, + 226, 226, 226, 0, 0, 0, 226, 226, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 226, 55, 55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 226, 226, 226, 0, 55, 55, 0, 55, + 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 0, 0, 56, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 56, 0, 0, 0, 56, 56, 56, + 0, 56, 56, 56, 56, 0, 56, 56, 56, 0, + 56, 56, 56, 56, 0, 0, 56, 56, 56, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, + 53, 0, 128, 129, 130, 131, 132, 0, 133, 134, + 135, 136, 56, 137, 138, 0, 0, 139, 140, 141, + 142, 0, 0, 0, 143, 144, 0, 0, 0, 56, + 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, + 147, 148, 149, 0, 56, 56, 0, 0, 0, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 150, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 0, 0, 0, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 53, 0, 53, 0, 0, 233, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, + 56, 56, 0, 56, 56, 56, 56, 0, 0, 56, + 0, 56, 0, 56, 56, 56, 56, 0, 56, 56, + 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 105, 0, 105, 0, 0, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 56, 56, 0, 56, + 56, 56, 0, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 0, 0, 0, 0, 105, 0, 61, 0, + 105, 0, 0, 105, 105, 0, 0, 0, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 53, 0, 0, 53, 0, 0, 105, 0, 0, 105, + 0, 0, 0, 53, 0, 0, 105, 53, 53, 53, + 0, 53, 53, 53, 53, 105, 53, 53, 53, 0, + 53, 53, 53, 53, 0, 0, 53, 53, 53, 0, + 0, 0, 61, 0, 61, 0, 0, 0, 233, 34, + 0, 0, 233, 233, 233, 233, 233, 0, 233, 233, + 233, 233, 53, 233, 233, 0, 0, 233, 233, 233, + 233, 0, 0, 0, 233, 233, 0, 0, 0, 53, + 0, 0, 0, 233, 0, 233, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 233, 233, 233, 0, 53, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 233, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 0, 0, 0, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 0, 62, 0, 0, 0, 0, 61, + 0, 0, 61, 0, 0, 0, 0, 0, 53, 53, + 53, 53, 61, 53, 53, 53, 53, 0, 0, 53, + 0, 53, 0, 53, 53, 53, 53, 0, 53, 53, + 0, 53, 53, 53, 0, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, + 0, 61, 0, 0, 0, 0, 0, 0, 53, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, + 0, 0, 0, 2, 0, 0, 53, 53, 0, 53, + 53, 53, 0, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 543, 0, 0, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 0, 0, 0, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 0, 65, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, + 61, 0, 61, 61, 61, 61, 0, 0, 61, 0, + 61, 0, 61, 61, 61, 61, 0, 61, 61, 0, + 61, 61, 61, 0, 0, 0, 0, 0, 0, 544, + 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 545, 0, 0, 0, 0, 546, 0, + 0, 8, 9, 0, 0, 0, 0, 61, 61, 0, + 0, 0, 0, 0, 62, 0, 0, 62, 10, 11, + 12, 13, 0, 547, 548, 61, 61, 62, 61, 61, + 61, 0, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 0, 0, 549, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 0, 0, 0, 65, 0, 65, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 62, 0, 550, 551, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, + 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, + 0, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 0, 66, 0, + 0, 0, 0, 65, 0, 0, 65, 0, 0, 0, + 0, 0, 62, 62, 62, 62, 65, 62, 62, 62, + 62, 0, 0, 62, 0, 62, 0, 62, 62, 62, + 62, 0, 62, 62, 0, 62, 62, 62, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, + 0, 0, 62, 62, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, + 62, 62, 0, 62, 62, 62, 0, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 66, 0, 66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 65, 0, 0, 0, 0, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 0, 0, 0, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 0, 0, 0, 0, + 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 65, 65, 65, 0, 65, 65, 65, 65, + 0, 0, 65, 0, 65, 0, 65, 65, 65, 65, + 0, 65, 65, 0, 65, 65, 65, 0, 0, 0, + 0, 0, 585, 585, 0, 0, 585, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 585, 0, 585, 0, 0, 0, 0, 0, 0, + 0, 65, 65, 0, 0, 0, 0, 0, 66, 0, + 0, 66, 0, 0, 0, 0, 0, 0, 0, 65, + 65, 66, 65, 65, 65, 0, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 0, 0, 0, 0, 0, + 0, 395, 97, 0, 66, 0, 0, 99, 0, 100, + 0, 0, 0, 0, 0, 585, 101, 585, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 0, 0, 102, 396, 1117, 397, 398, 399, 400, + 401, 0, 0, 0, 0, 402, 0, 66, 103, 0, + 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, + 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, + 0, 0, 0, 0, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 0, 0, 0, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 0, 0, 583, 0, 0, 0, 0, 0, 0, + 0, 0, 585, 585, 0, 585, 66, 66, 66, 66, + 0, 66, 66, 66, 66, 585, 585, 66, 0, 66, + 0, 66, 66, 66, 66, 0, 66, 66, 0, 66, + 66, 66, 0, 583, 583, 0, 0, 583, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 583, 585, 583, 0, 0, 0, 585, 0, + 0, 0, 0, 0, 585, 0, 66, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 66, 0, 66, 66, 66, + 0, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 1077, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 583, 0, 583, 1078, + 1079, 0, 1080, 1081, 1082, 1083, 1084, 1085, 0, 1086, + 1087, 0, 1088, 1089, 1090, 1091, 1092, 0, 585, 585, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 585, 585, 585, 0, 0, 0, 585, + 585, 585, 585, 585, 585, 585, 0, 0, 0, 0, + 585, 0, 0, 585, 585, 0, 0, 584, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 585, 585, 585, 585, 0, 585, 585, 585, 585, 0, + 0, 585, 0, 585, 0, 585, 585, 585, 0, 0, + 585, 585, 0, 585, 585, 585, 0, 584, 584, 0, + 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 584, 0, 584, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 583, 583, 585, 585, + 0, 585, 585, 585, 0, 585, 585, 585, 585, 585, + 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 584, 0, 584, 0, 583, 0, 0, 0, 0, 583, + 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1093, 1094, 0, + 1095, 1096, 1097, 0, 1098, 1099, 0, 0, 1100, 1101, + 0, 1102, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 1103, 1104, 1105, 1106, 1107, 1108, + 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, + 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 583, 583, 583, 583, 583, 583, 0, 0, 33, + 583, 583, 583, 583, 583, 583, 583, 0, 0, 0, + 0, 583, 0, 0, 583, 583, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 583, 583, 583, 583, 0, 583, 583, 583, 583, + 584, 584, 583, 0, 583, 0, 583, 583, 583, 0, + 0, 583, 583, 0, 583, 583, 583, 0, 0, 0, + 0, 0, 0, 33, 0, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, + 0, 0, 0, 584, 0, 0, 0, 0, 0, 584, + 0, 583, 583, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, + 583, 0, 583, 583, 583, 0, 583, 583, 583, 583, + 583, 583, 583, 583, 583, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 584, 584, 584, 584, 584, 584, 584, + 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, + 584, 0, 0, 0, 584, 584, 584, 584, 584, 584, + 584, 0, 0, 0, 0, 584, 0, 0, 584, 584, + 33, 34, 0, 33, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 33, 0, 584, 584, 584, 584, 0, + 584, 584, 584, 584, 0, 0, 584, 0, 584, 0, + 584, 584, 584, 0, 0, 584, 584, 0, 584, 584, + 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 34, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 584, 584, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 584, 584, 0, 584, 584, 584, 0, + 584, 584, 584, 584, 584, 584, 584, 584, 584, 0, + 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 0, 0, 0, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 0, 786, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, + 33, 33, 0, 33, 33, 33, 33, 0, 0, 33, + 0, 33, 34, 0, 33, 34, 0, 0, 0, 0, + 0, 33, 33, 33, 0, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, + 786, 0, 0, 0, 0, 0, 0, 0, 33, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 0, 33, 33, 0, 33, + 33, 33, 0, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 0, 0, 0, 0, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 0, 0, 788, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 786, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 786, 92, + 34, 34, 34, 34, 0, 34, 34, 34, 34, 0, + 0, 34, 0, 34, 0, 0, 34, 0, 0, 0, + 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, + 0, 0, 788, 0, 788, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 34, 0, 0, 0, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, + 0, 34, 34, 34, 0, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, + 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 786, 786, 786, 786, 786, 786, 786, 786, 786, + 786, 786, 786, 786, 786, 786, 786, 786, 786, 0, + 0, 0, 786, 786, 786, 786, 786, 786, 786, 786, + 786, 786, 786, 786, 786, 786, 786, 786, 0, 0, + 792, 0, 0, 0, 0, 0, 0, 0, 0, 788, + 0, 0, 0, 786, 786, 786, 786, 0, 786, 786, + 786, 786, 788, 0, 786, 0, 786, 0, 0, 786, + 0, 0, 0, 0, 0, 0, 786, 786, 786, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 792, 0, 792, 0, 0, 0, + 0, 788, 0, 786, 786, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 786, 786, 0, 786, 786, 786, 0, 786, 786, + 786, 786, 786, 786, 786, 786, 786, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 788, 788, 788, 788, 788, + 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, + 788, 788, 788, 0, 0, 0, 788, 788, 788, 788, + 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, + 788, 788, 0, 0, 790, 0, 0, 0, 0, 92, + 92, 92, 92, 92, 0, 0, 0, 788, 788, 788, + 788, 792, 788, 788, 788, 788, 0, 0, 788, 0, + 788, 92, 92, 788, 792, 0, 0, 0, 0, 0, + 788, 788, 788, 0, 0, 0, 0, 0, 92, 92, + 92, 92, 0, 0, 0, 92, 92, 0, 0, 0, + 0, 92, 0, 0, 92, 0, 0, 0, 790, 0, + 790, 92, 92, 0, 0, 0, 0, 788, 788, 0, + 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 788, 788, 0, 788, 788, + 788, 0, 788, 788, 788, 788, 788, 788, 788, 788, + 788, 0, 0, 0, 0, 0, 0, 0, 794, 0, + 0, 0, 0, 0, 0, 0, 92, 92, 0, 92, + 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 792, 792, 792, + 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 792, 792, 0, 0, 794, 792, 792, + 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 792, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 790, 0, 0, 0, 792, + 792, 792, 792, 0, 792, 792, 792, 792, 790, 0, + 792, 0, 792, 0, 0, 792, 0, 0, 0, 0, + 0, 0, 792, 792, 792, 0, 0, 0, 0, 0, + 0, 794, 0, 794, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 790, 0, 792, + 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 792, 792, 0, + 792, 792, 792, 0, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 790, 790, 790, 790, 790, 790, 790, 790, 790, + 790, 790, 790, 790, 790, 790, 790, 790, 790, 0, + 0, 0, 790, 790, 790, 790, 790, 790, 790, 790, + 790, 790, 790, 790, 790, 790, 790, 790, 794, 744, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 794, 0, 790, 790, 790, 790, 0, 790, 790, + 790, 790, 0, 0, 790, 0, 790, 0, 0, 790, + 0, 0, 0, 0, 0, 0, 790, 790, 790, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 794, 0, 0, 744, 0, 744, 0, 0, 0, 0, + 0, 0, 0, 790, 790, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 790, 790, 0, 790, 790, 790, 0, 790, 790, + 790, 790, 790, 790, 790, 790, 790, 0, 0, 0, + 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 794, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, + 794, 794, 0, 0, 0, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, + 794, 0, 746, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 794, 794, 794, 794, + 0, 794, 794, 794, 794, 0, 0, 794, 0, 794, + 744, 0, 794, 744, 0, 0, 0, 0, 0, 794, + 794, 794, 0, 744, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 746, 0, 746, 0, + 0, 0, 0, 0, 0, 0, 794, 794, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 744, 0, 794, 794, 0, 794, 794, 794, + 0, 794, 794, 794, 794, 794, 794, 794, 794, 794, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 401, 0, 0, 744, 744, 744, 744, + 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, + 744, 744, 744, 744, 0, 0, 0, 744, 744, 744, + 744, 744, 744, 744, 0, 0, 0, 0, 744, 0, + 0, 744, 744, 746, 0, 0, 746, 401, 0, 0, + 0, 0, 0, 0, 0, 0, 746, 0, 744, 744, + 744, 744, 401, 744, 744, 744, 744, 0, 0, 744, + 0, 744, 0, 744, 744, 744, 0, 0, 744, 744, + 0, 744, 744, 744, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 0, 0, 746, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 744, 744, + 0, 0, 0, 0, 0, 0, 401, 0, 401, 0, + 0, 0, 0, 0, 0, 0, 744, 744, 0, 744, + 744, 744, 0, 744, 744, 744, 744, 744, 744, 744, + 744, 744, 0, 0, 0, 0, 0, 0, 0, 0, + 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 443, 0, 0, 0, 0, 0, 0, 0, 0, 746, + 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, + 746, 746, 746, 746, 746, 746, 746, 0, 0, 0, + 746, 746, 746, 746, 746, 746, 746, 0, 0, 0, + 0, 746, 0, 0, 746, 746, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, + 0, 746, 746, 746, 746, 0, 746, 746, 746, 746, + 0, 0, 746, 0, 746, 0, 746, 746, 746, 0, + 0, 746, 746, 0, 746, 746, 746, 0, 0, 0, + 0, 0, 0, 401, 0, 0, 401, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 746, 746, 443, 0, 443, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, + 746, 209, 746, 746, 746, 0, 746, 746, 746, 746, + 746, 746, 746, 746, 746, 401, 0, 0, 0, 67, + 68, 0, 69, 0, 0, 0, 0, 126, 0, 0, + 127, 0, 0, 0, 128, 129, 130, 131, 132, 0, + 133, 134, 135, 136, 0, 137, 138, 0, 0, 139, + 140, 141, 142, 0, 0, 98, 143, 144, 0, 0, + 209, 0, 209, 0, 0, 145, 0, 146, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 147, 148, 149, 0, 0, 0, 0, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 0, 0, 0, + 401, 401, 401, 401, 401, 401, 401, 150, 151, 0, + 443, 401, 0, 443, 401, 401, 209, 0, 0, 0, + 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, + 0, 401, 401, 401, 401, 0, 401, 401, 401, 401, + 0, 0, 401, 0, 401, 0, 0, 401, 0, 0, + 0, 0, 211, 0, 401, 401, 401, 0, 0, 0, + 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, + 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, + 0, 401, 401, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 401, + 401, 211, 401, 401, 401, 0, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 93, 0, 0, 0, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 209, 0, 0, 443, 443, 443, + 443, 443, 443, 443, 0, 0, 0, 211, 443, 0, + 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 0, 0, 443, 443, + 443, 443, 0, 443, 443, 443, 443, 0, 93, 443, + 0, 443, 0, 209, 443, 0, 0, 0, 0, 0, + 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 0, 0, 0, 443, 443, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 443, 443, 0, 443, + 443, 443, 0, 443, 443, 443, 443, 443, 443, 443, + 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, + 209, 209, 209, 209, 209, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 209, 0, 0, 0, 0, 209, + 94, 0, 209, 209, 0, 211, 0, 0, 797, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, + 209, 209, 209, 0, 209, 209, 209, 209, 0, 0, + 0, 0, 209, 0, 0, 209, 93, 0, 0, 0, + 0, 0, 209, 209, 209, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, + 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 209, 209, 0, + 209, 209, 209, 0, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, + 0, 211, 211, 211, 211, 211, 0, 0, 94, 0, + 48, 0, 0, 0, 0, 211, 0, 0, 0, 0, + 211, 0, 0, 211, 211, 0, 0, 0, 0, 0, + 0, 0, 93, 93, 93, 93, 93, 0, 47, 0, + 211, 211, 211, 211, 0, 211, 211, 211, 211, 0, + 0, 0, 0, 211, 93, 93, 211, 0, 0, 0, + 0, 0, 0, 211, 211, 211, 0, 0, 0, 48, + 0, 93, 93, 93, 93, 0, 0, 0, 93, 93, + 0, 0, 0, 0, 93, 0, 0, 93, 0, 0, + 0, 0, 0, 0, 93, 93, 0, 0, 0, 0, + 211, 211, 0, 0, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, + 0, 211, 211, 211, 0, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 0, 48, 0, 0, 0, 0, + 0, 797, 0, 0, 94, 94, 94, 94, 94, 93, + 93, 0, 93, 93, 93, 0, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 49, 94, 94, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 94, 94, 94, 0, 0, 0, + 94, 94, 0, 0, 0, 0, 94, 0, 0, 94, + 0, 0, 0, 0, 0, 0, 94, 94, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 94, 0, 94, 94, 94, 0, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 797, 797, 797, + 797, 797, 0, 48, 0, 0, 0, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 797, + 797, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 797, 797, 797, 797, + 0, 0, 0, 797, 797, 0, 0, 0, 0, 797, + 0, 0, 797, 0, 0, 0, 0, 51, 0, 797, + 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, + 47, 47, 47, 0, 797, 797, 51, 797, 797, 797, + 0, 797, 797, 797, 797, 797, 797, 797, 797, 797, + 47, 47, 0, 0, 0, 0, 0, 0, 0, 48, + 48, 48, 48, 48, 0, 0, 0, 47, 47, 47, + 47, 50, 0, 0, 47, 47, 0, 0, 49, 0, + 47, 48, 48, 47, 0, 0, 0, 0, 800, 0, + 47, 47, 0, 0, 0, 0, 0, 0, 48, 48, + 48, 48, 51, 0, 0, 48, 48, 0, 0, 0, + 0, 48, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 47, 47, 800, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, + 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 800, 49, 49, 49, 49, 49, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 49, 49, 49, 49, 0, 0, 0, + 49, 49, 0, 0, 0, 0, 49, 0, 0, 49, + 0, 0, 0, 0, 0, 0, 49, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 159, 0, 0, 0, 0, 0, 0, 317, 317, 0, + 0, 49, 49, 0, 49, 49, 49, 0, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, + 0, 0, 0, 0, 1199, 50, 50, 50, 50, 50, + 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 50, 50, 0, + 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, + 51, 317, 0, 317, 50, 50, 50, 50, 0, 0, + 0, 50, 50, 0, 0, 0, 0, 50, 51, 51, + 50, 0, 0, 0, 0, 0, 0, 50, 50, 0, + 0, 0, 0, 0, 0, 51, 51, 51, 51, 0, + 0, 0, 51, 51, 0, 0, 0, 0, 51, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 51, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 50, 50, 0, 50, 50, 50, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 800, 800, 800, + 800, 800, 2, 51, 51, 0, 51, 51, 51, 0, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 800, + 800, 0, 0, 0, 237, 0, 0, 0, 317, 0, + 580, 317, 0, 0, 0, 0, 800, 800, 800, 800, + 0, 317, 237, 800, 800, 0, 0, 0, 0, 800, + 0, 543, 800, 0, 0, 0, 0, 0, 159, 800, + 800, 0, 159, 159, 159, 159, 159, 0, 159, 159, + 159, 159, 0, 159, 159, 0, 0, 159, 159, 159, + 159, 0, 0, 0, 159, 159, 156, 0, 0, 0, + 0, 0, 0, 159, 0, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 237, 0, + 159, 159, 159, 0, 800, 800, 0, 800, 800, 800, + 0, 800, 800, 800, 800, 800, 800, 800, 800, 800, + 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, + 5, 6, 7, 0, 210, 159, 0, 0, 0, 0, + 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, + 8, 9, 0, 0, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 10, 11, 12, + 13, 317, 547, 548, 0, 317, 317, 317, 317, 317, + 317, 236, 0, 0, 0, 0, 0, 0, 0, 317, + 317, 0, 549, 0, 0, 0, 0, 0, 0, 236, + 0, 0, 0, 0, 0, 0, 317, 317, 317, 317, + 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 550, 551, 0, + 0, 317, 0, 237, 0, 0, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 580, 0, 0, + 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, + 33, 0, 0, 236, 0, 236, 317, 317, 317, 0, + 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 317, 317, 317, 317, 317, 317, 317, + 0, 0, 0, 67, 68, 0, 69, 0, 0, 0, + 0, 126, 0, 0, 127, 0, 0, 0, 128, 129, + 130, 131, 132, 0, 133, 134, 135, 136, 0, 137, + 138, 0, 0, 139, 140, 141, 142, 0, 0, 98, + 143, 144, 0, 0, 0, 0, 541, 0, 541, 145, + 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 34, 147, 148, 149, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 0, 0, 0, 0, 237, 0, 0, 0, + 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, + 236, 150, 151, 236, 237, 237, 0, 0, 0, 0, + 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, + 0, 237, 237, 237, 237, 0, 0, 0, 0, 334, + 0, 785, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 152, 153, 154, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 237, 541, 0, 0, 541, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 541, 580, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, + 237, 237, 237, 237, 237, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 236, 0, 0, 0, 0, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, + 0, 0, 0, 236, 0, 0, 0, 236, 236, 236, + 236, 236, 236, 0, 0, 0, 67, 0, 0, 69, + 0, 236, 236, 0, 0, 0, 0, 0, 0, 2, + 334, 0, 975, 0, 0, 0, 0, 0, 236, 236, + 236, 236, 0, 0, 0, 0, 0, 0, 0, 236, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 236, 0, 0, 0, 0, 0, 541, + 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, + 541, 541, 0, 0, 0, 0, 541, 0, 0, 0, + 541, 541, 541, 541, 541, 541, 0, 0, 236, 236, + 0, 0, 0, 0, 541, 541, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 541, 541, 541, 541, 236, 236, 236, 236, 236, + 236, 236, 541, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, + 0, 0, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 0, 0, 67, 0, 7, + 69, 0, 0, 324, 325, 326, 327, 328, 329, 0, + 2, 541, 541, 0, 0, 0, 0, 8, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 546, 0, 546, + 0, 0, 0, 0, 10, 11, 12, 13, 541, 541, + 541, 541, 541, 541, 541, 330, 372, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 332, 333, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 372, 0, 372, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 28, 29, 30, 31, 32, 33, 0, 364, + 0, 0, 0, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 0, 0, 0, 0, + 7, 0, 0, 0, 324, 325, 326, 327, 328, 329, + 0, 0, 0, 0, 546, 0, 0, 546, 8, 9, + 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 12, 13, 0, + 0, 0, 0, 364, 0, 364, 330, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 332, 333, 372, 0, 0, + 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27, 28, 29, 30, 31, 32, 33, 0, + 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 0, 0, 0, 0, 546, 0, 0, + 0, 546, 546, 546, 546, 546, 546, 0, 0, 0, + 364, 0, 0, 364, 0, 546, 546, 0, 0, 0, + 0, 0, 0, 364, 357, 0, 357, 0, 0, 0, + 0, 0, 546, 546, 546, 546, 0, 0, 0, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, + 0, 0, 0, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 0, 0, 0, 0, + 372, 0, 0, 0, 372, 372, 372, 372, 372, 372, + 0, 0, 546, 546, 0, 0, 0, 0, 372, 372, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 372, 372, 372, 372, 546, + 546, 546, 546, 546, 546, 546, 372, 211, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 372, 0, 0, 0, 0, 0, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 0, + 0, 357, 0, 364, 357, 0, 0, 364, 364, 364, + 364, 364, 364, 0, 357, 372, 372, 0, 0, 0, + 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, + 0, 211, 0, 211, 0, 0, 0, 0, 364, 364, + 364, 364, 372, 372, 372, 372, 372, 372, 372, 364, + 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 540, 0, 540, 0, 0, 0, + 0, 0, 0, 0, 0, 364, 364, 364, 364, 364, + 364, 364, 0, 0, 0, 0, 0, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 566, 0, 0, 0, 357, 0, 0, 0, 357, 357, + 357, 357, 357, 357, 0, 0, 0, 0, 211, 0, + 0, 211, 357, 357, 0, 0, 0, 0, 0, 0, + 0, 211, 0, 0, 0, 0, 0, 0, 0, 357, + 357, 357, 357, 0, 0, 0, 0, 0, 0, 0, + 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 357, 0, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, + 357, 540, 0, 0, 540, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 357, 357, 357, 357, + 357, 357, 357, 0, 0, 0, 0, 188, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 0, 0, 0, + 0, 211, 0, 0, 0, 211, 211, 211, 211, 211, + 211, 0, 0, 0, 0, 0, 0, 0, 0, 211, + 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 188, 0, 0, 211, 211, 211, 211, + 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 211, 0, 0, 0, 0, 0, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 0, 0, 0, 0, 540, 0, 0, 0, 540, 540, + 540, 540, 540, 540, 0, 0, 211, 211, 0, 0, + 0, 0, 540, 540, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 3, 4, 5, 6, 7, 540, + 540, 540, 540, 211, 211, 211, 211, 211, 211, 211, + 540, 0, 0, 0, 0, 0, 8, 9, 0, 0, + 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 12, 13, 0, 0, 0, + 14, 15, 0, 0, 0, 0, 16, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 18, 19, 0, 540, + 540, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, + 540, 540, 540, 156, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 188, 20, 21, 0, 22, 23, 24, 0, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 3, 4, 5, + 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, + 0, 0, 0, 14, 15, 0, 0, 0, 0, 16, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, + 19, 0, 0, 0, 0, 0, 0, 188, 0, 188, + 188, 188, 213, 0, 0, 0, 0, 0, 0, 0, + 0, 188, 0, 0, 0, 0, 188, 0, 0, 188, + 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 188, 188, 188, + 0, 188, 188, 0, 20, 21, 0, 22, 23, 24, + 0, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 188, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 188, 188, 188, 188, 188, 188, 188, + 0, 127, 0, 0, 0, 128, 129, 130, 131, 132, + 156, 133, 134, 135, 136, 295, 137, 138, 0, 294, + 139, 140, 141, 142, 446, 0, 0, 143, 144, 0, + 0, 0, 0, 0, 0, 0, 145, 293, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 147, 148, 149, 0, 447, 0, 448, + 449, 450, 451, 0, 0, 0, 0, 0, 478, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, + 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, + 0, 0, 456, 0, 0, 0, 457, 458, 459, 0, + 213, 0, 0, 0, 213, 213, 213, 213, 213, 0, + 213, 213, 213, 213, 0, 213, 213, 0, 0, 213, + 213, 213, 213, 213, 0, 0, 213, 213, 0, 0, + 0, 0, 0, 0, 0, 213, 0, 213, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 213, 213, 213, 0, 213, 156, 213, 213, + 213, 213, 295, 0, 0, 0, 745, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 293, 0, 0, 213, 0, 0, + 0, 0, 0, 0, 0, 213, 213, 213, 213, 0, + 460, 213, 0, 0, 0, 213, 213, 213, 0, 0, + 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 67, 68, 0, + 69, 0, 0, 0, 0, 126, 0, 0, 127, 0, + 0, 0, 128, 129, 130, 131, 132, 0, 133, 134, + 135, 136, 0, 137, 138, 0, 0, 139, 140, 141, + 142, 0, 700, 98, 143, 144, 0, 700, 0, 0, + 0, 700, 0, 145, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, + 147, 148, 149, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 700, 156, 0, 0, 0, 150, 295, 288, 289, 290, + 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 476, 477, 0, 0, 0, 0, 0, 293, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, + 0, 152, 153, 154, 67, 68, 0, 69, 0, 0, + 0, 0, 126, 0, 0, 127, 0, 0, 0, 128, + 129, 130, 131, 132, 0, 133, 134, 135, 136, 0, + 137, 138, 0, 0, 139, 140, 141, 142, 0, 0, + 98, 143, 144, 0, 0, 156, 0, 0, 0, 0, + 145, 0, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 147, 148, 149, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 150, 210, 288, 289, 290, 0, 0, 700, + 700, 0, 700, 0, 0, 0, 0, 700, 476, 477, + 700, 0, 0, 156, 700, 700, 700, 700, 700, 0, + 700, 700, 700, 700, 0, 700, 700, 0, 0, 700, + 700, 700, 700, 0, 0, 700, 700, 700, 0, 0, + 0, 0, 0, 0, 0, 700, 0, 700, 152, 153, + 154, 0, 0, 0, 0, 0, 0, 0, 67, 68, + 0, 69, 700, 700, 700, 0, 126, 0, 0, 127, + 0, 210, 0, 128, 129, 130, 131, 132, 0, 133, + 134, 135, 136, 0, 137, 138, 0, 0, 139, 140, + 141, 142, 0, 0, 98, 143, 144, 700, 0, 700, + 700, 700, 0, 0, 145, 0, 146, 0, 0, 156, + 0, 0, 0, 700, 700, 0, 0, 0, 0, 0, + 0, 147, 148, 149, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 700, 700, 700, 150, 0, 288, 289, + 290, 0, 67, 68, 0, 69, 0, 210, 0, 0, + 126, 0, 0, 127, 0, 0, 0, 128, 129, 130, + 131, 132, 0, 133, 134, 135, 136, 156, 137, 138, + 0, 0, 139, 140, 141, 142, 0, 0, 98, 143, + 144, 0, 0, 0, 0, 0, 0, 0, 145, 0, + 146, 0, 152, 153, 154, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 147, 148, 149, 0, 960, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 68, 0, 69, 0, 210, 0, 0, 126, 0, + 0, 127, 0, 0, 0, 128, 129, 130, 131, 132, + 150, 133, 134, 135, 136, 0, 137, 138, 0, 0, + 139, 140, 141, 142, 961, 156, 98, 143, 144, 0, + 0, 0, 0, 0, 0, 0, 145, 0, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 147, 148, 149, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 152, 153, 154, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 210, 0, 0, 67, 68, 150, 69, + 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, + 0, 128, 129, 130, 131, 132, 0, 133, 134, 135, + 136, 0, 137, 138, 0, 0, 139, 140, 141, 142, + 0, 0, 98, 143, 144, 0, 0, 0, 0, 0, + 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 152, 153, 154, 0, 0, 147, + 148, 149, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 68, 0, 69, 0, 0, + 0, 0, 126, 226, 892, 127, 0, 0, 0, 128, + 129, 130, 131, 132, 574, 133, 134, 135, 136, 0, + 137, 138, 0, 0, 139, 140, 141, 142, 0, 0, + 98, 143, 144, 0, 0, 0, 0, 0, 0, 0, + 694, 0, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 147, 148, 149, + 0, 226, 0, 0, 0, 318, 0, 0, 0, 0, + 152, 153, 154, 563, 0, 0, 0, 0, 0, 0, + 0, 0, 67, 68, 0, 69, 0, 0, 0, 0, + 126, 0, 150, 127, 0, 0, 0, 128, 129, 130, + 131, 132, 0, 133, 134, 135, 136, 0, 137, 138, + 0, 0, 139, 140, 141, 142, 0, 0, 98, 143, + 144, 0, 0, 318, 0, 0, 0, 0, 145, 0, + 146, 0, 0, 0, 0, 0, 0, 0, 851, 0, + 0, 0, 0, 318, 0, 147, 148, 149, 152, 153, + 154, 0, 852, 0, 0, 0, 0, 853, 854, 0, + 855, 856, 857, 858, 859, 860, 0, 861, 862, 0, + 863, 864, 865, 866, 867, 0, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 868, 0, 869, 0, + 0, 0, 0, 870, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 152, 153, 154, 871, + 0, 226, 0, 0, 0, 226, 226, 226, 226, 226, + 0, 226, 226, 226, 226, 0, 226, 226, 0, 0, + 226, 226, 226, 226, 0, 0, 0, 226, 226, 0, + 0, 0, 872, 0, 0, 0, 226, 0, 226, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 226, 226, 226, 0, 0, 0, 0, + 0, 0, 0, 318, 0, 0, 0, 0, 318, 318, + 318, 318, 0, 318, 318, 318, 318, 0, 318, 318, + 0, 0, 318, 318, 318, 318, 0, 0, 226, 318, + 318, 0, 0, 0, 0, 0, 0, 0, 318, 0, + 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 318, 318, 318, 0, 0, + 0, 0, 873, 0, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 318, 0, 0, 891, 0, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 0, 318, 318, 0, 0, + 318, 318, 318, 318, 0, 0, 0, 318, 318, 0, + 0, 0, 0, 0, 0, 0, 318, 851, 318, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 852, 0, 318, 318, 318, 853, 854, 0, 855, + 856, 857, 858, 859, 860, 0, 861, 862, 0, 863, + 864, 865, 866, 867, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 868, 0, 869, 0, 0, + 0, 0, 870, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 871, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 872, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 873, 0, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 0, 0, 0, 891, }; - -YYSTATIC YYCONST short YYFARDATA YYPGO[] = { - 0, 33, 53, 3, 1876, 57, 40, 6, 1868, 0, - 1867, 1866, 1865, 222, 278, 1864, 1863, 2, 1862, 48, - 36, 1, 26, 30, 27, 4, 1861, 44, 41, 55, - 1860, 38, 39, 8, 18, 7, 31, 1857, 42, 1852, - 28, 25, 1851, 1850, 5, 10, 12, 14, 1846, 1845, - 1844, 1841, 22, 32, 43, 1840, 1839, 1838, 1835, 11, - 1834, 1832, 9, 1831, 34, 1830, 13, 15, 17, 16, - 46, 23, 556, 68, 1247, 29, 268, 1827, 1826, 1825, - 1824, 1820, 1819, 19, 35, 1813, 1343, 1812, 1811, 24, - 771, 123, 1810, 45, 1246, 1809, 1808, 1806, 1805, 1804, - 1803, 1802, 1801, 1800, 1799, 1798, 1796, 1795, 1794, 1048, - 1792, 67, 58, 1791, 65, 130, 62, 59, 1790, 1789, - 70, 1788, 1787, 1786, 1774, 1773, 1772, 56, 1770, 1769, - 1768, 52, 114, 47, 1767, 87, 366, 1764, 1762, 1760, - 1759, 1757, 1750, 1746, 1745, 1744, 1743, 1729, 1726, 1024, - 1725, 1724, 1723, 1722, 1721, 1720, 1719, 1718, 91, 1717, - 1716, 120, 1715, 1714, 1711, 128, 1707, 1706, 1703, 1701, - 1698, 1697, 1696, 60, 1670, 117, 1687, 80, 1686, 520, - 1685, 1676, 1675, 1673, 1564, 1538 +static const YYINT yycheck[] = { 4, + 309, 24, 1, 24, 167, 706, 309, 309, 1004, 266, + 984, 1, 20, 21, 19, 1, 181, 899, 102, 103, + 24, 64, 27, 28, 29, 30, 38, 1, 38, 1, + 779, 41, 44, 91, 44, 692, 1, 93, 833, 1174, + 38, 480, 1248, 59, 42, 36, 37, 193, 194, 195, + 196, 197, 40, 46, 24, 61, 43, 65, 22, 23, + 41, 61, 60, 46, 72, 264, 46, 59, 769, 60, + 46, 319, 41, 46, 41, 41, 93, 362, 125, 91, + 43, 91, 105, 167, 341, 41, 46, 125, 13, 46, + 41, 76, 41, 91, 1543, 262, 365, 266, 40, 24, + 59, 40, 1136, 111, 112, 128, 190, 42, 113, 125, + 115, 116, 117, 169, 44, 38, 44, 286, 287, 42, + 44, 288, 470, 41, 260, 261, 263, 263, 151, 42, + 93, 215, 380, 125, 104, 40, 93, 60, 40, 38, + 92, 145, 42, 42, 148, 91, 260, 261, 156, 263, + 155, 156, 91, 42, 44, 40, 199, 43, 93, 41, + 91, 60, 911, 912, 168, 93, 125, 42, 91, 426, + 61, 428, 519, 520, 521, 342, 40, 233, 59, 104, + 343, 123, 187, 264, 40, 208, 91, 123, 1394, 528, + 41, 91, 91, 41, 40, 40, 181, 41, 470, 364, + 205, 206, 44, 93, 41, 210, 91, 93, 41, 958, + 41, 40, 203, 221, 222, 123, 330, 331, 47, 1668, + 91, 123, 123, 41, 264, 260, 261, 232, 263, 267, + 155, 60, 260, 261, 239, 263, 188, 40, 374, 375, + 262, 990, 167, 46, 125, 91, 91, 264, 256, 260, + 261, 93, 263, 261, 262, 263, 262, 265, 275, 267, + 268, 269, 262, 347, 1146, 1299, 33, 123, 272, 554, + 293, 470, 973, 542, 279, 280, 284, 300, 267, 284, + 232, 273, 287, 264, 292, 210, 291, 1493, 288, 262, + 346, 296, 297, 298, 299, 264, 263, 123, 302, 40, + 264, 264, 266, 346, 296, 44, 270, 365, 264, 265, + 309, 310, 359, 264, 273, 264, 324, 364, 326, 309, + 310, 344, 330, 309, 310, 260, 261, 279, 263, 264, + 338, 339, 299, 263, 342, 309, 310, 309, 310, 263, + 275, 688, 318, 359, 309, 310, 264, 265, 364, 1050, + 43, 264, 45, 338, 320, 321, 364, 342, 318, 350, + 262, 296, 360, 361, 362, 123, 365, 366, 367, 368, + 40, 260, 261, 123, 263, 311, 340, 341, 348, 364, + 339, 333, 264, 265, 59, 260, 261, 734, 263, 260, + 261, 365, 263, 345, 123, 1391, 260, 261, 40, 263, + 365, 366, 367, 368, 391, 1540, 262, 296, 391, 417, + 418, 391, 420, 264, 422, 316, 264, 409, 343, 344, + 264, 296, 266, 348, 505, 506, 507, 264, 421, 437, + 438, 264, 40, 264, 462, 470, 601, 360, 361, 362, + 1575, 393, 286, 287, 467, 274, 264, 612, 433, 40, + 125, 462, 59, 61, 1249, 123, 461, 40, 463, 451, + 424, 360, 361, 362, 452, 40, 813, 41, 391, 461, + 478, 1530, 464, 478, 123, 914, 40, 38, 359, 40, + 1137, 42, 480, 364, 542, 490, 46, 495, 496, 497, + 574, 40, 451, 260, 261, 41, 263, 264, 44, 60, + 91, 1532, 1561, 43, 463, 45, 465, 466, 91, 468, + 469, 44, 46, 525, 46, 525, 91, 469, 125, 535, + 536, 537, 538, 539, 540, 541, 60, 91, 269, 61, + 91, 272, 1563, 93, 498, 540, 123, 472, 123, 547, + 548, 315, 91, 535, 536, 537, 538, 539, 540, 541, + 475, 898, 1548, 478, 295, 296, 1305, 1306, 263, 300, + 93, 302, 570, 619, 40, 573, 571, 572, 309, 40, + 40, 1533, 595, 525, 526, 40, 535, 536, 537, 538, + 539, 540, 541, 472, 589, 326, 315, 316, 540, 597, + 260, 261, 757, 263, 299, 46, 40, 472, 273, 551, + 341, 294, 1564, 594, 612, 1579, 662, 61, 664, 59, + 40, 44, 597, 306, 307, 91, 601, 44, 40, 46, + 91, 296, 264, 265, 266, 58, 91, 612, 482, 637, + 673, 324, 40, 638, 47, 626, 627, 589, 91, 644, + 663, 632, 650, 634, 286, 287, 0, 91, 502, 59, + 91, 603, 264, 661, 535, 536, 537, 538, 539, 540, + 541, 91, 40, 275, 748, 974, 273, 40, 91, 91, + 754, 974, 974, 40, 40, 260, 684, 1559, 263, 264, + 703, 374, 41, 376, 43, 1386, 91, 40, 260, 296, + 694, 263, 838, 40, 840, 841, 842, 843, 844, 260, + 261, 706, 263, 38, 46, 59, 711, 42, 40, 708, + 123, 46, 47, 91, 260, 723, 772, 263, 91, 710, + 294, 744, 40, 40, 91, 60, 40, 301, 733, 303, + 304, 305, 740, 741, 409, 1484, 264, 265, 91, 38, + 46, 40, 747, 42, 91, 768, 751, 752, 753, 1498, + 41, 93, 43, 761, 294, 763, 91, 765, 781, 91, + 724, 60, 283, 284, 769, 40, 306, 307, 342, 343, + 344, 125, 757, 91, 91, 43, 451, 91, 260, 261, + 788, 263, 41, 42, 324, 1486, 461, 93, 44, 464, + 798, 799, 91, 61, 746, 747, 44, 318, 46, 360, + 361, 362, 409, 788, 812, 41, 62, 260, 261, 40, + 263, 816, 797, 818, 388, 389, 390, 40, 392, 260, + 261, 395, 263, 40, 829, 260, 261, 835, 263, 262, + 263, 40, 91, 1582, 374, 41, 42, 260, 261, 847, + 263, 849, 41, 899, 451, 44, 59, 260, 261, 44, + 263, 46, 908, 40, 461, 260, 261, 464, 263, 40, + 535, 536, 537, 538, 539, 540, 541, 277, 278, 279, + 40, 281, 282, 283, 284, 1624, 286, 287, 288, 831, + 290, 291, 292, 293, 40, 91, 41, 297, 298, 44, + 59, 899, 374, 375, 40, 899, 41, 42, 38, 40, + 44, 909, 42, 41, 42, 1162, 1655, 1164, 264, 359, + 1525, 896, 125, 41, 364, 43, 1531, 40, 62, 273, + 60, 1670, 320, 321, 1625, 281, 282, 283, 535, 536, + 537, 538, 539, 540, 541, 934, 457, 458, 959, 460, + 279, 280, 991, 966, 993, 936, 91, 1562, 306, 972, + 289, 91, 904, 91, 939, 365, 125, 47, 963, 391, + 968, 41, 970, 391, 260, 261, 1667, 263, 973, 267, + 264, 41, 266, 1029, 391, 974, 391, 976, 977, 978, + 43, 44, 987, 991, 974, 993, 976, 977, 974, 41, + 976, 977, 286, 287, 264, 265, 266, 41, 1021, 41, + 974, 301, 974, 303, 304, 305, 991, 1015, 993, 974, + 1018, 976, 977, 978, 316, 1071, 286, 287, 42, 260, + 1025, 91, 263, 264, 40, 360, 361, 362, 264, 265, + 266, 983, 328, 985, 330, 331, 40, 1200, 1201, 1202, + 1203, 337, 609, 610, 611, 1050, 59, 1210, 1211, 1212, + 286, 287, 393, 394, 93, 409, 410, 411, 412, 413, + 273, 360, 361, 362, 393, 394, 61, 59, 1124, 295, + 41, 1023, 43, 44, 300, 40, 302, 431, 432, 281, + 282, 283, 284, 309, 43, 535, 536, 537, 538, 539, + 540, 541, 43, 44, 448, 449, 450, 451, 41, 42, + 326, 455, 456, 263, 273, 886, 887, 461, 41, 463, + 464, 1119, 125, 93, 475, 341, 40, 471, 472, 281, + 282, 283, 284, 59, 40, 535, 536, 537, 538, 539, + 540, 541, 310, 125, 312, 313, 314, 59, 40, 1147, + 1148, 1149, 281, 282, 283, 284, 1154, 1155, 1156, 1157, + 1158, 1159, 40, 1161, 1162, 1163, 280, 1165, 1166, 1167, + 1168, 1169, 1170, 1171, 93, 1173, 93, 1175, 40, 1177, + 339, 1179, 526, 527, 1178, 529, 530, 531, 40, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 1193, 125, + 260, 261, 91, 263, 125, 58, 1160, 40, 268, 40, + 1164, 40, 40, 125, 330, 331, 332, 40, 1172, 44, + 125, 41, 280, 281, 282, 283, 284, 1273, 431, 432, + 360, 361, 362, 41, 40, 40, 296, 1235, 262, 299, + 123, 262, 1240, 44, 38, 1220, 306, 1242, 451, 41, + 366, 367, 368, 1251, 1196, 1197, 41, 1232, 60, 1234, + 463, 274, 465, 1261, 41, 468, 469, 1265, 1266, 463, + 273, 41, 431, 432, 41, 1190, 274, 41, 1276, 280, + 281, 282, 283, 284, 41, 1200, 1201, 1202, 1203, 41, + 40, 273, 451, 40, 59, 1210, 1211, 1212, 41, 1297, + 1298, 41, 1376, 41, 463, 41, 465, 466, 41, 468, + 469, 1300, 41, 1311, 1312, 1313, 1314, 1315, 1316, 41, + 1318, 41, 1569, 1570, 260, 261, 44, 263, 264, 123, + 275, 62, 535, 536, 537, 538, 539, 540, 541, 281, + 282, 283, 284, 295, 123, 365, 58, 273, 300, 123, + 302, 123, 123, 40, 414, 415, 416, 309, 274, 41, + 125, 273, 40, 1317, 1410, 275, 330, 331, 332, 317, + 1364, 317, 1367, 467, 326, 327, 535, 536, 537, 538, + 539, 540, 541, 40, 296, 61, 470, 61, 61, 341, + 44, 1386, 0, 38, 470, 41, 93, 38, 41, 41, + 1395, 42, 366, 367, 368, 41, 41, 41, 41, 58, + 41, 1409, 44, 61, 44, 125, 91, 263, 1416, 60, + 372, 424, 425, 426, 427, 33, 40, 40, 40, 125, + 38, 41, 40, 41, 42, 61, 44, 41, 1427, 47, + 41, 41, 41, 1385, 41, 448, 449, 450, 451, 93, + 91, 59, 60, 61, 62, 1397, 274, 277, 278, 279, + 274, 281, 282, 283, 284, 93, 286, 287, 288, 451, + 290, 291, 292, 293, 1487, 41, 44, 297, 298, 461, + 41, 44, 464, 91, 278, 93, 41, 281, 282, 283, + 284, 1486, 286, 287, 288, 44, 40, 409, 58, 40, + 40, 427, 41, 429, 430, 41, 1552, 40, 273, 1507, + 1508, 1509, 59, 41, 41, 123, 41, 125, 40, 294, + 62, 41, 448, 449, 450, 451, 91, 41, 40, 497, + 489, 296, 535, 536, 537, 538, 539, 540, 541, 451, + 40, 501, 277, 1485, 41, 365, 61, 125, 61, 461, + 123, 62, 464, 535, 536, 537, 538, 539, 540, 541, + 41, 41, 1560, 41, 451, 391, 41, 1565, 1566, 1567, + 93, 1569, 93, 1571, 1572, 1573, 317, 41, 125, 40, + 317, 40, 1628, 1577, 58, 260, 261, 1661, 263, 58, + 93, 93, 93, 268, 93, 1593, 1594, 1595, 40, 263, + 504, 91, 1544, 91, 40, 40, 123, 93, 41, 535, + 536, 537, 538, 539, 540, 541, 1570, 41, 40, 260, + 261, 296, 263, 535, 536, 537, 538, 539, 540, 541, + 1625, 306, 40, 278, 41, 421, 281, 282, 283, 284, + 41, 286, 287, 288, 409, 93, 93, 510, 44, 274, + 41, 1664, 260, 261, 262, 263, 58, 41, 1656, 41, + 268, 91, 60, 271, 44, 273, 274, 275, 276, 277, + 278, 279, 1667, 281, 282, 283, 284, 93, 286, 287, + 288, 59, 290, 291, 292, 293, 451, 61, 296, 297, + 298, 299, 40, 40, 38, 40, 461, 40, 306, 464, + 308, 40, 40, 311, 40, 40, 40, 315, 316, 41, + 318, 40, 40, 40, 322, 323, 324, 325, 41, 360, + 361, 362, 125, 1665, 93, 62, 273, 41, 93, 41, + 93, 339, 41, 93, 41, 93, 41, 93, 41, 414, + 415, 416, 41, 93, 41, 123, 44, 125, 41, 41, + 358, 359, 360, 361, 362, 41, 364, 365, 41, 41, + 93, 41, 93, 93, 41, 41, 374, 375, 93, 93, + 535, 536, 537, 538, 539, 540, 541, 93, 93, 123, + 41, 263, 41, 391, 41, 93, 41, 274, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 41, 40, 93, 93, 0, + 260, 261, 263, 263, 40, 93, 40, 40, 268, 40, + 448, 449, 450, 451, 41, 453, 454, 455, 456, 58, + 58, 459, 41, 461, 41, 463, 464, 465, 466, 58, + 468, 469, 33, 471, 472, 473, 296, 38, 41, 40, + 41, 42, 480, 44, 40, 40, 47, 41, 93, 41, + 93, 41, 260, 93, 41, 263, 93, 40, 59, 60, + 61, 62, 40, 40, 40, 273, 40, 40, 40, 40, + 508, 509, 510, 40, 451, 40, 40, 40, 263, 41, + 40, 93, 41, 93, 461, 60, 40, 464, 526, 527, + 91, 529, 530, 531, 40, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 278, 58, 40, 281, 282, 283, + 284, 40, 286, 287, 288, 263, 41, 40, 274, 41, + 41, 91, 123, 41, 125, 41, 40, 510, 41, 41, + 40, 40, 294, 358, 41, 41, 40, 123, 274, 301, + 41, 303, 304, 305, 269, 41, 125, 272, 41, 44, + 40, 62, 41, 41, 414, 415, 416, 123, 535, 536, + 537, 538, 539, 540, 541, 91, 123, 123, 123, 41, + 295, 296, 41, 125, 125, 300, 123, 302, 62, 123, + 342, 343, 344, 125, 309, 123, 41, 41, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 326, 41, 123, 62, 413, 125, 41, 123, 417, + 418, 419, 420, 421, 422, 123, 341, 40, 40, 180, + 41, 41, 828, 431, 432, 123, 388, 389, 390, 997, + 392, 415, 1020, 395, 741, 895, 1503, 1258, 995, 1124, + 448, 449, 450, 451, 1182, 914, 703, 1242, 1259, 1246, + 904, 459, 475, 38, 348, 24, 901, 9, 1186, 260, + 261, 114, 263, 549, 24, 473, 756, 268, 760, 607, + 271, 673, 273, 274, 275, 276, 277, 278, 279, 302, + 281, 282, 283, 284, 64, 286, 287, 487, 366, 290, + 291, 292, 293, -1, -1, 296, 297, 298, 299, -1, + 508, 509, -1, 0, -1, 306, -1, 308, -1, -1, + 311, -1, -1, -1, -1, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, -1, -1, 535, 536, 537, + 538, 539, 540, 541, 260, 261, 33, 263, 123, -1, + -1, 38, 268, 40, 41, 42, -1, 44, -1, -1, + 47, -1, -1, -1, -1, -1, -1, 358, -1, 360, + 361, 362, 59, 60, 61, 62, -1, -1, -1, -1, + 296, -1, -1, 374, 375, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 391, -1, -1, -1, 91, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, -1, -1, -1, 123, 428, 125, -1, + 431, 432, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, -1, 91, 468, 469, -1, + 471, 472, 473, -1, 294, 260, -1, -1, 263, 480, + -1, 301, -1, 303, 304, 305, -1, -1, 414, 415, + 416, -1, -1, 278, -1, -1, 281, 282, 283, 284, + -1, 286, 287, 288, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 342, 343, 344, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 277, 278, 279, -1, 281, 282, 283, 284, -1, + 286, 287, 288, -1, 290, 291, 292, 293, -1, -1, + -1, 297, 298, 260, 261, -1, 263, -1, 388, 389, + 390, 268, 392, -1, 271, 395, 273, 274, 275, 276, + 277, 278, 279, -1, 281, 282, 283, 284, -1, 286, + 287, -1, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, 299, -1, -1, -1, -1, 0, -1, 306, + 91, 308, -1, -1, 311, -1, -1, -1, -1, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, 365, + -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, + 33, 260, 261, 268, 263, 38, -1, 40, 41, 42, + -1, 44, -1, -1, -1, -1, -1, -1, 283, -1, + -1, 358, -1, 360, 361, 362, 59, 60, 61, 62, + -1, 296, -1, -1, -1, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, 320, 321, -1, 91, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + 123, 428, 125, -1, 431, 432, 355, 356, 357, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, 380, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, 262, -1, 260, + 261, -1, 263, 480, -1, -1, -1, 268, -1, 414, + 415, 416, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, 288, -1, 290, 291, 292, 293, -1, + -1, 508, 509, -1, 299, 296, -1, -1, 299, -1, + -1, -1, -1, -1, -1, 306, -1, -1, -1, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 474, -1, 476, 477, 478, + 479, -1, -1, -1, -1, -1, -1, 260, 261, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, -1, + 273, 274, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, 123, 290, 291, 292, + 293, -1, -1, 296, 297, 298, 299, -1, -1, -1, + -1, 0, -1, 306, -1, 308, -1, -1, 311, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 414, 415, 416, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, 38, + -1, 40, 41, 42, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, -1, 360, 361, 362, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, 91, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, -1, -1, -1, 123, 428, 125, -1, 431, 432, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, -1, -1, 459, 294, 461, -1, + 463, 464, 465, -1, -1, 468, 469, -1, 471, 472, + 473, -1, 309, -1, -1, -1, -1, 480, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, -1, 334, -1, -1, + -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, + -1, 348, 349, 350, 351, -1, -1, -1, -1, -1, + -1, -1, -1, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, -1, + -1, -1, -1, 380, 381, 382, 383, 384, 385, 386, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, 261, -1, 263, -1, -1, -1, -1, 268, + -1, -1, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, 281, 282, 283, 284, -1, 286, 287, -1, + -1, 290, 291, 292, 293, -1, -1, 296, 297, 298, + 299, -1, -1, -1, -1, 0, -1, 306, -1, 308, + -1, -1, 311, -1, -1, -1, -1, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, 260, + 261, -1, 263, 38, -1, 40, 41, 42, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, + -1, 360, 361, 362, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 391, -1, -1, -1, 91, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, -1, -1, -1, 123, 428, + 125, -1, 431, 432, 355, 356, 357, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, -1, 380, + 459, -1, 461, -1, 463, 464, 465, -1, -1, 468, + 469, -1, 471, 472, 473, -1, 271, -1, -1, -1, + -1, 480, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, -1, -1, 290, 291, 292, 293, -1, + -1, -1, 297, 298, -1, -1, -1, -1, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, -1, + -1, 346, -1, 474, -1, 476, 477, 478, 479, -1, + -1, -1, -1, -1, -1, 260, 261, -1, 263, -1, + 365, -1, -1, 268, -1, -1, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, -1, -1, 290, 291, 292, 293, -1, + -1, 296, 297, 298, 299, -1, -1, -1, -1, 0, + -1, 306, -1, 308, -1, -1, 311, -1, -1, -1, + -1, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, 38, -1, 40, + 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 358, -1, 360, 361, 362, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, + 91, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, + -1, -1, 123, 428, 125, -1, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, -1, -1, 459, -1, 461, -1, 463, 464, + 465, -1, -1, 468, 469, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, 480, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, 299, -1, + -1, -1, -1, 0, -1, 306, -1, 308, -1, -1, + 311, -1, -1, -1, -1, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, 38, -1, 40, 41, 42, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 358, -1, 360, + 361, 362, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, -1, 91, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, -1, -1, -1, 123, 428, 125, -1, + 431, 432, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, -1, -1, 468, 469, -1, + 471, 472, 473, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, -1, 263, -1, -1, -1, + -1, 268, -1, -1, 271, -1, 273, 274, 275, 276, + 277, 278, 279, -1, 281, 282, 283, 284, -1, 286, + 287, -1, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, 299, -1, -1, -1, -1, 0, -1, 306, + -1, 308, -1, -1, 311, -1, -1, -1, -1, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, 38, -1, 40, 41, 42, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 358, -1, 360, 361, 362, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, -1, -1, -1, 91, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + 123, 428, 125, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 480, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, 509, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, 261, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, -1, + 273, 274, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, 296, 297, 298, -1, -1, -1, -1, + -1, 0, -1, 306, -1, 308, -1, -1, 311, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, 38, + -1, 40, 41, 42, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, -1, 360, 361, 362, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, 91, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, -1, -1, -1, 123, 428, 125, -1, 431, 432, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, -1, -1, 459, -1, 461, -1, + 463, 464, 465, -1, -1, 468, 469, -1, 471, 472, + 473, -1, -1, -1, -1, -1, -1, 480, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, 261, -1, 263, -1, -1, -1, -1, 268, + -1, -1, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, 281, 282, 283, 284, -1, 286, 287, -1, + -1, 290, 291, 292, 293, -1, -1, 296, 297, 298, + -1, -1, -1, -1, -1, 0, -1, 306, -1, 308, + -1, -1, 311, -1, -1, -1, -1, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, 38, -1, -1, 41, 42, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, + -1, 360, 361, 362, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 391, -1, -1, -1, 91, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, -1, -1, -1, 123, 428, + 125, -1, 431, 432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, -1, -1, + 459, -1, 461, -1, 463, 464, 465, -1, -1, 468, + 469, -1, 471, 472, 473, -1, -1, -1, -1, -1, + -1, 480, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, 261, -1, 263, -1, + -1, -1, -1, 268, -1, -1, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, -1, -1, 290, 291, 292, 293, -1, + -1, 296, 297, 298, -1, -1, -1, -1, -1, 0, + -1, 306, -1, 308, -1, -1, 311, -1, -1, -1, + -1, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, 38, -1, -1, + 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 358, -1, 360, 361, 362, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, + 91, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, + -1, -1, 123, 428, 125, -1, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, -1, -1, 459, -1, 461, -1, 463, 464, + 465, -1, -1, 468, 469, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, 480, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, + -1, -1, -1, 0, -1, 306, -1, 308, -1, -1, + 311, -1, -1, -1, -1, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, 38, -1, -1, 41, 42, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 358, -1, 360, + 361, 362, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, -1, 91, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, -1, -1, -1, 123, 428, 125, -1, + 431, 432, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, -1, -1, 468, 469, -1, + 471, 472, 473, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, -1, 263, -1, -1, -1, + -1, 268, -1, -1, 271, -1, 273, 274, 275, 276, + 277, 278, 279, -1, 281, 282, 283, 284, -1, 286, + 287, -1, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, -1, -1, -1, -1, -1, 0, -1, 306, + -1, 308, -1, -1, 311, -1, -1, -1, -1, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, 38, -1, -1, 41, 42, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 358, -1, 360, 361, 362, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, -1, -1, -1, 91, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + 123, 428, 125, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 480, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, 509, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, 261, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, -1, + 273, 274, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, 296, 297, 298, -1, -1, -1, -1, + -1, 0, -1, 306, -1, 308, -1, -1, 311, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, 38, + -1, -1, 41, 42, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, -1, 360, 361, 362, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, 91, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, -1, -1, -1, 123, 428, 125, -1, 431, 432, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, -1, -1, 459, -1, 461, -1, + 463, 464, 465, -1, -1, 468, 469, -1, 471, 472, + 473, -1, -1, -1, -1, -1, -1, 480, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, 261, -1, 263, -1, -1, -1, -1, 268, + -1, -1, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, 281, 282, 283, 284, -1, 286, 287, -1, + -1, 290, 291, 292, 293, -1, -1, 296, 297, 298, + -1, -1, -1, -1, -1, 0, -1, 306, -1, 308, + -1, -1, 311, -1, -1, -1, -1, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, 38, -1, -1, 41, 42, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, + -1, 360, 361, 362, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 391, -1, -1, -1, 91, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, -1, -1, -1, 123, 428, + 125, -1, 431, 432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, -1, -1, + 459, -1, 461, -1, 463, 464, 465, -1, -1, 468, + 469, -1, 471, 472, 473, -1, -1, -1, -1, -1, + -1, 480, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, 261, -1, 263, -1, + -1, -1, -1, 268, -1, -1, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, -1, -1, 290, 291, 292, 293, -1, + -1, 296, 297, 298, -1, -1, -1, -1, -1, 0, + -1, 306, -1, 308, -1, -1, 311, -1, -1, -1, + -1, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, 38, -1, -1, + 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 358, -1, 360, 361, 362, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, + 91, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, + -1, -1, 123, 428, 125, -1, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, -1, -1, 459, -1, 461, -1, 463, 464, + 465, -1, -1, 468, 469, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, 480, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, + -1, -1, -1, 0, -1, 306, -1, 308, -1, -1, + 311, -1, -1, -1, -1, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, 38, -1, -1, 41, 42, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 358, -1, 360, + 361, 362, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, -1, 91, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, -1, -1, -1, 123, 428, 125, -1, + 431, 432, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, -1, -1, 468, 469, -1, + 471, 472, 473, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, -1, 263, -1, -1, -1, + -1, 268, -1, -1, 271, -1, 273, 274, 275, 276, + 277, 278, 279, -1, 281, 282, 283, 284, -1, 286, + 287, -1, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, -1, -1, -1, -1, -1, 0, -1, 306, + -1, 308, -1, -1, 311, -1, -1, -1, -1, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, 38, -1, -1, 41, 42, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 358, -1, 360, 361, 362, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, -1, -1, -1, 91, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + 123, 428, 125, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 480, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, 509, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, 261, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, -1, + 273, 274, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, 296, 297, 298, -1, -1, -1, -1, + -1, 0, -1, 306, -1, 308, -1, -1, 311, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, 38, + -1, -1, 41, 42, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, -1, 360, 361, 362, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, 91, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, -1, -1, -1, 123, 428, 125, -1, 431, 432, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, -1, -1, 459, -1, 461, -1, + 463, 464, 465, -1, -1, 468, 469, -1, 471, 472, + 473, -1, -1, -1, -1, -1, -1, 480, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, 261, -1, 263, -1, -1, -1, -1, 268, + -1, -1, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, 281, 282, 283, 284, -1, 286, 287, -1, + -1, 290, 291, 292, 293, -1, -1, 296, 297, 298, + -1, -1, -1, -1, -1, 0, -1, 306, -1, 308, + -1, -1, 311, -1, -1, -1, -1, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, 38, -1, -1, 41, 42, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, + -1, 360, 361, 362, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 391, -1, -1, -1, 91, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, -1, -1, -1, 123, 428, + 125, -1, 431, 432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, -1, -1, + 459, -1, 461, -1, 463, 464, 465, -1, -1, 468, + 469, -1, 471, 472, 473, -1, -1, -1, -1, -1, + -1, 480, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, 261, -1, 263, -1, + -1, -1, -1, 268, -1, -1, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, -1, -1, 290, 291, 292, 293, -1, + -1, 296, 297, 298, -1, -1, -1, -1, -1, 0, + -1, 306, -1, 308, -1, -1, 311, -1, -1, -1, + -1, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, 38, -1, -1, + 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 358, -1, 360, 361, 362, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, + 91, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, + -1, -1, 123, 428, 125, -1, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, -1, -1, 459, -1, 461, -1, 463, 464, + 465, -1, -1, 468, 469, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, 480, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, + -1, -1, -1, 0, -1, 306, -1, 308, -1, -1, + 311, -1, -1, -1, -1, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, 38, -1, -1, 41, 42, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 358, -1, 360, + 361, 362, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, -1, 91, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, -1, -1, -1, 123, 428, 125, -1, + 431, 432, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, -1, -1, 468, 469, -1, + 471, 472, 473, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, -1, 263, -1, -1, -1, + -1, 268, -1, -1, 271, -1, 273, 274, 275, 276, + 277, 278, 279, -1, 281, 282, 283, 284, -1, 286, + 287, -1, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, -1, -1, -1, -1, -1, 0, -1, 306, + -1, 308, -1, -1, 311, -1, -1, -1, -1, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, 38, -1, -1, 41, 42, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 358, -1, 360, 361, 362, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, -1, -1, -1, 91, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + 123, 428, 125, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 480, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, 509, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, 261, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, -1, + 273, 274, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, 296, 297, 298, -1, -1, -1, -1, + -1, 0, -1, 306, -1, 308, -1, -1, 311, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, 38, + -1, -1, 41, 42, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, -1, 360, 361, 362, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, 91, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, -1, -1, -1, 123, 428, 125, -1, 431, 432, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, -1, -1, 459, -1, 461, -1, + 463, 464, 465, -1, -1, 468, 469, -1, 471, 472, + 473, -1, -1, -1, -1, -1, -1, 480, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, 261, -1, 263, -1, -1, -1, -1, 268, + -1, -1, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, 281, 282, 283, 284, -1, 286, 287, -1, + -1, 290, 291, 292, 293, -1, -1, 296, 297, 298, + -1, -1, -1, -1, -1, 0, -1, 306, -1, 308, + -1, -1, 311, -1, -1, -1, -1, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, 38, -1, -1, 41, 42, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, + -1, 360, 361, 362, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 391, -1, -1, -1, 91, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, -1, -1, -1, 123, 428, + 125, -1, 431, 432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, -1, -1, + 459, -1, 461, -1, 463, 464, 465, -1, -1, 468, + 469, -1, 471, 472, 473, -1, -1, -1, -1, -1, + -1, 480, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, 261, -1, 263, -1, + -1, -1, -1, 268, -1, -1, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, 281, 282, 283, 284, + -1, 286, 287, -1, -1, 290, 291, 292, 293, -1, + -1, 296, 297, 298, -1, -1, -1, -1, -1, 0, + -1, 306, -1, 308, -1, -1, 311, -1, -1, -1, + -1, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 358, -1, 360, 361, 362, 59, -1, + 61, 62, -1, -1, -1, -1, -1, -1, -1, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, 391, -1, -1, -1, + -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, + -1, -1, 123, 428, 125, -1, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, -1, -1, 459, -1, 461, -1, 463, 464, + 465, -1, -1, 468, 469, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, 480, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, + 0, -1, -1, -1, -1, 306, -1, 308, -1, -1, + 311, -1, -1, -1, -1, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 294, -1, + -1, -1, -1, -1, -1, 301, -1, 303, 304, 305, + -1, -1, -1, -1, -1, -1, -1, 358, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 342, 343, 344, -1, + 391, -1, -1, -1, -1, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 123, -1, 125, -1, 428, -1, -1, + 431, 432, 388, 389, 390, -1, 392, -1, -1, 395, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, -1, -1, 468, 469, -1, + 471, 472, 473, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 260, -1, -1, 263, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 273, -1, -1, -1, 277, 278, 279, + -1, 281, 282, 283, 284, -1, 286, 287, 288, -1, + 290, 291, 292, 293, -1, -1, 296, 297, 298, -1, + -1, -1, -1, -1, -1, -1, -1, 270, 271, 272, + 0, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, 322, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, 296, 297, 298, -1, -1, -1, 339, + -1, -1, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 323, 324, 325, -1, 364, 365, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 123, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, -1, -1, 459, + -1, 461, -1, 463, 464, 465, 466, -1, 468, 469, + -1, 471, 472, 473, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, -1, 263, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, 294, -1, -1, + -1, -1, -1, -1, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 33, -1, -1, -1, 323, -1, -1, -1, + 327, -1, -1, 330, 331, -1, -1, -1, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 260, -1, -1, 263, -1, -1, 353, -1, -1, 356, + -1, -1, -1, 273, -1, -1, 363, 277, 278, 279, + -1, 281, 282, 283, 284, 372, 286, 287, 288, -1, + 290, 291, 292, 293, -1, -1, 296, 297, 298, -1, + -1, -1, -1, -1, -1, -1, -1, 270, 271, 272, + 0, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, 322, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, -1, 297, 298, -1, -1, -1, 339, + -1, -1, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 323, 324, 325, -1, 364, 365, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 123, -1, 125, -1, -1, 91, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, -1, -1, 459, + -1, 461, -1, 463, 464, 465, 466, -1, 468, 469, + 271, 471, 472, 473, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, -1, 297, 298, -1, -1, + -1, -1, -1, -1, -1, 306, -1, 308, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 323, 324, 325, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 33, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 358, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 260, -1, -1, 263, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 273, -1, -1, -1, 277, 278, 279, + -1, 281, 282, 283, 284, -1, 286, 287, 288, -1, + 290, 291, 292, 293, -1, -1, 296, 297, 298, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 271, -1, + 0, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, 322, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, -1, 297, 298, -1, -1, -1, 339, + -1, -1, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 323, 324, 325, -1, 364, 365, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 123, -1, 125, -1, -1, 91, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, -1, -1, 459, + -1, 461, -1, 463, 464, 465, 466, -1, 468, 469, + 271, 471, 472, 473, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, -1, 297, 298, -1, -1, + -1, -1, -1, -1, -1, 306, -1, 308, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 323, 324, 325, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 358, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 260, -1, -1, 263, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 273, -1, -1, -1, 277, 278, 279, + -1, 281, 282, 283, 284, -1, 286, 287, 288, -1, + 290, 291, 292, 293, -1, -1, 296, 297, 298, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 271, -1, + 0, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, 322, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, -1, 297, 298, -1, -1, -1, 339, + -1, -1, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 323, 324, 325, -1, 364, 365, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 123, -1, 125, -1, -1, 91, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, -1, -1, 459, + -1, 461, -1, 463, 464, 465, 466, -1, 468, 469, + -1, 471, 472, 473, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, 261, -1, 263, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, 294, -1, -1, + -1, -1, -1, -1, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, 323, -1, 59, -1, + 327, -1, -1, 330, 331, -1, -1, -1, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 260, -1, -1, 263, -1, -1, 353, -1, -1, 356, + -1, -1, -1, 273, -1, -1, 363, 277, 278, 279, + -1, 281, 282, 283, 284, 372, 286, 287, 288, -1, + 290, 291, 292, 293, -1, -1, 296, 297, 298, -1, + -1, -1, 123, -1, 125, -1, -1, -1, 271, 59, + -1, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, 322, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, -1, 297, 298, -1, -1, -1, 339, + -1, -1, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 323, 324, 325, -1, 364, 365, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 358, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 0, -1, -1, -1, -1, 260, + -1, -1, 263, -1, -1, -1, -1, -1, 448, 449, + 450, 451, 273, 453, 454, 455, 456, -1, -1, 459, + -1, 461, -1, 463, 464, 465, 466, -1, 468, 469, + -1, 471, 472, 473, -1, 296, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, 322, -1, -1, -1, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, + -1, -1, -1, 273, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 123, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, 322, -1, -1, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, -1, -1, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, -1, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, -1, -1, 459, -1, + 461, -1, 463, 464, 465, 466, -1, 468, 469, -1, + 471, 472, 473, -1, -1, -1, -1, -1, -1, 409, + -1, 411, 412, 413, -1, -1, -1, -1, -1, -1, + -1, -1, 59, 423, -1, -1, -1, -1, 428, -1, + -1, 431, 432, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, -1, 260, -1, -1, 263, 448, 449, + 450, 451, -1, 453, 454, 526, 527, 273, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, 473, -1, -1, -1, -1, -1, -1, + 296, -1, -1, -1, -1, -1, 123, -1, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 322, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, -1, -1, + -1, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, -1, 0, -1, + -1, -1, -1, 260, -1, -1, 263, -1, -1, -1, + -1, -1, 448, 449, 450, 451, 273, 453, 454, 455, + 456, -1, -1, 459, -1, 461, -1, 463, 464, 465, + 466, -1, 468, 469, -1, 471, 472, 473, -1, 296, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, + -1, -1, 508, 509, -1, -1, -1, -1, -1, -1, + -1, -1, 339, -1, -1, -1, -1, -1, -1, -1, + 526, 527, -1, 529, 530, 531, -1, 533, 534, 535, + 536, 537, 538, 539, 540, 541, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, -1, -1, -1, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, 463, 464, 465, 466, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, 61, -1, -1, -1, -1, -1, -1, + -1, 508, 509, -1, -1, -1, -1, -1, 260, -1, + -1, 263, -1, -1, -1, -1, -1, -1, -1, 526, + 527, 273, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, 294, 295, -1, 296, -1, -1, 300, -1, 302, + -1, -1, -1, -1, -1, 123, 309, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 322, -1, -1, 326, 327, 42, 329, 330, 331, 332, + 333, -1, -1, -1, -1, 338, -1, 339, 341, -1, + -1, -1, -1, -1, 347, -1, -1, -1, -1, 352, + -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 366, 367, 368, 369, 370, 371, 372, + 373, -1, -1, -1, -1, -1, 379, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, + -1, -1, -1, -1, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, -1, -1, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, -1, -1, 0, -1, -1, -1, -1, -1, -1, + -1, -1, 260, 261, -1, 263, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 273, 274, 459, -1, 461, + -1, 463, 464, 465, 466, -1, 468, 469, -1, 471, + 472, 473, -1, 40, 41, -1, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, 311, 61, -1, -1, -1, 316, -1, + -1, -1, -1, -1, 322, -1, 508, 509, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 526, 527, -1, 529, 530, 531, + -1, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 257, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 123, -1, 125, 276, + 277, -1, 279, 280, 281, 282, 283, 284, -1, 286, + 287, -1, 289, 290, 291, 292, 293, -1, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, -1, -1, -1, 417, + 418, 419, 420, 421, 422, 423, -1, -1, -1, -1, + 428, -1, -1, 431, 432, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, -1, + -1, 459, -1, 461, -1, 463, 464, 465, -1, -1, + 468, 469, -1, 471, 472, 473, -1, 40, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, 61, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 508, 509, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 273, 274, 526, 527, + -1, 529, 530, 531, -1, 533, 534, 535, 536, 537, + 538, 539, 540, 541, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 123, -1, 125, -1, 311, -1, -1, -1, -1, 316, + -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 484, 485, -1, + 487, 488, 489, -1, 491, 492, -1, -1, 495, 496, + -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, -1, -1, 59, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + -1, 428, -1, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 273, 274, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 311, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 322, + -1, 508, 509, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, -1, -1, -1, 417, 418, 419, 420, 421, 422, + 423, -1, -1, -1, -1, 428, -1, -1, 431, 432, + 260, 59, -1, 263, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 273, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, -1, -1, 459, -1, 461, -1, + 463, 464, 465, -1, -1, 468, 469, -1, 471, 472, + 473, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 322, -1, -1, 123, -1, 125, -1, -1, + -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 59, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, -1, -1, 459, + -1, 461, 260, -1, 464, 263, -1, -1, -1, -1, + -1, 471, 472, 473, -1, 273, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, + 125, -1, -1, -1, -1, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 322, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, -1, -1, 59, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 260, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 273, 59, + 448, 449, 450, 451, -1, 453, 454, 455, 456, -1, + -1, 459, -1, 461, -1, -1, 464, -1, -1, -1, + -1, -1, -1, 471, 472, 473, -1, -1, -1, -1, + -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 508, 509, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 526, 527, + -1, 529, 530, 531, -1, 533, 534, 535, 536, 537, + 538, 539, 540, 541, -1, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, + -1, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, 260, + -1, -1, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 273, -1, 459, -1, 461, -1, -1, 464, + -1, -1, -1, -1, -1, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 273, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, + -1, 322, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, -1, -1, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, -1, -1, 59, -1, -1, -1, -1, 409, + 410, 411, 412, 413, -1, -1, -1, 448, 449, 450, + 451, 260, 453, 454, 455, 456, -1, -1, 459, -1, + 461, 431, 432, 464, 273, -1, -1, -1, -1, -1, + 471, 472, 473, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, -1, -1, 455, 456, -1, -1, -1, + -1, 461, -1, -1, 464, -1, -1, -1, 123, -1, + 125, 471, 472, -1, -1, -1, -1, 508, 509, -1, + -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, -1, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, -1, -1, 59, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 273, -1, + 459, -1, 461, -1, -1, 464, -1, -1, -1, -1, + -1, -1, 471, 472, 473, -1, -1, -1, -1, -1, + -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 322, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, + -1, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 260, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 273, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, -1, -1, 459, -1, 461, -1, -1, 464, + -1, -1, -1, -1, -1, -1, 471, 472, 473, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 322, -1, -1, 123, -1, 125, -1, -1, -1, -1, + -1, -1, -1, 508, 509, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, -1, -1, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, -1, 59, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, -1, -1, 459, -1, 461, + 260, -1, 464, 263, -1, -1, -1, -1, -1, 471, + 472, 473, -1, 273, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 123, -1, 125, -1, + -1, -1, -1, -1, -1, -1, 508, 509, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 322, -1, 526, 527, -1, 529, 530, 531, + -1, 533, 534, 535, 536, 537, 538, 539, 540, 541, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 0, -1, -1, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, 423, -1, -1, -1, -1, 428, -1, + -1, 431, 432, 260, -1, -1, 263, 44, -1, -1, + -1, -1, -1, -1, -1, -1, 273, -1, 448, 449, + 450, 451, 59, 453, 454, 455, 456, -1, -1, 459, + -1, 461, -1, 463, 464, 465, -1, -1, 468, 469, + -1, 471, 472, 473, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, 123, -1, 125, -1, + -1, -1, -1, -1, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, -1, -1, -1, + 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, + -1, 428, -1, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, 463, 464, 465, -1, + -1, 468, 469, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 260, -1, -1, 263, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 273, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, 509, 123, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, 0, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 322, -1, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, -1, -1, -1, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, + 59, -1, 61, -1, -1, 306, -1, 308, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 323, 324, 325, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, -1, -1, -1, + 417, 418, 419, 420, 421, 422, 423, 358, 359, -1, + 260, 428, -1, 263, 431, 432, 125, -1, -1, -1, + -1, -1, -1, 273, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + -1, -1, 459, -1, 461, -1, -1, 464, -1, -1, + -1, -1, 0, -1, 471, 472, 473, -1, -1, -1, + -1, -1, -1, 414, 415, 416, -1, -1, -1, -1, + -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, + -1, 508, 509, -1, -1, -1, -1, -1, -1, -1, + 451, -1, -1, -1, -1, -1, -1, -1, -1, 526, + 527, 59, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, -1, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 273, -1, -1, 417, 418, 419, + 420, 421, 422, 423, -1, -1, -1, 125, 428, -1, + -1, 431, 432, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, -1, 125, 459, + -1, 461, -1, 322, 464, -1, -1, -1, -1, -1, + -1, 471, 472, 473, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + 409, 410, 411, 412, 413, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 423, -1, -1, -1, -1, 428, + 125, -1, 431, 432, -1, 273, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, -1, -1, + -1, -1, 461, -1, -1, 464, 273, -1, -1, -1, + -1, -1, 471, 472, 473, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, + 509, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 526, 527, -1, + 529, 530, 531, -1, 533, 534, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, 409, 410, 411, 412, 413, -1, -1, 273, -1, + 0, -1, -1, -1, -1, 423, -1, -1, -1, -1, + 428, -1, -1, 431, 432, -1, -1, -1, -1, -1, + -1, -1, 409, 410, 411, 412, 413, -1, 59, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, -1, + -1, -1, -1, 461, 431, 432, 464, -1, -1, -1, + -1, -1, -1, 471, 472, 473, -1, -1, -1, 59, + -1, 448, 449, 450, 451, -1, -1, -1, 455, 456, + -1, -1, -1, -1, 461, -1, -1, 464, -1, -1, + -1, -1, -1, -1, 471, 472, -1, -1, -1, -1, + 508, 509, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 526, 527, + -1, 529, 530, 531, -1, 533, 534, 535, 536, 537, + 538, 539, 540, 541, -1, 125, -1, -1, -1, -1, + -1, 273, -1, -1, 409, 410, 411, 412, 413, 526, + 527, -1, 529, 530, 531, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 0, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, -1, -1, + 455, 456, -1, -1, -1, -1, 461, -1, -1, 464, + -1, -1, -1, -1, -1, -1, 471, 472, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 273, -1, -1, -1, -1, -1, -1, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 409, 410, 411, + 412, 413, -1, 273, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, 431, + 432, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 448, 449, 450, 451, + -1, -1, -1, 455, 456, -1, -1, -1, -1, 461, + -1, -1, 464, -1, -1, -1, -1, 0, -1, 471, + 472, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 409, 410, + 411, 412, 413, -1, 526, 527, 59, 529, 530, 531, + -1, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 431, 432, -1, -1, -1, -1, -1, -1, -1, 409, + 410, 411, 412, 413, -1, -1, -1, 448, 449, 450, + 451, 125, -1, -1, 455, 456, -1, -1, 273, -1, + 461, 431, 432, 464, -1, -1, -1, -1, 0, -1, + 471, 472, -1, -1, -1, -1, -1, -1, 448, 449, + 450, 451, 125, -1, -1, 455, 456, -1, -1, -1, + -1, 461, -1, -1, 464, -1, -1, -1, -1, -1, + -1, 471, 472, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 526, 527, 59, 529, 530, + 531, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 526, 527, -1, 529, + 530, 531, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, 409, 410, 411, 412, 413, 273, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 431, 432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 273, -1, -1, 448, 449, 450, 451, -1, -1, -1, + 455, 456, -1, -1, -1, -1, 461, -1, -1, 464, + -1, -1, -1, -1, -1, -1, 471, 472, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 59, 60, -1, + -1, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, -1, -1, -1, + -1, -1, -1, -1, 125, 409, 410, 411, 412, 413, + -1, 273, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 431, 432, -1, + -1, -1, -1, -1, -1, -1, 409, 410, 411, 412, + 413, 123, -1, 125, 448, 449, 450, 451, -1, -1, + -1, 455, 456, -1, -1, -1, -1, 461, 431, 432, + 464, -1, -1, -1, -1, -1, -1, 471, 472, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + -1, -1, 455, 456, -1, -1, -1, -1, 461, -1, + -1, 464, -1, -1, -1, -1, -1, -1, 471, 472, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 526, 527, -1, 529, 530, 531, -1, 533, + 534, 535, 536, 537, 538, 539, 540, 541, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 409, 410, 411, + 412, 413, 273, 526, 527, -1, 529, 530, 531, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 431, + 432, -1, -1, -1, 41, -1, -1, -1, 260, -1, + 47, 263, -1, -1, -1, -1, 448, 449, 450, 451, + -1, 273, 59, 455, 456, -1, -1, -1, -1, 461, + -1, 322, 464, -1, -1, -1, -1, -1, 271, 471, + 472, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, + 293, -1, -1, -1, 297, 298, 33, -1, -1, -1, + -1, -1, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 123, -1, 125, -1, + 323, 324, 325, -1, 526, 527, -1, 529, 530, 531, + -1, 533, 534, 535, 536, 537, 538, 539, 540, 541, + -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, + 411, 412, 413, -1, 91, 358, -1, -1, -1, -1, + -1, -1, 423, -1, -1, -1, -1, 428, -1, -1, + 431, 432, -1, -1, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 448, 449, 450, + 451, 413, 453, 454, -1, 417, 418, 419, 420, 421, + 422, 41, -1, -1, -1, -1, -1, -1, -1, 431, + 432, -1, 473, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, 448, 449, 450, 451, + -1, -1, -1, -1, -1, -1, -1, 459, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 508, 509, -1, + -1, 473, -1, 260, -1, -1, 263, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 273, 274, -1, -1, + -1, -1, -1, -1, 535, 536, 537, 538, 539, 540, + 541, -1, -1, 123, -1, 125, 508, 509, 510, -1, + 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 535, 536, 537, 538, 539, 540, 541, + -1, -1, -1, 260, 261, -1, 263, -1, -1, -1, + -1, 268, -1, -1, 271, -1, -1, -1, 275, 276, + 277, 278, 279, -1, 281, 282, 283, 284, -1, 286, + 287, -1, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, -1, -1, -1, -1, 123, -1, 125, 306, + -1, 308, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 391, 59, 323, 324, 325, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, -1, -1, -1, -1, 413, -1, -1, -1, + 417, 418, 419, 420, 421, 422, -1, -1, -1, -1, + 260, 358, 359, 263, 431, 432, -1, -1, -1, -1, + -1, -1, -1, 273, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, -1, -1, -1, -1, 123, + -1, 125, 459, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 473, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 414, 415, 416, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 508, 509, 260, -1, -1, 263, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 273, 274, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 535, 536, + 537, 538, 539, 540, 541, -1, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 391, -1, -1, -1, -1, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, + -1, -1, -1, 413, -1, -1, -1, 417, 418, 419, + 420, 421, 422, -1, -1, -1, 260, -1, -1, 263, + -1, 431, 432, -1, -1, -1, -1, -1, -1, 273, + 123, -1, 125, -1, -1, -1, -1, -1, 448, 449, + 450, 451, -1, -1, -1, -1, -1, -1, -1, 459, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 473, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, -1, -1, -1, -1, 413, -1, -1, -1, + 417, 418, 419, 420, 421, 422, -1, -1, 508, 509, + -1, -1, -1, -1, 431, 432, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 448, 449, 450, 451, 535, 536, 537, 538, 539, + 540, 541, 459, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 473, -1, -1, -1, + -1, -1, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, 260, -1, 413, + 263, -1, -1, 417, 418, 419, 420, 421, 422, -1, + 273, 508, 509, -1, -1, -1, -1, 431, 432, -1, + -1, -1, -1, -1, -1, -1, -1, 123, -1, 125, + -1, -1, -1, -1, 448, 449, 450, 451, 535, 536, + 537, 538, 539, 540, 541, 459, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 473, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 508, 509, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, 535, 536, 537, 538, 539, 540, 541, -1, 59, + -1, -1, -1, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, -1, -1, -1, -1, + 413, -1, -1, -1, 417, 418, 419, 420, 421, 422, + -1, -1, -1, -1, 260, -1, -1, 263, 431, 432, + -1, -1, -1, -1, -1, -1, -1, 273, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, -1, + -1, -1, -1, 123, -1, 125, 459, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 473, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 508, 509, 260, -1, -1, + 263, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 273, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 535, 536, 537, 538, 539, 540, 541, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, -1, -1, 413, -1, -1, + -1, 417, 418, 419, 420, 421, 422, -1, -1, -1, + 260, -1, -1, 263, -1, 431, 432, -1, -1, -1, + -1, -1, -1, 273, 123, -1, 125, -1, -1, -1, + -1, -1, 448, 449, 450, 451, -1, -1, -1, -1, + -1, -1, -1, 459, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 473, -1, -1, + -1, -1, -1, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, -1, -1, -1, -1, + 413, -1, -1, -1, 417, 418, 419, 420, 421, 422, + -1, -1, 508, 509, -1, -1, -1, -1, 431, 432, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 448, 449, 450, 451, 535, + 536, 537, 538, 539, 540, 541, 459, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 473, -1, -1, -1, -1, -1, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, + -1, 260, -1, 413, 263, -1, -1, 417, 418, 419, + 420, 421, 422, -1, 273, 508, 509, -1, -1, -1, + -1, 431, 432, -1, -1, -1, -1, -1, -1, -1, + -1, 123, -1, 125, -1, -1, -1, -1, 448, 449, + 450, 451, 535, 536, 537, 538, 539, 540, 541, 459, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 473, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 508, 509, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, 535, 536, 537, 538, 539, + 540, 541, -1, -1, -1, -1, -1, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 125, -1, -1, -1, 413, -1, -1, -1, 417, 418, + 419, 420, 421, 422, -1, -1, -1, -1, 260, -1, + -1, 263, 431, 432, -1, -1, -1, -1, -1, -1, + -1, 273, -1, -1, -1, -1, -1, -1, -1, 448, + 449, 450, 451, -1, -1, -1, -1, -1, -1, -1, + 459, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 473, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, + 509, 260, -1, -1, 263, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 273, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 535, 536, 537, 538, + 539, 540, 541, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 273, -1, + -1, -1, -1, -1, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, -1, -1, + -1, 413, -1, -1, -1, 417, 418, 419, 420, 421, + 422, -1, -1, -1, -1, -1, -1, -1, -1, 431, + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, 448, 449, 450, 451, + -1, -1, -1, -1, -1, -1, -1, 459, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 473, -1, -1, -1, -1, -1, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, -1, -1, -1, 413, -1, -1, -1, 417, 418, + 419, 420, 421, 422, -1, -1, 508, 509, -1, -1, + -1, -1, 431, 432, -1, -1, -1, -1, -1, -1, + -1, 273, -1, -1, 409, 410, 411, 412, 413, 448, + 449, 450, 451, 535, 536, 537, 538, 539, 540, 541, + 459, -1, -1, -1, -1, -1, 431, 432, -1, -1, + -1, -1, -1, -1, 473, -1, -1, -1, -1, -1, + -1, -1, -1, 448, 449, 450, 451, -1, -1, -1, + 455, 456, -1, -1, -1, -1, 461, -1, -1, 464, + -1, -1, -1, -1, -1, -1, 471, 472, -1, 508, + 509, 273, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 535, 536, 537, 538, + 539, 540, 541, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 322, 526, 527, -1, 529, 530, 531, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 409, 410, 411, + 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 431, + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 448, 449, 450, 451, + -1, -1, -1, 455, 456, -1, -1, -1, -1, 461, + -1, -1, 464, -1, -1, -1, -1, -1, -1, 471, + 472, -1, -1, -1, -1, -1, -1, 409, -1, 411, + 412, 413, 33, -1, -1, -1, -1, -1, -1, -1, + -1, 423, -1, -1, -1, -1, 428, -1, -1, 431, + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 448, 449, 450, 451, + -1, 453, 454, -1, 526, 527, -1, 529, 530, 531, + -1, 533, 534, 535, 536, 537, 538, 539, 540, 541, + -1, 473, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 508, 509, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 535, 536, 537, 538, 539, 540, 541, + -1, 271, -1, -1, -1, 275, 276, 277, 278, 279, + 33, 281, 282, 283, 284, 38, 286, 287, -1, 42, + 290, 291, 292, 293, 294, -1, -1, 297, 298, -1, + -1, -1, -1, -1, -1, -1, 306, 60, 308, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 323, 324, 325, -1, 327, -1, 329, + 330, 331, 332, -1, -1, -1, -1, -1, 91, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 358, -1, + -1, -1, -1, -1, -1, -1, 366, 367, 368, 369, + -1, -1, 372, -1, -1, -1, 376, 377, 378, -1, + 271, -1, -1, -1, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, 294, -1, -1, 297, 298, -1, -1, + -1, -1, -1, -1, -1, 306, -1, 308, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 323, 324, 325, -1, 327, 33, 329, 330, + 331, 332, 38, -1, -1, -1, 42, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 60, -1, -1, 358, -1, -1, + -1, -1, -1, -1, -1, 366, 367, 368, 369, -1, + 480, 372, -1, -1, -1, 376, 377, 378, -1, -1, + -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, 261, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, -1, + -1, -1, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, -1, 286, 287, -1, -1, 290, 291, 292, + 293, -1, 33, 296, 297, 298, -1, 38, -1, -1, + -1, 42, -1, 306, -1, 308, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, + 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 91, 33, -1, -1, -1, 358, 38, 360, 361, 362, + 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 374, 375, -1, -1, -1, -1, -1, 60, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, + -1, 414, 415, 416, 260, 261, -1, 263, -1, -1, + -1, -1, 268, -1, -1, 271, -1, -1, -1, 275, + 276, 277, 278, 279, -1, 281, 282, 283, 284, -1, + 286, 287, -1, -1, 290, 291, 292, 293, -1, -1, + 296, 297, 298, -1, -1, 33, -1, -1, -1, -1, + 306, -1, 308, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 323, 324, 325, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 358, 91, 360, 361, 362, -1, -1, 260, + 261, -1, 263, -1, -1, -1, -1, 268, 374, 375, + 271, -1, -1, 33, 275, 276, 277, 278, 279, -1, + 281, 282, 283, 284, -1, 286, 287, -1, -1, 290, + 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, + -1, -1, -1, -1, -1, 306, -1, 308, 414, 415, + 416, -1, -1, -1, -1, -1, -1, -1, 260, 261, + -1, 263, 323, 324, 325, -1, 268, -1, -1, 271, + -1, 91, -1, 275, 276, 277, 278, 279, -1, 281, + 282, 283, 284, -1, 286, 287, -1, -1, 290, 291, + 292, 293, -1, -1, 296, 297, 298, 358, -1, 360, + 361, 362, -1, -1, 306, -1, 308, -1, -1, 33, + -1, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, 323, 324, 325, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 414, 415, 416, 358, -1, 360, 361, + 362, -1, 260, 261, -1, 263, -1, 91, -1, -1, + 268, -1, -1, 271, -1, -1, -1, 275, 276, 277, + 278, 279, -1, 281, 282, 283, 284, 33, 286, 287, + -1, -1, 290, 291, 292, 293, -1, -1, 296, 297, + 298, -1, -1, -1, -1, -1, -1, -1, 306, -1, + 308, -1, 414, 415, 416, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 323, 324, 325, -1, 327, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 260, 261, -1, 263, -1, 91, -1, -1, 268, -1, + -1, 271, -1, -1, -1, 275, 276, 277, 278, 279, + 358, 281, 282, 283, 284, -1, 286, 287, -1, -1, + 290, 291, 292, 293, 372, 33, 296, 297, 298, -1, + -1, -1, -1, -1, -1, -1, 306, -1, 308, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 323, 324, 325, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 414, 415, 416, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 91, -1, -1, 260, 261, 358, 263, + -1, -1, -1, -1, 268, -1, -1, 271, -1, -1, + -1, 275, 276, 277, 278, 279, -1, 281, 282, 283, + 284, -1, 286, 287, -1, -1, 290, 291, 292, 293, + -1, -1, 296, 297, 298, -1, -1, -1, -1, -1, + -1, -1, 306, -1, 308, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 414, 415, 416, -1, -1, 323, + 324, 325, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 260, 261, -1, 263, -1, -1, + -1, -1, 268, 33, 123, 271, -1, -1, -1, 275, + 276, 277, 278, 279, 358, 281, 282, 283, 284, -1, + 286, 287, -1, -1, 290, 291, 292, 293, -1, -1, + 296, 297, 298, -1, -1, -1, -1, -1, -1, -1, + 306, -1, 308, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 323, 324, 325, + -1, 91, -1, -1, -1, 33, -1, -1, -1, -1, + 414, 415, 416, 41, -1, -1, -1, -1, -1, -1, + -1, -1, 260, 261, -1, 263, -1, -1, -1, -1, + 268, -1, 358, 271, -1, -1, -1, 275, 276, 277, + 278, 279, -1, 281, 282, 283, 284, -1, 286, 287, + -1, -1, 290, 291, 292, 293, -1, -1, 296, 297, + 298, -1, -1, 91, -1, -1, -1, -1, 306, -1, + 308, -1, -1, -1, -1, -1, -1, -1, 257, -1, + -1, -1, -1, 33, -1, 323, 324, 325, 414, 415, + 416, -1, 271, -1, -1, -1, -1, 276, 277, -1, + 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, + 289, 290, 291, 292, 293, -1, -1, -1, -1, -1, + 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 335, -1, 337, -1, + -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 414, 415, 416, 358, + -1, 271, -1, -1, -1, 275, 276, 277, 278, 279, + -1, 281, 282, 283, 284, -1, 286, 287, -1, -1, + 290, 291, 292, 293, -1, -1, -1, 297, 298, -1, + -1, -1, 391, -1, -1, -1, 306, -1, 308, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 323, 324, 325, -1, -1, -1, -1, + -1, -1, -1, 271, -1, -1, -1, -1, 276, 277, + 278, 279, -1, 281, 282, 283, 284, -1, 286, 287, + -1, -1, 290, 291, 292, 293, -1, -1, 358, 297, + 298, -1, -1, -1, -1, -1, -1, -1, 306, -1, + 308, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 323, 324, 325, -1, -1, + -1, -1, 481, -1, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 271, -1, -1, 503, -1, 276, 277, 278, 279, + 358, 281, 282, 283, 284, -1, 286, 287, -1, -1, + 290, 291, 292, 293, -1, -1, -1, 297, 298, -1, + -1, -1, -1, -1, -1, -1, 306, 257, 308, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 271, -1, 323, 324, 325, 276, 277, -1, 279, + 280, 281, 282, 283, 284, -1, 286, 287, -1, 289, + 290, 291, 292, 293, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 358, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 335, -1, 337, -1, -1, + -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 358, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 391, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 481, -1, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + -1, -1, -1, 503, }; -YYSTATIC YYCONST yyr_t YYFARDATA YYR1[]={ - - 0, 109, 109, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 136, - 136, 36, 36, 133, 133, 133, 2, 2, 1, 1, - 1, 9, 24, 24, 23, 23, 23, 134, 134, 134, - 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 93, 93, 93, 93, 94, 94, 94, 94, 10, - 11, 73, 72, 72, 59, 61, 61, 61, 62, 62, - 62, 65, 65, 132, 132, 132, 60, 60, 60, 60, - 60, 60, 130, 130, 130, 119, 12, 12, 12, 12, - 12, 12, 118, 137, 113, 138, 139, 111, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 140, 140, 141, 141, 112, - 112, 142, 142, 56, 56, 57, 57, 69, 69, 18, - 18, 18, 18, 18, 18, 18, 19, 19, 68, 68, - 67, 67, 58, 21, 21, 22, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 116, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 4, 4, 35, 35, 16, 16, - 75, 75, 75, 75, 75, 75, 75, 7, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 8, 8, 76, - 74, 74, 74, 74, 74, 74, 144, 144, 81, 81, - 81, 145, 145, 150, 150, 150, 150, 150, 150, 150, - 150, 146, 82, 82, 82, 147, 147, 151, 151, 151, - 151, 151, 151, 151, 152, 38, 38, 34, 34, 153, - 114, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 3, 3, 3, 13, 13, 13, 13, 13, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 154, 115, 115, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 158, 159, 156, 161, 161, 160, 160, - 160, 163, 162, 162, 162, 162, 166, 166, 166, 169, - 164, 167, 168, 165, 165, 165, 117, 170, 170, 172, - 172, 172, 171, 171, 173, 173, 14, 14, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 175, 31, 31, 32, 32, 39, 39, 39, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 42, 42, 42, 43, - 43, 43, 47, 47, 46, 46, 45, 45, 44, 44, - 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, - 51, 149, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 6, - 6, 6, 6, 6, 53, 53, 54, 54, 55, 55, - 25, 25, 26, 26, 27, 27, 27, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 5, 5, 71, - 71, 71, 71, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 20, 20, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 30, 30, 29, 29, 29, 29, 29, 131, 131, - 131, 131, 131, 131, 64, 64, 64, 63, 63, 87, - 87, 84, 84, 85, 17, 17, 37, 37, 37, 37, - 37, 37, 37, 37, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 176, - 176, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 121, 121, 88, 88, 89, 89, 177, 122, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 123, 123, 178, 178, 178, 66, 66, 179, 179, 179, - 179, 179, 179, 180, 182, 181, 124, 124, 125, 125, - 183, 183, 183, 183, 126, 148, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 127, 127, 184, 184, - 184, 184, 184, 184, 184, 128, 128, 92, 92, 92, - 129, 129, 185, 185, 185, 185 }; -YYSTATIC YYCONST yyr_t YYFARDATA YYR2[]={ - - 0, 0, 2, 4, 4, 3, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 1, 1, 1, 2, - 2, 3, 2, 2, 1, 1, 1, 4, 1, 0, - 2, 1, 3, 2, 4, 6, 1, 1, 1, 1, - 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, - 4, 4, 2, 3, 2, 2, 2, 1, 1, 2, - 1, 2, 4, 6, 3, 5, 7, 9, 3, 4, - 7, 1, 1, 1, 2, 0, 2, 2, 0, 6, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 2, 3, 1, 2, 3, 7, 0, 2, 2, 2, - 2, 2, 3, 3, 2, 1, 4, 3, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, - 3, 2, 2, 2, 5, 0, 2, 0, 2, 0, - 2, 3, 1, 0, 1, 1, 3, 0, 3, 1, - 1, 1, 1, 1, 1, 4, 0, 2, 4, 3, - 0, 2, 3, 0, 1, 5, 3, 4, 4, 4, - 1, 1, 1, 1, 1, 2, 2, 4, 13, 22, - 1, 1, 5, 3, 7, 5, 4, 7, 0, 2, - 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, - 2, 2, 2, 5, 0, 2, 0, 2, 0, 3, - 9, 9, 7, 7, 1, 1, 1, 2, 2, 1, - 4, 0, 1, 1, 2, 2, 2, 2, 1, 4, - 2, 5, 3, 2, 2, 1, 4, 3, 0, 2, - 2, 0, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 9, 0, 2, 2, 0, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 0, 4, 1, 3, 1, - 13, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 5, 8, 6, 5, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 4, 4, 4, 5, - 1, 1, 1, 0, 4, 4, 4, 4, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 5, 1, 0, 2, 2, 1, 2, - 4, 5, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 4, 6, 4, 4, 11, 1, 5, 3, - 7, 5, 5, 3, 1, 2, 2, 1, 2, 4, - 4, 1, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 1, 1, 1, 4, 4, 2, 4, 2, 0, - 1, 1, 3, 1, 3, 1, 0, 3, 5, 4, - 3, 5, 5, 5, 5, 5, 5, 2, 2, 2, - 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, - 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, - 4, 3, 2, 0, 1, 1, 2, 1, 1, 1, - 1, 4, 4, 5, 4, 4, 4, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, - 8, 7, 7, 7, 7, 7, 0, 2, 2, 0, - 2, 2, 0, 2, 0, 2, 0, 2, 0, 2, - 0, 2, 0, 2, 2, 0, 2, 3, 2, 0, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 5, 3, 2, - 2, 2, 2, 2, 5, 4, 6, 2, 4, 0, - 3, 3, 1, 1, 0, 3, 0, 1, 1, 3, - 0, 1, 1, 3, 1, 3, 4, 4, 4, 4, - 5, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 3, 4, 1, 0, 10, 6, 5, 6, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 1, 2, 3, - 4, 6, 5, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 2, 2, 4, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 1, 0, 5, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 3, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 3, 2, 3, 4, 2, 2, 2, 5, 5, - 7, 4, 3, 2, 3, 2, 1, 1, 2, 3, - 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 3, 0, 1, 1, 3, 2, 6, 7, - 3, 3, 3, 6, 0, 1, 3, 5, 6, 4, - 4, 1, 3, 3, 1, 1, 1, 1, 4, 1, - 6, 6, 6, 4, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 2, 5, 4, 7, 6, 7, 6, 9, - 8, 3, 8, 4, 0, 2, 0, 1, 3, 3, - 0, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 0, 2, 3, 1, 1, 1, 1, 3, 8, 2, - 3, 1, 1, 3, 3, 3, 4, 6, 0, 2, - 3, 1, 3, 1, 4, 3, 0, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 0, 2, 2, 3, - 3, 4, 2, 1, 1, 3, 5, 0, 2, 2, - 0, 2, 4, 3, 1, 1 }; -YYSTATIC YYCONST short YYFARDATA YYCHK[]={ - --1000,-109,-110,-111,-113,-114,-116,-117,-118,-119, --120,-121,-122,-124,-126,-128,-130,-131,-132, 527, - 528, 462, 530, 531,-133,-134,-135, 534, 535,-139, - 411,-152, 413,-170,-137, 457,-176, 465, 410, 472, - 473, 432, -87, 433, -93, -94, 273, 451, 532, 536, - 537, 538, 539, 540, 541, 542, 59,-138, 412, 414, - 456, 449, 450, 452, -10, -11, 123, 123,-115, 123, - 123, 123, 123, -9, 264, -9, 529, -88, -24, 265, - 264, -24, 123,-140, 316, -1, -2, 261, 260, 263, - -78, -16, 91,-171, 123,-174, 278, 38,-175, 286, - 287, 284, 283, 282, 281, 288, -31, -32, 267, 91, - -9, -90, 471, 471, -92, -1, 471, -86, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, -31, -86, 263, -28, -70, -74, -93, - -94, 306, 297, 324, 325,-149, 33, 309, 276, 326, - -52, 275, 91, -5, -76, 268, 415, 416, 417, 360, - 359, 278, 298, 277, 281, 282, 283, 284, 286, 287, - 279, 290, 291, 292, 293, 271, -1, 296, -1, -1, - -1, -1, 262, -77,-172, 320, 381, 61, -73, 40, - -75, -7, -76, 269, 272, 327, 342, -8, 295, 300, - 302, 310, -31, -31,-112,-109, 125,-155, 418,-156, - 420,-154, 422, 423,-117,-157, -2,-131,-120,-133, --132,-135, 474, 460, 510,-158, 509,-160, 421, -95, - -96, -97, -98, -99,-108,-100,-101,-102,-103,-104, --105,-106,-107,-159,-163, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 123, 419, --123,-125,-127,-129, -9, -1, 463,-136, -70, -76, --141, 317, -71, -70, 91, -28,-149, 46, -7, 330, - 331, 332, 333, 334, 328, 348, 355, 339, 367, 368, - 369, 370, 371, 372, 373, 353, 380, 294, 374, -79, - -9,-173,-174, 42, 40, -31, 40, -14, 91, 40, - -14, 40, -14, 40, -14, 40, -14, 40, -14, 40, - 41, 267, -9, 263, 58, 44, 262, -1, 356, 357, - 358, 475, 381, 477, 478, 479, 480, -90, -91, -1, - 331, 332, -1, -71, 41, -36, 61, 288, 262, 44, - 392, 91, 38, 42, 361, 362, 363, 60, 392, 392, - 392, 392, -70, 306, -70, -75, -7, 33, -9, -1, - 280, 279, 289, -28, -1, -76, 42, 473, 47, -28, - 270, 272, 281, 282, 283, 284, 40, -36, -1, 331, - 332, 324, 347, 336, 337, 339, 340, 341, 342, 343, - 344, 345, 346, 364, 357, 338, 354, 328, 373, 294, - -2, 40, 61, -72, -71, -74, -28, -7, -7, 40, - 301, 303, 304, 305, 41, 41, 125,-143,-114,-111, --144,-146,-116,-117,-131,-120,-132, 454, 455,-148, - 510,-133,-135, 509, 323, 424, 429, 474, 410, 125, - -9, -9, 40, 453, 58, 91, -9, -71, 359, 366, - 543, 91,-161,-162,-164,-166,-167,-168, 313,-169, - 311, 315, 314, -9, -2, -9, -24, 40, -23, -24, - 266, 286, 287, -31, -9, -2, -75, -28, -76, 270, - 272, -71, -36, 343,-175, -7, -72, 40,-115,-158, - -2, -9, 125,-178, 464,-131,-179,-180, 469, 470, --181,-132,-135, 466, 125,-183,-177,-179,-182, 340, - 464, 467, 125,-184, 462, 410, 465, 296,-132,-135, - 125,-185, 462, 465,-132,-135, -89, 422, 125,-136, --142, -71, -1, 473, -7, -1, -13, 40, 40, -28, - 330, 331, 332, 333, 379, 373, 328, 481, 367, 368, - 369, 370, 377, 378, 294, 93, 125, 44, 40, -2, - 41, -23, -9, -23, -24, -9, -9, -9, 93, -9, - -9, 476, -1, -1, 332, 331, 329, 338, 392, 40, - 61, 43, 123, 40, 40, 263, -1, 93, -30, -29, - 275, -9, 40, 40, -54, -55, -28, -1, -1, -1, - -1, -70, -28, -9, -1, 280, 93, 93, 93, -1, - -1, -71, -1, 91, -9, -69, 60, 331, 332, 333, - 367, 368, 369, 40, 61, -36, 123, 40, 41, -71, - -3, 375, 376, -1, -9,-115, 123, 123, 123, -9, - -9, 123, -71, 359, 366, 543, 366, -81, -82, -91, - -25, -26, -27, 275, -13, 40, -9, 58, 274, -7, - 91, -1, 91, -1, -9,-161,-165,-158, 312,-165, --165,-165, -71,-158, -2, -9, 40, 40, 41, -71, - -1, 40, -31, -28, -6, -2, -9, 125, 318, 318, - 468, -31, -66, -9, 42, -36, 61, -31, 61, -31, - -31, 61, 61, -1, 471, -9, 471, 40, -1, 471, --177, 44, 93, -1, -28, -28, 91, -9, -36, -83, - -1, 40, 40,-173, -36, 41, 41, 93, 41, 41, - 41, 41, 41, -12, 263, 44, 58, 392, 331, 332, - 333, 367, 368, 369, -1, -84, -85, -36, 123, 262, - -64, -63, -71, 306, 44, 93, 44, 275, -71, -71, - 62, 44, 42, -5, -5, -5, 93, 274, 41, -68, - -19, -18, 43, 45, 306, 325, 307, 375, 294, -9, - -59, -61, -73, 274, -53, -22, 60, 41, 125,-112, --145,-147,-127, 274, -7, 91, -1, 91, -1, -71, - -71, -1, 373, 328, -7, 373, 328, -1, 41, 44, - -28, -25, 93, -9, -3, -1, -28, -9, -9, 44, - 93, -2, -9, -9, -24, 274, -36, 41, 40, 41, - 44, 44, -2, -9, -9, 41, 58, 40, 41, 40, - 41, 41, 40, 40, -5, -1, -9, 319, -1, -31, - -71, 93, -38, 481, 506, 507, 508, -9, 41, 392, - -83, 41, 389, 343, 344, 345, 390, 391, 301, 303, - 304, 305, 393, 396, 294, -4, 319, -34, -33,-153, - 482, 484, 485, 486, 487, 276, 277, 281, 282, 283, - 284, 286, 287, 257, 279, 290, 291, 292, 293, 488, - 489, 490, 492, 493, 494, 495, 496, 497, 498, 336, - 499, 280, 289, 338, 500, 343, 491, 359, 392, 504, - 271, 123, -9, 41, -14, -14, -14, -14, -14, -14, - 319, 283, 284, 458, 459, 461, -9, -9, -1, 41, - 44, 61, -59, 125, 44, 61, 263, 263, -29, -9, - 41, 41, -28, 40, -5, -1, 62, -58, -1, 40, - -19, 40, 41, 125, -62, -40,-135, -41, 298, 366, - 297, 286, 287, 284, 283, 282, 281, 293, 292, 291, - 290, 279, 278, 277,-175, 61, -3, 40, 40, 91, - -54, 125, 125,-150, 425, 426, 427, 428,-120,-132, --133,-135, 125,-151, 430, 431, 428,-132,-120,-133, --135, 125, -3, -28, -9, -9, 44, -93, 452, -1, - -28, -27, -38, 41, 392, -71, 93, 93, -71, -35, - 61, 318, 318, 41, 41, -1, 41, -25, -6, -6, - -66, 41, -9, 41, -3, 40, 93, 93, 93, 93, - -36, 41, 58, 58, 40, -35, -2, 41, 42, 91, - -32, 40, 483, 503, 277, 281, 282, 283, 284, 280, - -20, 40, -20, -20, -15, 512, 485, 486, 276, 277, - 281, 282, 283, 284, 286, 287, 279, 290, 291, 292, - 293, 42, 488, 489, 490, 492, 493, 496, 497, 499, - 280, 289, 257, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, 523, 524, 525, 498, 490, 502, 41, - -2, 263, 263, 44, -84, -37, -17, -9, 283, -36, - -70, 321, 322, 125, -64, 123, 61, -25, -1, -67, - 44, -56, -57, -71, -9, -65,-135, 360, 365, 40, - 91, 40, 91, 40, 91, 40, 91, 40, 91, 40, - 91, 40, 91, 40, 91, 40, 91, 40, 91, 40, - 91, 40, 91, 40, 91, 284, 283, 282, 281, 40, - 91, 40, 91, -31, -36, 123, 40, -53, -22, -25, - -25, -9, 62, -75, -75, -75, -75, -75, -75, -75, - 511, -71, 93, 93, -71, -1, -2, -2, 274, 44, - -39, -41, -36, 299, 286, 287, 284, 283, 282, 281, - 279, 293, 292, 291, 290, 278, 277, -2, -9, 41, - 58, -89, -69, -34, -83, 394, 395, 394, 395, -9, - 93, -9, 43, 125, -36, 91, 91, 505, 44, 91, - 526, 38, 281, 282, 283, 284, 280, -9, 40, 40, - -62, 123, 41, -67, -68, 41, 44, 41, -60, -52, - 366, 297, 347, 299, 263, -9, 306, -70, 299, -9, - -40, -9, -23, -9, -9, -23, -24, -9, -24, -9, - -9, -9, -9, -9, -9, -9, -24, -9, -9, -9, - -9, -9, -9, -9, 40, 91, 40, 91, 40, 91, - 40, 91, -9, -9, -17, -9, 41, -59, 40, 40, - 41, 41, 93, -7, 274, 44, 40, -3, -71, 284, - 283, 282, 281, -66, 40, 41, 41, 41, 93, 43, - -9, 44, -9, -9, 61, -36, 93, 263, -9, 281, - 282, 283, -9, 125, -62, -71, -1, 91, 306, -70, - 41, 41, 93, 263, 41, 41, 93, 41, 93, 41, - 41, 93, 41, 41, 93, 41, 93, 41, 93, 41, - 93, 41, 93, 41, 93, 41, 93, 41, 93, 41, - 93, -24, -9, -9, -9, -9, -9, -9, -9, 41, - 93, 41, 93, 125, -25, -25, 62, -28, -3, -71, - -25, -21, -22, 60, 58, -25, -9, 93, -36, 93, - 93, -9, 41, 58, 58, 58, 41, 125, 61, 93, - 263, 40, 41, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 41, 93, 41, 93, 41, - 93, 41, 93, 40, 40, 41, 41, -71, -21, 41, - 40, -66, 41, 93, 44, 41, -33, 41, -9, -9, - -9, -40, -49, -50, -51, -42, -43, -47, -46, -45, - -44, -47, -46, -45, -44, 40, 40, 40, 40, -45, - -48, 274, 40, -35, -25, -80, -36, 41, 41, 41, - 41, 299, 263, 41, 299, 306, -70, 41, -40, 41, - -23, -9, 41, -23, -24, 41, -24, 41, -9, 41, - -9, 41, -9, 41, 41, 41, 41, -47, -46, -45, - -44, 41, 41, -17, -3, -25, 41, 123, 326, 381, - 382, 383, 310, 384, 385, 386, 387, 335, 349, 350, - 351, 352, 294, 44, 263, 41, 41, 41, 41, 40, - 41, 40, -36, -25, 511, -9, 41, 41, 359, 41, - -7, -28, -71, 274, -3, -21, 40, -25, 41 }; -YYSTATIC YYCONST short YYFARDATA YYDEF[]={ - - 1, -2, 2, 0, 0, 335, 6, 7, 8, 9, - 10, 11, 0, 0, 0, 0, 16, 17, 18, 0, - 0, 774, 0, 0, 24, 25, 26, 0, 28, 135, - 0, 271, 208, 0, 433, 0, 0, 780, 105, 837, - 92, 0, 433, 0, 83, 84, 85, 0, 0, 0, - 0, 0, 0, 57, 58, 0, 60, 108, 264, 389, - 0, 759, 760, 221, 433, 433, 139, 1, 0, 790, - 808, 826, 840, 19, 41, 20, 0, 0, 22, 42, - 43, 23, 29, 137, 0, 104, 38, 39, 36, 37, - 221, 188, 0, 386, 0, 393, 0, 0, 433, 396, - 396, 396, 396, 396, 396, 0, 0, 434, 435, 0, - 762, 0, 780, 816, 0, 93, 0, 0, 744, 745, - 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, - 756, 757, 758, 0, 0, 33, 0, 0, 0, 0, - 0, 0, 670, 0, 0, 221, 0, 686, 687, 0, - 691, 0, 0, 551, 235, 553, 554, 555, 556, 0, - 491, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 0, 706, 707, 708, 709, 710, 557, 0, 52, 54, - 55, 56, 59, 0, 388, 390, 391, 0, 61, 0, - 71, 0, 214, 215, 216, 221, 221, 219, 0, 222, - 223, 228, 0, 0, 0, 0, 5, 336, 0, 338, - 0, 0, 342, 343, 344, 345, 0, 347, 348, 349, - 350, 351, 0, 0, 0, 357, 0, 0, 334, 506, - 0, 0, 0, 0, 433, 0, 221, 0, 0, 0, - 221, 0, 0, 335, 0, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 364, 371, - 0, 0, 0, 0, 21, 776, 775, 0, 29, 552, - 107, 0, 136, 559, 0, 562, 221, 0, 313, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 0, 0, 0, - 0, 0, 395, 0, 0, 0, 0, 407, 0, 0, - 408, 0, 409, 0, 410, 0, 411, 0, 412, 432, - 102, 436, 0, 761, 0, 0, 771, 779, 781, 782, - 783, 0, 785, 786, 787, 788, 789, 0, 0, 835, - 838, 839, 94, 720, 721, 722, 0, 0, 31, 0, - 0, 713, 675, 676, 677, 0, 0, 536, 0, 0, - 0, 0, 669, 0, 672, 230, 0, 0, 683, 685, - 688, 0, 690, 692, 0, 0, 0, 0, 0, 0, - 233, 234, 702, 703, 704, 705, 0, 53, 147, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 131, 132, 133, 0, - 0, 103, 0, 0, 72, 73, 0, 217, 218, 0, - 224, 225, 226, 227, 64, 68, 3, 140, 335, 0, - 0, 0, 170, 171, 172, 173, 174, 0, 0, 0, - 0, 180, 181, 0, 0, 238, 252, 816, 105, 4, - 337, 339, -2, 0, 346, 0, 0, 0, 221, 0, - 0, 0, 365, 367, 0, 0, 0, 0, 0, 0, - 381, 382, 379, 507, 508, 509, 510, 505, 511, 512, - 44, 0, 0, 0, 514, 515, 516, 0, 519, 520, - 521, 522, 523, 0, 433, 0, 527, 529, 0, 368, - 0, 0, 12, 791, 0, 793, 794, 433, 0, 0, - 433, 801, 802, 0, 13, 809, 433, 811, 433, 813, - 0, 0, 14, 827, 0, 0, 0, 0, 833, 834, - 15, 841, 0, 0, 844, 845, 773, 777, 27, 30, - 138, 142, 0, 0, 0, 40, 0, 0, 294, 0, - 189, 190, 191, 192, 193, 194, 195, 0, 197, 198, - 199, 200, 201, 202, 0, 209, 392, 0, 0, 0, - 400, 0, 0, 0, 0, 0, 0, 0, 96, 764, - 0, 784, 806, 814, 817, 818, 819, 0, 0, 0, - 0, 0, 724, 729, 730, 34, 47, 673, 0, 711, - 714, 715, 0, 0, 0, 537, 538, 48, 49, 50, - 51, 671, 0, 682, 684, 689, 0, 0, 0, 0, - 558, 0, -2, 713, 0, 106, 156, 125, 126, 127, - 128, 129, 130, 0, 387, 62, 75, 69, 221, 0, - 534, 310, 311, -2, 0, 0, 139, 241, 255, 175, - 176, 826, 0, 221, 0, 0, 0, 0, 221, 0, - 0, 541, 542, 544, 0, -2, 0, 0, 0, 0, - 0, 359, 0, 0, 0, 366, 372, 383, 0, 373, - 374, 375, 380, 376, 377, 378, 0, 0, 513, 0, - -2, 0, 0, 0, 0, 532, 533, 363, 0, 0, - 0, 0, 0, 795, 796, 799, 0, 0, 0, 0, - 0, 0, 0, 828, 0, 832, 0, 0, 0, 0, - 433, 0, 560, 0, 0, 265, 0, 0, 294, 0, - 204, 563, 0, 394, 0, 399, 396, 397, 396, 396, - 396, 396, 396, 0, 763, 0, 0, 0, 820, 821, - 822, 823, 824, 825, 836, 0, 731, 0, 75, 32, - 0, 725, 0, 0, 0, 674, 713, 717, 0, 0, - 681, 0, 676, 547, 548, 549, 0, 0, 229, 0, - 0, 156, 149, 150, 151, 152, 153, 154, 0, 0, - 0, 78, 65, 0, 0, 0, 536, 220, 166, 0, - 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, - 0, -2, 239, 240, 0, 253, 254, 815, 340, 313, - 265, 0, 352, 354, 355, 312, 0, 0, 0, 0, - 206, 0, 0, 0, 0, 0, 0, 525, -2, 528, - 529, 529, 369, 370, 792, 797, 0, 805, 800, 803, - 810, 812, 778, 804, 829, 830, 0, 0, 843, 0, - 141, 561, 0, 0, 0, 0, 0, 0, 290, 0, - 0, 293, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 0, 0, 0, 206, 0, 0, 267, 0, - 0, 0, 568, 569, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 0, 584, 585, 586, 587, 593, - 594, 595, 596, 597, 598, 599, 618, 618, 602, 618, - 620, 606, 608, 0, 610, 0, 612, 614, 0, 616, - 617, 269, 0, 398, 401, 402, 403, 404, 405, 406, - 0, 97, 98, 99, 100, 101, 766, 768, 807, 718, - 0, 0, 0, 723, 724, 0, 37, 35, 712, 716, - 678, 679, 539, -2, 550, 231, 148, 0, 160, 143, - 157, 0, 134, 63, 74, 76, 77, 440, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 433, 0, 534, -2, -2, 0, - 0, 167, 168, 242, 221, 221, 221, 221, 247, 248, - 249, 250, 169, 256, 221, 221, 221, 260, 261, 262, - 263, 177, 0, 0, 0, 0, 0, 186, 221, 236, - 0, 543, 545, 341, 0, 0, 358, 0, 361, 362, - 0, 0, 0, 45, 46, 517, 524, 0, 530, 531, - 0, 831, 842, 776, 147, 563, 314, 315, 316, 317, - 294, 292, 0, 0, 0, 187, 205, 196, 588, 0, - 0, 0, 0, 0, 613, 580, 581, 582, 583, 607, - 600, 0, 601, 603, 604, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 630, 631, 0, 636, 637, 638, - 639, 640, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 654, 655, 656, 657, 658, 659, 660, 661, 662, - 663, 664, 665, 666, 667, 668, 609, 611, 615, 203, - 95, 765, 767, 0, 732, 733, 736, 737, 0, 739, - 0, 734, 735, 719, 726, 78, 0, 0, 160, 159, - 156, 0, 144, 145, 0, 0, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 75, 70, 0, 0, 0, - 0, 0, 535, 243, 244, 245, 246, 257, 258, 259, - 221, 0, 182, 0, 185, 0, 546, 353, 0, 0, - 207, 437, 438, 439, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 384, 385, 526, - 0, 772, 0, 0, 0, 305, 306, 307, 308, 0, - 589, 0, 0, 268, 0, 0, 0, 0, 0, 0, - 642, 643, 632, 633, 634, 635, 653, 770, 0, 0, - 0, 78, 680, 158, 161, 162, 0, 155, 0, 86, - 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 431, 0, -2, -2, - 212, 213, 0, 0, 0, 0, -2, 163, 360, 0, - 0, 0, 0, 0, -2, 266, 291, 309, 590, 0, - 0, 0, 0, 0, 0, 605, 641, 769, 0, 0, - 0, 0, 0, 727, 0, 146, 0, 0, 0, 90, - 441, 442, 0, 0, 444, 445, 0, 446, 0, 413, - 415, 0, 414, 416, 0, 417, 0, 418, 0, 419, - 0, 420, 0, 425, 0, 426, 0, 427, 0, 428, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, - 0, 430, 0, 67, 0, 0, 165, 0, 163, 184, - 0, 0, 164, 0, 0, 0, 0, 592, 0, 566, - 563, 0, 738, 0, 0, 0, 743, 728, 0, 91, - 89, 482, 443, 485, 489, 466, 469, 472, 474, 476, - 478, 472, 474, 476, 478, 421, 0, 422, 0, 423, - 0, 424, 0, 476, 480, 210, 211, 0, 0, 206, - -2, 798, 318, 591, 0, 565, 567, 619, 0, 0, - 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 472, 474, 476, 478, 0, - 0, 0, -2, 251, 0, 0, 0, 740, 741, 742, - 463, 483, 484, 464, 486, 0, 488, 465, 490, 447, - 467, 468, 448, 470, 471, 449, 473, 450, 475, 451, - 477, 452, 479, 453, 454, 455, 456, 0, 0, 0, - 0, 461, 462, 481, 0, 0, 356, 270, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 0, 0, 487, 457, 458, 459, 460, -2, - 0, 0, 0, 0, 0, 0, 564, 178, 221, 333, - 0, 0, 0, 0, 163, 0, -2, 0, 179 }; -#ifdef YYRECOVER -YYSTATIC YYCONST short yyrecover[] = { --1000 +#if YYBTYACC +static const YYINT yyctable[] = { -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, }; #endif - -/* SCCSWHAT( "@(#)yypars.c 3.1 88/11/16 22:00:49 " ) */ -#line 3 "F:\\NetFXDev1\\src\\tools\\devdiv\\amd64\\yypars.c" -#if ! defined(YYAPI_PACKAGE) -/* -** YYAPI_TOKENNAME : name used for return value of yylex -** YYAPI_TOKENTYPE : type of the token -** YYAPI_TOKENEME(t) : the value of the token that the parser should see -** YYAPI_TOKENNONE : the representation when there is no token -** YYAPI_VALUENAME : the name of the value of the token -** YYAPI_VALUETYPE : the type of the value of the token (if null, then the value is derivable from the token itself) -** YYAPI_VALUEOF(v) : how to get the value of the token. -*/ -#define YYAPI_TOKENNAME yychar -#define YYAPI_TOKENTYPE int -#define YYAPI_TOKENEME(t) (t) -#define YYAPI_TOKENNONE -1 -#define YYAPI_TOKENSTR(t) (sprintf_s(yytokbuf, ARRAY_SIZE(yytokbuf), "%d", t), yytokbuf) -#define YYAPI_VALUENAME yylval -#define YYAPI_VALUETYPE YYSTYPE -#define YYAPI_VALUEOF(v) (v) -#endif -#if ! defined(YYAPI_CALLAFTERYYLEX) -#define YYAPI_CALLAFTERYYLEX +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 #endif +#define YYMAXTOKEN 542 +#define YYUNDFTOKEN 732 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const yyname[] = { -# define YYFLAG -1000 -# define YYERROR goto yyerrlab -# define YYACCEPT return(0) -# define YYABORT return(1) +"$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'!'",0, +0,0,0,"'&'",0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,0,0,0,0, +0,"':'","';'","'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","ERROR_","BAD_COMMENT_", +"BAD_LITERAL_","ID","DOTTEDNAME","QSTRING","SQSTRING","INT32","INT64","FLOAT64", +"HEXBYTE","TYPEDEF_T","TYPEDEF_M","TYPEDEF_F","TYPEDEF_TS","TYPEDEF_MR", +"TYPEDEF_CA","DCOLON","ELLIPSIS","VOID_","BOOL_","CHAR_","UNSIGNED_","INT_", +"INT8_","INT16_","INT32_","INT64_","FLOAT_","FLOAT32_","FLOAT64_","BYTEARRAY_", +"UINT_","UINT8_","UINT16_","UINT32_","UINT64_","FLAGS_","CALLCONV_","MDTOKEN_", +"OBJECT_","STRING_","NULLREF_","DEFAULT_","CDECL_","VARARG_","STDCALL_", +"THISCALL_","FASTCALL_","CLASS_","BYREFLIKE_","TYPEDREF_","UNMANAGED_", +"FINALLY_","HANDLER_","CATCH_","FILTER_","FAULT_","EXTENDS_","IMPLEMENTS_", +"TO_","AT_","TLS_","TRUE_","FALSE_","_INTERFACEIMPL","VALUE_","VALUETYPE_", +"NATIVE_","INSTANCE_","SPECIALNAME_","FORWARDER_","STATIC_","PUBLIC_", +"PRIVATE_","FAMILY_","FINAL_","SYNCHRONIZED_","INTERFACE_","SEALED_","NESTED_", +"ABSTRACT_","AUTO_","SEQUENTIAL_","EXPLICIT_","ANSI_","UNICODE_","AUTOCHAR_", +"IMPORT_","ENUM_","VIRTUAL_","NOINLINING_","AGGRESSIVEINLINING_", +"NOOPTIMIZATION_","AGGRESSIVEOPTIMIZATION_","UNMANAGEDEXP_","BEFOREFIELDINIT_", +"STRICT_","RETARGETABLE_","WINDOWSRUNTIME_","NOPLATFORM_","METHOD_","FIELD_", +"PINNED_","MODREQ_","MODOPT_","SERIALIZABLE_","PROPERTY_","TYPE_","ASSEMBLY_", +"FAMANDASSEM_","FAMORASSEM_","PRIVATESCOPE_","HIDEBYSIG_","NEWSLOT_", +"RTSPECIALNAME_","PINVOKEIMPL_","_CTOR","_CCTOR","LITERAL_","NOTSERIALIZED_", +"INITONLY_","REQSECOBJ_","CIL_","OPTIL_","MANAGED_","FORWARDREF_", +"PRESERVESIG_","RUNTIME_","INTERNALCALL_","_IMPORT","NOMANGLE_","LASTERR_", +"WINAPI_","AS_","BESTFIT_","ON_","OFF_","CHARMAPERROR_","INSTR_NONE", +"INSTR_VAR","INSTR_I","INSTR_I8","INSTR_R","INSTR_BRTARGET","INSTR_METHOD", +"INSTR_FIELD","INSTR_TYPE","INSTR_STRING","INSTR_SIG","INSTR_TOK", +"INSTR_SWITCH","_CLASS","_NAMESPACE","_METHOD","_FIELD","_DATA","_THIS","_BASE", +"_NESTER","_EMITBYTE","_TRY","_MAXSTACK","_LOCALS","_ENTRYPOINT","_ZEROINIT", +"_EVENT","_ADDON","_REMOVEON","_FIRE","_OTHER","_PROPERTY","_SET","_GET", +"_PERMISSION","_PERMISSIONSET","REQUEST_","DEMAND_","ASSERT_","DENY_", +"PERMITONLY_","LINKCHECK_","INHERITCHECK_","REQMIN_","REQOPT_","REQREFUSE_", +"PREJITGRANT_","PREJITDENY_","NONCASDEMAND_","NONCASLINKDEMAND_", +"NONCASINHERITANCE_","_LINE","P_LINE","_LANGUAGE","_CUSTOM","INIT_","_SIZE", +"_PACK","_VTABLE","_VTFIXUP","FROMUNMANAGED_","CALLMOSTDERIVED_","_VTENTRY", +"RETAINAPPDOMAIN_","_FILE","NOMETADATA_","_HASH","_ASSEMBLY","_PUBLICKEY", +"_PUBLICKEYTOKEN","ALGORITHM_","_VER","_LOCALE","EXTERN_","_MRESOURCE", +"_MODULE","_EXPORT","LEGACY_","LIBRARY_","X86_","AMD64_","ARM_","ARM64_", +"MARSHAL_","CUSTOM_","SYSSTRING_","FIXED_","VARIANT_","CURRENCY_","SYSCHAR_", +"DECIMAL_","DATE_","BSTR_","TBSTR_","LPSTR_","LPWSTR_","LPTSTR_","OBJECTREF_", +"IUNKNOWN_","IDISPATCH_","STRUCT_","SAFEARRAY_","BYVALSTR_","LPVOID_","ANY_", +"ARRAY_","LPSTRUCT_","IIDPARAM_","IN_","OUT_","OPT_","_PARAM","_OVERRIDE", +"WITH_","NULL_","HRESULT_","CARRAY_","USERDEFINED_","RECORD_","FILETIME_", +"BLOB_","STREAM_","STORAGE_","STREAMED_OBJECT_","STORED_OBJECT_","BLOB_OBJECT_", +"CF_","CLSID_","VECTOR_","_SUBSYSTEM","_CORFLAGS","ALIGNMENT_","_IMAGEBASE", +"_STACKRESERVE","_TYPEDEF","_TEMPLATE","_TYPELIST","_MSCORLIB","P_DEFINE", +"P_UNDEF","P_IFDEF","P_IFNDEF","P_ELSE","P_ENDIF","P_INCLUDE","CONSTRAINT_", +"$accept","decls","dottedName","id","methodName","atOpt","slashedName","labels", +"callConv","callKind","int32","customHead","customHeadWithOwner","vtfixupAttr", +"paramAttr","ddItemCount","variantType","repeatOpt","truefalse","typarAttrib", +"typarAttribs","conTyparAttrib","conTyparAttribs","iidParamIndex","genArity", +"genArityNotEmpty","float64","int64","sigArgs0","sigArgs1","sigArg","type", +"bound","bounds1","bytes","hexbytes","nativeType","marshalBlob","initOpt", +"compQstring","caValue","marshalClause","fieldInit","serInit","fieldSerInit", +"constTypeArg","f32seq","f64seq","i8seq","i16seq","i32seq","i64seq","boolSeq", +"sqstringSeq","classSeq","objSeq","simpleType","tyArgs0","tyArgs1","tyArgs2", +"typeList","typeListNotEmpty","tyBound","customBlobDescr","serializType", +"customBlobArgs","customBlobNVPairs","secAttrBlob","secAttrSetBlob", +"fieldOrProp","intOrWildcard","typarsRest","typars","typarsClause","className", +"typeSpec","ownerType","customType","memberRef","methodRef","mdtoken", +"classAttr","methAttr","fieldAttr","implAttr","eventAttr","propAttr","pinvAttr", +"nameValPairs","nameValPair","secAction","psetHead","fileAttr","fileEntry", +"asmAttr","exptAttr","manresAttr","customDescr","customDescrWithOwner", +"instr_none","instr_var","instr_i","instr_i8","instr_r","instr_brtarget", +"instr_method","instr_field","instr_type","instr_string","instr_sig", +"instr_tok","instr_switch","instr_r_head","decl","classHead","classDecls", +"nameSpaceHead","methodHead","methodDecls","fieldDecl","dataDecl","vtableDecl", +"vtfixupDecl","extSourceSpec","fileDecl","assemblyHead","assemblyDecls", +"assemblyRefHead","assemblyRefDecls","exptypeHead","exptypeDecls", +"manifestResHead","manifestResDecls","moduleHead","secDecl","customAttrDecl", +"languageDecl","typedefDecl","compControl","classNameSeq","vtableHead","_class", +"classHeadBegin","extendsClause","implClause","implList","classDecl", +"eventHead","eventDecls","propHead","propDecls","exportHead","methodSpec", +"eventDecl","propDecl","methodHeadPart1","marshalBlobHead","localsHead", +"methodDecl","sehBlock","instr","scopeBlock","scopeOpen","tryBlock", +"sehClauses","sehClause","tryHead","catchClause","handlerBlock","filterClause", +"finallyClause","faultClause","filterHead","ddHead","ddBody","tls","ddItemList", +"ddItem","bytearrayhead","esHead","hashHead","assemblyDecl","asmOrRefDecl", +"publicKeyHead","localeHead","publicKeyTokenHead","assemblyRefDecl", +"exptypeDecl","manifestResDecl","illegal-symbol", +}; +static const char *const yyrule[] = { +"$accept : decls", +"decls :", +"decls : decls decl", +"decl : classHead '{' classDecls '}'", +"decl : nameSpaceHead '{' decls '}'", +"decl : methodHead methodDecls '}'", +"decl : fieldDecl", +"decl : dataDecl", +"decl : vtableDecl", +"decl : vtfixupDecl", +"decl : extSourceSpec", +"decl : fileDecl", +"decl : assemblyHead '{' assemblyDecls '}'", +"decl : assemblyRefHead '{' assemblyRefDecls '}'", +"decl : exptypeHead '{' exptypeDecls '}'", +"decl : manifestResHead '{' manifestResDecls '}'", +"decl : moduleHead", +"decl : secDecl", +"decl : customAttrDecl", +"decl : _SUBSYSTEM int32", +"decl : _CORFLAGS int32", +"decl : _FILE ALIGNMENT_ int32", +"decl : _IMAGEBASE int64", +"decl : _STACKRESERVE int64", +"decl : languageDecl", +"decl : typedefDecl", +"decl : compControl", +"decl : _TYPELIST '{' classNameSeq '}'", +"decl : _MSCORLIB", +"classNameSeq :", +"classNameSeq : className classNameSeq", +"compQstring : QSTRING", +"compQstring : compQstring '+' QSTRING", +"languageDecl : _LANGUAGE SQSTRING", +"languageDecl : _LANGUAGE SQSTRING ',' SQSTRING", +"languageDecl : _LANGUAGE SQSTRING ',' SQSTRING ',' SQSTRING", +"id : ID", +"id : SQSTRING", +"dottedName : id", +"dottedName : DOTTEDNAME", +"dottedName : dottedName '.' dottedName", +"int32 : INT32", +"int64 : INT64", +"int64 : INT32", +"float64 : FLOAT64", +"float64 : FLOAT32_ '(' int32 ')'", +"float64 : FLOAT64_ '(' int64 ')'", +"typedefDecl : _TYPEDEF type AS_ dottedName", +"typedefDecl : _TYPEDEF className AS_ dottedName", +"typedefDecl : _TYPEDEF memberRef AS_ dottedName", +"typedefDecl : _TYPEDEF customDescr AS_ dottedName", +"typedefDecl : _TYPEDEF customDescrWithOwner AS_ dottedName", +"compControl : P_DEFINE dottedName", +"compControl : P_DEFINE dottedName compQstring", +"compControl : P_UNDEF dottedName", +"compControl : P_IFDEF dottedName", +"compControl : P_IFNDEF dottedName", +"compControl : P_ELSE", +"compControl : P_ENDIF", +"compControl : P_INCLUDE QSTRING", +"compControl : ';'", +"customDescr : _CUSTOM customType", +"customDescr : _CUSTOM customType '=' compQstring", +"customDescr : _CUSTOM customType '=' '{' customBlobDescr '}'", +"customDescr : customHead bytes ')'", +"customDescrWithOwner : _CUSTOM '(' ownerType ')' customType", +"customDescrWithOwner : _CUSTOM '(' ownerType ')' customType '=' compQstring", +"customDescrWithOwner : _CUSTOM '(' ownerType ')' customType '=' '{' customBlobDescr '}'", +"customDescrWithOwner : customHeadWithOwner bytes ')'", +"customHead : _CUSTOM customType '=' '('", +"customHeadWithOwner : _CUSTOM '(' ownerType ')' customType '=' '('", +"customType : methodRef", +"ownerType : typeSpec", +"ownerType : memberRef", +"customBlobDescr : customBlobArgs customBlobNVPairs", +"customBlobArgs :", +"customBlobArgs : customBlobArgs serInit", +"customBlobArgs : customBlobArgs compControl", +"customBlobNVPairs :", +"customBlobNVPairs : customBlobNVPairs fieldOrProp serializType dottedName '=' serInit", +"customBlobNVPairs : customBlobNVPairs compControl", +"fieldOrProp : FIELD_", +"fieldOrProp : PROPERTY_", +"customAttrDecl : customDescr", +"customAttrDecl : customDescrWithOwner", +"customAttrDecl : TYPEDEF_CA", +"serializType : simpleType", +"serializType : TYPE_", +"serializType : OBJECT_", +"serializType : ENUM_ CLASS_ SQSTRING", +"serializType : ENUM_ className", +"serializType : serializType '[' ']'", +"moduleHead : _MODULE", +"moduleHead : _MODULE dottedName", +"moduleHead : _MODULE EXTERN_ dottedName", +"vtfixupDecl : _VTFIXUP '[' int32 ']' vtfixupAttr AT_ id", +"vtfixupAttr :", +"vtfixupAttr : vtfixupAttr INT32_", +"vtfixupAttr : vtfixupAttr INT64_", +"vtfixupAttr : vtfixupAttr FROMUNMANAGED_", +"vtfixupAttr : vtfixupAttr CALLMOSTDERIVED_", +"vtfixupAttr : vtfixupAttr RETAINAPPDOMAIN_", +"vtableDecl : vtableHead bytes ')'", +"vtableHead : _VTABLE '=' '('", +"nameSpaceHead : _NAMESPACE dottedName", +"_class : _CLASS", +"classHeadBegin : _class classAttr dottedName typarsClause", +"classHead : classHeadBegin extendsClause implClause", +"classAttr :", +"classAttr : classAttr PUBLIC_", +"classAttr : classAttr PRIVATE_", +"classAttr : classAttr VALUE_", +"classAttr : classAttr ENUM_", +"classAttr : classAttr INTERFACE_", +"classAttr : classAttr SEALED_", +"classAttr : classAttr ABSTRACT_", +"classAttr : classAttr AUTO_", +"classAttr : classAttr SEQUENTIAL_", +"classAttr : classAttr EXPLICIT_", +"classAttr : classAttr ANSI_", +"classAttr : classAttr UNICODE_", +"classAttr : classAttr AUTOCHAR_", +"classAttr : classAttr IMPORT_", +"classAttr : classAttr SERIALIZABLE_", +"classAttr : classAttr WINDOWSRUNTIME_", +"classAttr : classAttr NESTED_ PUBLIC_", +"classAttr : classAttr NESTED_ PRIVATE_", +"classAttr : classAttr NESTED_ FAMILY_", +"classAttr : classAttr NESTED_ ASSEMBLY_", +"classAttr : classAttr NESTED_ FAMANDASSEM_", +"classAttr : classAttr NESTED_ FAMORASSEM_", +"classAttr : classAttr BEFOREFIELDINIT_", +"classAttr : classAttr SPECIALNAME_", +"classAttr : classAttr RTSPECIALNAME_", +"classAttr : classAttr FLAGS_ '(' int32 ')'", +"extendsClause :", +"extendsClause : EXTENDS_ typeSpec", +"implClause :", +"implClause : IMPLEMENTS_ implList", +"classDecls :", +"classDecls : classDecls classDecl", +"implList : implList ',' typeSpec", +"implList : typeSpec", +"typeList :", +"typeList : typeListNotEmpty", +"typeListNotEmpty : typeSpec", +"typeListNotEmpty : typeListNotEmpty ',' typeSpec", +"typarsClause :", +"typarsClause : '<' typars '>'", +"typarAttrib : '+'", +"typarAttrib : '-'", +"typarAttrib : CLASS_", +"typarAttrib : VALUETYPE_", +"typarAttrib : BYREFLIKE_", +"typarAttrib : _CTOR", +"typarAttrib : FLAGS_ '(' int32 ')'", +"typarAttribs :", +"typarAttribs : typarAttrib typarAttribs", +"conTyparAttrib : FLAGS_ '(' int32 ')'", +"conTyparAttribs :", +"conTyparAttribs : conTyparAttrib conTyparAttribs", +"typars : LITERAL_ conTyparAttribs type tyBound dottedName typarsRest", +"typars : LITERAL_ conTyparAttribs type dottedName typarsRest", +"typars : typarAttribs tyBound dottedName typarsRest", +"typars : typarAttribs dottedName typarsRest", +"typarsRest :", +"typarsRest : ',' typars", +"tyBound : '(' typeList ')'", +"genArity :", +"genArity : genArityNotEmpty", +"genArityNotEmpty : '<' '[' int32 ']' '>'", +"classDecl : methodHead methodDecls '}'", +"classDecl : classHead '{' classDecls '}'", +"classDecl : eventHead '{' eventDecls '}'", +"classDecl : propHead '{' propDecls '}'", +"classDecl : fieldDecl", +"classDecl : dataDecl", +"classDecl : secDecl", +"classDecl : extSourceSpec", +"classDecl : customAttrDecl", +"classDecl : _SIZE int32", +"classDecl : _PACK int32", +"classDecl : exportHead '{' exptypeDecls '}'", +"classDecl : _OVERRIDE typeSpec DCOLON methodName WITH_ callConv type typeSpec DCOLON methodName '(' sigArgs0 ')'", +"classDecl : _OVERRIDE METHOD_ callConv type typeSpec DCOLON methodName genArity '(' sigArgs0 ')' WITH_ METHOD_ callConv type typeSpec DCOLON methodName genArity '(' sigArgs0 ')'", +"classDecl : languageDecl", +"classDecl : compControl", +"classDecl : _PARAM TYPE_ '[' int32 ']'", +"classDecl : _PARAM TYPE_ dottedName", +"classDecl : _PARAM CONSTRAINT_ '[' int32 ']' ',' typeSpec", +"classDecl : _PARAM CONSTRAINT_ dottedName ',' typeSpec", +"classDecl : _INTERFACEIMPL TYPE_ typeSpec customDescr", +"fieldDecl : _FIELD repeatOpt fieldAttr type dottedName atOpt initOpt", +"fieldAttr :", +"fieldAttr : fieldAttr STATIC_", +"fieldAttr : fieldAttr PUBLIC_", +"fieldAttr : fieldAttr PRIVATE_", +"fieldAttr : fieldAttr FAMILY_", +"fieldAttr : fieldAttr INITONLY_", +"fieldAttr : fieldAttr RTSPECIALNAME_", +"fieldAttr : fieldAttr SPECIALNAME_", +"fieldAttr : fieldAttr MARSHAL_ '(' marshalBlob ')'", +"fieldAttr : fieldAttr ASSEMBLY_", +"fieldAttr : fieldAttr FAMANDASSEM_", +"fieldAttr : fieldAttr FAMORASSEM_", +"fieldAttr : fieldAttr PRIVATESCOPE_", +"fieldAttr : fieldAttr LITERAL_", +"fieldAttr : fieldAttr NOTSERIALIZED_", +"fieldAttr : fieldAttr FLAGS_ '(' int32 ')'", +"atOpt :", +"atOpt : AT_ id", +"initOpt :", +"initOpt : '=' fieldInit", +"repeatOpt :", +"repeatOpt : '[' int32 ']'", +"methodRef : callConv type typeSpec DCOLON methodName tyArgs0 '(' sigArgs0 ')'", +"methodRef : callConv type typeSpec DCOLON methodName genArityNotEmpty '(' sigArgs0 ')'", +"methodRef : callConv type methodName tyArgs0 '(' sigArgs0 ')'", +"methodRef : callConv type methodName genArityNotEmpty '(' sigArgs0 ')'", +"methodRef : mdtoken", +"methodRef : TYPEDEF_M", +"methodRef : TYPEDEF_MR", +"callConv : INSTANCE_ callConv", +"callConv : EXPLICIT_ callConv", +"callConv : callKind", +"callConv : CALLCONV_ '(' int32 ')'", +"callKind :", +"callKind : DEFAULT_", +"callKind : VARARG_", +"callKind : UNMANAGED_ CDECL_", +"callKind : UNMANAGED_ STDCALL_", +"callKind : UNMANAGED_ THISCALL_", +"callKind : UNMANAGED_ FASTCALL_", +"callKind : UNMANAGED_", +"mdtoken : MDTOKEN_ '(' int32 ')'", +"memberRef : methodSpec methodRef", +"memberRef : FIELD_ type typeSpec DCOLON dottedName", +"memberRef : FIELD_ type dottedName", +"memberRef : FIELD_ TYPEDEF_F", +"memberRef : FIELD_ TYPEDEF_MR", +"memberRef : mdtoken", +"eventHead : _EVENT eventAttr typeSpec dottedName", +"eventHead : _EVENT eventAttr dottedName", +"eventAttr :", +"eventAttr : eventAttr RTSPECIALNAME_", +"eventAttr : eventAttr SPECIALNAME_", +"eventDecls :", +"eventDecls : eventDecls eventDecl", +"eventDecl : _ADDON methodRef", +"eventDecl : _REMOVEON methodRef", +"eventDecl : _FIRE methodRef", +"eventDecl : _OTHER methodRef", +"eventDecl : extSourceSpec", +"eventDecl : customAttrDecl", +"eventDecl : languageDecl", +"eventDecl : compControl", +"propHead : _PROPERTY propAttr callConv type dottedName '(' sigArgs0 ')' initOpt", +"propAttr :", +"propAttr : propAttr RTSPECIALNAME_", +"propAttr : propAttr SPECIALNAME_", +"propDecls :", +"propDecls : propDecls propDecl", +"propDecl : _SET methodRef", +"propDecl : _GET methodRef", +"propDecl : _OTHER methodRef", +"propDecl : customAttrDecl", +"propDecl : extSourceSpec", +"propDecl : languageDecl", +"propDecl : compControl", +"methodHeadPart1 : _METHOD", +"marshalClause :", +"marshalClause : MARSHAL_ '(' marshalBlob ')'", +"marshalBlob : nativeType", +"marshalBlob : marshalBlobHead hexbytes '}'", +"marshalBlobHead : '{'", +"methodHead : methodHeadPart1 methAttr callConv paramAttr type marshalClause methodName typarsClause '(' sigArgs0 ')' implAttr '{'", +"methAttr :", +"methAttr : methAttr STATIC_", +"methAttr : methAttr PUBLIC_", +"methAttr : methAttr PRIVATE_", +"methAttr : methAttr FAMILY_", +"methAttr : methAttr FINAL_", +"methAttr : methAttr SPECIALNAME_", +"methAttr : methAttr VIRTUAL_", +"methAttr : methAttr STRICT_", +"methAttr : methAttr ABSTRACT_", +"methAttr : methAttr ASSEMBLY_", +"methAttr : methAttr FAMANDASSEM_", +"methAttr : methAttr FAMORASSEM_", +"methAttr : methAttr PRIVATESCOPE_", +"methAttr : methAttr HIDEBYSIG_", +"methAttr : methAttr NEWSLOT_", +"methAttr : methAttr RTSPECIALNAME_", +"methAttr : methAttr UNMANAGEDEXP_", +"methAttr : methAttr REQSECOBJ_", +"methAttr : methAttr FLAGS_ '(' int32 ')'", +"methAttr : methAttr PINVOKEIMPL_ '(' compQstring AS_ compQstring pinvAttr ')'", +"methAttr : methAttr PINVOKEIMPL_ '(' compQstring pinvAttr ')'", +"methAttr : methAttr PINVOKEIMPL_ '(' pinvAttr ')'", +"pinvAttr :", +"pinvAttr : pinvAttr NOMANGLE_", +"pinvAttr : pinvAttr ANSI_", +"pinvAttr : pinvAttr UNICODE_", +"pinvAttr : pinvAttr AUTOCHAR_", +"pinvAttr : pinvAttr LASTERR_", +"pinvAttr : pinvAttr WINAPI_", +"pinvAttr : pinvAttr CDECL_", +"pinvAttr : pinvAttr STDCALL_", +"pinvAttr : pinvAttr THISCALL_", +"pinvAttr : pinvAttr FASTCALL_", +"pinvAttr : pinvAttr BESTFIT_ ':' ON_", +"pinvAttr : pinvAttr BESTFIT_ ':' OFF_", +"pinvAttr : pinvAttr CHARMAPERROR_ ':' ON_", +"pinvAttr : pinvAttr CHARMAPERROR_ ':' OFF_", +"pinvAttr : pinvAttr FLAGS_ '(' int32 ')'", +"methodName : _CTOR", +"methodName : _CCTOR", +"methodName : dottedName", +"paramAttr :", +"paramAttr : paramAttr '[' IN_ ']'", +"paramAttr : paramAttr '[' OUT_ ']'", +"paramAttr : paramAttr '[' OPT_ ']'", +"paramAttr : paramAttr '[' int32 ']'", +"implAttr :", +"implAttr : implAttr NATIVE_", +"implAttr : implAttr CIL_", +"implAttr : implAttr OPTIL_", +"implAttr : implAttr MANAGED_", +"implAttr : implAttr UNMANAGED_", +"implAttr : implAttr FORWARDREF_", +"implAttr : implAttr PRESERVESIG_", +"implAttr : implAttr RUNTIME_", +"implAttr : implAttr INTERNALCALL_", +"implAttr : implAttr SYNCHRONIZED_", +"implAttr : implAttr NOINLINING_", +"implAttr : implAttr AGGRESSIVEINLINING_", +"implAttr : implAttr NOOPTIMIZATION_", +"implAttr : implAttr AGGRESSIVEOPTIMIZATION_", +"implAttr : implAttr FLAGS_ '(' int32 ')'", +"localsHead : _LOCALS", +"methodDecls :", +"methodDecls : methodDecls methodDecl", +"methodDecl : _EMITBYTE int32", +"methodDecl : sehBlock", +"methodDecl : _MAXSTACK int32", +"methodDecl : localsHead '(' sigArgs0 ')'", +"methodDecl : localsHead INIT_ '(' sigArgs0 ')'", +"methodDecl : _ENTRYPOINT", +"methodDecl : _ZEROINIT", +"methodDecl : dataDecl", +"methodDecl : instr", +"methodDecl : id ':'", +"methodDecl : secDecl", +"methodDecl : extSourceSpec", +"methodDecl : languageDecl", +"methodDecl : customAttrDecl", +"methodDecl : compControl", +"methodDecl : _EXPORT '[' int32 ']'", +"methodDecl : _EXPORT '[' int32 ']' AS_ id", +"methodDecl : _VTENTRY int32 ':' int32", +"methodDecl : _OVERRIDE typeSpec DCOLON methodName", +"methodDecl : _OVERRIDE METHOD_ callConv type typeSpec DCOLON methodName genArity '(' sigArgs0 ')'", +"methodDecl : scopeBlock", +"methodDecl : _PARAM TYPE_ '[' int32 ']'", +"methodDecl : _PARAM TYPE_ dottedName", +"methodDecl : _PARAM CONSTRAINT_ '[' int32 ']' ',' typeSpec", +"methodDecl : _PARAM CONSTRAINT_ dottedName ',' typeSpec", +"methodDecl : _PARAM '[' int32 ']' initOpt", +"scopeBlock : scopeOpen methodDecls '}'", +"scopeOpen : '{'", +"sehBlock : tryBlock sehClauses", +"sehClauses : sehClause sehClauses", +"sehClauses : sehClause", +"tryBlock : tryHead scopeBlock", +"tryBlock : tryHead id TO_ id", +"tryBlock : tryHead int32 TO_ int32", +"tryHead : _TRY", +"sehClause : catchClause handlerBlock", +"sehClause : filterClause handlerBlock", +"sehClause : finallyClause handlerBlock", +"sehClause : faultClause handlerBlock", +"filterClause : filterHead scopeBlock", +"filterClause : filterHead id", +"filterClause : filterHead int32", +"filterHead : FILTER_", +"catchClause : CATCH_ typeSpec", +"finallyClause : FINALLY_", +"faultClause : FAULT_", +"handlerBlock : scopeBlock", +"handlerBlock : HANDLER_ id TO_ id", +"handlerBlock : HANDLER_ int32 TO_ int32", +"dataDecl : ddHead ddBody", +"ddHead : _DATA tls id '='", +"ddHead : _DATA tls", +"tls :", +"tls : TLS_", +"tls : CIL_", +"ddBody : '{' ddItemList '}'", +"ddBody : ddItem", +"ddItemList : ddItem ',' ddItemList", +"ddItemList : ddItem", +"ddItemCount :", +"ddItemCount : '[' int32 ']'", +"ddItem : CHAR_ '*' '(' compQstring ')'", +"ddItem : '&' '(' id ')'", +"ddItem : bytearrayhead bytes ')'", +"ddItem : FLOAT32_ '(' float64 ')' ddItemCount", +"ddItem : FLOAT64_ '(' float64 ')' ddItemCount", +"ddItem : INT64_ '(' int64 ')' ddItemCount", +"ddItem : INT32_ '(' int32 ')' ddItemCount", +"ddItem : INT16_ '(' int32 ')' ddItemCount", +"ddItem : INT8_ '(' int32 ')' ddItemCount", +"ddItem : FLOAT32_ ddItemCount", +"ddItem : FLOAT64_ ddItemCount", +"ddItem : INT64_ ddItemCount", +"ddItem : INT32_ ddItemCount", +"ddItem : INT16_ ddItemCount", +"ddItem : INT8_ ddItemCount", +"fieldSerInit : FLOAT32_ '(' float64 ')'", +"fieldSerInit : FLOAT64_ '(' float64 ')'", +"fieldSerInit : FLOAT32_ '(' int32 ')'", +"fieldSerInit : FLOAT64_ '(' int64 ')'", +"fieldSerInit : INT64_ '(' int64 ')'", +"fieldSerInit : INT32_ '(' int32 ')'", +"fieldSerInit : INT16_ '(' int32 ')'", +"fieldSerInit : INT8_ '(' int32 ')'", +"fieldSerInit : UNSIGNED_ INT64_ '(' int64 ')'", +"fieldSerInit : UNSIGNED_ INT32_ '(' int32 ')'", +"fieldSerInit : UNSIGNED_ INT16_ '(' int32 ')'", +"fieldSerInit : UNSIGNED_ INT8_ '(' int32 ')'", +"fieldSerInit : UINT64_ '(' int64 ')'", +"fieldSerInit : UINT32_ '(' int32 ')'", +"fieldSerInit : UINT16_ '(' int32 ')'", +"fieldSerInit : UINT8_ '(' int32 ')'", +"fieldSerInit : CHAR_ '(' int32 ')'", +"fieldSerInit : BOOL_ '(' truefalse ')'", +"fieldSerInit : bytearrayhead bytes ')'", +"bytearrayhead : BYTEARRAY_ '('", +"bytes :", +"bytes : hexbytes", +"hexbytes : HEXBYTE", +"hexbytes : hexbytes HEXBYTE", +"fieldInit : fieldSerInit", +"fieldInit : compQstring", +"fieldInit : NULLREF_", +"serInit : fieldSerInit", +"serInit : STRING_ '(' NULLREF_ ')'", +"serInit : STRING_ '(' SQSTRING ')'", +"serInit : TYPE_ '(' CLASS_ SQSTRING ')'", +"serInit : TYPE_ '(' className ')'", +"serInit : TYPE_ '(' NULLREF_ ')'", +"serInit : OBJECT_ '(' serInit ')'", +"serInit : FLOAT32_ '[' int32 ']' '(' f32seq ')'", +"serInit : FLOAT64_ '[' int32 ']' '(' f64seq ')'", +"serInit : INT64_ '[' int32 ']' '(' i64seq ')'", +"serInit : INT32_ '[' int32 ']' '(' i32seq ')'", +"serInit : INT16_ '[' int32 ']' '(' i16seq ')'", +"serInit : INT8_ '[' int32 ']' '(' i8seq ')'", +"serInit : UINT64_ '[' int32 ']' '(' i64seq ')'", +"serInit : UINT32_ '[' int32 ']' '(' i32seq ')'", +"serInit : UINT16_ '[' int32 ']' '(' i16seq ')'", +"serInit : UINT8_ '[' int32 ']' '(' i8seq ')'", +"serInit : UNSIGNED_ INT64_ '[' int32 ']' '(' i64seq ')'", +"serInit : UNSIGNED_ INT32_ '[' int32 ']' '(' i32seq ')'", +"serInit : UNSIGNED_ INT16_ '[' int32 ']' '(' i16seq ')'", +"serInit : UNSIGNED_ INT8_ '[' int32 ']' '(' i8seq ')'", +"serInit : CHAR_ '[' int32 ']' '(' i16seq ')'", +"serInit : BOOL_ '[' int32 ']' '(' boolSeq ')'", +"serInit : STRING_ '[' int32 ']' '(' sqstringSeq ')'", +"serInit : TYPE_ '[' int32 ']' '(' classSeq ')'", +"serInit : OBJECT_ '[' int32 ']' '(' objSeq ')'", +"constTypeArg : FLOAT32_ '(' float64 ')'", +"constTypeArg : FLOAT64_ '(' float64 ')'", +"constTypeArg : FLOAT32_ '(' int32 ')'", +"constTypeArg : FLOAT64_ '(' int64 ')'", +"constTypeArg : INT64_ '(' int64 ')'", +"constTypeArg : INT32_ '(' int32 ')'", +"constTypeArg : INT16_ '(' int32 ')'", +"constTypeArg : INT8_ '(' int32 ')'", +"constTypeArg : UNSIGNED_ INT64_ '(' int64 ')'", +"constTypeArg : UNSIGNED_ INT32_ '(' int32 ')'", +"constTypeArg : UNSIGNED_ INT16_ '(' int32 ')'", +"constTypeArg : UNSIGNED_ INT8_ '(' int32 ')'", +"constTypeArg : UINT64_ '(' int64 ')'", +"constTypeArg : UINT32_ '(' int32 ')'", +"constTypeArg : UINT16_ '(' int32 ')'", +"constTypeArg : UINT8_ '(' int32 ')'", +"constTypeArg : CHAR_ '(' int32 ')'", +"constTypeArg : BOOL_ '(' truefalse ')'", +"f32seq :", +"f32seq : f32seq float64", +"f32seq : f32seq int32", +"f64seq :", +"f64seq : f64seq float64", +"f64seq : f64seq int64", +"i64seq :", +"i64seq : i64seq int64", +"i32seq :", +"i32seq : i32seq int32", +"i16seq :", +"i16seq : i16seq int32", +"i8seq :", +"i8seq : i8seq int32", +"boolSeq :", +"boolSeq : boolSeq truefalse", +"sqstringSeq :", +"sqstringSeq : sqstringSeq NULLREF_", +"sqstringSeq : sqstringSeq SQSTRING", +"classSeq :", +"classSeq : classSeq NULLREF_", +"classSeq : classSeq CLASS_ SQSTRING", +"classSeq : classSeq className", +"objSeq :", +"objSeq : objSeq serInit", +"methodSpec : METHOD_", +"instr_none : INSTR_NONE", +"instr_var : INSTR_VAR", +"instr_i : INSTR_I", +"instr_i8 : INSTR_I8", +"instr_r : INSTR_R", +"instr_brtarget : INSTR_BRTARGET", +"instr_method : INSTR_METHOD", +"instr_field : INSTR_FIELD", +"instr_type : INSTR_TYPE", +"instr_string : INSTR_STRING", +"instr_sig : INSTR_SIG", +"instr_tok : INSTR_TOK", +"instr_switch : INSTR_SWITCH", +"instr_r_head : instr_r '('", +"instr : instr_none", +"instr : instr_var int32", +"instr : instr_var id", +"instr : instr_i int32", +"instr : instr_i8 int64", +"instr : instr_r float64", +"instr : instr_r int64", +"instr : instr_r_head bytes ')'", +"instr : instr_brtarget int32", +"instr : instr_brtarget id", +"instr : instr_method methodRef", +"instr : instr_field type typeSpec DCOLON dottedName", +"instr : instr_field type dottedName", +"instr : instr_field mdtoken", +"instr : instr_field TYPEDEF_F", +"instr : instr_field TYPEDEF_MR", +"instr : instr_type typeSpec", +"instr : instr_string compQstring", +"instr : instr_string ANSI_ '(' compQstring ')'", +"instr : instr_string bytearrayhead bytes ')'", +"instr : instr_sig callConv type '(' sigArgs0 ')'", +"instr : instr_tok ownerType", +"instr : instr_switch '(' labels ')'", +"labels :", +"labels : id ',' labels", +"labels : int32 ',' labels", +"labels : id", +"labels : int32", +"tyArgs0 :", +"tyArgs0 : '<' tyArgs1 '>'", +"tyArgs1 :", +"tyArgs1 : tyArgs2", +"tyArgs2 : type", +"tyArgs2 : tyArgs2 ',' type", +"sigArgs0 :", +"sigArgs0 : sigArgs1", +"sigArgs1 : sigArg", +"sigArgs1 : sigArgs1 ',' sigArg", +"sigArg : ELLIPSIS", +"sigArg : paramAttr type marshalClause", +"sigArg : paramAttr type marshalClause id", +"className : '[' dottedName ']' slashedName", +"className : '[' mdtoken ']' slashedName", +"className : '[' '*' ']' slashedName", +"className : '[' _MODULE dottedName ']' slashedName", +"className : slashedName", +"className : mdtoken", +"className : TYPEDEF_T", +"className : _THIS", +"className : _BASE", +"className : _NESTER", +"slashedName : dottedName", +"slashedName : slashedName '/' dottedName", +"typeSpec : className", +"typeSpec : '[' dottedName ']'", +"typeSpec : '[' _MODULE dottedName ']'", +"typeSpec : type", +"nativeType :", +"nativeType : CUSTOM_ '(' compQstring ',' compQstring ',' compQstring ',' compQstring ')'", +"nativeType : CUSTOM_ '(' compQstring ',' compQstring ')'", +"nativeType : FIXED_ SYSSTRING_ '[' int32 ']'", +"nativeType : FIXED_ ARRAY_ '[' int32 ']' nativeType", +"nativeType : VARIANT_", +"nativeType : CURRENCY_", +"nativeType : SYSCHAR_", +"nativeType : VOID_", +"nativeType : BOOL_", +"nativeType : INT8_", +"nativeType : INT16_", +"nativeType : INT32_", +"nativeType : INT64_", +"nativeType : FLOAT32_", +"nativeType : FLOAT64_", +"nativeType : ERROR_", +"nativeType : UNSIGNED_ INT8_", +"nativeType : UNSIGNED_ INT16_", +"nativeType : UNSIGNED_ INT32_", +"nativeType : UNSIGNED_ INT64_", +"nativeType : UINT8_", +"nativeType : UINT16_", +"nativeType : UINT32_", +"nativeType : UINT64_", +"nativeType : nativeType '*'", +"nativeType : nativeType '[' ']'", +"nativeType : nativeType '[' int32 ']'", +"nativeType : nativeType '[' int32 '+' int32 ']'", +"nativeType : nativeType '[' '+' int32 ']'", +"nativeType : DECIMAL_", +"nativeType : DATE_", +"nativeType : BSTR_", +"nativeType : LPSTR_", +"nativeType : LPWSTR_", +"nativeType : LPTSTR_", +"nativeType : OBJECTREF_", +"nativeType : IUNKNOWN_ iidParamIndex", +"nativeType : IDISPATCH_ iidParamIndex", +"nativeType : STRUCT_", +"nativeType : INTERFACE_ iidParamIndex", +"nativeType : SAFEARRAY_ variantType", +"nativeType : SAFEARRAY_ variantType ',' compQstring", +"nativeType : INT_", +"nativeType : UNSIGNED_ INT_", +"nativeType : UINT_", +"nativeType : NESTED_ STRUCT_", +"nativeType : BYVALSTR_", +"nativeType : ANSI_ BSTR_", +"nativeType : TBSTR_", +"nativeType : VARIANT_ BOOL_", +"nativeType : METHOD_", +"nativeType : AS_ ANY_", +"nativeType : LPSTRUCT_", +"nativeType : TYPEDEF_TS", +"iidParamIndex :", +"iidParamIndex : '(' IIDPARAM_ '=' int32 ')'", +"variantType :", +"variantType : NULL_", +"variantType : VARIANT_", +"variantType : CURRENCY_", +"variantType : VOID_", +"variantType : BOOL_", +"variantType : INT8_", +"variantType : INT16_", +"variantType : INT32_", +"variantType : INT64_", +"variantType : FLOAT32_", +"variantType : FLOAT64_", +"variantType : UNSIGNED_ INT8_", +"variantType : UNSIGNED_ INT16_", +"variantType : UNSIGNED_ INT32_", +"variantType : UNSIGNED_ INT64_", +"variantType : UINT8_", +"variantType : UINT16_", +"variantType : UINT32_", +"variantType : UINT64_", +"variantType : '*'", +"variantType : variantType '[' ']'", +"variantType : variantType VECTOR_", +"variantType : variantType '&'", +"variantType : DECIMAL_", +"variantType : DATE_", +"variantType : BSTR_", +"variantType : LPSTR_", +"variantType : LPWSTR_", +"variantType : IUNKNOWN_", +"variantType : IDISPATCH_", +"variantType : SAFEARRAY_", +"variantType : INT_", +"variantType : UNSIGNED_ INT_", +"variantType : UINT_", +"variantType : ERROR_", +"variantType : HRESULT_", +"variantType : CARRAY_", +"variantType : USERDEFINED_", +"variantType : RECORD_", +"variantType : FILETIME_", +"variantType : BLOB_", +"variantType : STREAM_", +"variantType : STORAGE_", +"variantType : STREAMED_OBJECT_", +"variantType : STORED_OBJECT_", +"variantType : BLOB_OBJECT_", +"variantType : CF_", +"variantType : CLSID_", +"type : CLASS_ className", +"type : OBJECT_", +"type : VALUE_ CLASS_ className", +"type : VALUETYPE_ className", +"type : constTypeArg", +"type : type '[' ']'", +"type : type '[' bounds1 ']'", +"type : type '&'", +"type : type '*'", +"type : type PINNED_", +"type : type MODREQ_ '(' typeSpec ')'", +"type : type MODOPT_ '(' typeSpec ')'", +"type : methodSpec callConv type '*' '(' sigArgs0 ')'", +"type : type '<' tyArgs1 '>'", +"type : '!' '!' int32", +"type : '!' int32", +"type : '!' '!' dottedName", +"type : '!' dottedName", +"type : TYPEDREF_", +"type : VOID_", +"type : NATIVE_ INT_", +"type : NATIVE_ UNSIGNED_ INT_", +"type : NATIVE_ UINT_", +"type : simpleType", +"type : ELLIPSIS type", +"simpleType : CHAR_", +"simpleType : STRING_", +"simpleType : BOOL_", +"simpleType : INT8_", +"simpleType : INT16_", +"simpleType : INT32_", +"simpleType : INT64_", +"simpleType : FLOAT32_", +"simpleType : FLOAT64_", +"simpleType : UNSIGNED_ INT8_", +"simpleType : UNSIGNED_ INT16_", +"simpleType : UNSIGNED_ INT32_", +"simpleType : UNSIGNED_ INT64_", +"simpleType : UINT8_", +"simpleType : UINT16_", +"simpleType : UINT32_", +"simpleType : UINT64_", +"simpleType : TYPEDEF_TS", +"bounds1 : bound", +"bounds1 : bounds1 ',' bound", +"bound :", +"bound : ELLIPSIS", +"bound : int32", +"bound : int32 ELLIPSIS int32", +"bound : int32 ELLIPSIS", +"secDecl : _PERMISSION secAction typeSpec '(' nameValPairs ')'", +"secDecl : _PERMISSION secAction typeSpec '=' '{' customBlobDescr '}'", +"secDecl : _PERMISSION secAction typeSpec", +"secDecl : psetHead bytes ')'", +"secDecl : _PERMISSIONSET secAction compQstring", +"secDecl : _PERMISSIONSET secAction '=' '{' secAttrSetBlob '}'", +"secAttrSetBlob :", +"secAttrSetBlob : secAttrBlob", +"secAttrSetBlob : secAttrBlob ',' secAttrSetBlob", +"secAttrBlob : typeSpec '=' '{' customBlobNVPairs '}'", +"secAttrBlob : CLASS_ SQSTRING '=' '{' customBlobNVPairs '}'", +"psetHead : _PERMISSIONSET secAction '=' '('", +"psetHead : _PERMISSIONSET secAction BYTEARRAY_ '('", +"nameValPairs : nameValPair", +"nameValPairs : nameValPair ',' nameValPairs", +"nameValPair : compQstring '=' caValue", +"truefalse : TRUE_", +"truefalse : FALSE_", +"caValue : truefalse", +"caValue : int32", +"caValue : INT32_ '(' int32 ')'", +"caValue : compQstring", +"caValue : className '(' INT8_ ':' int32 ')'", +"caValue : className '(' INT16_ ':' int32 ')'", +"caValue : className '(' INT32_ ':' int32 ')'", +"caValue : className '(' int32 ')'", +"secAction : REQUEST_", +"secAction : DEMAND_", +"secAction : ASSERT_", +"secAction : DENY_", +"secAction : PERMITONLY_", +"secAction : LINKCHECK_", +"secAction : INHERITCHECK_", +"secAction : REQMIN_", +"secAction : REQOPT_", +"secAction : REQREFUSE_", +"secAction : PREJITGRANT_", +"secAction : PREJITDENY_", +"secAction : NONCASDEMAND_", +"secAction : NONCASLINKDEMAND_", +"secAction : NONCASINHERITANCE_", +"esHead : _LINE", +"esHead : P_LINE", +"extSourceSpec : esHead int32 SQSTRING", +"extSourceSpec : esHead int32", +"extSourceSpec : esHead int32 ':' int32 SQSTRING", +"extSourceSpec : esHead int32 ':' int32", +"extSourceSpec : esHead int32 ':' int32 ',' int32 SQSTRING", +"extSourceSpec : esHead int32 ':' int32 ',' int32", +"extSourceSpec : esHead int32 ',' int32 ':' int32 SQSTRING", +"extSourceSpec : esHead int32 ',' int32 ':' int32", +"extSourceSpec : esHead int32 ',' int32 ':' int32 ',' int32 SQSTRING", +"extSourceSpec : esHead int32 ',' int32 ':' int32 ',' int32", +"extSourceSpec : esHead int32 QSTRING", +"fileDecl : _FILE fileAttr dottedName fileEntry hashHead bytes ')' fileEntry", +"fileDecl : _FILE fileAttr dottedName fileEntry", +"fileAttr :", +"fileAttr : fileAttr NOMETADATA_", +"fileEntry :", +"fileEntry : _ENTRYPOINT", +"hashHead : _HASH '=' '('", +"assemblyHead : _ASSEMBLY asmAttr dottedName", +"asmAttr :", +"asmAttr : asmAttr RETARGETABLE_", +"asmAttr : asmAttr WINDOWSRUNTIME_", +"asmAttr : asmAttr NOPLATFORM_", +"asmAttr : asmAttr LEGACY_ LIBRARY_", +"asmAttr : asmAttr CIL_", +"asmAttr : asmAttr X86_", +"asmAttr : asmAttr AMD64_", +"asmAttr : asmAttr ARM_", +"asmAttr : asmAttr ARM64_", +"assemblyDecls :", +"assemblyDecls : assemblyDecls assemblyDecl", +"assemblyDecl : _HASH ALGORITHM_ int32", +"assemblyDecl : secDecl", +"assemblyDecl : asmOrRefDecl", +"intOrWildcard : int32", +"intOrWildcard : '*'", +"asmOrRefDecl : publicKeyHead bytes ')'", +"asmOrRefDecl : _VER intOrWildcard ':' intOrWildcard ':' intOrWildcard ':' intOrWildcard", +"asmOrRefDecl : _LOCALE compQstring", +"asmOrRefDecl : localeHead bytes ')'", +"asmOrRefDecl : customAttrDecl", +"asmOrRefDecl : compControl", +"publicKeyHead : _PUBLICKEY '=' '('", +"publicKeyTokenHead : _PUBLICKEYTOKEN '=' '('", +"localeHead : _LOCALE '=' '('", +"assemblyRefHead : _ASSEMBLY EXTERN_ asmAttr dottedName", +"assemblyRefHead : _ASSEMBLY EXTERN_ asmAttr dottedName AS_ dottedName", +"assemblyRefDecls :", +"assemblyRefDecls : assemblyRefDecls assemblyRefDecl", +"assemblyRefDecl : hashHead bytes ')'", +"assemblyRefDecl : asmOrRefDecl", +"assemblyRefDecl : publicKeyTokenHead bytes ')'", +"assemblyRefDecl : AUTO_", +"exptypeHead : _CLASS EXTERN_ exptAttr dottedName", +"exportHead : _EXPORT exptAttr dottedName", +"exptAttr :", +"exptAttr : exptAttr PRIVATE_", +"exptAttr : exptAttr PUBLIC_", +"exptAttr : exptAttr FORWARDER_", +"exptAttr : exptAttr NESTED_ PUBLIC_", +"exptAttr : exptAttr NESTED_ PRIVATE_", +"exptAttr : exptAttr NESTED_ FAMILY_", +"exptAttr : exptAttr NESTED_ ASSEMBLY_", +"exptAttr : exptAttr NESTED_ FAMANDASSEM_", +"exptAttr : exptAttr NESTED_ FAMORASSEM_", +"exptypeDecls :", +"exptypeDecls : exptypeDecls exptypeDecl", +"exptypeDecl : _FILE dottedName", +"exptypeDecl : _CLASS EXTERN_ slashedName", +"exptypeDecl : _ASSEMBLY EXTERN_ dottedName", +"exptypeDecl : MDTOKEN_ '(' int32 ')'", +"exptypeDecl : _CLASS int32", +"exptypeDecl : customAttrDecl", +"exptypeDecl : compControl", +"manifestResHead : _MRESOURCE manresAttr dottedName", +"manifestResHead : _MRESOURCE manresAttr dottedName AS_ dottedName", +"manresAttr :", +"manresAttr : manresAttr PUBLIC_", +"manresAttr : manresAttr PRIVATE_", +"manifestResDecls :", +"manifestResDecls : manifestResDecls manifestResDecl", +"manifestResDecl : _FILE dottedName AT_ int32", +"manifestResDecl : _ASSEMBLY EXTERN_ dottedName", +"manifestResDecl : customAttrDecl", +"manifestResDecl : compControl", -#ifdef YYDEBUG /* RRR - 10/9/85 */ -char yytokbuf[20]; -# ifndef YYDBFLG -# define YYDBFLG (yydebug) -# endif -# define yyprintf(a, b, c, d) if (YYDBFLG) YYPRINT(a, b, c, d) -#else -# define yyprintf(a, b, c, d) +}; #endif -#ifndef YYPRINT -#define YYPRINT printf +#if YYDEBUG +int yydebug; #endif -/* parser for yacc output */ +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; +int yynerrs; -#ifdef YYDUMP -int yydump = 1; /* 1 for dumping */ -void yydumpinfo(void); -#endif -#ifdef YYDEBUG -YYSTATIC int yydebug = 0; /* 1 for debugging */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +YYLTYPE yyloc; /* position returned by actions */ +YYLTYPE yylloc; /* position from the lexer */ #endif -YYSTATIC YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */ -YYSTATIC short yys[YYMAXDEPTH]; /* the parse stack */ -#if ! defined(YYRECURSIVE) -YYSTATIC YYAPI_TOKENTYPE YYAPI_TOKENNAME = YYAPI_TOKENNONE; -#if defined(YYAPI_VALUETYPE) -// YYSTATIC YYAPI_VALUETYPE YYAPI_VALUENAME; FIX -#endif -YYSTATIC int yynerrs = 0; /* number of errors */ -YYSTATIC short yyerrflag = 0; /* error recovery flag */ -#endif +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +#ifndef YYLLOC_DEFAULT +#define YYLLOC_DEFAULT(loc, rhs, n) \ +do \ +{ \ + if (n == 0) \ + { \ + (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ + (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ + (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ + (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ + } \ + else \ + { \ + (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ + (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ + (loc).last_line = YYRHSLOC(rhs, n).last_line; \ + (loc).last_column = YYRHSLOC(rhs, n).last_column; \ + } \ +} while (0) +#endif /* YYLLOC_DEFAULT */ +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +#if YYBTYACC -#ifdef YYRECOVER -/* -** yyscpy : copy f onto t and return a ptr to the null terminator at the -** end of t. -*/ -YYSTATIC char *yyscpy(register char*t, register char*f) - { - while(*t = *f++) - t++; - return(t); /* ptr to the null char */ - } +#ifndef YYLVQUEUEGROWTH +#define YYLVQUEUEGROWTH 32 #endif +#endif /* YYBTYACC */ -#ifndef YYNEAR -#define YYNEAR -#endif -#ifndef YYPASCAL -#define YYPASCAL +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 #endif -#ifndef YYLOCAL -#define YYLOCAL #endif -#if ! defined YYPARSER -#define YYPARSER yyparse + +#ifndef YYINITSTACKSIZE +#define YYINITSTACKSIZE 200 #endif -#if ! defined YYLEX -#define YYLEX yylex + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYLTYPE *p_base; + YYLTYPE *p_mark; #endif +} YYSTACKDATA; +#if YYBTYACC -#if defined(YYRECURSIVE) +struct YYParseState_s +{ + struct YYParseState_s *save; /* Previously saved parser state */ + YYSTACKDATA yystack; /* saved parser stack */ + int state; /* saved parser state */ + int errflag; /* saved error recovery status */ + int lexeme; /* saved index of the conflict lexeme in the lexical queue */ + YYINT ctry; /* saved index in yyctable[] for this conflict */ +}; +typedef struct YYParseState_s YYParseState; +#endif /* YYBTYACC */ +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#if YYBTYACC - YYSTATIC YYAPI_TOKENTYPE YYAPI_TOKENNAME = YYAPI_TOKENNONE; - #if defined(YYAPI_VALUETYPE) - YYSTATIC YYAPI_VALUETYPE YYAPI_VALUENAME; - #endif - YYSTATIC int yynerrs = 0; /* number of errors */ - YYSTATIC short yyerrflag = 0; /* error recovery flag */ +/* Current parser state */ +static YYParseState *yyps = 0; - YYSTATIC short yyn; - YYSTATIC short yystate = 0; - YYSTATIC short *yyps= &yys[-1]; - YYSTATIC YYSTYPE *yypv= &yyv[-1]; - YYSTATIC short yyj; - YYSTATIC short yym; +/* yypath != NULL: do the full parse, starting at *yypath parser state. */ +static YYParseState *yypath = 0; -#endif +/* Base of the lexical value queue */ +static YYSTYPE *yylvals = 0; -#pragma warning(disable:102) -YYLOCAL YYNEAR YYPASCAL YYPARSER() -{ -#if ! defined(YYRECURSIVE) +/* Current position at lexical value queue */ +static YYSTYPE *yylvp = 0; - register short yyn; - short yystate, *yyps; - YYSTYPE *yypv; - short yyj, yym; +/* End position of lexical value queue */ +static YYSTYPE *yylve = 0; - YYAPI_TOKENNAME = YYAPI_TOKENNONE; - yystate = 0; +/* The last allocated position at the lexical value queue */ +static YYSTYPE *yylvlim = 0; -#ifdef _PREFAST_ -#pragma warning(push) -#pragma warning(disable:6200) // Index '-1' is out of valid index range...for non-stack buffer... -#endif - yyps= &yys[-1]; - yypv= &yyv[-1]; -#ifdef _PREFAST_ -#pragma warning(pop) -#endif +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +/* Base of the lexical position queue */ +static YYLTYPE *yylpsns = 0; + +/* Current position at lexical position queue */ +static YYLTYPE *yylpp = 0; +/* End position of lexical position queue */ +static YYLTYPE *yylpe = 0; + +/* The last allocated position at the lexical position queue */ +static YYLTYPE *yylplim = 0; #endif -#ifdef YYDUMP - yydumpinfo(); +/* Current position at lexical token queue */ +static YYINT *yylexp = 0; + +static YYINT *yylexemes = 0; +#endif /* YYBTYACC */ +#line 2113 "asmparse.y" + + +#include "grammar_after.cpp" +#line 8471 "asmparse.cpp" + +/* For use in generated program */ +#define yydepth (int)(yystack.s_mark - yystack.s_base) +#if YYBTYACC +#define yytrial (yyps->save) +#endif /* YYBTYACC */ + +#if YYDEBUG +#include /* needed for printf */ #endif - yystack: /* put a state and value onto the stack */ -#ifdef YYDEBUG - if(YYAPI_TOKENNAME == YYAPI_TOKENNONE) { - yyprintf( "state %d, token # '%d'\n", yystate, -1, 0 ); - } - else { - yyprintf( "state %d, token # '%s'\n", yystate, YYAPI_TOKENSTR(YYAPI_TOKENNAME), 0 ); - } +#include /* needed for malloc, etc */ +#include /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYLTYPE *newps; #endif - if( ++yyps > &yys[YYMAXDEPTH] ) { - yyerror( "yacc stack overflow" ); - return(1); - } - *yyps = yystate; - ++yypv; - *yypv = yyval; + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; -yynewstate: + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; - yyn = YYPACT[yystate]; + data->s_base = newss; + data->s_mark = newss + i; - if( yyn <= YYFLAG ) { /* simple state, no lookahead */ - goto yydefault; - } - if( YYAPI_TOKENNAME == YYAPI_TOKENNONE ) { /* need a lookahead */ - YYAPI_TOKENNAME = YYLEX(); - YYAPI_CALLAFTERYYLEX(YYAPI_TOKENNAME); - } - if( ((yyn += (short)YYAPI_TOKENEME(YYAPI_TOKENNAME)) < 0) || (yyn >= YYLAST) ) { - goto yydefault; - } - if( YYCHK[ yyn = YYACT[ yyn ] ] == YYAPI_TOKENEME(YYAPI_TOKENNAME) ) { /* valid shift */ - yyval = YYAPI_VALUEOF(YYAPI_VALUENAME); - yystate = yyn; - yyprintf( "SHIFT: saw token '%s', now in state %4d\n", YYAPI_TOKENSTR(YYAPI_TOKENNAME), yystate, 0 ); - YYAPI_TOKENNAME = YYAPI_TOKENNONE; - if( yyerrflag > 0 ) { - --yyerrflag; - } - goto yystack; - } + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; - yydefault: - /* default state action */ + data->l_base = newvs; + data->l_mark = newvs + i; - if( (yyn = YYDEF[yystate]) == -2 ) { - register YYCONST short *yyxi; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); + if (newps == 0) + return YYENOMEM; - if( YYAPI_TOKENNAME == YYAPI_TOKENNONE ) { - YYAPI_TOKENNAME = YYLEX(); - YYAPI_CALLAFTERYYLEX(YYAPI_TOKENNAME); - yyprintf("LOOKAHEAD: token '%s'\n", YYAPI_TOKENSTR(YYAPI_TOKENNAME), 0, 0); - } -/* -** search exception table, we find a -1 followed by the current state. -** if we find one, we'll look through terminal,state pairs. if we find -** a terminal which matches the current one, we have a match. -** the exception table is when we have a reduce on a terminal. -*/ + data->p_base = newps; + data->p_mark = newps + i; +#endif + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); +#endif + return 0; +} -#if YYOPTTIME - yyxi = yyexca + yyexcaind[yystate]; - while(( *yyxi != YYAPI_TOKENEME(YYAPI_TOKENNAME) ) && ( *yyxi >= 0 )){ - yyxi += 2; - } +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + free(data->p_base); +#endif + memset(data, 0, sizeof(*data)); +} #else - for(yyxi = yyexca; - (*yyxi != (-1)) || (yyxi[1] != yystate); - yyxi += 2 - ) { - ; /* VOID */ - } +#define yyfreestack(data) /* nothing */ +#endif /* YYPURE || defined(YY_NO_LEAKS) */ +#if YYBTYACC - while( *(yyxi += 2) >= 0 ){ - if( *yyxi == YYAPI_TOKENEME(YYAPI_TOKENNAME) ) { - break; - } - } +static YYParseState * +yyNewState(unsigned size) +{ + YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); + if (p == NULL) return NULL; + + p->yystack.stacksize = size; + if (size == 0) + { + p->yystack.s_base = NULL; + p->yystack.l_base = NULL; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + p->yystack.p_base = NULL; +#endif + return p; + } + p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); + if (p->yystack.s_base == NULL) return NULL; + p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); + if (p->yystack.l_base == NULL) return NULL; + memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); + if (p->yystack.p_base == NULL) return NULL; + memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif - if( (yyn = yyxi[1]) < 0 ) { - return(0); /* accept */ - } - } - if( yyn == 0 ){ /* error */ - /* error ... attempt to resume parsing */ + return p; +} - switch( yyerrflag ){ +static void +yyFreeState(YYParseState *p) +{ + yyfreestack(&p->yystack); + free(p); +} +#endif /* YYBTYACC */ - case 0: /* brand new error */ -#ifdef YYRECOVER - { - register int i,j; +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab +#if YYBTYACC +#define YYVALID do { if (yyps->save) goto yyvalid; } while(0) +#define YYVALID_NESTED do { if (yyps->save && \ + yyps->save->save == 0) goto yyvalid; } while(0) +#endif /* YYBTYACC */ - for(i = 0; - (yyrecover[i] != -1000) && (yystate > yyrecover[i]); - i += 3 - ) { - ; - } - if(yystate == yyrecover[i]) { - yyprintf("recovered, from state %d to state %d on token # %d\n", - yystate,yyrecover[i+2],yyrecover[i+1] - ); - j = yyrecover[i + 1]; - if(j < 0) { - /* - ** here we have one of the injection set, so we're not quite - ** sure that the next valid thing will be a shift. so we'll - ** count it as an error and continue. - ** actually we're not absolutely sure that the next token - ** we were supposed to get is the one when j > 0. for example, - ** for(+) {;} error recovery with yyerrflag always set, stops - ** after inserting one ; before the +. at the point of the +, - ** we're pretty sure the guy wants a 'for' loop. without - ** setting the flag, when we're almost absolutely sure, we'll - ** give him one, since the only thing we can shift on this - ** error is after finding an expression followed by a + - */ - yyerrflag++; - j = -j; - } - if(yyerrflag <= 1) { /* only on first insertion */ - yyrecerr(YYAPI_TOKENNAME, j); /* what was, what should be first */ - } - yyval = yyeval(j); - yystate = yyrecover[i + 2]; - goto yystack; - } - } +int +YYPARSE_DECL() +{ + int yym, yyn, yystate, yyresult; +#if YYBTYACC + int yynewerrflag; + YYParseState *yyerrctx = NULL; +#endif /* YYBTYACC */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif - yyerror("syntax error"); +#if YYDEBUG + const char *yys; - yyerrlab: - ++yynerrs; - FALLTHROUGH; - case 1: - case 2: /* incompletely recovered error ... try again */ + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } + if (yydebug) + fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); +#endif +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); +#endif - yyerrflag = 3; +#if YYBTYACC + yyps = yyNewState(0); if (yyps == 0) goto yyenomem; + yyps->save = 0; +#endif /* YYBTYACC */ + yym = 0; + /* yyn is set below */ + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; - /* find a state where "error" is a legal shift action */ +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif - while ( yyps >= yys ) { - yyn = YYPACT[*yyps] + YYERRCODE; - if( yyn>= 0 && yyn < YYLAST && YYCHK[YYACT[yyn]] == YYERRCODE ){ - yystate = YYACT[yyn]; /* simulate a shift of "error" */ - yyprintf( "SHIFT 'error': now in state %4d\n", yystate, 0, 0 ); - goto yystack; - } - yyn = YYPACT[*yyps]; + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yystack.p_mark = yystack.p_base; +#endif + yystate = 0; + *yystack.s_mark = 0; - /* the current yyps has no shift onn "error", pop stack */ +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { +#if YYBTYACC + do { + if (yylvp < yylve) + { + /* we're currently re-reading tokens */ + yylval = *yylvp++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylloc = *yylpp++; +#endif + yychar = *yylexp++; + break; + } + if (yyps->save) + { + /* in trial mode; save scanner results for future parse attempts */ + if (yylvp == yylvlim) + { /* Enlarge lexical value queue */ + size_t p = (size_t) (yylvp - yylvals); + size_t s = (size_t) (yylvlim - yylvals); - yyprintf( "error recovery pops state %4d, uncovers %4d\n", *yyps, yyps[-1], 0 ); - --yyps; - --yypv; - } + s += YYLVQUEUEGROWTH; + if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; + if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; +#endif + yylvp = yylve = yylvals + p; + yylvlim = yylvals + s; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp = yylpe = yylpsns + p; + yylplim = yylpsns + s; +#endif + yylexp = yylexemes + p; + } + *yylexp = (YYINT) YYLEX; + *yylvp++ = yylval; + yylve++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *yylpp++ = yylloc; + yylpe++; +#endif + yychar = *yylexp++; + break; + } + /* normal operation, no conflict encountered */ +#endif /* YYBTYACC */ + yychar = YYLEX; +#if YYBTYACC + } while (0); +#endif /* YYBTYACC */ + if (yychar < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; + fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", + YYDEBUGSTR, yydepth, yystate, yychar, yys); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ + fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); +#endif + fputc('\n', stderr); + } +#endif + } +#if YYBTYACC - /* there is no state on the stack with an error shift ... abort */ + /* Do we have a conflict? */ + if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) + { + YYINT ctry; - yyabort: - return(1); + if (yypath) + { + YYParseState *save; +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", + YYDEBUGSTR, yydepth, yystate); +#endif + /* Switch to the next conflict context */ + save = yypath; + yypath = save->save; + save->save = NULL; + ctry = save->ctry; + if (save->state != yystate) YYABORT; + yyFreeState(save); + } + else + { - case 3: /* no shift yet; clobber input char */ + /* Unresolved conflict - start/continue trial parse */ + YYParseState *save; +#if YYDEBUG + if (yydebug) + { + fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); + if (yyps->save) + fputs("ALREADY in conflict, continuing trial parse.\n", stderr); + else + fputs("Starting trial parse.\n", stderr); + } +#endif + save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); + if (save == NULL) goto yyenomem; + save->save = yyps->save; + save->state = yystate; + save->errflag = yyerrflag; + save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); + memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); + save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); + memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); + memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif + ctry = yytable[yyn]; + if (yyctable[ctry] == -1) + { +#if YYDEBUG + if (yydebug && yychar >= YYEOF) + fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); +#endif + ctry++; + } + save->ctry = ctry; + if (yyps->save == NULL) + { + /* If this is a first conflict in the stack, start saving lexemes */ + if (!yylexemes) + { + yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); + if (yylexemes == NULL) goto yyenomem; + yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); + if (yylvals == NULL) goto yyenomem; + yylvlim = yylvals + YYLVQUEUEGROWTH; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); + if (yylpsns == NULL) goto yyenomem; + yylplim = yylpsns + YYLVQUEUEGROWTH; +#endif + } + if (yylvp == yylve) + { + yylvp = yylve = yylvals; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp = yylpe = yylpsns; +#endif + yylexp = yylexemes; + if (yychar >= YYEOF) + { + *yylve++ = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *yylpe++ = yylloc; +#endif + *yylexp = (YYINT) yychar; + yychar = YYEMPTY; + } + } + } + if (yychar >= YYEOF) + { + yylvp--; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp--; +#endif + yylexp--; + yychar = YYEMPTY; + } + save->lexeme = (int) (yylvp - yylvals); + yyps->save = save; + } + if (yytable[yyn] == ctry) + { +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", + YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); +#endif + if (yychar < 0) + { + yylvp++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp++; +#endif + yylexp++; + } + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + goto yyoverflow; + yystate = yyctable[ctry]; + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *++yystack.p_mark = yylloc; +#endif + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + else + { + yyn = yyctable[ctry]; + goto yyreduce; + } + } /* End of code dealing with conflicts */ +#endif /* YYBTYACC */ + if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) + { +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", + YYDEBUGSTR, yydepth, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *++yystack.p_mark = yylloc; +#endif + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag != 0) goto yyinrecovery; +#if YYBTYACC + + yynewerrflag = 1; + goto yyerrhandler; + goto yyerrlab; /* redundant goto avoids 'unused label' warning */ + +yyerrlab: + /* explicit YYERROR from an action -- pop the rhs of the rule reduced + * before looking for error recovery */ + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yystack.p_mark -= yym; +#endif + + yynewerrflag = 0; +yyerrhandler: + while (yyps->save) + { + int ctry; + YYParseState *save = yyps->save; +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", + YYDEBUGSTR, yydepth, yystate, yyps->save->state, + (int)(yylvp - yylvals - yyps->save->lexeme)); +#endif + /* Memorize most forward-looking error state in case it's really an error. */ + if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) + { + /* Free old saved error context state */ + if (yyerrctx) yyFreeState(yyerrctx); + /* Create and fill out new saved error context state */ + yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); + if (yyerrctx == NULL) goto yyenomem; + yyerrctx->save = yyps->save; + yyerrctx->state = yystate; + yyerrctx->errflag = yyerrflag; + yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); + memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); + yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); + memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); + memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif + yyerrctx->lexeme = (int) (yylvp - yylvals); + } + yylvp = yylvals + save->lexeme; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp = yylpsns + save->lexeme; +#endif + yylexp = yylexemes + save->lexeme; + yychar = YYEMPTY; + yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); + memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); + yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); + memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); + memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif + ctry = ++save->ctry; + yystate = save->state; + /* We tried shift, try reduce now */ + if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; + yyps->save = save->save; + save->save = NULL; + yyFreeState(save); - yyprintf( "error recovery discards token '%s'\n", YYAPI_TOKENSTR(YYAPI_TOKENNAME), 0, 0 ); + /* Nothing left on the stack -- error */ + if (!yyps->save) + { +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", + YYPREFIX, yydepth); +#endif + /* Restore state as it was in the most forward-advanced error */ + yylvp = yylvals + yyerrctx->lexeme; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp = yylpsns + yyerrctx->lexeme; +#endif + yylexp = yylexemes + yyerrctx->lexeme; + yychar = yylexp[-1]; + yylval = yylvp[-1]; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylloc = yylpp[-1]; +#endif + yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); + memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); + yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); + memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); + memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif + yystate = yyerrctx->state; + yyFreeState(yyerrctx); + yyerrctx = NULL; + } + yynewerrflag = 1; + } + if (yynewerrflag == 0) goto yyinrecovery; +#endif /* YYBTYACC */ + + YYERROR_CALL("syntax error"); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ +#endif - if( YYAPI_TOKENEME(YYAPI_TOKENNAME) == 0 ) goto yyabort; /* don't discard EOF, quit */ - YYAPI_TOKENNAME = YYAPI_TOKENNONE; - goto yynewstate; /* try again in the same state */ - } - } +#if !YYBTYACC + goto yyerrlab; /* redundant goto avoids 'unused label' warning */ +yyerrlab: +#endif + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) + { +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", + YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + /* lookahead position is error end position */ + yyerror_loc_range[2] = yylloc; + YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ + *++yystack.p_mark = yyloc; +#endif + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", + YYDEBUGSTR, yydepth, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + /* the current TOS position is the error start position */ + yyerror_loc_range[1] = *yystack.p_mark; +#endif +#if defined(YYDESTRUCT_CALL) +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYDESTRUCT_CALL("error: discarding state", + yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); +#else + YYDESTRUCT_CALL("error: discarding state", + yystos[*yystack.s_mark], yystack.l_mark); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +#endif /* defined(YYDESTRUCT_CALL) */ + --yystack.s_mark; + --yystack.l_mark; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + --yystack.p_mark; +#endif + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; + fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", + YYDEBUGSTR, yydepth, yystate, yychar, yys); + } +#endif +#if defined(YYDESTRUCT_CALL) +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); +#else + YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +#endif /* defined(YYDESTRUCT_CALL) */ + yychar = YYEMPTY; + goto yyloop; + } - /* reduction by production yyn */ yyreduce: - { - register YYSTYPE *yypvt; - yypvt = yypv; - yyps -= YYR2[yyn]; - yypv -= YYR2[yyn]; - yyval = yypv[1]; - yyprintf("REDUCE: rule %4d, popped %2d tokens, uncovered state %4d, ",yyn, YYR2[yyn], *yyps); - yym = yyn; - yyn = (short)YYR1[yyn]; /* consult goto table to find next state */ - yyj = YYPGO[yyn] + *yyps + 1; - if( (yyj >= YYLAST) || (YYCHK[ yystate = YYACT[yyj] ] != -yyn) ) { - yystate = YYACT[YYPGO[yyn]]; - } - yyprintf("goto state %4d\n", yystate, 0, 0); -#ifdef YYDUMP - yydumpinfo(); + yym = yylen[yyn]; +#if YYDEBUG + if (yydebug) + { + fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", + YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ + if (yym > 0) + { + int i; + fputc('<', stderr); + for (i = yym; i > 0; i--) + { + if (i != yym) fputs(", ", stderr); + fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], + yystack.l_mark[1-i]), stderr); + } + fputc('>', stderr); + } +#endif + fputc('\n', stderr); + } +#endif + if (yym > 0) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + + /* Perform position reduction */ + memset(&yyloc, 0, sizeof(yyloc)); +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ + { + YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); + /* just in case YYERROR is invoked within the action, save + the start of the rhs as the error start position */ + yyerror_loc_range[1] = yystack.p_mark[1-yym]; + } #endif - switch(yym){ + switch (yyn) + { case 3: -#line 193 "asmparse.y" -{ PASM->EndClass(); } break; -case 4: #line 194 "asmparse.y" -{ PASM->EndNameSpace(); } break; -case 5: + { PASM->EndClass(); } +#line 9144 "asmparse.cpp" +break; +case 4: #line 195 "asmparse.y" -{ if(PASM->m_pCurMethod->m_ulLines[1] ==0) - { PASM->m_pCurMethod->m_ulLines[1] = PASM->m_ulCurLine; - PASM->m_pCurMethod->m_ulColumns[1]=PASM->m_ulCurColumn;} - PASM->EndMethod(); } break; + { PASM->EndNameSpace(); } +#line 9149 "asmparse.cpp" +break; +case 5: +#line 196 "asmparse.y" + { if(PASM->m_pCurMethod->m_ulLines[1] ==0) + { PASM->m_pCurMethod->m_ulLines[1] = PASM->m_ulCurLine; + PASM->m_pCurMethod->m_ulColumns[1]=PASM->m_ulCurColumn;} + PASM->EndMethod(); } +#line 9157 "asmparse.cpp" +break; case 12: -#line 205 "asmparse.y" -{ PASMM->EndAssembly(); } break; -case 13: #line 206 "asmparse.y" -{ PASMM->EndAssembly(); } break; -case 14: + { PASMM->EndAssembly(); } +#line 9162 "asmparse.cpp" +break; +case 13: #line 207 "asmparse.y" -{ PASMM->EndComType(); } break; -case 15: + { PASMM->EndAssembly(); } +#line 9167 "asmparse.cpp" +break; +case 14: #line 208 "asmparse.y" -{ PASMM->EndManifestRes(); } break; + { PASMM->EndComType(); } +#line 9172 "asmparse.cpp" +break; +case 15: +#line 209 "asmparse.y" + { PASMM->EndManifestRes(); } +#line 9177 "asmparse.cpp" +break; case 19: -#line 212 "asmparse.y" -{ -#ifdef _PREFAST_ -#pragma warning(push) -#pragma warning(disable:22011) // Suppress PREFast warning about integer overflow/underflow -#endif - PASM->m_dwSubsystem = yypvt[-0].int32; -#ifdef _PREFAST_ -#pragma warning(pop) -#endif - } break; +#line 213 "asmparse.y" + { +#ifdef _PREFAST_ +#pragma warning(push) +#pragma warning(disable:22011) /* Suppress PREFast warning about integer overflow/underflow */ +#endif + PASM->m_dwSubsystem = yystack.l_mark[0].int32; +#ifdef _PREFAST_ +#pragma warning(pop) +#endif + } +#line 9191 "asmparse.cpp" +break; case 20: -#line 222 "asmparse.y" -{ PASM->m_dwComImageFlags = yypvt[-0].int32; } break; -case 21: #line 223 "asmparse.y" -{ PASM->m_dwFileAlignment = yypvt[-0].int32; - if((yypvt[-0].int32 & (yypvt[-0].int32 - 1))||(yypvt[-0].int32 < 0x200)||(yypvt[-0].int32 > 0x10000)) - PASM->report->error("Invalid file alignment, must be power of 2 from 0x200 to 0x10000\n");} break; + { PASM->m_dwComImageFlags = yystack.l_mark[0].int32; } +#line 9196 "asmparse.cpp" +break; +case 21: +#line 224 "asmparse.y" + { PASM->m_dwFileAlignment = yystack.l_mark[0].int32; + if((yystack.l_mark[0].int32 & (yystack.l_mark[0].int32 - 1))||(yystack.l_mark[0].int32 < 0x200)||(yystack.l_mark[0].int32 > 0x10000)) + PASM->report->error("Invalid file alignment, must be power of 2 from 0x200 to 0x10000\n");} +#line 9203 "asmparse.cpp" +break; case 22: -#line 226 "asmparse.y" -{ PASM->m_stBaseAddress = (ULONGLONG)(*(yypvt[-0].int64)); delete yypvt[-0].int64; - if(PASM->m_stBaseAddress & 0xFFFF) - PASM->report->error("Invalid image base, must be 0x10000-aligned\n");} break; +#line 227 "asmparse.y" + { PASM->m_stBaseAddress = (ULONGLONG)(*(yystack.l_mark[0].int64)); delete yystack.l_mark[0].int64; + if(PASM->m_stBaseAddress & 0xFFFF) + PASM->report->error("Invalid image base, must be 0x10000-aligned\n");} +#line 9210 "asmparse.cpp" +break; case 23: -#line 229 "asmparse.y" -{ PASM->m_stSizeOfStackReserve = (size_t)(*(yypvt[-0].int64)); delete yypvt[-0].int64; } break; +#line 230 "asmparse.y" + { PASM->m_stSizeOfStackReserve = (size_t)(*(yystack.l_mark[0].int64)); delete yystack.l_mark[0].int64; } +#line 9215 "asmparse.cpp" +break; case 28: -#line 234 "asmparse.y" -{ PASM->m_fIsMscorlib = TRUE; } break; +#line 235 "asmparse.y" + { PASM->m_fIsMscorlib = TRUE; } +#line 9220 "asmparse.cpp" +break; case 31: -#line 241 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; -case 32: #line 242 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break; + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 9225 "asmparse.cpp" +break; +case 32: +#line 243 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->append(yystack.l_mark[0].binstr); delete yystack.l_mark[0].binstr; } +#line 9230 "asmparse.cpp" +break; case 33: -#line 245 "asmparse.y" -{ LPCSTRToGuid(yypvt[-0].string,&(PASM->m_guidLang)); } break; -case 34: #line 246 "asmparse.y" -{ LPCSTRToGuid(yypvt[-2].string,&(PASM->m_guidLang)); - LPCSTRToGuid(yypvt[-0].string,&(PASM->m_guidLangVendor));} break; + { LPCSTRToGuid(yystack.l_mark[0].string,&(PASM->m_guidLang)); } +#line 9235 "asmparse.cpp" +break; +case 34: +#line 247 "asmparse.y" + { LPCSTRToGuid(yystack.l_mark[-2].string,&(PASM->m_guidLang)); + LPCSTRToGuid(yystack.l_mark[0].string,&(PASM->m_guidLangVendor));} +#line 9241 "asmparse.cpp" +break; case 35: -#line 248 "asmparse.y" -{ LPCSTRToGuid(yypvt[-4].string,&(PASM->m_guidLang)); - LPCSTRToGuid(yypvt[-2].string,&(PASM->m_guidLangVendor)); - LPCSTRToGuid(yypvt[-2].string,&(PASM->m_guidDoc));} break; +#line 249 "asmparse.y" + { LPCSTRToGuid(yystack.l_mark[-4].string,&(PASM->m_guidLang)); + LPCSTRToGuid(yystack.l_mark[-2].string,&(PASM->m_guidLangVendor)); + LPCSTRToGuid(yystack.l_mark[-2].string,&(PASM->m_guidDoc));} +#line 9248 "asmparse.cpp" +break; case 36: -#line 253 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; -case 37: #line 254 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; + { yyval.string = yystack.l_mark[0].string; } +#line 9253 "asmparse.cpp" +break; +case 37: +#line 255 "asmparse.y" + { yyval.string = yystack.l_mark[0].string; } +#line 9258 "asmparse.cpp" +break; case 38: -#line 257 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; -case 39: #line 258 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; -case 40: + { yyval.string = yystack.l_mark[0].string; } +#line 9263 "asmparse.cpp" +break; +case 39: #line 259 "asmparse.y" -{ yyval.string = newStringWDel(yypvt[-2].string, '.', yypvt[-0].string); } break; + { yyval.string = yystack.l_mark[0].string; } +#line 9268 "asmparse.cpp" +break; +case 40: +#line 260 "asmparse.y" + { yyval.string = newStringWDel(yystack.l_mark[-2].string, '.', yystack.l_mark[0].string); } +#line 9273 "asmparse.cpp" +break; case 41: -#line 262 "asmparse.y" -{ yyval.int32 = yypvt[-0].int32; } break; +#line 263 "asmparse.y" + { yyval.int32 = yystack.l_mark[0].int32; } +#line 9278 "asmparse.cpp" +break; case 42: -#line 265 "asmparse.y" -{ yyval.int64 = yypvt[-0].int64; } break; -case 43: #line 266 "asmparse.y" -{ yyval.int64 = neg ? new __int64(yypvt[-0].int32) : new __int64((unsigned)yypvt[-0].int32); } break; + { yyval.int64 = yystack.l_mark[0].int64; } +#line 9283 "asmparse.cpp" +break; +case 43: +#line 267 "asmparse.y" + { yyval.int64 = neg ? new __int64(yystack.l_mark[0].int32) : new __int64((unsigned)yystack.l_mark[0].int32); } +#line 9288 "asmparse.cpp" +break; case 44: -#line 269 "asmparse.y" -{ yyval.float64 = yypvt[-0].float64; } break; -case 45: #line 270 "asmparse.y" -{ float f; *((__int32*) (&f)) = yypvt[-1].int32; yyval.float64 = new double(f); } break; -case 46: + { yyval.float64 = yystack.l_mark[0].float64; } +#line 9293 "asmparse.cpp" +break; +case 45: #line 271 "asmparse.y" -{ yyval.float64 = (double*) yypvt[-1].int64; } break; + { float f; *((__int32*) (&f)) = yystack.l_mark[-1].int32; yyval.float64 = new double(f); } +#line 9298 "asmparse.cpp" +break; +case 46: +#line 272 "asmparse.y" + { yyval.float64 = (double*) yystack.l_mark[-1].int64; } +#line 9303 "asmparse.cpp" +break; case 47: -#line 275 "asmparse.y" -{ PASM->AddTypeDef(yypvt[-2].binstr,yypvt[-0].string); } break; -case 48: #line 276 "asmparse.y" -{ PASM->AddTypeDef(yypvt[-2].token,yypvt[-0].string); } break; -case 49: + { PASM->AddTypeDef(yystack.l_mark[-2].binstr,yystack.l_mark[0].string); } +#line 9308 "asmparse.cpp" +break; +case 48: #line 277 "asmparse.y" -{ PASM->AddTypeDef(yypvt[-2].token,yypvt[-0].string); } break; -case 50: + { PASM->AddTypeDef(yystack.l_mark[-2].token,yystack.l_mark[0].string); } +#line 9313 "asmparse.cpp" +break; +case 49: #line 278 "asmparse.y" -{ yypvt[-2].cad->tkOwner = 0; PASM->AddTypeDef(yypvt[-2].cad,yypvt[-0].string); } break; -case 51: + { PASM->AddTypeDef(yystack.l_mark[-2].token,yystack.l_mark[0].string); } +#line 9318 "asmparse.cpp" +break; +case 50: #line 279 "asmparse.y" -{ PASM->AddTypeDef(yypvt[-2].cad,yypvt[-0].string); } break; + { yystack.l_mark[-2].cad->tkOwner = 0; PASM->AddTypeDef(yystack.l_mark[-2].cad,yystack.l_mark[0].string); } +#line 9323 "asmparse.cpp" +break; +case 51: +#line 280 "asmparse.y" + { PASM->AddTypeDef(yystack.l_mark[-2].cad,yystack.l_mark[0].string); } +#line 9328 "asmparse.cpp" +break; case 52: -#line 284 "asmparse.y" -{ DefineVar(yypvt[-0].string, NULL); } break; -case 53: #line 285 "asmparse.y" -{ DefineVar(yypvt[-1].string, yypvt[-0].binstr); } break; -case 54: + { DefineVar(yystack.l_mark[0].string, NULL); } +#line 9333 "asmparse.cpp" +break; +case 53: #line 286 "asmparse.y" -{ UndefVar(yypvt[-0].string); } break; -case 55: + { DefineVar(yystack.l_mark[-1].string, yystack.l_mark[0].binstr); } +#line 9338 "asmparse.cpp" +break; +case 54: #line 287 "asmparse.y" -{ SkipToken = !IsVarDefined(yypvt[-0].string); - IfEndif++; - } break; + { UndefVar(yystack.l_mark[0].string); } +#line 9343 "asmparse.cpp" +break; +case 55: +#line 288 "asmparse.y" + { SkipToken = !IsVarDefined(yystack.l_mark[0].string); + IfEndif++; + } +#line 9350 "asmparse.cpp" +break; case 56: -#line 290 "asmparse.y" -{ SkipToken = IsVarDefined(yypvt[-0].string); - IfEndif++; - } break; +#line 291 "asmparse.y" + { SkipToken = IsVarDefined(yystack.l_mark[0].string); + IfEndif++; + } +#line 9357 "asmparse.cpp" +break; case 57: -#line 293 "asmparse.y" -{ if(IfEndif == 1) SkipToken = !SkipToken;} break; -case 58: #line 294 "asmparse.y" -{ if(IfEndif == 0) - PASM->report->error("Unmatched #endif\n"); - else IfEndif--; - } break; + { if(IfEndif == 1) SkipToken = !SkipToken;} +#line 9362 "asmparse.cpp" +break; +case 58: +#line 295 "asmparse.y" + { if(IfEndif == 0) + PASM->report->error("Unmatched #endif\n"); + else IfEndif--; + } +#line 9370 "asmparse.cpp" +break; case 59: -#line 298 "asmparse.y" -{ _ASSERTE(!"yylex should have dealt with this"); } break; -case 60: #line 299 "asmparse.y" -{ } break; + { _ASSERTE(!"yylex should have dealt with this"); } +#line 9375 "asmparse.cpp" +break; +case 60: +#line 300 "asmparse.y" + { } +#line 9380 "asmparse.cpp" +break; case 61: -#line 303 "asmparse.y" -{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-0].token, NULL); } break; -case 62: #line 304 "asmparse.y" -{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-2].token, yypvt[-0].binstr); } break; -case 63: + { yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yystack.l_mark[0].token, NULL); } +#line 9385 "asmparse.cpp" +break; +case 62: #line 305 "asmparse.y" -{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-4].token, yypvt[-1].binstr); } break; -case 64: + { yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yystack.l_mark[-2].token, yystack.l_mark[0].binstr); } +#line 9390 "asmparse.cpp" +break; +case 63: #line 306 "asmparse.y" -{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-2].int32, yypvt[-1].binstr); } break; + { yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yystack.l_mark[-4].token, yystack.l_mark[-1].binstr); } +#line 9395 "asmparse.cpp" +break; +case 64: +#line 307 "asmparse.y" + { yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yystack.l_mark[-2].int32, yystack.l_mark[-1].binstr); } +#line 9400 "asmparse.cpp" +break; case 65: -#line 309 "asmparse.y" -{ yyval.cad = new CustomDescr(yypvt[-2].token, yypvt[-0].token, NULL); } break; -case 66: #line 310 "asmparse.y" -{ yyval.cad = new CustomDescr(yypvt[-4].token, yypvt[-2].token, yypvt[-0].binstr); } break; + { yyval.cad = new CustomDescr(yystack.l_mark[-2].token, yystack.l_mark[0].token, NULL); } +#line 9405 "asmparse.cpp" +break; +case 66: +#line 311 "asmparse.y" + { yyval.cad = new CustomDescr(yystack.l_mark[-4].token, yystack.l_mark[-2].token, yystack.l_mark[0].binstr); } +#line 9410 "asmparse.cpp" +break; case 67: -#line 312 "asmparse.y" -{ yyval.cad = new CustomDescr(yypvt[-6].token, yypvt[-4].token, yypvt[-1].binstr); } break; -case 68: #line 313 "asmparse.y" -{ yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yypvt[-2].int32, yypvt[-1].binstr); } break; + { yyval.cad = new CustomDescr(yystack.l_mark[-6].token, yystack.l_mark[-4].token, yystack.l_mark[-1].binstr); } +#line 9415 "asmparse.cpp" +break; +case 68: +#line 314 "asmparse.y" + { yyval.cad = new CustomDescr(PASM->m_tkCurrentCVOwner, yystack.l_mark[-2].int32, yystack.l_mark[-1].binstr); } +#line 9420 "asmparse.cpp" +break; case 69: -#line 316 "asmparse.y" -{ yyval.int32 = yypvt[-2].token; bParsingByteArray = TRUE; } break; +#line 317 "asmparse.y" + { yyval.int32 = yystack.l_mark[-2].token; bParsingByteArray = TRUE; } +#line 9425 "asmparse.cpp" +break; case 70: -#line 320 "asmparse.y" -{ PASM->m_pCustomDescrList = NULL; - PASM->m_tkCurrentCVOwner = yypvt[-4].token; - yyval.int32 = yypvt[-2].token; bParsingByteArray = TRUE; } break; +#line 321 "asmparse.y" + { PASM->m_pCustomDescrList = NULL; + PASM->m_tkCurrentCVOwner = yystack.l_mark[-4].token; + yyval.int32 = yystack.l_mark[-2].token; bParsingByteArray = TRUE; } +#line 9432 "asmparse.cpp" +break; case 71: -#line 325 "asmparse.y" -{ yyval.token = yypvt[-0].token; } break; +#line 326 "asmparse.y" + { yyval.token = yystack.l_mark[0].token; } +#line 9437 "asmparse.cpp" +break; case 72: -#line 328 "asmparse.y" -{ yyval.token = yypvt[-0].token; } break; -case 73: #line 329 "asmparse.y" -{ yyval.token = yypvt[-0].token; } break; + { yyval.token = yystack.l_mark[0].token; } +#line 9442 "asmparse.cpp" +break; +case 73: +#line 330 "asmparse.y" + { yyval.token = yystack.l_mark[0].token; } +#line 9447 "asmparse.cpp" +break; case 74: -#line 333 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - yyval.binstr->appendInt16(VAL16(nCustomBlobNVPairs)); - yyval.binstr->append(yypvt[-0].binstr); - nCustomBlobNVPairs = 0; } break; +#line 334 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + yyval.binstr->appendInt16(VAL16(nCustomBlobNVPairs)); + yyval.binstr->append(yystack.l_mark[0].binstr); + nCustomBlobNVPairs = 0; } +#line 9455 "asmparse.cpp" +break; case 75: -#line 339 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt16(VAL16(0x0001)); } break; -case 76: #line 340 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - AppendFieldToCustomBlob(yyval.binstr,yypvt[-0].binstr); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt16(VAL16(0x0001)); } +#line 9460 "asmparse.cpp" +break; +case 76: +#line 341 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + AppendFieldToCustomBlob(yyval.binstr,yystack.l_mark[0].binstr); } +#line 9466 "asmparse.cpp" +break; case 77: -#line 342 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; } break; +#line 343 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; } +#line 9471 "asmparse.cpp" +break; case 78: -#line 345 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 346 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 9476 "asmparse.cpp" +break; case 79: -#line 347 "asmparse.y" -{ yyval.binstr = yypvt[-5].binstr; yyval.binstr->appendInt8(yypvt[-4].int32); - yyval.binstr->append(yypvt[-3].binstr); - AppendStringWithLength(yyval.binstr,yypvt[-2].string); - AppendFieldToCustomBlob(yyval.binstr,yypvt[-0].binstr); - nCustomBlobNVPairs++; } break; +#line 348 "asmparse.y" + { yyval.binstr = yystack.l_mark[-5].binstr; yyval.binstr->appendInt8(yystack.l_mark[-4].int32); + yyval.binstr->append(yystack.l_mark[-3].binstr); + AppendStringWithLength(yyval.binstr,yystack.l_mark[-2].string); + AppendFieldToCustomBlob(yyval.binstr,yystack.l_mark[0].binstr); + nCustomBlobNVPairs++; } +#line 9485 "asmparse.cpp" +break; case 80: -#line 352 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; } break; +#line 353 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; } +#line 9490 "asmparse.cpp" +break; case 81: -#line 355 "asmparse.y" -{ yyval.int32 = SERIALIZATION_TYPE_FIELD; } break; -case 82: #line 356 "asmparse.y" -{ yyval.int32 = SERIALIZATION_TYPE_PROPERTY; } break; + { yyval.int32 = SERIALIZATION_TYPE_FIELD; } +#line 9495 "asmparse.cpp" +break; +case 82: +#line 357 "asmparse.y" + { yyval.int32 = SERIALIZATION_TYPE_PROPERTY; } +#line 9500 "asmparse.cpp" +break; case 83: -#line 359 "asmparse.y" -{ if(yypvt[-0].cad->tkOwner && !yypvt[-0].cad->tkInterfacePair) - PASM->DefineCV(yypvt[-0].cad); - else if(PASM->m_pCustomDescrList) - PASM->m_pCustomDescrList->PUSH(yypvt[-0].cad); } break; +#line 360 "asmparse.y" + { if(yystack.l_mark[0].cad->tkOwner && !yystack.l_mark[0].cad->tkInterfacePair) + PASM->DefineCV(yystack.l_mark[0].cad); + else if(PASM->m_pCustomDescrList) + PASM->m_pCustomDescrList->PUSH(yystack.l_mark[0].cad); } +#line 9508 "asmparse.cpp" +break; case 84: -#line 363 "asmparse.y" -{ PASM->DefineCV(yypvt[-0].cad); } break; -case 85: #line 364 "asmparse.y" -{ CustomDescr* pNew = new CustomDescr(yypvt[-0].tdd->m_pCA); - if(pNew->tkOwner == 0) pNew->tkOwner = PASM->m_tkCurrentCVOwner; - if(pNew->tkOwner) - PASM->DefineCV(pNew); - else if(PASM->m_pCustomDescrList) - PASM->m_pCustomDescrList->PUSH(pNew); } break; + { PASM->DefineCV(yystack.l_mark[0].cad); } +#line 9513 "asmparse.cpp" +break; +case 85: +#line 365 "asmparse.y" + { CustomDescr* pNew = new CustomDescr(yystack.l_mark[0].tdd->m_pCA); + if(pNew->tkOwner == 0) pNew->tkOwner = PASM->m_tkCurrentCVOwner; + if(pNew->tkOwner) + PASM->DefineCV(pNew); + else if(PASM->m_pCustomDescrList) + PASM->m_pCustomDescrList->PUSH(pNew); } +#line 9523 "asmparse.cpp" +break; case 86: -#line 372 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; -case 87: #line 373 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); } break; -case 88: + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 9528 "asmparse.cpp" +break; +case 87: #line 374 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TAGGED_OBJECT); } break; -case 89: + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); } +#line 9533 "asmparse.cpp" +break; +case 88: #line 375 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); - AppendStringWithLength(yyval.binstr,yypvt[-0].string); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TAGGED_OBJECT); } +#line 9538 "asmparse.cpp" +break; +case 89: +#line 376 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); + AppendStringWithLength(yyval.binstr,yystack.l_mark[0].string); } +#line 9544 "asmparse.cpp" +break; case 90: -#line 377 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); - AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yypvt[-0].token)); } break; +#line 378 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); + AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yystack.l_mark[0].token)); } +#line 9550 "asmparse.cpp" +break; case 91: -#line 379 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 380 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 9555 "asmparse.cpp" +break; case 92: -#line 384 "asmparse.y" -{ PASMM->SetModuleName(NULL); PASM->m_tkCurrentCVOwner=1; } break; -case 93: #line 385 "asmparse.y" -{ PASMM->SetModuleName(yypvt[-0].string); PASM->m_tkCurrentCVOwner=1; } break; -case 94: + { PASMM->SetModuleName(NULL); PASM->m_tkCurrentCVOwner=1; } +#line 9560 "asmparse.cpp" +break; +case 93: #line 386 "asmparse.y" -{ BinStr* pbs = new BinStr(); - unsigned L = (unsigned)strlen(yypvt[-0].string); - memcpy((char*)(pbs->getBuff(L)),yypvt[-0].string,L); - PASM->EmitImport(pbs); delete pbs;} break; + { PASMM->SetModuleName(yystack.l_mark[0].string); PASM->m_tkCurrentCVOwner=1; } +#line 9565 "asmparse.cpp" +break; +case 94: +#line 387 "asmparse.y" + { BinStr* pbs = new BinStr(); + unsigned L = (unsigned)strlen(yystack.l_mark[0].string); + memcpy((char*)(pbs->getBuff(L)),yystack.l_mark[0].string,L); + PASM->EmitImport(pbs); delete pbs;} +#line 9573 "asmparse.cpp" +break; case 95: -#line 393 "asmparse.y" -{ /*PASM->SetDataSection(); PASM->EmitDataLabel($7);*/ - PASM->m_VTFList.PUSH(new VTFEntry((USHORT)yypvt[-4].int32, (USHORT)yypvt[-2].int32, yypvt[-0].string)); } break; +#line 394 "asmparse.y" + { /*PASM->SetDataSection(); PASM->EmitDataLabel($7);*/ + PASM->m_VTFList.PUSH(new VTFEntry((USHORT)yystack.l_mark[-4].int32, (USHORT)yystack.l_mark[-2].int32, yystack.l_mark[0].string)); } +#line 9579 "asmparse.cpp" +break; case 96: -#line 397 "asmparse.y" -{ yyval.int32 = 0; } break; -case 97: #line 398 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_32BIT; } break; -case 98: + { yyval.int32 = 0; } +#line 9584 "asmparse.cpp" +break; +case 97: #line 399 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_64BIT; } break; -case 99: + { yyval.int32 = yystack.l_mark[-1].int32 | COR_VTABLE_32BIT; } +#line 9589 "asmparse.cpp" +break; +case 98: #line 400 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_FROM_UNMANAGED; } break; -case 100: + { yyval.int32 = yystack.l_mark[-1].int32 | COR_VTABLE_64BIT; } +#line 9594 "asmparse.cpp" +break; +case 99: #line 401 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_CALL_MOST_DERIVED; } break; -case 101: + { yyval.int32 = yystack.l_mark[-1].int32 | COR_VTABLE_FROM_UNMANAGED; } +#line 9599 "asmparse.cpp" +break; +case 100: #line 402 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN; } break; + { yyval.int32 = yystack.l_mark[-1].int32 | COR_VTABLE_CALL_MOST_DERIVED; } +#line 9604 "asmparse.cpp" +break; +case 101: +#line 403 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32 | COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN; } +#line 9609 "asmparse.cpp" +break; case 102: -#line 405 "asmparse.y" -{ PASM->m_pVTable = yypvt[-1].binstr; } break; +#line 406 "asmparse.y" + { PASM->m_pVTable = yystack.l_mark[-1].binstr; } +#line 9614 "asmparse.cpp" +break; case 103: -#line 408 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 409 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 9619 "asmparse.cpp" +break; case 104: -#line 412 "asmparse.y" -{ PASM->StartNameSpace(yypvt[-0].string); } break; +#line 413 "asmparse.y" + { PASM->StartNameSpace(yystack.l_mark[0].string); } +#line 9624 "asmparse.cpp" +break; case 105: -#line 415 "asmparse.y" -{ newclass = TRUE; } break; +#line 416 "asmparse.y" + { newclass = TRUE; } +#line 9629 "asmparse.cpp" +break; case 106: -#line 418 "asmparse.y" -{ if(yypvt[-0].typarlist) FixupConstraints(); - PASM->StartClass(yypvt[-1].string, yypvt[-2].classAttr, yypvt[-0].typarlist); - TyParFixupList.RESET(false); - newclass = FALSE; - } break; +#line 419 "asmparse.y" + { if(yystack.l_mark[0].typarlist) FixupConstraints(); + PASM->StartClass(yystack.l_mark[-1].string, yystack.l_mark[-2].classAttr, yystack.l_mark[0].typarlist); + TyParFixupList.RESET(false); + newclass = FALSE; + } +#line 9638 "asmparse.cpp" +break; case 107: -#line 424 "asmparse.y" -{ PASM->AddClass(); } break; +#line 425 "asmparse.y" + { PASM->AddClass(); } +#line 9643 "asmparse.cpp" +break; case 108: -#line 427 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) 0; } break; -case 109: #line 428 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdVisibilityMask) | tdPublic); } break; -case 110: + { yyval.classAttr = (CorRegTypeAttr) 0; } +#line 9648 "asmparse.cpp" +break; +case 109: #line 429 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdVisibilityMask) | tdNotPublic); } break; -case 111: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdVisibilityMask) | tdPublic); } +#line 9653 "asmparse.cpp" +break; +case 110: #line 430 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | 0x80000000 | tdSealed); } break; -case 112: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdVisibilityMask) | tdNotPublic); } +#line 9658 "asmparse.cpp" +break; +case 111: #line 431 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | 0x40000000); } break; -case 113: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | 0x80000000 | tdSealed); } +#line 9663 "asmparse.cpp" +break; +case 112: #line 432 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdInterface | tdAbstract); } break; -case 114: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | 0x40000000); } +#line 9668 "asmparse.cpp" +break; +case 113: #line 433 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdSealed); } break; -case 115: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdInterface | tdAbstract); } +#line 9673 "asmparse.cpp" +break; +case 114: #line 434 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdAbstract); } break; -case 116: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdSealed); } +#line 9678 "asmparse.cpp" +break; +case 115: #line 435 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdLayoutMask) | tdAutoLayout); } break; -case 117: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdAbstract); } +#line 9683 "asmparse.cpp" +break; +case 116: #line 436 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdLayoutMask) | tdSequentialLayout); } break; -case 118: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdLayoutMask) | tdAutoLayout); } +#line 9688 "asmparse.cpp" +break; +case 117: #line 437 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdLayoutMask) | tdExplicitLayout); } break; -case 119: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdLayoutMask) | tdSequentialLayout); } +#line 9693 "asmparse.cpp" +break; +case 118: #line 438 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdStringFormatMask) | tdAnsiClass); } break; -case 120: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdLayoutMask) | tdExplicitLayout); } +#line 9698 "asmparse.cpp" +break; +case 119: #line 439 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdStringFormatMask) | tdUnicodeClass); } break; -case 121: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdStringFormatMask) | tdAnsiClass); } +#line 9703 "asmparse.cpp" +break; +case 120: #line 440 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-1].classAttr & ~tdStringFormatMask) | tdAutoClass); } break; -case 122: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdStringFormatMask) | tdUnicodeClass); } +#line 9708 "asmparse.cpp" +break; +case 121: #line 441 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdImport); } break; -case 123: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-1].classAttr & ~tdStringFormatMask) | tdAutoClass); } +#line 9713 "asmparse.cpp" +break; +case 122: #line 442 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdSerializable); } break; -case 124: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdImport); } +#line 9718 "asmparse.cpp" +break; +case 123: #line 443 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdWindowsRuntime); } break; -case 125: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdSerializable); } +#line 9723 "asmparse.cpp" +break; +case 124: #line 444 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedPublic); } break; -case 126: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdWindowsRuntime); } +#line 9728 "asmparse.cpp" +break; +case 125: #line 445 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedPrivate); } break; -case 127: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-2].classAttr & ~tdVisibilityMask) | tdNestedPublic); } +#line 9733 "asmparse.cpp" +break; +case 126: #line 446 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedFamily); } break; -case 128: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-2].classAttr & ~tdVisibilityMask) | tdNestedPrivate); } +#line 9738 "asmparse.cpp" +break; +case 127: #line 447 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedAssembly); } break; -case 129: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-2].classAttr & ~tdVisibilityMask) | tdNestedFamily); } +#line 9743 "asmparse.cpp" +break; +case 128: #line 448 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedFamANDAssem); } break; -case 130: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-2].classAttr & ~tdVisibilityMask) | tdNestedAssembly); } +#line 9748 "asmparse.cpp" +break; +case 129: #line 449 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) ((yypvt[-2].classAttr & ~tdVisibilityMask) | tdNestedFamORAssem); } break; -case 131: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-2].classAttr & ~tdVisibilityMask) | tdNestedFamANDAssem); } +#line 9753 "asmparse.cpp" +break; +case 130: #line 450 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdBeforeFieldInit); } break; -case 132: + { yyval.classAttr = (CorRegTypeAttr) ((yystack.l_mark[-2].classAttr & ~tdVisibilityMask) | tdNestedFamORAssem); } +#line 9758 "asmparse.cpp" +break; +case 131: #line 451 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr | tdSpecialName); } break; -case 133: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdBeforeFieldInit); } +#line 9763 "asmparse.cpp" +break; +case 132: #line 452 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].classAttr); } break; -case 134: + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr | tdSpecialName); } +#line 9768 "asmparse.cpp" +break; +case 133: #line 453 "asmparse.y" -{ yyval.classAttr = (CorRegTypeAttr) (yypvt[-1].int32); } break; + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].classAttr); } +#line 9773 "asmparse.cpp" +break; +case 134: +#line 454 "asmparse.y" + { yyval.classAttr = (CorRegTypeAttr) (yystack.l_mark[-1].int32); } +#line 9778 "asmparse.cpp" +break; case 136: -#line 457 "asmparse.y" -{ PASM->m_crExtends = yypvt[-0].token; } break; +#line 458 "asmparse.y" + { PASM->m_crExtends = yystack.l_mark[0].token; } +#line 9783 "asmparse.cpp" +break; case 141: -#line 468 "asmparse.y" -{ PASM->AddToImplList(yypvt[-0].token); } break; -case 142: #line 469 "asmparse.y" -{ PASM->AddToImplList(yypvt[-0].token); } break; + { PASM->AddToImplList(yystack.l_mark[0].token); } +#line 9788 "asmparse.cpp" +break; +case 142: +#line 470 "asmparse.y" + { PASM->AddToImplList(yystack.l_mark[0].token); } +#line 9793 "asmparse.cpp" +break; case 143: -#line 473 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; -case 144: #line 474 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; + { yyval.binstr = new BinStr(); } +#line 9798 "asmparse.cpp" +break; +case 144: +#line 475 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 9803 "asmparse.cpp" +break; case 145: -#line 477 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yypvt[-0].token); } break; -case 146: #line 478 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->appendInt32(yypvt[-0].token); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yystack.l_mark[0].token); } +#line 9808 "asmparse.cpp" +break; +case 146: +#line 479 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->appendInt32(yystack.l_mark[0].token); } +#line 9813 "asmparse.cpp" +break; case 147: -#line 481 "asmparse.y" -{ yyval.typarlist = NULL; PASM->m_TyParList = NULL;} break; -case 148: #line 482 "asmparse.y" -{ yyval.typarlist = yypvt[-1].typarlist; PASM->m_TyParList = yypvt[-1].typarlist;} break; + { yyval.typarlist = NULL; PASM->m_TyParList = NULL;} +#line 9818 "asmparse.cpp" +break; +case 148: +#line 483 "asmparse.y" + { PASM->m_TyParList = yystack.l_mark[-1].typarlist; ResolveTyParList(PASM->m_TyParList); yyval.typarlist = PASM->m_TyParList; } +#line 9823 "asmparse.cpp" +break; case 149: -#line 485 "asmparse.y" -{ yyval.int32 = gpCovariant; } break; -case 150: #line 486 "asmparse.y" -{ yyval.int32 = gpContravariant; } break; -case 151: + { yyval.int32 = gpCovariant; } +#line 9828 "asmparse.cpp" +break; +case 150: #line 487 "asmparse.y" -{ yyval.int32 = gpReferenceTypeConstraint; } break; -case 152: + { yyval.int32 = gpContravariant; } +#line 9833 "asmparse.cpp" +break; +case 151: #line 488 "asmparse.y" -{ yyval.int32 = gpNotNullableValueTypeConstraint; } break; -case 153: + { yyval.int32 = gpReferenceTypeConstraint; } +#line 9838 "asmparse.cpp" +break; +case 152: #line 489 "asmparse.y" -{ yyval.int32 = gpAcceptByRefLike; } break; -case 154: + { yyval.int32 = gpNotNullableValueTypeConstraint; } +#line 9843 "asmparse.cpp" +break; +case 153: #line 490 "asmparse.y" -{ yyval.int32 = gpDefaultConstructorConstraint; } break; -case 155: + { yyval.int32 = gpAcceptByRefLike; } +#line 9848 "asmparse.cpp" +break; +case 154: #line 491 "asmparse.y" -{ yyval.int32 = (CorGenericParamAttr)yypvt[-1].int32; } break; + { yyval.int32 = gpDefaultConstructorConstraint; } +#line 9853 "asmparse.cpp" +break; +case 155: +#line 492 "asmparse.y" + { yyval.int32 = (CorGenericParamAttr)yystack.l_mark[-1].int32; } +#line 9858 "asmparse.cpp" +break; case 156: -#line 494 "asmparse.y" -{ yyval.int32 = 0; } break; -case 157: #line 495 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | yypvt[-0].int32; } break; + { yyval.int32 = 0; } +#line 9863 "asmparse.cpp" +break; +case 157: +#line 496 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32 | yystack.l_mark[0].int32; } +#line 9868 "asmparse.cpp" +break; case 158: -#line 498 "asmparse.y" -{yyval.typarlist = new TyParList(yypvt[-3].int32, yypvt[-2].binstr, yypvt[-1].string, yypvt[-0].typarlist);} break; -case 159: #line 499 "asmparse.y" -{yyval.typarlist = new TyParList(yypvt[-2].int32, NULL, yypvt[-1].string, yypvt[-0].typarlist);} break; -case 160: + { yyval.int32 = (CorGenericParamAttr)yystack.l_mark[-1].int32; } +#line 9873 "asmparse.cpp" +break; +case 159: #line 502 "asmparse.y" -{ yyval.typarlist = NULL; } break; -case 161: + { yyval.int32 = 0; } +#line 9878 "asmparse.cpp" +break; +case 160: #line 503 "asmparse.y" -{ yyval.typarlist = yypvt[-0].typarlist; } break; -case 162: + { yyval.int32 = yystack.l_mark[-1].int32 | yystack.l_mark[0].int32; } +#line 9883 "asmparse.cpp" +break; +case 161: #line 506 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; } break; + {yyval.typarlist = new TyParList(yystack.l_mark[-4].int32, yystack.l_mark[-3].binstr, yystack.l_mark[-2].binstr, yystack.l_mark[-1].string, yystack.l_mark[0].typarlist); } +#line 9888 "asmparse.cpp" +break; +case 162: +#line 507 "asmparse.y" + {yyval.typarlist = new TyParList(yystack.l_mark[-3].int32, yystack.l_mark[-2].binstr, NULL, yystack.l_mark[-1].string, yystack.l_mark[0].typarlist); } +#line 9893 "asmparse.cpp" +break; case 163: -#line 509 "asmparse.y" -{ yyval.int32= 0; } break; +#line 508 "asmparse.y" + {yyval.typarlist = new TyParList(yystack.l_mark[-3].int32, yystack.l_mark[-2].binstr, yystack.l_mark[-1].string, yystack.l_mark[0].typarlist);} +#line 9898 "asmparse.cpp" +break; case 164: -#line 510 "asmparse.y" -{ yyval.int32 = yypvt[-0].int32; } break; +#line 509 "asmparse.y" + {yyval.typarlist = new TyParList(yystack.l_mark[-2].int32, NULL, yystack.l_mark[-1].string, yystack.l_mark[0].typarlist);} +#line 9903 "asmparse.cpp" +break; case 165: -#line 513 "asmparse.y" -{ yyval.int32 = yypvt[-2].int32; } break; +#line 512 "asmparse.y" + { yyval.typarlist = NULL; } +#line 9908 "asmparse.cpp" +break; case 166: -#line 517 "asmparse.y" -{ if(PASM->m_pCurMethod->m_ulLines[1] ==0) - { PASM->m_pCurMethod->m_ulLines[1] = PASM->m_ulCurLine; - PASM->m_pCurMethod->m_ulColumns[1]=PASM->m_ulCurColumn;} - PASM->EndMethod(); } break; +#line 513 "asmparse.y" + { yyval.typarlist = yystack.l_mark[0].typarlist; } +#line 9913 "asmparse.cpp" +break; case 167: -#line 521 "asmparse.y" -{ PASM->EndClass(); } break; +#line 516 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; } +#line 9918 "asmparse.cpp" +break; case 168: -#line 522 "asmparse.y" -{ PASM->EndEvent(); } break; +#line 519 "asmparse.y" + { yyval.int32= 0; } +#line 9923 "asmparse.cpp" +break; case 169: +#line 520 "asmparse.y" + { yyval.int32 = yystack.l_mark[0].int32; } +#line 9928 "asmparse.cpp" +break; +case 170: #line 523 "asmparse.y" -{ PASM->EndProp(); } break; -case 175: -#line 529 "asmparse.y" -{ PASM->m_pCurClass->m_ulSize = yypvt[-0].int32; } break; -case 176: -#line 530 "asmparse.y" -{ PASM->m_pCurClass->m_ulPack = yypvt[-0].int32; } break; -case 177: + { yyval.int32 = yystack.l_mark[-2].int32; } +#line 9933 "asmparse.cpp" +break; +case 171: +#line 527 "asmparse.y" + { if(PASM->m_pCurMethod->m_ulLines[1] ==0) + { PASM->m_pCurMethod->m_ulLines[1] = PASM->m_ulCurLine; + PASM->m_pCurMethod->m_ulColumns[1]=PASM->m_ulCurColumn;} + PASM->EndMethod(); } +#line 9941 "asmparse.cpp" +break; +case 172: #line 531 "asmparse.y" -{ PASMM->EndComType(); } break; -case 178: + { PASM->EndClass(); } +#line 9946 "asmparse.cpp" +break; +case 173: +#line 532 "asmparse.y" + { PASM->EndEvent(); } +#line 9951 "asmparse.cpp" +break; +case 174: #line 533 "asmparse.y" -{ BinStr *sig1 = parser->MakeSig(yypvt[-7].int32, yypvt[-6].binstr, yypvt[-1].binstr); - BinStr *sig2 = new BinStr(); sig2->append(sig1); - PASM->AddMethodImpl(yypvt[-11].token,yypvt[-9].string,sig1,yypvt[-5].token,yypvt[-3].string,sig2); - PASM->ResetArgNameList(); - } break; -case 179: + { PASM->EndProp(); } +#line 9956 "asmparse.cpp" +break; +case 180: #line 539 "asmparse.y" -{ PASM->AddMethodImpl(yypvt[-17].token,yypvt[-15].string, - (yypvt[-14].int32==0 ? parser->MakeSig(yypvt[-19].int32,yypvt[-18].binstr,yypvt[-12].binstr) : - parser->MakeSig(yypvt[-19].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yypvt[-18].binstr,yypvt[-12].binstr,yypvt[-14].int32)), - yypvt[-6].token,yypvt[-4].string, - (yypvt[-3].int32==0 ? parser->MakeSig(yypvt[-8].int32,yypvt[-7].binstr,yypvt[-1].binstr) : - parser->MakeSig(yypvt[-8].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yypvt[-7].binstr,yypvt[-1].binstr,yypvt[-3].int32))); - PASM->ResetArgNameList(); - } break; + { PASM->m_pCurClass->m_ulSize = yystack.l_mark[0].int32; } +#line 9961 "asmparse.cpp" +break; +case 181: +#line 540 "asmparse.y" + { PASM->m_pCurClass->m_ulPack = yystack.l_mark[0].int32; } +#line 9966 "asmparse.cpp" +break; case 182: -#line 549 "asmparse.y" -{ if((yypvt[-1].int32 > 0) && (yypvt[-1].int32 <= (int)PASM->m_pCurClass->m_NumTyPars)) - PASM->m_pCustomDescrList = PASM->m_pCurClass->m_TyPars[yypvt[-1].int32-1].CAList(); - else - PASM->report->error("Type parameter index out of range\n"); - } break; +#line 541 "asmparse.y" + { PASMM->EndComType(); } +#line 9971 "asmparse.cpp" +break; case 183: -#line 554 "asmparse.y" -{ int n = PASM->m_pCurClass->FindTyPar(yypvt[-0].string); - if(n >= 0) - PASM->m_pCustomDescrList = PASM->m_pCurClass->m_TyPars[n].CAList(); - else - PASM->report->error("Type parameter '%s' undefined\n",yypvt[-0].string); - } break; +#line 543 "asmparse.y" + { BinStr *sig1 = parser->MakeSig(yystack.l_mark[-7].int32, yystack.l_mark[-6].binstr, yystack.l_mark[-1].binstr); + BinStr *sig2 = new BinStr(); sig2->append(sig1); + PASM->AddMethodImpl(yystack.l_mark[-11].token,yystack.l_mark[-9].string,sig1,yystack.l_mark[-5].token,yystack.l_mark[-3].string,sig2); + PASM->ResetArgNameList(); + } +#line 9980 "asmparse.cpp" +break; case 184: -#line 560 "asmparse.y" -{ PASM->AddGenericParamConstraint(yypvt[-3].int32, 0, yypvt[-0].token); } break; -case 185: -#line 561 "asmparse.y" -{ PASM->AddGenericParamConstraint(0, yypvt[-2].string, yypvt[-0].token); } break; -case 186: -#line 562 "asmparse.y" -{ yypvt[-0].cad->tkInterfacePair = yypvt[-1].token; - if(PASM->m_pCustomDescrList) - PASM->m_pCustomDescrList->PUSH(yypvt[-0].cad); - } break; +#line 549 "asmparse.y" + { PASM->AddMethodImpl(yystack.l_mark[-17].token,yystack.l_mark[-15].string, + (yystack.l_mark[-14].int32==0 ? parser->MakeSig(yystack.l_mark[-19].int32,yystack.l_mark[-18].binstr,yystack.l_mark[-12].binstr) : + parser->MakeSig(yystack.l_mark[-19].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yystack.l_mark[-18].binstr,yystack.l_mark[-12].binstr,yystack.l_mark[-14].int32)), + yystack.l_mark[-6].token,yystack.l_mark[-4].string, + (yystack.l_mark[-3].int32==0 ? parser->MakeSig(yystack.l_mark[-8].int32,yystack.l_mark[-7].binstr,yystack.l_mark[-1].binstr) : + parser->MakeSig(yystack.l_mark[-8].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yystack.l_mark[-7].binstr,yystack.l_mark[-1].binstr,yystack.l_mark[-3].int32))); + PASM->ResetArgNameList(); + } +#line 9992 "asmparse.cpp" +break; case 187: -#line 570 "asmparse.y" -{ yypvt[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); - PASM->AddField(yypvt[-2].string, yypvt[-3].binstr, yypvt[-4].fieldAttr, yypvt[-1].string, yypvt[-0].binstr, yypvt[-5].int32); } break; +#line 559 "asmparse.y" + { if((yystack.l_mark[-1].int32 > 0) && (yystack.l_mark[-1].int32 <= (int)PASM->m_pCurClass->m_NumTyPars)) + PASM->m_pCustomDescrList = PASM->m_pCurClass->m_TyPars[yystack.l_mark[-1].int32-1].CAList(); + else + PASM->report->error("Type parameter index out of range\n"); + } +#line 10001 "asmparse.cpp" +break; case 188: -#line 574 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) 0; } break; +#line 564 "asmparse.y" + { int n = PASM->m_pCurClass->FindTyPar(yystack.l_mark[0].string); + if(n >= 0) + PASM->m_pCustomDescrList = PASM->m_pCurClass->m_TyPars[n].CAList(); + else + PASM->report->error("Type parameter '%s' undefined\n",yystack.l_mark[0].string); + } +#line 10011 "asmparse.cpp" +break; case 189: -#line 575 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdStatic); } break; +#line 570 "asmparse.y" + { PASM->AddGenericParamConstraint(yystack.l_mark[-3].int32, 0, yystack.l_mark[0].token); } +#line 10016 "asmparse.cpp" +break; case 190: -#line 576 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdPublic); } break; +#line 571 "asmparse.y" + { PASM->AddGenericParamConstraint(0, yystack.l_mark[-2].string, yystack.l_mark[0].token); } +#line 10021 "asmparse.cpp" +break; case 191: -#line 577 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdPrivate); } break; +#line 572 "asmparse.y" + { yystack.l_mark[0].cad->tkInterfacePair = yystack.l_mark[-1].token; + if(PASM->m_pCustomDescrList) + PASM->m_pCustomDescrList->PUSH(yystack.l_mark[0].cad); + } +#line 10029 "asmparse.cpp" +break; case 192: -#line 578 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdFamily); } break; +#line 580 "asmparse.y" + { yystack.l_mark[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); + PASM->AddField(yystack.l_mark[-2].string, yystack.l_mark[-3].binstr, yystack.l_mark[-4].fieldAttr, yystack.l_mark[-1].string, yystack.l_mark[0].binstr, yystack.l_mark[-5].int32); } +#line 10035 "asmparse.cpp" +break; case 193: -#line 579 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdInitOnly); } break; +#line 584 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) 0; } +#line 10040 "asmparse.cpp" +break; case 194: -#line 580 "asmparse.y" -{ yyval.fieldAttr = yypvt[-1].fieldAttr; } break; +#line 585 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) (yystack.l_mark[-1].fieldAttr | fdStatic); } +#line 10045 "asmparse.cpp" +break; case 195: -#line 581 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdSpecialName); } break; +#line 586 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdPublic); } +#line 10050 "asmparse.cpp" +break; case 196: -#line 594 "asmparse.y" -{ PASM->m_pMarshal = yypvt[-1].binstr; } break; +#line 587 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdPrivate); } +#line 10055 "asmparse.cpp" +break; case 197: -#line 595 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdAssembly); } break; +#line 588 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdFamily); } +#line 10060 "asmparse.cpp" +break; case 198: -#line 596 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdFamANDAssem); } break; +#line 589 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) (yystack.l_mark[-1].fieldAttr | fdInitOnly); } +#line 10065 "asmparse.cpp" +break; case 199: -#line 597 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdFamORAssem); } break; +#line 590 "asmparse.y" + { yyval.fieldAttr = yystack.l_mark[-1].fieldAttr; } +#line 10070 "asmparse.cpp" +break; case 200: -#line 598 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) ((yypvt[-1].fieldAttr & ~mdMemberAccessMask) | fdPrivateScope); } break; +#line 591 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) (yystack.l_mark[-1].fieldAttr | fdSpecialName); } +#line 10075 "asmparse.cpp" +break; case 201: -#line 599 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdLiteral); } break; +#line 604 "asmparse.y" + { PASM->m_pMarshal = yystack.l_mark[-1].binstr; } +#line 10080 "asmparse.cpp" +break; case 202: -#line 600 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].fieldAttr | fdNotSerialized); } break; +#line 605 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdAssembly); } +#line 10085 "asmparse.cpp" +break; case 203: -#line 601 "asmparse.y" -{ yyval.fieldAttr = (CorFieldAttr) (yypvt[-1].int32); } break; +#line 606 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdFamANDAssem); } +#line 10090 "asmparse.cpp" +break; case 204: -#line 604 "asmparse.y" -{ yyval.string = 0; } break; +#line 607 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdFamORAssem); } +#line 10095 "asmparse.cpp" +break; case 205: -#line 605 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; -case 206: #line 608 "asmparse.y" -{ yyval.binstr = NULL; } break; -case 207: + { yyval.fieldAttr = (CorFieldAttr) ((yystack.l_mark[-1].fieldAttr & ~mdMemberAccessMask) | fdPrivateScope); } +#line 10100 "asmparse.cpp" +break; +case 206: #line 609 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; + { yyval.fieldAttr = (CorFieldAttr) (yystack.l_mark[-1].fieldAttr | fdLiteral); } +#line 10105 "asmparse.cpp" +break; +case 207: +#line 610 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) (yystack.l_mark[-1].fieldAttr | fdNotSerialized); } +#line 10110 "asmparse.cpp" +break; case 208: -#line 612 "asmparse.y" -{ yyval.int32 = 0xFFFFFFFF; } break; +#line 611 "asmparse.y" + { yyval.fieldAttr = (CorFieldAttr) (yystack.l_mark[-1].int32); } +#line 10115 "asmparse.cpp" +break; case 209: -#line 613 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32; } break; +#line 614 "asmparse.y" + { yyval.string = 0; } +#line 10120 "asmparse.cpp" +break; case 210: -#line 618 "asmparse.y" -{ PASM->ResetArgNameList(); - if (yypvt[-3].binstr == NULL) - { - if((iCallConv)&&((yypvt[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); - yyval.token = PASM->MakeMemberRef(yypvt[-6].token, yypvt[-4].string, parser->MakeSig(yypvt[-8].int32|iCallConv, yypvt[-7].binstr, yypvt[-1].binstr)); - } - else - { - mdToken mr; - if((iCallConv)&&((yypvt[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); - mr = PASM->MakeMemberRef(yypvt[-6].token, yypvt[-4].string, - parser->MakeSig(yypvt[-8].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-7].binstr, yypvt[-1].binstr, corCountArgs(yypvt[-3].binstr))); - yyval.token = PASM->MakeMethodSpec(mr, - parser->MakeSig(IMAGE_CEE_CS_CALLCONV_INSTANTIATION, 0, yypvt[-3].binstr)); - } - } break; +#line 615 "asmparse.y" + { yyval.string = yystack.l_mark[0].string; } +#line 10125 "asmparse.cpp" +break; case 211: -#line 635 "asmparse.y" -{ PASM->ResetArgNameList(); - if((iCallConv)&&((yypvt[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); - yyval.token = PASM->MakeMemberRef(yypvt[-6].token, yypvt[-4].string, - parser->MakeSig(yypvt[-8].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-7].binstr, yypvt[-1].binstr, yypvt[-3].int32)); - } break; +#line 618 "asmparse.y" + { yyval.binstr = NULL; } +#line 10130 "asmparse.cpp" +break; case 212: -#line 641 "asmparse.y" -{ PASM->ResetArgNameList(); - if (yypvt[-3].binstr == NULL) - { - if((iCallConv)&&((yypvt[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); - yyval.token = PASM->MakeMemberRef(mdTokenNil, yypvt[-4].string, parser->MakeSig(yypvt[-6].int32|iCallConv, yypvt[-5].binstr, yypvt[-1].binstr)); - } - else - { - mdToken mr; - if((iCallConv)&&((yypvt[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); - mr = PASM->MakeMemberRef(mdTokenNil, yypvt[-4].string, parser->MakeSig(yypvt[-6].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-5].binstr, yypvt[-1].binstr, corCountArgs(yypvt[-3].binstr))); - yyval.token = PASM->MakeMethodSpec(mr, - parser->MakeSig(IMAGE_CEE_CS_CALLCONV_INSTANTIATION, 0, yypvt[-3].binstr)); - } - } break; +#line 619 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 10135 "asmparse.cpp" +break; case 213: -#line 657 "asmparse.y" -{ PASM->ResetArgNameList(); - if((iCallConv)&&((yypvt[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); - yyval.token = PASM->MakeMemberRef(mdTokenNil, yypvt[-4].string, parser->MakeSig(yypvt[-6].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yypvt[-5].binstr, yypvt[-1].binstr, yypvt[-3].int32)); - } break; +#line 622 "asmparse.y" + { yyval.int32 = 0xFFFFFFFF; } +#line 10140 "asmparse.cpp" +break; case 214: -#line 661 "asmparse.y" -{ yyval.token = yypvt[-0].token; } break; +#line 623 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32; } +#line 10145 "asmparse.cpp" +break; case 215: -#line 662 "asmparse.y" -{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; } break; +#line 628 "asmparse.y" + { PASM->ResetArgNameList(); + if (yystack.l_mark[-3].binstr == NULL) + { + if((iCallConv)&&((yystack.l_mark[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); + yyval.token = PASM->MakeMemberRef(yystack.l_mark[-6].token, yystack.l_mark[-4].string, parser->MakeSig(yystack.l_mark[-8].int32|iCallConv, yystack.l_mark[-7].binstr, yystack.l_mark[-1].binstr)); + } + else + { + mdToken mr; + if((iCallConv)&&((yystack.l_mark[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); + mr = PASM->MakeMemberRef(yystack.l_mark[-6].token, yystack.l_mark[-4].string, + parser->MakeSig(yystack.l_mark[-8].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yystack.l_mark[-7].binstr, yystack.l_mark[-1].binstr, corCountArgs(yystack.l_mark[-3].binstr))); + yyval.token = PASM->MakeMethodSpec(mr, + parser->MakeSig(IMAGE_CEE_CS_CALLCONV_INSTANTIATION, 0, yystack.l_mark[-3].binstr)); + } + } +#line 10165 "asmparse.cpp" +break; case 216: -#line 663 "asmparse.y" -{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; } break; +#line 645 "asmparse.y" + { PASM->ResetArgNameList(); + if((iCallConv)&&((yystack.l_mark[-8].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); + yyval.token = PASM->MakeMemberRef(yystack.l_mark[-6].token, yystack.l_mark[-4].string, + parser->MakeSig(yystack.l_mark[-8].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yystack.l_mark[-7].binstr, yystack.l_mark[-1].binstr, yystack.l_mark[-3].int32)); + } +#line 10174 "asmparse.cpp" +break; case 217: -#line 666 "asmparse.y" -{ yyval.int32 = (yypvt[-0].int32 | IMAGE_CEE_CS_CALLCONV_HASTHIS); } break; +#line 651 "asmparse.y" + { PASM->ResetArgNameList(); + if (yystack.l_mark[-3].binstr == NULL) + { + if((iCallConv)&&((yystack.l_mark[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); + yyval.token = PASM->MakeMemberRef(mdTokenNil, yystack.l_mark[-4].string, parser->MakeSig(yystack.l_mark[-6].int32|iCallConv, yystack.l_mark[-5].binstr, yystack.l_mark[-1].binstr)); + } + else + { + mdToken mr; + if((iCallConv)&&((yystack.l_mark[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); + mr = PASM->MakeMemberRef(mdTokenNil, yystack.l_mark[-4].string, parser->MakeSig(yystack.l_mark[-6].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yystack.l_mark[-5].binstr, yystack.l_mark[-1].binstr, corCountArgs(yystack.l_mark[-3].binstr))); + yyval.token = PASM->MakeMethodSpec(mr, + parser->MakeSig(IMAGE_CEE_CS_CALLCONV_INSTANTIATION, 0, yystack.l_mark[-3].binstr)); + } + } +#line 10193 "asmparse.cpp" +break; case 218: #line 667 "asmparse.y" -{ yyval.int32 = (yypvt[-0].int32 | IMAGE_CEE_CS_CALLCONV_EXPLICITTHIS); } break; + { PASM->ResetArgNameList(); + if((iCallConv)&&((yystack.l_mark[-6].int32 & iCallConv) != iCallConv)) parser->warn("'instance' added to method's calling convention\n"); + yyval.token = PASM->MakeMemberRef(mdTokenNil, yystack.l_mark[-4].string, parser->MakeSig(yystack.l_mark[-6].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC|iCallConv, yystack.l_mark[-5].binstr, yystack.l_mark[-1].binstr, yystack.l_mark[-3].int32)); + } +#line 10201 "asmparse.cpp" +break; case 219: -#line 668 "asmparse.y" -{ yyval.int32 = yypvt[-0].int32; } break; +#line 671 "asmparse.y" + { yyval.token = yystack.l_mark[0].token; } +#line 10206 "asmparse.cpp" +break; case 220: -#line 669 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32; } break; -case 221: #line 672 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_DEFAULT; } break; -case 222: + { yyval.token = yystack.l_mark[0].tdd->m_tkTypeSpec; } +#line 10211 "asmparse.cpp" +break; +case 221: #line 673 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_DEFAULT; } break; + { yyval.token = yystack.l_mark[0].tdd->m_tkTypeSpec; } +#line 10216 "asmparse.cpp" +break; +case 222: +#line 676 "asmparse.y" + { yyval.int32 = (yystack.l_mark[0].int32 | IMAGE_CEE_CS_CALLCONV_HASTHIS); } +#line 10221 "asmparse.cpp" +break; case 223: -#line 674 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_VARARG; } break; +#line 677 "asmparse.y" + { yyval.int32 = (yystack.l_mark[0].int32 | IMAGE_CEE_CS_CALLCONV_EXPLICITTHIS); } +#line 10226 "asmparse.cpp" +break; case 224: -#line 675 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_C; } break; +#line 678 "asmparse.y" + { yyval.int32 = yystack.l_mark[0].int32; } +#line 10231 "asmparse.cpp" +break; case 225: -#line 676 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_STDCALL; } break; +#line 679 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32; } +#line 10236 "asmparse.cpp" +break; case 226: -#line 677 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_THISCALL; } break; +#line 682 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_DEFAULT; } +#line 10241 "asmparse.cpp" +break; case 227: -#line 678 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_FASTCALL; } break; +#line 683 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_DEFAULT; } +#line 10246 "asmparse.cpp" +break; case 228: -#line 679 "asmparse.y" -{ yyval.int32 = IMAGE_CEE_CS_CALLCONV_UNMANAGED; } break; +#line 684 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_VARARG; } +#line 10251 "asmparse.cpp" +break; case 229: -#line 682 "asmparse.y" -{ yyval.token = yypvt[-1].int32; } break; -case 230: #line 685 "asmparse.y" -{ yyval.token = yypvt[-0].token; - PASM->delArgNameList(PASM->m_firstArgName); - PASM->m_firstArgName = parser->m_ANSFirst.POP(); - PASM->m_lastArgName = parser->m_ANSLast.POP(); - PASM->SetMemberRefFixup(yypvt[-0].token,iOpcodeLen); } break; + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_C; } +#line 10256 "asmparse.cpp" +break; +case 230: +#line 686 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_STDCALL; } +#line 10261 "asmparse.cpp" +break; case 231: -#line 691 "asmparse.y" -{ yypvt[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); - yyval.token = PASM->MakeMemberRef(yypvt[-2].token, yypvt[-0].string, yypvt[-3].binstr); - PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break; +#line 687 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_THISCALL; } +#line 10266 "asmparse.cpp" +break; case 232: -#line 695 "asmparse.y" -{ yypvt[-1].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); - yyval.token = PASM->MakeMemberRef(NULL, yypvt[-0].string, yypvt[-1].binstr); - PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break; +#line 688 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_FASTCALL; } +#line 10271 "asmparse.cpp" +break; case 233: -#line 698 "asmparse.y" -{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; - PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break; +#line 689 "asmparse.y" + { yyval.int32 = IMAGE_CEE_CS_CALLCONV_UNMANAGED; } +#line 10276 "asmparse.cpp" +break; case 234: -#line 700 "asmparse.y" -{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; - PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break; +#line 692 "asmparse.y" + { yyval.token = yystack.l_mark[-1].int32; } +#line 10281 "asmparse.cpp" +break; case 235: -#line 702 "asmparse.y" -{ yyval.token = yypvt[-0].token; - PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } break; +#line 695 "asmparse.y" + { yyval.token = yystack.l_mark[0].token; + PASM->delArgNameList(PASM->m_firstArgName); + PASM->m_firstArgName = parser->m_ANSFirst.POP(); + PASM->m_lastArgName = parser->m_ANSLast.POP(); + PASM->SetMemberRefFixup(yystack.l_mark[0].token,iOpcodeLen); } +#line 10290 "asmparse.cpp" +break; case 236: -#line 707 "asmparse.y" -{ PASM->ResetEvent(yypvt[-0].string, yypvt[-1].token, yypvt[-2].eventAttr); } break; +#line 701 "asmparse.y" + { yystack.l_mark[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); + yyval.token = PASM->MakeMemberRef(yystack.l_mark[-2].token, yystack.l_mark[0].string, yystack.l_mark[-3].binstr); + PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } +#line 10297 "asmparse.cpp" +break; case 237: -#line 708 "asmparse.y" -{ PASM->ResetEvent(yypvt[-0].string, mdTypeRefNil, yypvt[-1].eventAttr); } break; +#line 705 "asmparse.y" + { yystack.l_mark[-1].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); + yyval.token = PASM->MakeMemberRef(NULL, yystack.l_mark[0].string, yystack.l_mark[-1].binstr); + PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } +#line 10304 "asmparse.cpp" +break; case 238: -#line 712 "asmparse.y" -{ yyval.eventAttr = (CorEventAttr) 0; } break; +#line 708 "asmparse.y" + { yyval.token = yystack.l_mark[0].tdd->m_tkTypeSpec; + PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } +#line 10310 "asmparse.cpp" +break; case 239: -#line 713 "asmparse.y" -{ yyval.eventAttr = yypvt[-1].eventAttr; } break; +#line 710 "asmparse.y" + { yyval.token = yystack.l_mark[0].tdd->m_tkTypeSpec; + PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } +#line 10316 "asmparse.cpp" +break; case 240: -#line 714 "asmparse.y" -{ yyval.eventAttr = (CorEventAttr) (yypvt[-1].eventAttr | evSpecialName); } break; +#line 712 "asmparse.y" + { yyval.token = yystack.l_mark[0].token; + PASM->SetMemberRefFixup(yyval.token,iOpcodeLen); } +#line 10322 "asmparse.cpp" +break; +case 241: +#line 717 "asmparse.y" + { PASM->ResetEvent(yystack.l_mark[0].string, yystack.l_mark[-1].token, yystack.l_mark[-2].eventAttr); } +#line 10327 "asmparse.cpp" +break; +case 242: +#line 718 "asmparse.y" + { PASM->ResetEvent(yystack.l_mark[0].string, mdTypeRefNil, yystack.l_mark[-1].eventAttr); } +#line 10332 "asmparse.cpp" +break; case 243: -#line 721 "asmparse.y" -{ PASM->SetEventMethod(0, yypvt[-0].token); } break; -case 244: #line 722 "asmparse.y" -{ PASM->SetEventMethod(1, yypvt[-0].token); } break; -case 245: + { yyval.eventAttr = (CorEventAttr) 0; } +#line 10337 "asmparse.cpp" +break; +case 244: #line 723 "asmparse.y" -{ PASM->SetEventMethod(2, yypvt[-0].token); } break; -case 246: + { yyval.eventAttr = yystack.l_mark[-1].eventAttr; } +#line 10342 "asmparse.cpp" +break; +case 245: #line 724 "asmparse.y" -{ PASM->SetEventMethod(3, yypvt[-0].token); } break; -case 251: + { yyval.eventAttr = (CorEventAttr) (yystack.l_mark[-1].eventAttr | evSpecialName); } +#line 10347 "asmparse.cpp" +break; +case 248: +#line 731 "asmparse.y" + { PASM->SetEventMethod(0, yystack.l_mark[0].token); } +#line 10352 "asmparse.cpp" +break; +case 249: +#line 732 "asmparse.y" + { PASM->SetEventMethod(1, yystack.l_mark[0].token); } +#line 10357 "asmparse.cpp" +break; +case 250: #line 733 "asmparse.y" -{ PASM->ResetProp(yypvt[-4].string, - parser->MakeSig((IMAGE_CEE_CS_CALLCONV_PROPERTY | - (yypvt[-6].int32 & IMAGE_CEE_CS_CALLCONV_HASTHIS)),yypvt[-5].binstr,yypvt[-2].binstr), yypvt[-7].propAttr, yypvt[-0].binstr);} break; -case 252: -#line 738 "asmparse.y" -{ yyval.propAttr = (CorPropertyAttr) 0; } break; -case 253: -#line 739 "asmparse.y" -{ yyval.propAttr = yypvt[-1].propAttr; } break; -case 254: -#line 740 "asmparse.y" -{ yyval.propAttr = (CorPropertyAttr) (yypvt[-1].propAttr | prSpecialName); } break; + { PASM->SetEventMethod(2, yystack.l_mark[0].token); } +#line 10362 "asmparse.cpp" +break; +case 251: +#line 734 "asmparse.y" + { PASM->SetEventMethod(3, yystack.l_mark[0].token); } +#line 10367 "asmparse.cpp" +break; +case 256: +#line 743 "asmparse.y" + { PASM->ResetProp(yystack.l_mark[-4].string, + parser->MakeSig((IMAGE_CEE_CS_CALLCONV_PROPERTY | + (yystack.l_mark[-6].int32 & IMAGE_CEE_CS_CALLCONV_HASTHIS)),yystack.l_mark[-5].binstr,yystack.l_mark[-2].binstr), yystack.l_mark[-7].propAttr, yystack.l_mark[0].binstr);} +#line 10374 "asmparse.cpp" +break; case 257: #line 748 "asmparse.y" -{ PASM->SetPropMethod(0, yypvt[-0].token); } break; + { yyval.propAttr = (CorPropertyAttr) 0; } +#line 10379 "asmparse.cpp" +break; case 258: #line 749 "asmparse.y" -{ PASM->SetPropMethod(1, yypvt[-0].token); } break; + { yyval.propAttr = yystack.l_mark[-1].propAttr; } +#line 10384 "asmparse.cpp" +break; case 259: #line 750 "asmparse.y" -{ PASM->SetPropMethod(2, yypvt[-0].token); } break; -case 264: + { yyval.propAttr = (CorPropertyAttr) (yystack.l_mark[-1].propAttr | prSpecialName); } +#line 10389 "asmparse.cpp" +break; +case 262: #line 758 "asmparse.y" -{ PASM->ResetForNextMethod(); - uMethodBeginLine = PASM->m_ulCurLine; - uMethodBeginColumn=PASM->m_ulCurColumn; - } break; -case 265: -#line 764 "asmparse.y" -{ yyval.binstr = NULL; } break; -case 266: -#line 765 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; } break; -case 267: -#line 768 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; -case 268: -#line 769 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; } break; + { PASM->SetPropMethod(0, yystack.l_mark[0].token); } +#line 10394 "asmparse.cpp" +break; +case 263: +#line 759 "asmparse.y" + { PASM->SetPropMethod(1, yystack.l_mark[0].token); } +#line 10399 "asmparse.cpp" +break; +case 264: +#line 760 "asmparse.y" + { PASM->SetPropMethod(2, yystack.l_mark[0].token); } +#line 10404 "asmparse.cpp" +break; case 269: -#line 772 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 768 "asmparse.y" + { PASM->ResetForNextMethod(); + uMethodBeginLine = PASM->m_ulCurLine; + uMethodBeginColumn=PASM->m_ulCurColumn; + } +#line 10412 "asmparse.cpp" +break; case 270: -#line 776 "asmparse.y" -{ BinStr* sig; - if (yypvt[-5].typarlist == NULL) sig = parser->MakeSig(yypvt[-10].int32, yypvt[-8].binstr, yypvt[-3].binstr); - else { - FixupTyPars(yypvt[-8].binstr); - sig = parser->MakeSig(yypvt[-10].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC, yypvt[-8].binstr, yypvt[-3].binstr, yypvt[-5].typarlist->Count()); - FixupConstraints(); - } - PASM->StartMethod(yypvt[-6].string, sig, yypvt[-11].methAttr, yypvt[-7].binstr, yypvt[-9].int32, yypvt[-5].typarlist); - TyParFixupList.RESET(false); - PASM->SetImplAttr((USHORT)yypvt[-1].implAttr); - PASM->m_pCurMethod->m_ulLines[0] = uMethodBeginLine; - PASM->m_pCurMethod->m_ulColumns[0]=uMethodBeginColumn; - } break; +#line 774 "asmparse.y" + { yyval.binstr = NULL; } +#line 10417 "asmparse.cpp" +break; case 271: -#line 791 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) 0; } break; +#line 775 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; } +#line 10422 "asmparse.cpp" +break; case 272: -#line 792 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdStatic); } break; +#line 778 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 10427 "asmparse.cpp" +break; case 273: -#line 793 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdPublic); } break; +#line 779 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; } +#line 10432 "asmparse.cpp" +break; case 274: -#line 794 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdPrivate); } break; +#line 782 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 10437 "asmparse.cpp" +break; case 275: -#line 795 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdFamily); } break; +#line 786 "asmparse.y" + { BinStr* sig; + if (yystack.l_mark[-5].typarlist == NULL) sig = parser->MakeSig(yystack.l_mark[-10].int32, yystack.l_mark[-8].binstr, yystack.l_mark[-3].binstr); + else { + FixupTyPars(yystack.l_mark[-8].binstr); + sig = parser->MakeSig(yystack.l_mark[-10].int32 | IMAGE_CEE_CS_CALLCONV_GENERIC, yystack.l_mark[-8].binstr, yystack.l_mark[-3].binstr, yystack.l_mark[-5].typarlist->Count()); + FixupConstraints(); + } + PASM->StartMethod(yystack.l_mark[-6].string, sig, yystack.l_mark[-11].methAttr, yystack.l_mark[-7].binstr, yystack.l_mark[-9].int32, yystack.l_mark[-5].typarlist); + TyParFixupList.RESET(false); + PASM->SetImplAttr((USHORT)yystack.l_mark[-1].implAttr); + PASM->m_pCurMethod->m_ulLines[0] = uMethodBeginLine; + PASM->m_pCurMethod->m_ulColumns[0]=uMethodBeginColumn; + } +#line 10454 "asmparse.cpp" +break; case 276: -#line 796 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdFinal); } break; +#line 801 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) 0; } +#line 10459 "asmparse.cpp" +break; case 277: -#line 797 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdSpecialName); } break; +#line 802 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdStatic); } +#line 10464 "asmparse.cpp" +break; case 278: -#line 798 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdVirtual); } break; +#line 803 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdPublic); } +#line 10469 "asmparse.cpp" +break; case 279: -#line 799 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdCheckAccessOnOverride); } break; +#line 804 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdPrivate); } +#line 10474 "asmparse.cpp" +break; case 280: -#line 800 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdAbstract); } break; +#line 805 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdFamily); } +#line 10479 "asmparse.cpp" +break; case 281: -#line 801 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdAssem); } break; +#line 806 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdFinal); } +#line 10484 "asmparse.cpp" +break; case 282: -#line 802 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdFamANDAssem); } break; +#line 807 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdSpecialName); } +#line 10489 "asmparse.cpp" +break; case 283: -#line 803 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdFamORAssem); } break; +#line 808 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdVirtual); } +#line 10494 "asmparse.cpp" +break; case 284: -#line 804 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) ((yypvt[-1].methAttr & ~mdMemberAccessMask) | mdPrivateScope); } break; +#line 809 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdCheckAccessOnOverride); } +#line 10499 "asmparse.cpp" +break; case 285: -#line 805 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdHideBySig); } break; +#line 810 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdAbstract); } +#line 10504 "asmparse.cpp" +break; case 286: -#line 806 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdNewSlot); } break; +#line 811 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdAssem); } +#line 10509 "asmparse.cpp" +break; case 287: -#line 807 "asmparse.y" -{ yyval.methAttr = yypvt[-1].methAttr; } break; +#line 812 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdFamANDAssem); } +#line 10514 "asmparse.cpp" +break; case 288: -#line 808 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdUnmanagedExport); } break; +#line 813 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdFamORAssem); } +#line 10519 "asmparse.cpp" +break; case 289: -#line 809 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].methAttr | mdRequireSecObject); } break; +#line 814 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) ((yystack.l_mark[-1].methAttr & ~mdMemberAccessMask) | mdPrivateScope); } +#line 10524 "asmparse.cpp" +break; case 290: -#line 810 "asmparse.y" -{ yyval.methAttr = (CorMethodAttr) (yypvt[-1].int32); } break; +#line 815 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdHideBySig); } +#line 10529 "asmparse.cpp" +break; case 291: -#line 812 "asmparse.y" -{ PASM->SetPinvoke(yypvt[-4].binstr,0,yypvt[-2].binstr,yypvt[-1].pinvAttr); - yyval.methAttr = (CorMethodAttr) (yypvt[-7].methAttr | mdPinvokeImpl); } break; +#line 816 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdNewSlot); } +#line 10534 "asmparse.cpp" +break; case 292: -#line 815 "asmparse.y" -{ PASM->SetPinvoke(yypvt[-2].binstr,0,NULL,yypvt[-1].pinvAttr); - yyval.methAttr = (CorMethodAttr) (yypvt[-5].methAttr | mdPinvokeImpl); } break; +#line 817 "asmparse.y" + { yyval.methAttr = yystack.l_mark[-1].methAttr; } +#line 10539 "asmparse.cpp" +break; case 293: #line 818 "asmparse.y" -{ PASM->SetPinvoke(new BinStr(),0,NULL,yypvt[-1].pinvAttr); - yyval.methAttr = (CorMethodAttr) (yypvt[-4].methAttr | mdPinvokeImpl); } break; + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdUnmanagedExport); } +#line 10544 "asmparse.cpp" +break; case 294: -#line 822 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) 0; } break; +#line 819 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].methAttr | mdRequireSecObject); } +#line 10549 "asmparse.cpp" +break; case 295: -#line 823 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmNoMangle); } break; +#line 820 "asmparse.y" + { yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-1].int32); } +#line 10554 "asmparse.cpp" +break; case 296: -#line 824 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCharSetAnsi); } break; +#line 822 "asmparse.y" + { PASM->SetPinvoke(yystack.l_mark[-4].binstr,0,yystack.l_mark[-2].binstr,yystack.l_mark[-1].pinvAttr); + yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-7].methAttr | mdPinvokeImpl); } +#line 10560 "asmparse.cpp" +break; case 297: #line 825 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCharSetUnicode); } break; + { PASM->SetPinvoke(yystack.l_mark[-2].binstr,0,NULL,yystack.l_mark[-1].pinvAttr); + yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-5].methAttr | mdPinvokeImpl); } +#line 10566 "asmparse.cpp" +break; case 298: -#line 826 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCharSetAuto); } break; +#line 828 "asmparse.y" + { PASM->SetPinvoke(new BinStr(),0,NULL,yystack.l_mark[-1].pinvAttr); + yyval.methAttr = (CorMethodAttr) (yystack.l_mark[-4].methAttr | mdPinvokeImpl); } +#line 10572 "asmparse.cpp" +break; case 299: -#line 827 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmSupportsLastError); } break; +#line 832 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) 0; } +#line 10577 "asmparse.cpp" +break; case 300: -#line 828 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvWinapi); } break; +#line 833 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmNoMangle); } +#line 10582 "asmparse.cpp" +break; case 301: -#line 829 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvCdecl); } break; +#line 834 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCharSetAnsi); } +#line 10587 "asmparse.cpp" +break; case 302: -#line 830 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvStdcall); } break; +#line 835 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCharSetUnicode); } +#line 10592 "asmparse.cpp" +break; case 303: -#line 831 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvThiscall); } break; +#line 836 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCharSetAuto); } +#line 10597 "asmparse.cpp" +break; case 304: -#line 832 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].pinvAttr | pmCallConvFastcall); } break; +#line 837 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmSupportsLastError); } +#line 10602 "asmparse.cpp" +break; case 305: -#line 833 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmBestFitEnabled); } break; +#line 838 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCallConvWinapi); } +#line 10607 "asmparse.cpp" +break; case 306: -#line 834 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmBestFitDisabled); } break; +#line 839 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCallConvCdecl); } +#line 10612 "asmparse.cpp" +break; case 307: -#line 835 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmThrowOnUnmappableCharEnabled); } break; +#line 840 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCallConvStdcall); } +#line 10617 "asmparse.cpp" +break; case 308: -#line 836 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-3].pinvAttr | pmThrowOnUnmappableCharDisabled); } break; +#line 841 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCallConvThiscall); } +#line 10622 "asmparse.cpp" +break; case 309: -#line 837 "asmparse.y" -{ yyval.pinvAttr = (CorPinvokeMap) (yypvt[-1].int32); } break; +#line 842 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].pinvAttr | pmCallConvFastcall); } +#line 10627 "asmparse.cpp" +break; case 310: -#line 840 "asmparse.y" -{ yyval.string = newString(COR_CTOR_METHOD_NAME); } break; +#line 843 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-3].pinvAttr | pmBestFitEnabled); } +#line 10632 "asmparse.cpp" +break; case 311: -#line 841 "asmparse.y" -{ yyval.string = newString(COR_CCTOR_METHOD_NAME); } break; +#line 844 "asmparse.y" + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-3].pinvAttr | pmBestFitDisabled); } +#line 10637 "asmparse.cpp" +break; case 312: -#line 842 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; -case 313: #line 845 "asmparse.y" -{ yyval.int32 = 0; } break; -case 314: + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-3].pinvAttr | pmThrowOnUnmappableCharEnabled); } +#line 10642 "asmparse.cpp" +break; +case 313: #line 846 "asmparse.y" -{ yyval.int32 = yypvt[-3].int32 | pdIn; } break; -case 315: + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-3].pinvAttr | pmThrowOnUnmappableCharDisabled); } +#line 10647 "asmparse.cpp" +break; +case 314: #line 847 "asmparse.y" -{ yyval.int32 = yypvt[-3].int32 | pdOut; } break; + { yyval.pinvAttr = (CorPinvokeMap) (yystack.l_mark[-1].int32); } +#line 10652 "asmparse.cpp" +break; +case 315: +#line 850 "asmparse.y" + { yyval.string = newString(COR_CTOR_METHOD_NAME); } +#line 10657 "asmparse.cpp" +break; case 316: -#line 848 "asmparse.y" -{ yyval.int32 = yypvt[-3].int32 | pdOptional; } break; +#line 851 "asmparse.y" + { yyval.string = newString(COR_CCTOR_METHOD_NAME); } +#line 10662 "asmparse.cpp" +break; case 317: -#line 849 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 + 1; } break; -case 318: #line 852 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (miIL | miManaged); } break; + { yyval.string = yystack.l_mark[0].string; } +#line 10667 "asmparse.cpp" +break; +case 318: +#line 855 "asmparse.y" + { yyval.int32 = 0; } +#line 10672 "asmparse.cpp" +break; case 319: -#line 853 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFF4) | miNative); } break; +#line 856 "asmparse.y" + { yyval.int32 = yystack.l_mark[-3].int32 | pdIn; } +#line 10677 "asmparse.cpp" +break; case 320: -#line 854 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFF4) | miIL); } break; +#line 857 "asmparse.y" + { yyval.int32 = yystack.l_mark[-3].int32 | pdOut; } +#line 10682 "asmparse.cpp" +break; case 321: -#line 855 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFF4) | miOPTIL); } break; +#line 858 "asmparse.y" + { yyval.int32 = yystack.l_mark[-3].int32 | pdOptional; } +#line 10687 "asmparse.cpp" +break; case 322: -#line 856 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFFB) | miManaged); } break; +#line 859 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32 + 1; } +#line 10692 "asmparse.cpp" +break; case 323: -#line 857 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) ((yypvt[-1].implAttr & 0xFFFB) | miUnmanaged); } break; +#line 862 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (miIL | miManaged); } +#line 10697 "asmparse.cpp" +break; case 324: -#line 858 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miForwardRef); } break; +#line 863 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) ((yystack.l_mark[-1].implAttr & 0xFFF4) | miNative); } +#line 10702 "asmparse.cpp" +break; case 325: -#line 859 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miPreserveSig); } break; +#line 864 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) ((yystack.l_mark[-1].implAttr & 0xFFF4) | miIL); } +#line 10707 "asmparse.cpp" +break; case 326: -#line 860 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miRuntime); } break; +#line 865 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) ((yystack.l_mark[-1].implAttr & 0xFFF4) | miOPTIL); } +#line 10712 "asmparse.cpp" +break; case 327: -#line 861 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miInternalCall); } break; +#line 866 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) ((yystack.l_mark[-1].implAttr & 0xFFFB) | miManaged); } +#line 10717 "asmparse.cpp" +break; case 328: -#line 862 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miSynchronized); } break; +#line 867 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) ((yystack.l_mark[-1].implAttr & 0xFFFB) | miUnmanaged); } +#line 10722 "asmparse.cpp" +break; case 329: -#line 863 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miNoInlining); } break; +#line 868 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miForwardRef); } +#line 10727 "asmparse.cpp" +break; case 330: -#line 864 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miAggressiveInlining); } break; +#line 869 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miPreserveSig); } +#line 10732 "asmparse.cpp" +break; case 331: -#line 865 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miNoOptimization); } break; +#line 870 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miRuntime); } +#line 10737 "asmparse.cpp" +break; case 332: -#line 866 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].implAttr | miAggressiveOptimization); } break; +#line 871 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miInternalCall); } +#line 10742 "asmparse.cpp" +break; case 333: -#line 867 "asmparse.y" -{ yyval.implAttr = (CorMethodImpl) (yypvt[-1].int32); } break; +#line 872 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miSynchronized); } +#line 10747 "asmparse.cpp" +break; case 334: -#line 870 "asmparse.y" -{ PASM->delArgNameList(PASM->m_firstArgName); PASM->m_firstArgName = NULL;PASM->m_lastArgName = NULL; - } break; +#line 873 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miNoInlining); } +#line 10752 "asmparse.cpp" +break; +case 335: +#line 874 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miAggressiveInlining); } +#line 10757 "asmparse.cpp" +break; +case 336: +#line 875 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miNoOptimization); } +#line 10762 "asmparse.cpp" +break; case 337: -#line 878 "asmparse.y" -{ PASM->EmitByte(yypvt[-0].int32); } break; +#line 876 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].implAttr | miAggressiveOptimization); } +#line 10767 "asmparse.cpp" +break; case 338: -#line 879 "asmparse.y" -{ delete PASM->m_SEHD; PASM->m_SEHD = PASM->m_SEHDstack.POP(); } break; +#line 877 "asmparse.y" + { yyval.implAttr = (CorMethodImpl) (yystack.l_mark[-1].int32); } +#line 10772 "asmparse.cpp" +break; case 339: #line 880 "asmparse.y" -{ PASM->EmitMaxStack(yypvt[-0].int32); } break; -case 340: -#line 881 "asmparse.y" -{ PASM->EmitLocals(parser->MakeSig(IMAGE_CEE_CS_CALLCONV_LOCAL_SIG, 0, yypvt[-1].binstr)); - } break; -case 341: -#line 883 "asmparse.y" -{ PASM->EmitZeroInit(); - PASM->EmitLocals(parser->MakeSig(IMAGE_CEE_CS_CALLCONV_LOCAL_SIG, 0, yypvt[-1].binstr)); - } break; + { PASM->delArgNameList(PASM->m_firstArgName); PASM->m_firstArgName = NULL;PASM->m_lastArgName = NULL; + } +#line 10778 "asmparse.cpp" +break; case 342: -#line 886 "asmparse.y" -{ PASM->EmitEntryPoint(); } break; +#line 888 "asmparse.y" + { PASM->EmitByte(yystack.l_mark[0].int32); } +#line 10783 "asmparse.cpp" +break; case 343: -#line 887 "asmparse.y" -{ PASM->EmitZeroInit(); } break; -case 346: +#line 889 "asmparse.y" + { delete PASM->m_SEHD; PASM->m_SEHD = PASM->m_SEHDstack.POP(); } +#line 10788 "asmparse.cpp" +break; +case 344: #line 890 "asmparse.y" -{ PASM->AddLabel(PASM->m_CurPC,yypvt[-1].string); /*PASM->EmitLabel($1);*/ } break; -case 352: + { PASM->EmitMaxStack(yystack.l_mark[0].int32); } +#line 10793 "asmparse.cpp" +break; +case 345: +#line 891 "asmparse.y" + { PASM->EmitLocals(parser->MakeSig(IMAGE_CEE_CS_CALLCONV_LOCAL_SIG, 0, yystack.l_mark[-1].binstr)); + } +#line 10799 "asmparse.cpp" +break; +case 346: +#line 893 "asmparse.y" + { PASM->EmitZeroInit(); + PASM->EmitLocals(parser->MakeSig(IMAGE_CEE_CS_CALLCONV_LOCAL_SIG, 0, yystack.l_mark[-1].binstr)); + } +#line 10806 "asmparse.cpp" +break; +case 347: #line 896 "asmparse.y" -{ if(PASM->m_pCurMethod->m_dwExportOrdinal == 0xFFFFFFFF) - { - PASM->m_pCurMethod->m_dwExportOrdinal = yypvt[-1].int32; - PASM->m_pCurMethod->m_szExportAlias = NULL; - if(PASM->m_pCurMethod->m_wVTEntry == 0) PASM->m_pCurMethod->m_wVTEntry = 1; - if(PASM->m_pCurMethod->m_wVTSlot == 0) PASM->m_pCurMethod->m_wVTSlot = (WORD)(yypvt[-1].int32 + 0x8000); - } - else - PASM->report->warn("Duplicate .export directive, ignored\n"); - } break; -case 353: + { PASM->EmitEntryPoint(); } +#line 10811 "asmparse.cpp" +break; +case 348: +#line 897 "asmparse.y" + { PASM->EmitZeroInit(); } +#line 10816 "asmparse.cpp" +break; +case 351: +#line 900 "asmparse.y" + { PASM->AddLabel(PASM->m_CurPC,yystack.l_mark[-1].string); /*PASM->EmitLabel($1);*/ } +#line 10821 "asmparse.cpp" +break; +case 357: #line 906 "asmparse.y" -{ if(PASM->m_pCurMethod->m_dwExportOrdinal == 0xFFFFFFFF) - { - PASM->m_pCurMethod->m_dwExportOrdinal = yypvt[-3].int32; - PASM->m_pCurMethod->m_szExportAlias = yypvt[-0].string; - if(PASM->m_pCurMethod->m_wVTEntry == 0) PASM->m_pCurMethod->m_wVTEntry = 1; - if(PASM->m_pCurMethod->m_wVTSlot == 0) PASM->m_pCurMethod->m_wVTSlot = (WORD)(yypvt[-3].int32 + 0x8000); - } - else - PASM->report->warn("Duplicate .export directive, ignored\n"); - } break; -case 354: -#line 916 "asmparse.y" -{ PASM->m_pCurMethod->m_wVTEntry = (WORD)yypvt[-2].int32; - PASM->m_pCurMethod->m_wVTSlot = (WORD)yypvt[-0].int32; } break; -case 355: -#line 919 "asmparse.y" -{ PASM->AddMethodImpl(yypvt[-2].token,yypvt[-0].string,NULL,NULL,NULL,NULL); } break; -case 356: -#line 922 "asmparse.y" -{ PASM->AddMethodImpl(yypvt[-6].token,yypvt[-4].string, - (yypvt[-3].int32==0 ? parser->MakeSig(yypvt[-8].int32,yypvt[-7].binstr,yypvt[-1].binstr) : - parser->MakeSig(yypvt[-8].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yypvt[-7].binstr,yypvt[-1].binstr,yypvt[-3].int32)) - ,NULL,NULL,NULL); - PASM->ResetArgNameList(); - } break; + { if(PASM->m_pCurMethod->m_dwExportOrdinal == 0xFFFFFFFF) + { + PASM->m_pCurMethod->m_dwExportOrdinal = yystack.l_mark[-1].int32; + PASM->m_pCurMethod->m_szExportAlias = NULL; + if(PASM->m_pCurMethod->m_wVTEntry == 0) PASM->m_pCurMethod->m_wVTEntry = 1; + if(PASM->m_pCurMethod->m_wVTSlot == 0) PASM->m_pCurMethod->m_wVTSlot = (WORD)(yystack.l_mark[-1].int32 + 0x8000); + } + else + PASM->report->warn("Duplicate .export directive, ignored\n"); + } +#line 10835 "asmparse.cpp" +break; case 358: -#line 929 "asmparse.y" -{ if((yypvt[-1].int32 > 0) && (yypvt[-1].int32 <= (int)PASM->m_pCurMethod->m_NumTyPars)) - PASM->m_pCustomDescrList = PASM->m_pCurMethod->m_TyPars[yypvt[-1].int32-1].CAList(); - else - PASM->report->error("Type parameter index out of range\n"); - } break; +#line 916 "asmparse.y" + { if(PASM->m_pCurMethod->m_dwExportOrdinal == 0xFFFFFFFF) + { + PASM->m_pCurMethod->m_dwExportOrdinal = yystack.l_mark[-3].int32; + PASM->m_pCurMethod->m_szExportAlias = yystack.l_mark[0].string; + if(PASM->m_pCurMethod->m_wVTEntry == 0) PASM->m_pCurMethod->m_wVTEntry = 1; + if(PASM->m_pCurMethod->m_wVTSlot == 0) PASM->m_pCurMethod->m_wVTSlot = (WORD)(yystack.l_mark[-3].int32 + 0x8000); + } + else + PASM->report->warn("Duplicate .export directive, ignored\n"); + } +#line 10849 "asmparse.cpp" +break; case 359: -#line 934 "asmparse.y" -{ int n = PASM->m_pCurMethod->FindTyPar(yypvt[-0].string); - if(n >= 0) - PASM->m_pCustomDescrList = PASM->m_pCurMethod->m_TyPars[n].CAList(); - else - PASM->report->error("Type parameter '%s' undefined\n",yypvt[-0].string); - } break; +#line 926 "asmparse.y" + { PASM->m_pCurMethod->m_wVTEntry = (WORD)yystack.l_mark[-2].int32; + PASM->m_pCurMethod->m_wVTSlot = (WORD)yystack.l_mark[0].int32; } +#line 10855 "asmparse.cpp" +break; case 360: -#line 940 "asmparse.y" -{ PASM->m_pCurMethod->AddGenericParamConstraint(yypvt[-3].int32, 0, yypvt[-0].token); } break; +#line 929 "asmparse.y" + { PASM->AddMethodImpl(yystack.l_mark[-2].token,yystack.l_mark[0].string,NULL,NULL,NULL,NULL); } +#line 10860 "asmparse.cpp" +break; case 361: -#line 941 "asmparse.y" -{ PASM->m_pCurMethod->AddGenericParamConstraint(0, yypvt[-2].string, yypvt[-0].token); } break; -case 362: -#line 944 "asmparse.y" -{ if( yypvt[-2].int32 ) { - ARG_NAME_LIST* pAN=PASM->findArg(PASM->m_pCurMethod->m_firstArgName, yypvt[-2].int32 - 1); - if(pAN) - { - PASM->m_pCustomDescrList = &(pAN->CustDList); - pAN->pValue = yypvt[-0].binstr; - } - else - { - PASM->m_pCustomDescrList = NULL; - if(yypvt[-0].binstr) delete yypvt[-0].binstr; - } - } else { - PASM->m_pCustomDescrList = &(PASM->m_pCurMethod->m_RetCustDList); - PASM->m_pCurMethod->m_pRetValue = yypvt[-0].binstr; - } - PASM->m_tkCurrentCVOwner = 0; - } break; +#line 932 "asmparse.y" + { PASM->AddMethodImpl(yystack.l_mark[-6].token,yystack.l_mark[-4].string, + (yystack.l_mark[-3].int32==0 ? parser->MakeSig(yystack.l_mark[-8].int32,yystack.l_mark[-7].binstr,yystack.l_mark[-1].binstr) : + parser->MakeSig(yystack.l_mark[-8].int32| IMAGE_CEE_CS_CALLCONV_GENERIC,yystack.l_mark[-7].binstr,yystack.l_mark[-1].binstr,yystack.l_mark[-3].int32)) + ,NULL,NULL,NULL); + PASM->ResetArgNameList(); + } +#line 10870 "asmparse.cpp" +break; case 363: -#line 964 "asmparse.y" -{ PASM->m_pCurMethod->CloseScope(); } break; +#line 939 "asmparse.y" + { if((yystack.l_mark[-1].int32 > 0) && (yystack.l_mark[-1].int32 <= (int)PASM->m_pCurMethod->m_NumTyPars)) + PASM->m_pCustomDescrList = PASM->m_pCurMethod->m_TyPars[yystack.l_mark[-1].int32-1].CAList(); + else + PASM->report->error("Type parameter index out of range\n"); + } +#line 10879 "asmparse.cpp" +break; case 364: -#line 967 "asmparse.y" -{ PASM->m_pCurMethod->OpenScope(); } break; +#line 944 "asmparse.y" + { int n = PASM->m_pCurMethod->FindTyPar(yystack.l_mark[0].string); + if(n >= 0) + PASM->m_pCustomDescrList = PASM->m_pCurMethod->m_TyPars[n].CAList(); + else + PASM->report->error("Type parameter '%s' undefined\n",yystack.l_mark[0].string); + } +#line 10889 "asmparse.cpp" +break; +case 365: +#line 950 "asmparse.y" + { PASM->m_pCurMethod->AddGenericParamConstraint(yystack.l_mark[-3].int32, 0, yystack.l_mark[0].token); } +#line 10894 "asmparse.cpp" +break; +case 366: +#line 951 "asmparse.y" + { PASM->m_pCurMethod->AddGenericParamConstraint(0, yystack.l_mark[-2].string, yystack.l_mark[0].token); } +#line 10899 "asmparse.cpp" +break; +case 367: +#line 954 "asmparse.y" + { if( yystack.l_mark[-2].int32 ) { + ARG_NAME_LIST* pAN=PASM->findArg(PASM->m_pCurMethod->m_firstArgName, yystack.l_mark[-2].int32 - 1); + if(pAN) + { + PASM->m_pCustomDescrList = &(pAN->CustDList); + pAN->pValue = yystack.l_mark[0].binstr; + } + else + { + PASM->m_pCustomDescrList = NULL; + if(yystack.l_mark[0].binstr) delete yystack.l_mark[0].binstr; + } + } else { + PASM->m_pCustomDescrList = &(PASM->m_pCurMethod->m_RetCustDList); + PASM->m_pCurMethod->m_pRetValue = yystack.l_mark[0].binstr; + } + PASM->m_tkCurrentCVOwner = 0; + } +#line 10921 "asmparse.cpp" +break; case 368: -#line 978 "asmparse.y" -{ PASM->m_SEHD->tryTo = PASM->m_CurPC; } break; +#line 974 "asmparse.y" + { PASM->m_pCurMethod->CloseScope(); } +#line 10926 "asmparse.cpp" +break; case 369: -#line 979 "asmparse.y" -{ PASM->SetTryLabels(yypvt[-2].string, yypvt[-0].string); } break; -case 370: -#line 980 "asmparse.y" -{ if(PASM->m_SEHD) {PASM->m_SEHD->tryFrom = yypvt[-2].int32; - PASM->m_SEHD->tryTo = yypvt[-0].int32;} } break; -case 371: -#line 984 "asmparse.y" -{ PASM->NewSEHDescriptor(); - PASM->m_SEHD->tryFrom = PASM->m_CurPC; } break; -case 372: -#line 989 "asmparse.y" -{ PASM->EmitTry(); } break; +#line 977 "asmparse.y" + { PASM->m_pCurMethod->OpenScope(); } +#line 10931 "asmparse.cpp" +break; case 373: -#line 990 "asmparse.y" -{ PASM->EmitTry(); } break; +#line 988 "asmparse.y" + { PASM->m_SEHD->tryTo = PASM->m_CurPC; } +#line 10936 "asmparse.cpp" +break; case 374: -#line 991 "asmparse.y" -{ PASM->EmitTry(); } break; +#line 989 "asmparse.y" + { PASM->SetTryLabels(yystack.l_mark[-2].string, yystack.l_mark[0].string); } +#line 10941 "asmparse.cpp" +break; case 375: -#line 992 "asmparse.y" -{ PASM->EmitTry(); } break; +#line 990 "asmparse.y" + { if(PASM->m_SEHD) {PASM->m_SEHD->tryFrom = yystack.l_mark[-2].int32; + PASM->m_SEHD->tryTo = yystack.l_mark[0].int32;} } +#line 10947 "asmparse.cpp" +break; case 376: -#line 996 "asmparse.y" -{ PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break; +#line 994 "asmparse.y" + { PASM->NewSEHDescriptor(); + PASM->m_SEHD->tryFrom = PASM->m_CurPC; } +#line 10953 "asmparse.cpp" +break; case 377: -#line 997 "asmparse.y" -{ PASM->SetFilterLabel(yypvt[-0].string); - PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break; -case 378: #line 999 "asmparse.y" -{ PASM->m_SEHD->sehFilter = yypvt[-0].int32; - PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break; + { PASM->EmitTry(); } +#line 10958 "asmparse.cpp" +break; +case 378: +#line 1000 "asmparse.y" + { PASM->EmitTry(); } +#line 10963 "asmparse.cpp" +break; case 379: -#line 1003 "asmparse.y" -{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FILTER; - PASM->m_SEHD->sehFilter = PASM->m_CurPC; } break; +#line 1001 "asmparse.y" + { PASM->EmitTry(); } +#line 10968 "asmparse.cpp" +break; case 380: -#line 1007 "asmparse.y" -{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_NONE; - PASM->SetCatchClass(yypvt[-0].token); - PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break; +#line 1002 "asmparse.y" + { PASM->EmitTry(); } +#line 10973 "asmparse.cpp" +break; case 381: -#line 1012 "asmparse.y" -{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FINALLY; - PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break; +#line 1006 "asmparse.y" + { PASM->m_SEHD->sehHandler = PASM->m_CurPC; } +#line 10978 "asmparse.cpp" +break; case 382: -#line 1016 "asmparse.y" -{ PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FAULT; - PASM->m_SEHD->sehHandler = PASM->m_CurPC; } break; +#line 1007 "asmparse.y" + { PASM->SetFilterLabel(yystack.l_mark[0].string); + PASM->m_SEHD->sehHandler = PASM->m_CurPC; } +#line 10984 "asmparse.cpp" +break; case 383: -#line 1020 "asmparse.y" -{ PASM->m_SEHD->sehHandlerTo = PASM->m_CurPC; } break; +#line 1009 "asmparse.y" + { PASM->m_SEHD->sehFilter = yystack.l_mark[0].int32; + PASM->m_SEHD->sehHandler = PASM->m_CurPC; } +#line 10990 "asmparse.cpp" +break; case 384: -#line 1021 "asmparse.y" -{ PASM->SetHandlerLabels(yypvt[-2].string, yypvt[-0].string); } break; +#line 1013 "asmparse.y" + { PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FILTER; + PASM->m_SEHD->sehFilter = PASM->m_CurPC; } +#line 10996 "asmparse.cpp" +break; case 385: +#line 1017 "asmparse.y" + { PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_NONE; + PASM->SetCatchClass(yystack.l_mark[0].token); + PASM->m_SEHD->sehHandler = PASM->m_CurPC; } +#line 11003 "asmparse.cpp" +break; +case 386: #line 1022 "asmparse.y" -{ PASM->m_SEHD->sehHandler = yypvt[-2].int32; - PASM->m_SEHD->sehHandlerTo = yypvt[-0].int32; } break; + { PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FINALLY; + PASM->m_SEHD->sehHandler = PASM->m_CurPC; } +#line 11009 "asmparse.cpp" +break; case 387: +#line 1026 "asmparse.y" + { PASM->m_SEHD->sehClause = COR_ILEXCEPTION_CLAUSE_FAULT; + PASM->m_SEHD->sehHandler = PASM->m_CurPC; } +#line 11015 "asmparse.cpp" +break; +case 388: #line 1030 "asmparse.y" -{ PASM->EmitDataLabel(yypvt[-1].string); } break; + { PASM->m_SEHD->sehHandlerTo = PASM->m_CurPC; } +#line 11020 "asmparse.cpp" +break; case 389: -#line 1034 "asmparse.y" -{ PASM->SetDataSection(); } break; +#line 1031 "asmparse.y" + { PASM->SetHandlerLabels(yystack.l_mark[-2].string, yystack.l_mark[0].string); } +#line 11025 "asmparse.cpp" +break; case 390: -#line 1035 "asmparse.y" -{ PASM->SetTLSSection(); } break; -case 391: -#line 1036 "asmparse.y" -{ PASM->SetILSection(); } break; +#line 1032 "asmparse.y" + { PASM->m_SEHD->sehHandler = yystack.l_mark[-2].int32; + PASM->m_SEHD->sehHandlerTo = yystack.l_mark[0].int32; } +#line 11031 "asmparse.cpp" +break; +case 392: +#line 1040 "asmparse.y" + { PASM->EmitDataLabel(yystack.l_mark[-1].string); } +#line 11036 "asmparse.cpp" +break; +case 394: +#line 1044 "asmparse.y" + { PASM->SetDataSection(); } +#line 11041 "asmparse.cpp" +break; +case 395: +#line 1045 "asmparse.y" + { PASM->SetTLSSection(); } +#line 11046 "asmparse.cpp" +break; case 396: -#line 1047 "asmparse.y" -{ yyval.int32 = 1; } break; -case 397: -#line 1048 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32; - if(yypvt[-1].int32 <= 0) { PASM->report->error("Illegal item count: %d\n",yypvt[-1].int32); - if(!PASM->OnErrGo) yyval.int32 = 1; }} break; -case 398: -#line 1053 "asmparse.y" -{ PASM->EmitDataString(yypvt[-1].binstr); } break; -case 399: -#line 1054 "asmparse.y" -{ PASM->EmitDD(yypvt[-1].string); } break; -case 400: -#line 1055 "asmparse.y" -{ PASM->EmitData(yypvt[-1].binstr->ptr(),yypvt[-1].binstr->length()); } break; +#line 1046 "asmparse.y" + { PASM->SetILSection(); } +#line 11051 "asmparse.cpp" +break; case 401: #line 1057 "asmparse.y" -{ float f = (float) (*yypvt[-2].float64); float* p = new (nothrow) float[yypvt[-0].int32]; - if(p != NULL) { - for(int i=0; i < yypvt[-0].int32; i++) p[i] = f; - PASM->EmitData(p, sizeof(float)*yypvt[-0].int32); delete yypvt[-2].float64; delete [] p; - } else PASM->report->error("Out of memory emitting data block %d bytes\n", - sizeof(float)*yypvt[-0].int32); } break; + { yyval.int32 = 1; } +#line 11056 "asmparse.cpp" +break; case 402: -#line 1064 "asmparse.y" -{ double* p = new (nothrow) double[yypvt[-0].int32]; - if(p != NULL) { - for(int i=0; iEmitData(p, sizeof(double)*yypvt[-0].int32); delete yypvt[-2].float64; delete [] p; - } else PASM->report->error("Out of memory emitting data block %d bytes\n", - sizeof(double)*yypvt[-0].int32); } break; +#line 1058 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32; + if(yystack.l_mark[-1].int32 <= 0) { PASM->report->error("Illegal item count: %d\n",yystack.l_mark[-1].int32); + if(!PASM->OnErrGo) yyval.int32 = 1; }} +#line 11063 "asmparse.cpp" +break; case 403: -#line 1071 "asmparse.y" -{ __int64* p = new (nothrow) __int64[yypvt[-0].int32]; - if(p != NULL) { - for(int i=0; iEmitData(p, sizeof(__int64)*yypvt[-0].int32); delete yypvt[-2].int64; delete [] p; - } else PASM->report->error("Out of memory emitting data block %d bytes\n", - sizeof(__int64)*yypvt[-0].int32); } break; +#line 1063 "asmparse.y" + { PASM->EmitDataString(yystack.l_mark[-1].binstr); } +#line 11068 "asmparse.cpp" +break; case 404: -#line 1078 "asmparse.y" -{ __int32* p = new (nothrow) __int32[yypvt[-0].int32]; - if(p != NULL) { - for(int i=0; iEmitData(p, sizeof(__int32)*yypvt[-0].int32); delete [] p; - } else PASM->report->error("Out of memory emitting data block %d bytes\n", - sizeof(__int32)*yypvt[-0].int32); } break; +#line 1064 "asmparse.y" + { PASM->EmitDD(yystack.l_mark[-1].string); } +#line 11073 "asmparse.cpp" +break; case 405: -#line 1085 "asmparse.y" -{ __int16 i = (__int16) yypvt[-2].int32; FAIL_UNLESS(i == yypvt[-2].int32, ("Value %d too big\n", yypvt[-2].int32)); - __int16* p = new (nothrow) __int16[yypvt[-0].int32]; - if(p != NULL) { - for(int j=0; jEmitData(p, sizeof(__int16)*yypvt[-0].int32); delete [] p; - } else PASM->report->error("Out of memory emitting data block %d bytes\n", - sizeof(__int16)*yypvt[-0].int32); } break; +#line 1065 "asmparse.y" + { PASM->EmitData(yystack.l_mark[-1].binstr->ptr(),yystack.l_mark[-1].binstr->length()); } +#line 11078 "asmparse.cpp" +break; case 406: -#line 1093 "asmparse.y" -{ __int8 i = (__int8) yypvt[-2].int32; FAIL_UNLESS(i == yypvt[-2].int32, ("Value %d too big\n", yypvt[-2].int32)); - __int8* p = new (nothrow) __int8[yypvt[-0].int32]; - if(p != NULL) { - for(int j=0; jEmitData(p, sizeof(__int8)*yypvt[-0].int32); delete [] p; - } else PASM->report->error("Out of memory emitting data block %d bytes\n", - sizeof(__int8)*yypvt[-0].int32); } break; +#line 1067 "asmparse.y" + { float f = (float) (*yystack.l_mark[-2].float64); float* p = new (nothrow) float[yystack.l_mark[0].int32]; + if(p != NULL) { + for(int i=0; i < yystack.l_mark[0].int32; i++) p[i] = f; + PASM->EmitData(p, sizeof(float)*yystack.l_mark[0].int32); delete yystack.l_mark[-2].float64; delete [] p; + } else PASM->report->error("Out of memory emitting data block %d bytes\n", + sizeof(float)*yystack.l_mark[0].int32); } +#line 11088 "asmparse.cpp" +break; case 407: -#line 1100 "asmparse.y" -{ PASM->EmitData(NULL, sizeof(float)*yypvt[-0].int32); } break; +#line 1074 "asmparse.y" + { double* p = new (nothrow) double[yystack.l_mark[0].int32]; + if(p != NULL) { + for(int i=0; iEmitData(p, sizeof(double)*yystack.l_mark[0].int32); delete yystack.l_mark[-2].float64; delete [] p; + } else PASM->report->error("Out of memory emitting data block %d bytes\n", + sizeof(double)*yystack.l_mark[0].int32); } +#line 11098 "asmparse.cpp" +break; case 408: -#line 1101 "asmparse.y" -{ PASM->EmitData(NULL, sizeof(double)*yypvt[-0].int32); } break; +#line 1081 "asmparse.y" + { __int64* p = new (nothrow) __int64[yystack.l_mark[0].int32]; + if(p != NULL) { + for(int i=0; iEmitData(p, sizeof(__int64)*yystack.l_mark[0].int32); delete yystack.l_mark[-2].int64; delete [] p; + } else PASM->report->error("Out of memory emitting data block %d bytes\n", + sizeof(__int64)*yystack.l_mark[0].int32); } +#line 11108 "asmparse.cpp" +break; case 409: -#line 1102 "asmparse.y" -{ PASM->EmitData(NULL, sizeof(__int64)*yypvt[-0].int32); } break; +#line 1088 "asmparse.y" + { __int32* p = new (nothrow) __int32[yystack.l_mark[0].int32]; + if(p != NULL) { + for(int i=0; iEmitData(p, sizeof(__int32)*yystack.l_mark[0].int32); delete [] p; + } else PASM->report->error("Out of memory emitting data block %d bytes\n", + sizeof(__int32)*yystack.l_mark[0].int32); } +#line 11118 "asmparse.cpp" +break; case 410: -#line 1103 "asmparse.y" -{ PASM->EmitData(NULL, sizeof(__int32)*yypvt[-0].int32); } break; +#line 1095 "asmparse.y" + { __int16 i = (__int16) yystack.l_mark[-2].int32; FAIL_UNLESS(i == yystack.l_mark[-2].int32, ("Value %d too big\n", yystack.l_mark[-2].int32)); + __int16* p = new (nothrow) __int16[yystack.l_mark[0].int32]; + if(p != NULL) { + for(int j=0; jEmitData(p, sizeof(__int16)*yystack.l_mark[0].int32); delete [] p; + } else PASM->report->error("Out of memory emitting data block %d bytes\n", + sizeof(__int16)*yystack.l_mark[0].int32); } +#line 11129 "asmparse.cpp" +break; case 411: -#line 1104 "asmparse.y" -{ PASM->EmitData(NULL, sizeof(__int16)*yypvt[-0].int32); } break; +#line 1103 "asmparse.y" + { __int8 i = (__int8) yystack.l_mark[-2].int32; FAIL_UNLESS(i == yystack.l_mark[-2].int32, ("Value %d too big\n", yystack.l_mark[-2].int32)); + __int8* p = new (nothrow) __int8[yystack.l_mark[0].int32]; + if(p != NULL) { + for(int j=0; jEmitData(p, sizeof(__int8)*yystack.l_mark[0].int32); delete [] p; + } else PASM->report->error("Out of memory emitting data block %d bytes\n", + sizeof(__int8)*yystack.l_mark[0].int32); } +#line 11140 "asmparse.cpp" +break; case 412: -#line 1105 "asmparse.y" -{ PASM->EmitData(NULL, sizeof(__int8)*yypvt[-0].int32); } break; +#line 1110 "asmparse.y" + { PASM->EmitData(NULL, sizeof(float)*yystack.l_mark[0].int32); } +#line 11145 "asmparse.cpp" +break; case 413: -#line 1109 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); - float f = (float)(*yypvt[-1].float64); - yyval.binstr->appendInt32(*((__int32*)&f)); delete yypvt[-1].float64; } break; +#line 1111 "asmparse.y" + { PASM->EmitData(NULL, sizeof(double)*yystack.l_mark[0].int32); } +#line 11150 "asmparse.cpp" +break; case 414: #line 1112 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); - yyval.binstr->appendInt64((__int64 *)yypvt[-1].float64); delete yypvt[-1].float64; } break; + { PASM->EmitData(NULL, sizeof(__int64)*yystack.l_mark[0].int32); } +#line 11155 "asmparse.cpp" +break; case 415: -#line 1114 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1113 "asmparse.y" + { PASM->EmitData(NULL, sizeof(__int32)*yystack.l_mark[0].int32); } +#line 11160 "asmparse.cpp" +break; case 416: -#line 1116 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); - yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break; +#line 1114 "asmparse.y" + { PASM->EmitData(NULL, sizeof(__int16)*yystack.l_mark[0].int32); } +#line 11165 "asmparse.cpp" +break; case 417: -#line 1118 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); - yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break; +#line 1115 "asmparse.y" + { PASM->EmitData(NULL, sizeof(__int8)*yystack.l_mark[0].int32); } +#line 11170 "asmparse.cpp" +break; case 418: -#line 1120 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1119 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); + float f = (float)(*yystack.l_mark[-1].float64); + yyval.binstr->appendInt32(*((__int32*)&f)); delete yystack.l_mark[-1].float64; } +#line 11177 "asmparse.cpp" +break; case 419: #line 1122 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); - yyval.binstr->appendInt16(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].float64); delete yystack.l_mark[-1].float64; } +#line 11183 "asmparse.cpp" +break; case 420: #line 1124 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); - yyval.binstr->appendInt8(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11189 "asmparse.cpp" +break; case 421: #line 1126 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); - yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11195 "asmparse.cpp" +break; case 422: #line 1128 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11201 "asmparse.cpp" +break; case 423: #line 1130 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); - yyval.binstr->appendInt16(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11207 "asmparse.cpp" +break; case 424: #line 1132 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); - yyval.binstr->appendInt8(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11213 "asmparse.cpp" +break; case 425: #line 1134 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); - yyval.binstr->appendInt64((__int64 *)yypvt[-1].int64); delete yypvt[-1].int64; } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32); } +#line 11219 "asmparse.cpp" +break; case 426: #line 1136 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11225 "asmparse.cpp" +break; case 427: #line 1138 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); - yyval.binstr->appendInt16(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11231 "asmparse.cpp" +break; case 428: #line 1140 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); - yyval.binstr->appendInt8(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11237 "asmparse.cpp" +break; case 429: #line 1142 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); - yyval.binstr->appendInt16(yypvt[-1].int32); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32); } +#line 11243 "asmparse.cpp" +break; case 430: #line 1144 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); - yyval.binstr->appendInt8(yypvt[-1].int32);} break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11249 "asmparse.cpp" +break; case 431: #line 1146 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); - yyval.binstr->append(yypvt[-1].binstr); delete yypvt[-1].binstr;} break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11255 "asmparse.cpp" +break; case 432: -#line 1150 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 1148 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11261 "asmparse.cpp" +break; case 433: -#line 1153 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1150 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32); } +#line 11267 "asmparse.cpp" +break; case 434: -#line 1154 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1152 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11273 "asmparse.cpp" +break; case 435: -#line 1157 "asmparse.y" -{ __int8 i = (__int8) yypvt[-0].int32; yyval.binstr = new BinStr(); yyval.binstr->appendInt8(i); } break; +#line 1154 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32);} +#line 11279 "asmparse.cpp" +break; case 436: -#line 1158 "asmparse.y" -{ __int8 i = (__int8) yypvt[-0].int32; yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(i); } break; +#line 1156 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); + yyval.binstr->append(yystack.l_mark[-1].binstr); delete yystack.l_mark[-1].binstr;} +#line 11285 "asmparse.cpp" +break; case 437: -#line 1162 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1160 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 11290 "asmparse.cpp" +break; case 438: #line 1163 "asmparse.y" -{ yyval.binstr = BinStrToUnicode(yypvt[-0].binstr,true); yyval.binstr->insertInt8(ELEMENT_TYPE_STRING);} break; + { yyval.binstr = new BinStr(); } +#line 11295 "asmparse.cpp" +break; case 439: #line 1164 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CLASS); - yyval.binstr->appendInt32(0); } break; + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 11300 "asmparse.cpp" +break; case 440: -#line 1169 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1167 "asmparse.y" + { __int8 i = (__int8) yystack.l_mark[0].int32; yyval.binstr = new BinStr(); yyval.binstr->appendInt8(i); } +#line 11305 "asmparse.cpp" +break; case 441: -#line 1170 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); yyval.binstr->appendInt8(0xFF); } break; +#line 1168 "asmparse.y" + { __int8 i = (__int8) yystack.l_mark[0].int32; yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->appendInt8(i); } +#line 11310 "asmparse.cpp" +break; case 442: -#line 1171 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); - AppendStringWithLength(yyval.binstr,yypvt[-1].string); delete [] yypvt[-1].string;} break; +#line 1172 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 11315 "asmparse.cpp" +break; case 443: #line 1173 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); - AppendStringWithLength(yyval.binstr,yypvt[-1].string); delete [] yypvt[-1].string;} break; + { yyval.binstr = BinStrToUnicode(yystack.l_mark[0].binstr,true); yyval.binstr->insertInt8(ELEMENT_TYPE_STRING);} +#line 11320 "asmparse.cpp" +break; case 444: -#line 1175 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); - AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yypvt[-1].token));} break; +#line 1174 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CLASS); + yyval.binstr->appendInt32(0); } +#line 11326 "asmparse.cpp" +break; case 445: -#line 1177 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); yyval.binstr->appendInt8(0xFF); } break; +#line 1179 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 11331 "asmparse.cpp" +break; case 446: -#line 1178 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(SERIALIZATION_TYPE_TAGGED_OBJECT);} break; -case 447: #line 1180 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_R4); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); yyval.binstr->appendInt8(0xFF); } +#line 11336 "asmparse.cpp" +break; +case 447: +#line 1181 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); + AppendStringWithLength(yyval.binstr,yystack.l_mark[-1].string); delete [] yystack.l_mark[-1].string;} +#line 11342 "asmparse.cpp" +break; case 448: -#line 1184 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_R8); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1183 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); + AppendStringWithLength(yyval.binstr,yystack.l_mark[-1].string); delete [] yystack.l_mark[-1].string;} +#line 11348 "asmparse.cpp" +break; case 449: -#line 1188 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_I8); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1185 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); + AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yystack.l_mark[-1].token));} +#line 11354 "asmparse.cpp" +break; case 450: -#line 1192 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_I4); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1187 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(SERIALIZATION_TYPE_TYPE); yyval.binstr->appendInt8(0xFF); } +#line 11359 "asmparse.cpp" +break; case 451: -#line 1196 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_I2); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1188 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt8(SERIALIZATION_TYPE_TAGGED_OBJECT);} +#line 11364 "asmparse.cpp" +break; case 452: -#line 1200 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_I1); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1190 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_R4); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11371 "asmparse.cpp" +break; case 453: -#line 1204 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U8); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1194 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_R8); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11378 "asmparse.cpp" +break; case 454: -#line 1208 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U4); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1198 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_I8); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11385 "asmparse.cpp" +break; case 455: -#line 1212 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U2); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1202 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_I4); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11392 "asmparse.cpp" +break; case 456: -#line 1216 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U1); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1206 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_I2); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11399 "asmparse.cpp" +break; case 457: -#line 1220 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U8); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1210 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_I1); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11406 "asmparse.cpp" +break; case 458: -#line 1224 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U4); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1214 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U8); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11413 "asmparse.cpp" +break; case 459: -#line 1228 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U2); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1218 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U4); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11420 "asmparse.cpp" +break; case 460: -#line 1232 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_U1); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1222 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U2); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11427 "asmparse.cpp" +break; case 461: -#line 1236 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_CHAR); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1226 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U1); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11434 "asmparse.cpp" +break; case 462: -#line 1240 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_BOOLEAN); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1230 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U8); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11441 "asmparse.cpp" +break; case 463: -#line 1244 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(ELEMENT_TYPE_STRING); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1234 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U4); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11448 "asmparse.cpp" +break; case 464: -#line 1248 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(SERIALIZATION_TYPE_TYPE); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1238 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U2); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11455 "asmparse.cpp" +break; case 465: -#line 1252 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt32(yypvt[-4].int32); - yyval.binstr->insertInt8(SERIALIZATION_TYPE_TAGGED_OBJECT); - yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1242 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_U1); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11462 "asmparse.cpp" +break; case 466: -#line 1258 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1246 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_CHAR); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11469 "asmparse.cpp" +break; case 467: -#line 1259 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - float f = (float) (*yypvt[-0].float64); yyval.binstr->appendInt32(*((__int32*)&f)); delete yypvt[-0].float64; } break; +#line 1250 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_BOOLEAN); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11476 "asmparse.cpp" +break; case 468: -#line 1261 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - yyval.binstr->appendInt32(yypvt[-0].int32); } break; +#line 1254 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(ELEMENT_TYPE_STRING); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11483 "asmparse.cpp" +break; case 469: -#line 1265 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1258 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(SERIALIZATION_TYPE_TYPE); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11490 "asmparse.cpp" +break; case 470: -#line 1266 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - yyval.binstr->appendInt64((__int64 *)yypvt[-0].float64); delete yypvt[-0].float64; } break; +#line 1262 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt32(yystack.l_mark[-4].int32); + yyval.binstr->insertInt8(SERIALIZATION_TYPE_TAGGED_OBJECT); + yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 11497 "asmparse.cpp" +break; case 471: -#line 1268 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - yyval.binstr->appendInt64((__int64 *)yypvt[-0].int64); delete yypvt[-0].int64; } break; +#line 1267 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); + float f = (float)(*yystack.l_mark[-1].float64); + yyval.binstr->appendInt32(*((__int32*)&f)); delete yystack.l_mark[-1].float64; } +#line 11504 "asmparse.cpp" +break; case 472: -#line 1272 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1270 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].float64); delete yystack.l_mark[-1].float64; } +#line 11510 "asmparse.cpp" +break; case 473: -#line 1273 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - yyval.binstr->appendInt64((__int64 *)yypvt[-0].int64); delete yypvt[-0].int64; } break; +#line 1272 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11516 "asmparse.cpp" +break; case 474: -#line 1277 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1274 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11522 "asmparse.cpp" +break; case 475: -#line 1278 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt32(yypvt[-0].int32);} break; +#line 1276 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11528 "asmparse.cpp" +break; case 476: -#line 1281 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1278 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11534 "asmparse.cpp" +break; case 477: -#line 1282 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt16(yypvt[-0].int32);} break; +#line 1280 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11540 "asmparse.cpp" +break; case 478: -#line 1285 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1282 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32); } +#line 11546 "asmparse.cpp" +break; case 479: -#line 1286 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(yypvt[-0].int32); } break; +#line 1284 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11552 "asmparse.cpp" +break; case 480: -#line 1289 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1286 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11558 "asmparse.cpp" +break; case 481: -#line 1290 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - yyval.binstr->appendInt8(yypvt[-0].int32);} break; +#line 1288 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11564 "asmparse.cpp" +break; case 482: -#line 1294 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1290 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32); } +#line 11570 "asmparse.cpp" +break; case 483: -#line 1295 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(0xFF); } break; +#line 1292 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[-1].int64); delete yystack.l_mark[-1].int64; } +#line 11576 "asmparse.cpp" +break; case 484: -#line 1296 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - AppendStringWithLength(yyval.binstr,yypvt[-0].string); delete [] yypvt[-0].string;} break; +#line 1294 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 11582 "asmparse.cpp" +break; case 485: -#line 1300 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1296 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11588 "asmparse.cpp" +break; case 486: -#line 1301 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->appendInt8(0xFF); } break; +#line 1298 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32); } +#line 11594 "asmparse.cpp" +break; case 487: -#line 1302 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; - AppendStringWithLength(yyval.binstr,yypvt[-0].string); delete [] yypvt[-0].string;} break; +#line 1300 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); + yyval.binstr->appendInt16(yystack.l_mark[-1].int32); } +#line 11600 "asmparse.cpp" +break; case 488: -#line 1304 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; - AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yypvt[-0].token));} break; +#line 1302 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); + yyval.binstr->appendInt8(yystack.l_mark[-1].int32);} +#line 11606 "asmparse.cpp" +break; case 489: -#line 1308 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1307 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11611 "asmparse.cpp" +break; case 490: -#line 1309 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break; +#line 1308 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + float f = (float) (*yystack.l_mark[0].float64); yyval.binstr->appendInt32(*((__int32*)&f)); delete yystack.l_mark[0].float64; } +#line 11617 "asmparse.cpp" +break; case 491: -#line 1313 "asmparse.y" -{ parser->m_ANSFirst.PUSH(PASM->m_firstArgName); - parser->m_ANSLast.PUSH(PASM->m_lastArgName); - PASM->m_firstArgName = NULL; - PASM->m_lastArgName = NULL; } break; +#line 1310 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + yyval.binstr->appendInt32(yystack.l_mark[0].int32); } +#line 11623 "asmparse.cpp" +break; case 492: -#line 1319 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1314 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11628 "asmparse.cpp" +break; case 493: -#line 1322 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1315 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[0].float64); delete yystack.l_mark[0].float64; } +#line 11634 "asmparse.cpp" +break; case 494: -#line 1325 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1317 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[0].int64); delete yystack.l_mark[0].int64; } +#line 11640 "asmparse.cpp" +break; case 495: -#line 1328 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1321 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11645 "asmparse.cpp" +break; case 496: -#line 1331 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1322 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + yyval.binstr->appendInt64((__int64 *)yystack.l_mark[0].int64); delete yystack.l_mark[0].int64; } +#line 11651 "asmparse.cpp" +break; case 497: -#line 1334 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1326 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11656 "asmparse.cpp" +break; case 498: -#line 1337 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); - if((!PASM->OnErrGo)&& - ((yypvt[-0].opcode == CEE_NEWOBJ)|| - (yypvt[-0].opcode == CEE_CALLVIRT))) - iCallConv = IMAGE_CEE_CS_CALLCONV_HASTHIS; - } break; +#line 1327 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->appendInt32(yystack.l_mark[0].int32);} +#line 11661 "asmparse.cpp" +break; case 499: -#line 1345 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1330 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11666 "asmparse.cpp" +break; case 500: -#line 1348 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1331 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->appendInt16(yystack.l_mark[0].int32);} +#line 11671 "asmparse.cpp" +break; case 501: -#line 1351 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1334 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11676 "asmparse.cpp" +break; case 502: -#line 1354 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1335 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->appendInt8(yystack.l_mark[0].int32); } +#line 11681 "asmparse.cpp" +break; case 503: -#line 1357 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); iOpcodeLen = PASM->OpcodeLen(yyval.instr); } break; +#line 1338 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11686 "asmparse.cpp" +break; case 504: -#line 1360 "asmparse.y" -{ yyval.instr = SetupInstr(yypvt[-0].opcode); } break; +#line 1339 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + yyval.binstr->appendInt8(yystack.l_mark[0].int32);} +#line 11692 "asmparse.cpp" +break; case 505: -#line 1363 "asmparse.y" -{ yyval.instr = yypvt[-1].instr; bParsingByteArray = TRUE; } break; +#line 1343 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11697 "asmparse.cpp" +break; case 506: -#line 1367 "asmparse.y" -{ PASM->EmitOpcode(yypvt[-0].instr); } break; +#line 1344 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->appendInt8(0xFF); } +#line 11702 "asmparse.cpp" +break; case 507: -#line 1368 "asmparse.y" -{ PASM->EmitInstrVar(yypvt[-1].instr, yypvt[-0].int32); } break; +#line 1345 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + AppendStringWithLength(yyval.binstr,yystack.l_mark[0].string); delete [] yystack.l_mark[0].string;} +#line 11708 "asmparse.cpp" +break; case 508: -#line 1369 "asmparse.y" -{ PASM->EmitInstrVarByName(yypvt[-1].instr, yypvt[-0].string); } break; +#line 1349 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11713 "asmparse.cpp" +break; case 509: -#line 1370 "asmparse.y" -{ PASM->EmitInstrI(yypvt[-1].instr, yypvt[-0].int32); } break; +#line 1350 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->appendInt8(0xFF); } +#line 11718 "asmparse.cpp" +break; case 510: -#line 1371 "asmparse.y" -{ PASM->EmitInstrI8(yypvt[-1].instr, yypvt[-0].int64); } break; +#line 1351 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; + AppendStringWithLength(yyval.binstr,yystack.l_mark[0].string); delete [] yystack.l_mark[0].string;} +#line 11724 "asmparse.cpp" +break; case 511: -#line 1372 "asmparse.y" -{ PASM->EmitInstrR(yypvt[-1].instr, yypvt[-0].float64); delete (yypvt[-0].float64);} break; +#line 1353 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; + AppendStringWithLength(yyval.binstr,PASM->ReflectionNotation(yystack.l_mark[0].token));} +#line 11730 "asmparse.cpp" +break; case 512: -#line 1373 "asmparse.y" -{ double f = (double) (*yypvt[-0].int64); PASM->EmitInstrR(yypvt[-1].instr, &f); } break; +#line 1357 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 11735 "asmparse.cpp" +break; case 513: -#line 1374 "asmparse.y" -{ unsigned L = yypvt[-1].binstr->length(); - FAIL_UNLESS(L >= sizeof(float), ("%d hexbytes, must be at least %d\n", - L,sizeof(float))); - if(L < sizeof(float)) {YYERROR; } - else { - double f = (L >= sizeof(double)) ? *((double *)(yypvt[-1].binstr->ptr())) - : (double)(*(float *)(yypvt[-1].binstr->ptr())); - PASM->EmitInstrR(yypvt[-2].instr,&f); } - delete yypvt[-1].binstr; } break; +#line 1358 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->append(yystack.l_mark[0].binstr); delete yystack.l_mark[0].binstr; } +#line 11740 "asmparse.cpp" +break; case 514: -#line 1383 "asmparse.y" -{ PASM->EmitInstrBrOffset(yypvt[-1].instr, yypvt[-0].int32); } break; +#line 1362 "asmparse.y" + { parser->m_ANSFirst.PUSH(PASM->m_firstArgName); + parser->m_ANSLast.PUSH(PASM->m_lastArgName); + PASM->m_firstArgName = NULL; + PASM->m_lastArgName = NULL; } +#line 11748 "asmparse.cpp" +break; case 515: -#line 1384 "asmparse.y" -{ PASM->EmitInstrBrTarget(yypvt[-1].instr, yypvt[-0].string); } break; +#line 1368 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11753 "asmparse.cpp" +break; case 516: -#line 1386 "asmparse.y" -{ PASM->SetMemberRefFixup(yypvt[-0].token,PASM->OpcodeLen(yypvt[-1].instr)); - PASM->EmitInstrI(yypvt[-1].instr,yypvt[-0].token); - PASM->m_tkCurrentCVOwner = yypvt[-0].token; - PASM->m_pCustomDescrList = NULL; - iCallConv = 0; - } break; +#line 1371 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11758 "asmparse.cpp" +break; case 517: -#line 1393 "asmparse.y" -{ yypvt[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); - mdToken mr = PASM->MakeMemberRef(yypvt[-2].token, yypvt[-0].string, yypvt[-3].binstr); - PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-4].instr)); - PASM->EmitInstrI(yypvt[-4].instr,mr); - PASM->m_tkCurrentCVOwner = mr; - PASM->m_pCustomDescrList = NULL; - } break; +#line 1374 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11763 "asmparse.cpp" +break; case 518: -#line 1401 "asmparse.y" -{ yypvt[-1].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); - mdToken mr = PASM->MakeMemberRef(mdTokenNil, yypvt[-0].string, yypvt[-1].binstr); - PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-2].instr)); - PASM->EmitInstrI(yypvt[-2].instr,mr); - PASM->m_tkCurrentCVOwner = mr; - PASM->m_pCustomDescrList = NULL; - } break; +#line 1377 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11768 "asmparse.cpp" +break; case 519: -#line 1408 "asmparse.y" -{ mdToken mr = yypvt[-0].token; - PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-1].instr)); - PASM->EmitInstrI(yypvt[-1].instr,mr); - PASM->m_tkCurrentCVOwner = mr; - PASM->m_pCustomDescrList = NULL; - } break; +#line 1380 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11773 "asmparse.cpp" +break; case 520: -#line 1414 "asmparse.y" -{ mdToken mr = yypvt[-0].tdd->m_tkTypeSpec; - PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-1].instr)); - PASM->EmitInstrI(yypvt[-1].instr,mr); - PASM->m_tkCurrentCVOwner = mr; - PASM->m_pCustomDescrList = NULL; - } break; +#line 1383 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11778 "asmparse.cpp" +break; case 521: -#line 1420 "asmparse.y" -{ mdToken mr = yypvt[-0].tdd->m_tkTypeSpec; - PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yypvt[-1].instr)); - PASM->EmitInstrI(yypvt[-1].instr,mr); - PASM->m_tkCurrentCVOwner = mr; - PASM->m_pCustomDescrList = NULL; - } break; +#line 1386 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); + if((!PASM->OnErrGo)&& + ((yystack.l_mark[0].opcode == CEE_NEWOBJ)|| + (yystack.l_mark[0].opcode == CEE_CALLVIRT))) + iCallConv = IMAGE_CEE_CS_CALLCONV_HASTHIS; + } +#line 11788 "asmparse.cpp" +break; case 522: -#line 1426 "asmparse.y" -{ PASM->EmitInstrI(yypvt[-1].instr, yypvt[-0].token); - PASM->m_tkCurrentCVOwner = yypvt[-0].token; - PASM->m_pCustomDescrList = NULL; - } break; +#line 1394 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11793 "asmparse.cpp" +break; case 523: -#line 1430 "asmparse.y" -{ PASM->EmitInstrStringLiteral(yypvt[-1].instr, yypvt[-0].binstr,TRUE); } break; +#line 1397 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11798 "asmparse.cpp" +break; case 524: -#line 1432 "asmparse.y" -{ PASM->EmitInstrStringLiteral(yypvt[-4].instr, yypvt[-1].binstr,FALSE); } break; +#line 1400 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11803 "asmparse.cpp" +break; case 525: -#line 1434 "asmparse.y" -{ PASM->EmitInstrStringLiteral(yypvt[-3].instr, yypvt[-1].binstr,FALSE,TRUE); } break; +#line 1403 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11808 "asmparse.cpp" +break; case 526: -#line 1436 "asmparse.y" -{ PASM->EmitInstrSig(yypvt[-5].instr, parser->MakeSig(yypvt[-4].int32, yypvt[-3].binstr, yypvt[-1].binstr)); - PASM->ResetArgNameList(); - } break; +#line 1406 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); iOpcodeLen = PASM->OpcodeLen(yyval.instr); } +#line 11813 "asmparse.cpp" +break; case 527: -#line 1440 "asmparse.y" -{ PASM->EmitInstrI(yypvt[-1].instr,yypvt[-0].token); - PASM->m_tkCurrentCVOwner = yypvt[-0].token; - PASM->m_pCustomDescrList = NULL; - iOpcodeLen = 0; - } break; +#line 1409 "asmparse.y" + { yyval.instr = SetupInstr(yystack.l_mark[0].opcode); } +#line 11818 "asmparse.cpp" +break; case 528: -#line 1445 "asmparse.y" -{ PASM->EmitInstrSwitch(yypvt[-3].instr, yypvt[-1].labels); } break; +#line 1412 "asmparse.y" + { yyval.instr = yystack.l_mark[-1].instr; bParsingByteArray = TRUE; } +#line 11823 "asmparse.cpp" +break; case 529: -#line 1448 "asmparse.y" -{ yyval.labels = 0; } break; +#line 1416 "asmparse.y" + { PASM->EmitOpcode(yystack.l_mark[0].instr); } +#line 11828 "asmparse.cpp" +break; case 530: -#line 1449 "asmparse.y" -{ yyval.labels = new Labels(yypvt[-2].string, yypvt[-0].labels, TRUE); } break; +#line 1417 "asmparse.y" + { PASM->EmitInstrVar(yystack.l_mark[-1].instr, yystack.l_mark[0].int32); } +#line 11833 "asmparse.cpp" +break; case 531: -#line 1450 "asmparse.y" -{ yyval.labels = new Labels((char *)(UINT_PTR)yypvt[-2].int32, yypvt[-0].labels, FALSE); } break; +#line 1418 "asmparse.y" + { PASM->EmitInstrVarByName(yystack.l_mark[-1].instr, yystack.l_mark[0].string); } +#line 11838 "asmparse.cpp" +break; case 532: -#line 1451 "asmparse.y" -{ yyval.labels = new Labels(yypvt[-0].string, NULL, TRUE); } break; +#line 1419 "asmparse.y" + { PASM->EmitInstrI(yystack.l_mark[-1].instr, yystack.l_mark[0].int32); } +#line 11843 "asmparse.cpp" +break; case 533: -#line 1452 "asmparse.y" -{ yyval.labels = new Labels((char *)(UINT_PTR)yypvt[-0].int32, NULL, FALSE); } break; +#line 1420 "asmparse.y" + { PASM->EmitInstrI8(yystack.l_mark[-1].instr, yystack.l_mark[0].int64); } +#line 11848 "asmparse.cpp" +break; case 534: -#line 1456 "asmparse.y" -{ yyval.binstr = NULL; } break; +#line 1421 "asmparse.y" + { PASM->EmitInstrR(yystack.l_mark[-1].instr, yystack.l_mark[0].float64); delete (yystack.l_mark[0].float64);} +#line 11853 "asmparse.cpp" +break; case 535: -#line 1457 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; } break; +#line 1422 "asmparse.y" + { double f = (double) (*yystack.l_mark[0].int64); PASM->EmitInstrR(yystack.l_mark[-1].instr, &f); } +#line 11858 "asmparse.cpp" +break; case 536: -#line 1460 "asmparse.y" -{ yyval.binstr = NULL; } break; +#line 1423 "asmparse.y" + { unsigned L = yystack.l_mark[-1].binstr->length(); + FAIL_UNLESS(L >= sizeof(float), ("%d hexbytes, must be at least %d\n", + L,sizeof(float))); + if(L < sizeof(float)) {YYERROR; } + else { + double f = (L >= sizeof(double)) ? *((double *)(yystack.l_mark[-1].binstr->ptr())) + : (double)(*(float *)(yystack.l_mark[-1].binstr->ptr())); + PASM->EmitInstrR(yystack.l_mark[-2].instr,&f); } + delete yystack.l_mark[-1].binstr; } +#line 11871 "asmparse.cpp" +break; case 537: -#line 1461 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1432 "asmparse.y" + { PASM->EmitInstrBrOffset(yystack.l_mark[-1].instr, yystack.l_mark[0].int32); } +#line 11876 "asmparse.cpp" +break; case 538: -#line 1464 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1433 "asmparse.y" + { PASM->EmitInstrBrTarget(yystack.l_mark[-1].instr, yystack.l_mark[0].string); } +#line 11881 "asmparse.cpp" +break; case 539: -#line 1465 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break; +#line 1435 "asmparse.y" + { PASM->SetMemberRefFixup(yystack.l_mark[0].token,PASM->OpcodeLen(yystack.l_mark[-1].instr)); + PASM->EmitInstrI(yystack.l_mark[-1].instr,yystack.l_mark[0].token); + PASM->m_tkCurrentCVOwner = yystack.l_mark[0].token; + PASM->m_pCustomDescrList = NULL; + iCallConv = 0; + } +#line 11891 "asmparse.cpp" +break; case 540: -#line 1469 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1442 "asmparse.y" + { yystack.l_mark[-3].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); + mdToken mr = PASM->MakeMemberRef(yystack.l_mark[-2].token, yystack.l_mark[0].string, yystack.l_mark[-3].binstr); + PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yystack.l_mark[-4].instr)); + PASM->EmitInstrI(yystack.l_mark[-4].instr,mr); + PASM->m_tkCurrentCVOwner = mr; + PASM->m_pCustomDescrList = NULL; + } +#line 11902 "asmparse.cpp" +break; case 541: -#line 1470 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr;} break; +#line 1450 "asmparse.y" + { yystack.l_mark[-1].binstr->insertInt8(IMAGE_CEE_CS_CALLCONV_FIELD); + mdToken mr = PASM->MakeMemberRef(mdTokenNil, yystack.l_mark[0].string, yystack.l_mark[-1].binstr); + PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yystack.l_mark[-2].instr)); + PASM->EmitInstrI(yystack.l_mark[-2].instr,mr); + PASM->m_tkCurrentCVOwner = mr; + PASM->m_pCustomDescrList = NULL; + } +#line 11913 "asmparse.cpp" +break; case 542: -#line 1473 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1457 "asmparse.y" + { mdToken mr = yystack.l_mark[0].token; + PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yystack.l_mark[-1].instr)); + PASM->EmitInstrI(yystack.l_mark[-1].instr,mr); + PASM->m_tkCurrentCVOwner = mr; + PASM->m_pCustomDescrList = NULL; + } +#line 11923 "asmparse.cpp" +break; case 543: -#line 1474 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break; +#line 1463 "asmparse.y" + { mdToken mr = yystack.l_mark[0].tdd->m_tkTypeSpec; + PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yystack.l_mark[-1].instr)); + PASM->EmitInstrI(yystack.l_mark[-1].instr,mr); + PASM->m_tkCurrentCVOwner = mr; + PASM->m_pCustomDescrList = NULL; + } +#line 11933 "asmparse.cpp" +break; case 544: -#line 1477 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_SENTINEL); } break; +#line 1469 "asmparse.y" + { mdToken mr = yystack.l_mark[0].tdd->m_tkTypeSpec; + PASM->SetMemberRefFixup(mr, PASM->OpcodeLen(yystack.l_mark[-1].instr)); + PASM->EmitInstrI(yystack.l_mark[-1].instr,mr); + PASM->m_tkCurrentCVOwner = mr; + PASM->m_pCustomDescrList = NULL; + } +#line 11943 "asmparse.cpp" +break; case 545: -#line 1478 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-1].binstr); PASM->addArgName(NULL, yypvt[-1].binstr, yypvt[-0].binstr, yypvt[-2].int32); } break; +#line 1475 "asmparse.y" + { PASM->EmitInstrI(yystack.l_mark[-1].instr, yystack.l_mark[0].token); + PASM->m_tkCurrentCVOwner = yystack.l_mark[0].token; + PASM->m_pCustomDescrList = NULL; + } +#line 11951 "asmparse.cpp" +break; case 546: #line 1479 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-2].binstr); PASM->addArgName(yypvt[-0].string, yypvt[-2].binstr, yypvt[-1].binstr, yypvt[-3].int32);} break; + { PASM->EmitInstrStringLiteral(yystack.l_mark[-1].instr, yystack.l_mark[0].binstr,TRUE); } +#line 11956 "asmparse.cpp" +break; case 547: -#line 1483 "asmparse.y" -{ yyval.token = PASM->ResolveClassRef(PASM->GetAsmRef(yypvt[-2].string), yypvt[-0].string, NULL); delete[] yypvt[-2].string;} break; +#line 1481 "asmparse.y" + { PASM->EmitInstrStringLiteral(yystack.l_mark[-4].instr, yystack.l_mark[-1].binstr,FALSE); } +#line 11961 "asmparse.cpp" +break; case 548: -#line 1484 "asmparse.y" -{ yyval.token = PASM->ResolveClassRef(yypvt[-2].token, yypvt[-0].string, NULL); } break; +#line 1483 "asmparse.y" + { PASM->EmitInstrStringLiteral(yystack.l_mark[-3].instr, yystack.l_mark[-1].binstr,FALSE,TRUE); } +#line 11966 "asmparse.cpp" +break; case 549: #line 1485 "asmparse.y" -{ yyval.token = PASM->ResolveClassRef(mdTokenNil, yypvt[-0].string, NULL); } break; + { PASM->EmitInstrSig(yystack.l_mark[-5].instr, parser->MakeSig(yystack.l_mark[-4].int32, yystack.l_mark[-3].binstr, yystack.l_mark[-1].binstr)); + PASM->ResetArgNameList(); + } +#line 11973 "asmparse.cpp" +break; case 550: -#line 1486 "asmparse.y" -{ yyval.token = PASM->ResolveClassRef(PASM->GetModRef(yypvt[-2].string),yypvt[-0].string, NULL); delete[] yypvt[-2].string;} break; +#line 1489 "asmparse.y" + { PASM->EmitInstrI(yystack.l_mark[-1].instr,yystack.l_mark[0].token); + PASM->m_tkCurrentCVOwner = yystack.l_mark[0].token; + PASM->m_pCustomDescrList = NULL; + iOpcodeLen = 0; + } +#line 11982 "asmparse.cpp" +break; case 551: -#line 1487 "asmparse.y" -{ yyval.token = PASM->ResolveClassRef(1,yypvt[-0].string,NULL); } break; +#line 1494 "asmparse.y" + { PASM->EmitInstrSwitch(yystack.l_mark[-3].instr, yystack.l_mark[-1].labels); } +#line 11987 "asmparse.cpp" +break; case 552: -#line 1488 "asmparse.y" -{ yyval.token = yypvt[-0].token; } break; +#line 1497 "asmparse.y" + { yyval.labels = 0; } +#line 11992 "asmparse.cpp" +break; case 553: -#line 1489 "asmparse.y" -{ yyval.token = yypvt[-0].tdd->m_tkTypeSpec; } break; +#line 1498 "asmparse.y" + { yyval.labels = new Labels(yystack.l_mark[-2].string, yystack.l_mark[0].labels, TRUE); } +#line 11997 "asmparse.cpp" +break; case 554: -#line 1490 "asmparse.y" -{ if(PASM->m_pCurClass != NULL) yyval.token = PASM->m_pCurClass->m_cl; - else { yyval.token = 0; PASM->report->error(".this outside class scope\n"); } - } break; +#line 1499 "asmparse.y" + { yyval.labels = new Labels((char *)(UINT_PTR)yystack.l_mark[-2].int32, yystack.l_mark[0].labels, FALSE); } +#line 12002 "asmparse.cpp" +break; case 555: -#line 1493 "asmparse.y" -{ if(PASM->m_pCurClass != NULL) { - yyval.token = PASM->m_pCurClass->m_crExtends; - if(RidFromToken(yyval.token) == 0) - PASM->report->error(".base undefined\n"); - } else { yyval.token = 0; PASM->report->error(".base outside class scope\n"); } - } break; +#line 1500 "asmparse.y" + { yyval.labels = new Labels(yystack.l_mark[0].string, NULL, TRUE); } +#line 12007 "asmparse.cpp" +break; case 556: -#line 1499 "asmparse.y" -{ if(PASM->m_pCurClass != NULL) { - if(PASM->m_pCurClass->m_pEncloser != NULL) yyval.token = PASM->m_pCurClass->m_pEncloser->m_cl; - else { yyval.token = 0; PASM->report->error(".nester undefined\n"); } - } else { yyval.token = 0; PASM->report->error(".nester outside class scope\n"); } - } break; +#line 1501 "asmparse.y" + { yyval.labels = new Labels((char *)(UINT_PTR)yystack.l_mark[0].int32, NULL, FALSE); } +#line 12012 "asmparse.cpp" +break; case 557: -#line 1506 "asmparse.y" -{ yyval.string = yypvt[-0].string; } break; +#line 1505 "asmparse.y" + { yyval.binstr = NULL; } +#line 12017 "asmparse.cpp" +break; case 558: -#line 1507 "asmparse.y" -{ yyval.string = newStringWDel(yypvt[-2].string, NESTING_SEP, yypvt[-0].string); } break; +#line 1506 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; } +#line 12022 "asmparse.cpp" +break; case 559: -#line 1510 "asmparse.y" -{ yyval.token = yypvt[-0].token;} break; +#line 1509 "asmparse.y" + { yyval.binstr = NULL; } +#line 12027 "asmparse.cpp" +break; case 560: -#line 1511 "asmparse.y" -{ yyval.token = PASM->GetAsmRef(yypvt[-1].string); delete[] yypvt[-1].string;} break; +#line 1510 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 12032 "asmparse.cpp" +break; case 561: -#line 1512 "asmparse.y" -{ yyval.token = PASM->GetModRef(yypvt[-1].string); delete[] yypvt[-1].string;} break; -case 562: #line 1513 "asmparse.y" -{ yyval.token = PASM->ResolveTypeSpec(yypvt[-0].binstr); } break; + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 12037 "asmparse.cpp" +break; +case 562: +#line 1514 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->append(yystack.l_mark[0].binstr); delete yystack.l_mark[0].binstr; } +#line 12042 "asmparse.cpp" +break; case 563: -#line 1517 "asmparse.y" -{ yyval.binstr = new BinStr(); } break; +#line 1518 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 12047 "asmparse.cpp" +break; case 564: #line 1519 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CUSTOMMARSHALER); - corEmitInt(yyval.binstr,yypvt[-7].binstr->length()); yyval.binstr->append(yypvt[-7].binstr); - corEmitInt(yyval.binstr,yypvt[-5].binstr->length()); yyval.binstr->append(yypvt[-5].binstr); - corEmitInt(yyval.binstr,yypvt[-3].binstr->length()); yyval.binstr->append(yypvt[-3].binstr); - corEmitInt(yyval.binstr,yypvt[-1].binstr->length()); yyval.binstr->append(yypvt[-1].binstr); - PASM->report->warn("Deprecated 4-string form of custom marshaler, first two strings ignored\n");} break; + { yyval.binstr = yystack.l_mark[0].binstr;} +#line 12052 "asmparse.cpp" +break; case 565: -#line 1526 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CUSTOMMARSHALER); - corEmitInt(yyval.binstr,0); - corEmitInt(yyval.binstr,0); - corEmitInt(yyval.binstr,yypvt[-3].binstr->length()); yyval.binstr->append(yypvt[-3].binstr); - corEmitInt(yyval.binstr,yypvt[-1].binstr->length()); yyval.binstr->append(yypvt[-1].binstr); } break; +#line 1522 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 12057 "asmparse.cpp" +break; case 566: -#line 1531 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FIXEDSYSSTRING); - corEmitInt(yyval.binstr,yypvt[-1].int32); } break; +#line 1523 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->append(yystack.l_mark[0].binstr); delete yystack.l_mark[0].binstr; } +#line 12062 "asmparse.cpp" +break; case 567: -#line 1534 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FIXEDARRAY); - corEmitInt(yyval.binstr,yypvt[-2].int32); yyval.binstr->append(yypvt[-0].binstr); } break; +#line 1526 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_SENTINEL); } +#line 12067 "asmparse.cpp" +break; case 568: -#line 1536 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VARIANT); - PASM->report->warn("Deprecated native type 'variant'\n"); } break; +#line 1527 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->append(yystack.l_mark[-1].binstr); PASM->addArgName(NULL, yystack.l_mark[-1].binstr, yystack.l_mark[0].binstr, yystack.l_mark[-2].int32); } +#line 12072 "asmparse.cpp" +break; case 569: -#line 1538 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CURRENCY); } break; +#line 1528 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->append(yystack.l_mark[-2].binstr); PASM->addArgName(yystack.l_mark[0].string, yystack.l_mark[-2].binstr, yystack.l_mark[-1].binstr, yystack.l_mark[-3].int32);} +#line 12077 "asmparse.cpp" +break; case 570: -#line 1539 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SYSCHAR); - PASM->report->warn("Deprecated native type 'syschar'\n"); } break; +#line 1532 "asmparse.y" + { yyval.token = PASM->ResolveClassRef(PASM->GetAsmRef(yystack.l_mark[-2].string), yystack.l_mark[0].string, NULL); delete[] yystack.l_mark[-2].string;} +#line 12082 "asmparse.cpp" +break; case 571: -#line 1541 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VOID); - PASM->report->warn("Deprecated native type 'void'\n"); } break; +#line 1533 "asmparse.y" + { yyval.token = PASM->ResolveClassRef(yystack.l_mark[-2].token, yystack.l_mark[0].string, NULL); } +#line 12087 "asmparse.cpp" +break; case 572: -#line 1543 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BOOLEAN); } break; +#line 1534 "asmparse.y" + { yyval.token = PASM->ResolveClassRef(mdTokenNil, yystack.l_mark[0].string, NULL); } +#line 12092 "asmparse.cpp" +break; case 573: -#line 1544 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I1); } break; +#line 1535 "asmparse.y" + { yyval.token = PASM->ResolveClassRef(PASM->GetModRef(yystack.l_mark[-2].string),yystack.l_mark[0].string, NULL); delete[] yystack.l_mark[-2].string;} +#line 12097 "asmparse.cpp" +break; case 574: -#line 1545 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I2); } break; +#line 1536 "asmparse.y" + { yyval.token = PASM->ResolveClassRef(1,yystack.l_mark[0].string,NULL); } +#line 12102 "asmparse.cpp" +break; case 575: -#line 1546 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I4); } break; +#line 1537 "asmparse.y" + { yyval.token = yystack.l_mark[0].token; } +#line 12107 "asmparse.cpp" +break; case 576: -#line 1547 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I8); } break; +#line 1538 "asmparse.y" + { yyval.token = yystack.l_mark[0].tdd->m_tkTypeSpec; } +#line 12112 "asmparse.cpp" +break; case 577: -#line 1548 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_R4); } break; +#line 1539 "asmparse.y" + { if(PASM->m_pCurClass != NULL) yyval.token = PASM->m_pCurClass->m_cl; + else { yyval.token = 0; PASM->report->error(".this outside class scope\n"); } + } +#line 12119 "asmparse.cpp" +break; case 578: -#line 1549 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_R8); } break; +#line 1542 "asmparse.y" + { if(PASM->m_pCurClass != NULL) { + yyval.token = PASM->m_pCurClass->m_crExtends; + if(RidFromToken(yyval.token) == 0) + PASM->report->error(".base undefined\n"); + } else { yyval.token = 0; PASM->report->error(".base outside class scope\n"); } + } +#line 12129 "asmparse.cpp" +break; case 579: -#line 1550 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ERROR); } break; +#line 1548 "asmparse.y" + { if(PASM->m_pCurClass != NULL) { + if(PASM->m_pCurClass->m_pEncloser != NULL) yyval.token = PASM->m_pCurClass->m_pEncloser->m_cl; + else { yyval.token = 0; PASM->report->error(".nester undefined\n"); } + } else { yyval.token = 0; PASM->report->error(".nester outside class scope\n"); } + } +#line 12138 "asmparse.cpp" +break; case 580: -#line 1551 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U1); } break; +#line 1555 "asmparse.y" + { yyval.string = yystack.l_mark[0].string; } +#line 12143 "asmparse.cpp" +break; case 581: -#line 1552 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U2); } break; +#line 1556 "asmparse.y" + { yyval.string = newStringWDel(yystack.l_mark[-2].string, NESTING_SEP, yystack.l_mark[0].string); } +#line 12148 "asmparse.cpp" +break; case 582: -#line 1553 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U4); } break; +#line 1559 "asmparse.y" + { yyval.token = yystack.l_mark[0].token;} +#line 12153 "asmparse.cpp" +break; case 583: -#line 1554 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U8); } break; +#line 1560 "asmparse.y" + { yyval.token = PASM->GetAsmRef(yystack.l_mark[-1].string); delete[] yystack.l_mark[-1].string;} +#line 12158 "asmparse.cpp" +break; case 584: -#line 1555 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U1); } break; +#line 1561 "asmparse.y" + { yyval.token = PASM->GetModRef(yystack.l_mark[-1].string); delete[] yystack.l_mark[-1].string;} +#line 12163 "asmparse.cpp" +break; case 585: -#line 1556 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U2); } break; +#line 1562 "asmparse.y" + { yyval.token = PASM->ResolveTypeSpec(yystack.l_mark[0].binstr); } +#line 12168 "asmparse.cpp" +break; case 586: -#line 1557 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U4); } break; +#line 1566 "asmparse.y" + { yyval.binstr = new BinStr(); } +#line 12173 "asmparse.cpp" +break; case 587: -#line 1558 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U8); } break; +#line 1568 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CUSTOMMARSHALER); + corEmitInt(yyval.binstr,yystack.l_mark[-7].binstr->length()); yyval.binstr->append(yystack.l_mark[-7].binstr); + corEmitInt(yyval.binstr,yystack.l_mark[-5].binstr->length()); yyval.binstr->append(yystack.l_mark[-5].binstr); + corEmitInt(yyval.binstr,yystack.l_mark[-3].binstr->length()); yyval.binstr->append(yystack.l_mark[-3].binstr); + corEmitInt(yyval.binstr,yystack.l_mark[-1].binstr->length()); yyval.binstr->append(yystack.l_mark[-1].binstr); + PASM->report->warn("Deprecated 4-string form of custom marshaler, first two strings ignored\n");} +#line 12183 "asmparse.cpp" +break; case 588: -#line 1559 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(NATIVE_TYPE_PTR); - PASM->report->warn("Deprecated native type '*'\n"); } break; +#line 1575 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CUSTOMMARSHALER); + corEmitInt(yyval.binstr,0); + corEmitInt(yyval.binstr,0); + corEmitInt(yyval.binstr,yystack.l_mark[-3].binstr->length()); yyval.binstr->append(yystack.l_mark[-3].binstr); + corEmitInt(yyval.binstr,yystack.l_mark[-1].binstr->length()); yyval.binstr->append(yystack.l_mark[-1].binstr); } +#line 12192 "asmparse.cpp" +break; case 589: -#line 1561 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); - yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); } break; +#line 1580 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FIXEDSYSSTRING); + corEmitInt(yyval.binstr,yystack.l_mark[-1].int32); } +#line 12198 "asmparse.cpp" +break; case 590: -#line 1563 "asmparse.y" -{ yyval.binstr = yypvt[-3].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); - yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); - corEmitInt(yyval.binstr,0); - corEmitInt(yyval.binstr,yypvt[-1].int32); - corEmitInt(yyval.binstr,0); } break; +#line 1583 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FIXEDARRAY); + corEmitInt(yyval.binstr,yystack.l_mark[-2].int32); yyval.binstr->append(yystack.l_mark[0].binstr); } +#line 12204 "asmparse.cpp" +break; case 591: -#line 1568 "asmparse.y" -{ yyval.binstr = yypvt[-5].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); - yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); - corEmitInt(yyval.binstr,yypvt[-1].int32); - corEmitInt(yyval.binstr,yypvt[-3].int32); - corEmitInt(yyval.binstr,ntaSizeParamIndexSpecified); } break; +#line 1585 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VARIANT); + PASM->report->warn("Deprecated native type 'variant'\n"); } +#line 12210 "asmparse.cpp" +break; case 592: -#line 1573 "asmparse.y" -{ yyval.binstr = yypvt[-4].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); - yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); - corEmitInt(yyval.binstr,yypvt[-1].int32); } break; +#line 1587 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_CURRENCY); } +#line 12215 "asmparse.cpp" +break; case 593: -#line 1576 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_DECIMAL); - PASM->report->warn("Deprecated native type 'decimal'\n"); } break; +#line 1588 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SYSCHAR); + PASM->report->warn("Deprecated native type 'syschar'\n"); } +#line 12221 "asmparse.cpp" +break; case 594: -#line 1578 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_DATE); - PASM->report->warn("Deprecated native type 'date'\n"); } break; +#line 1590 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VOID); + PASM->report->warn("Deprecated native type 'void'\n"); } +#line 12227 "asmparse.cpp" +break; case 595: -#line 1580 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BSTR); } break; +#line 1592 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BOOLEAN); } +#line 12232 "asmparse.cpp" +break; case 596: -#line 1581 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPSTR); } break; +#line 1593 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I1); } +#line 12237 "asmparse.cpp" +break; case 597: -#line 1582 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPWSTR); } break; +#line 1594 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I2); } +#line 12242 "asmparse.cpp" +break; case 598: -#line 1583 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPTSTR); } break; +#line 1595 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I4); } +#line 12247 "asmparse.cpp" +break; case 599: -#line 1584 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_OBJECTREF); - PASM->report->warn("Deprecated native type 'objectref'\n"); } break; +#line 1596 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_I8); } +#line 12252 "asmparse.cpp" +break; case 600: -#line 1586 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_IUNKNOWN); - if(yypvt[-0].int32 != -1) corEmitInt(yyval.binstr,yypvt[-0].int32); } break; +#line 1597 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_R4); } +#line 12257 "asmparse.cpp" +break; case 601: -#line 1588 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_IDISPATCH); - if(yypvt[-0].int32 != -1) corEmitInt(yyval.binstr,yypvt[-0].int32); } break; +#line 1598 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_R8); } +#line 12262 "asmparse.cpp" +break; case 602: -#line 1590 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_STRUCT); } break; +#line 1599 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ERROR); } +#line 12267 "asmparse.cpp" +break; case 603: -#line 1591 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_INTF); - if(yypvt[-0].int32 != -1) corEmitInt(yyval.binstr,yypvt[-0].int32); } break; +#line 1600 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U1); } +#line 12272 "asmparse.cpp" +break; case 604: -#line 1593 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SAFEARRAY); - corEmitInt(yyval.binstr,yypvt[-0].int32); - corEmitInt(yyval.binstr,0);} break; +#line 1601 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U2); } +#line 12277 "asmparse.cpp" +break; case 605: -#line 1596 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SAFEARRAY); - corEmitInt(yyval.binstr,yypvt[-2].int32); - corEmitInt(yyval.binstr,yypvt[-0].binstr->length()); yyval.binstr->append(yypvt[-0].binstr); } break; +#line 1602 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U4); } +#line 12282 "asmparse.cpp" +break; case 606: -#line 1600 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_INT); } break; +#line 1603 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U8); } +#line 12287 "asmparse.cpp" +break; case 607: -#line 1601 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_UINT); } break; +#line 1604 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U1); } +#line 12292 "asmparse.cpp" +break; case 608: -#line 1602 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_UINT); } break; +#line 1605 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U2); } +#line 12297 "asmparse.cpp" +break; case 609: -#line 1603 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_NESTEDSTRUCT); - PASM->report->warn("Deprecated native type 'nested struct'\n"); } break; +#line 1606 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U4); } +#line 12302 "asmparse.cpp" +break; case 610: -#line 1605 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BYVALSTR); } break; +#line 1607 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_U8); } +#line 12307 "asmparse.cpp" +break; case 611: -#line 1606 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ANSIBSTR); } break; +#line 1608 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt8(NATIVE_TYPE_PTR); + PASM->report->warn("Deprecated native type '*'\n"); } +#line 12313 "asmparse.cpp" +break; case 612: -#line 1607 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_TBSTR); } break; +#line 1610 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); + yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); } +#line 12319 "asmparse.cpp" +break; case 613: -#line 1608 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VARIANTBOOL); } break; +#line 1612 "asmparse.y" + { yyval.binstr = yystack.l_mark[-3].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); + yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); + corEmitInt(yyval.binstr,0); + corEmitInt(yyval.binstr,yystack.l_mark[-1].int32); + corEmitInt(yyval.binstr,0); } +#line 12328 "asmparse.cpp" +break; case 614: -#line 1609 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FUNC); } break; +#line 1617 "asmparse.y" + { yyval.binstr = yystack.l_mark[-5].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); + yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); + corEmitInt(yyval.binstr,yystack.l_mark[-1].int32); + corEmitInt(yyval.binstr,yystack.l_mark[-3].int32); + corEmitInt(yyval.binstr,ntaSizeParamIndexSpecified); } +#line 12337 "asmparse.cpp" +break; case 615: -#line 1610 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ASANY); } break; +#line 1622 "asmparse.y" + { yyval.binstr = yystack.l_mark[-4].binstr; if(yyval.binstr->length()==0) yyval.binstr->appendInt8(NATIVE_TYPE_MAX); + yyval.binstr->insertInt8(NATIVE_TYPE_ARRAY); + corEmitInt(yyval.binstr,yystack.l_mark[-1].int32); } +#line 12344 "asmparse.cpp" +break; case 616: -#line 1611 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPSTRUCT); } break; +#line 1625 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_DECIMAL); + PASM->report->warn("Deprecated native type 'decimal'\n"); } +#line 12350 "asmparse.cpp" +break; case 617: -#line 1612 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-0].tdd->m_pbsTypeSpec); } break; +#line 1627 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_DATE); + PASM->report->warn("Deprecated native type 'date'\n"); } +#line 12356 "asmparse.cpp" +break; case 618: -#line 1615 "asmparse.y" -{ yyval.int32 = -1; } break; +#line 1629 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BSTR); } +#line 12361 "asmparse.cpp" +break; case 619: -#line 1616 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32; } break; +#line 1630 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPSTR); } +#line 12366 "asmparse.cpp" +break; case 620: -#line 1619 "asmparse.y" -{ yyval.int32 = VT_EMPTY; } break; +#line 1631 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPWSTR); } +#line 12371 "asmparse.cpp" +break; case 621: -#line 1620 "asmparse.y" -{ yyval.int32 = VT_NULL; } break; +#line 1632 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPTSTR); } +#line 12376 "asmparse.cpp" +break; case 622: -#line 1621 "asmparse.y" -{ yyval.int32 = VT_VARIANT; } break; +#line 1633 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_OBJECTREF); + PASM->report->warn("Deprecated native type 'objectref'\n"); } +#line 12382 "asmparse.cpp" +break; case 623: -#line 1622 "asmparse.y" -{ yyval.int32 = VT_CY; } break; +#line 1635 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_IUNKNOWN); + if(yystack.l_mark[0].int32 != -1) corEmitInt(yyval.binstr,yystack.l_mark[0].int32); } +#line 12388 "asmparse.cpp" +break; case 624: -#line 1623 "asmparse.y" -{ yyval.int32 = VT_VOID; } break; +#line 1637 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_IDISPATCH); + if(yystack.l_mark[0].int32 != -1) corEmitInt(yyval.binstr,yystack.l_mark[0].int32); } +#line 12394 "asmparse.cpp" +break; case 625: -#line 1624 "asmparse.y" -{ yyval.int32 = VT_BOOL; } break; +#line 1639 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_STRUCT); } +#line 12399 "asmparse.cpp" +break; case 626: -#line 1625 "asmparse.y" -{ yyval.int32 = VT_I1; } break; +#line 1640 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_INTF); + if(yystack.l_mark[0].int32 != -1) corEmitInt(yyval.binstr,yystack.l_mark[0].int32); } +#line 12405 "asmparse.cpp" +break; case 627: -#line 1626 "asmparse.y" -{ yyval.int32 = VT_I2; } break; +#line 1642 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SAFEARRAY); + corEmitInt(yyval.binstr,yystack.l_mark[0].int32); + corEmitInt(yyval.binstr,0);} +#line 12412 "asmparse.cpp" +break; case 628: -#line 1627 "asmparse.y" -{ yyval.int32 = VT_I4; } break; +#line 1645 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_SAFEARRAY); + corEmitInt(yyval.binstr,yystack.l_mark[-2].int32); + corEmitInt(yyval.binstr,yystack.l_mark[0].binstr->length()); yyval.binstr->append(yystack.l_mark[0].binstr); } +#line 12419 "asmparse.cpp" +break; case 629: -#line 1628 "asmparse.y" -{ yyval.int32 = VT_I8; } break; +#line 1649 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_INT); } +#line 12424 "asmparse.cpp" +break; case 630: -#line 1629 "asmparse.y" -{ yyval.int32 = VT_R4; } break; +#line 1650 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_UINT); } +#line 12429 "asmparse.cpp" +break; case 631: -#line 1630 "asmparse.y" -{ yyval.int32 = VT_R8; } break; +#line 1651 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_UINT); } +#line 12434 "asmparse.cpp" +break; case 632: -#line 1631 "asmparse.y" -{ yyval.int32 = VT_UI1; } break; +#line 1652 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_NESTEDSTRUCT); + PASM->report->warn("Deprecated native type 'nested struct'\n"); } +#line 12440 "asmparse.cpp" +break; case 633: -#line 1632 "asmparse.y" -{ yyval.int32 = VT_UI2; } break; +#line 1654 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_BYVALSTR); } +#line 12445 "asmparse.cpp" +break; case 634: -#line 1633 "asmparse.y" -{ yyval.int32 = VT_UI4; } break; +#line 1655 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ANSIBSTR); } +#line 12450 "asmparse.cpp" +break; case 635: -#line 1634 "asmparse.y" -{ yyval.int32 = VT_UI8; } break; +#line 1656 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_TBSTR); } +#line 12455 "asmparse.cpp" +break; case 636: -#line 1635 "asmparse.y" -{ yyval.int32 = VT_UI1; } break; +#line 1657 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_VARIANTBOOL); } +#line 12460 "asmparse.cpp" +break; case 637: -#line 1636 "asmparse.y" -{ yyval.int32 = VT_UI2; } break; +#line 1658 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_FUNC); } +#line 12465 "asmparse.cpp" +break; case 638: -#line 1637 "asmparse.y" -{ yyval.int32 = VT_UI4; } break; +#line 1659 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_ASANY); } +#line 12470 "asmparse.cpp" +break; case 639: -#line 1638 "asmparse.y" -{ yyval.int32 = VT_UI8; } break; +#line 1660 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(NATIVE_TYPE_LPSTRUCT); } +#line 12475 "asmparse.cpp" +break; case 640: -#line 1639 "asmparse.y" -{ yyval.int32 = VT_PTR; } break; +#line 1661 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->append(yystack.l_mark[0].tdd->m_pbsTypeSpec); } +#line 12480 "asmparse.cpp" +break; case 641: -#line 1640 "asmparse.y" -{ yyval.int32 = yypvt[-2].int32 | VT_ARRAY; } break; +#line 1664 "asmparse.y" + { yyval.int32 = -1; } +#line 12485 "asmparse.cpp" +break; case 642: -#line 1641 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | VT_VECTOR; } break; +#line 1665 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32; } +#line 12490 "asmparse.cpp" +break; case 643: -#line 1642 "asmparse.y" -{ yyval.int32 = yypvt[-1].int32 | VT_BYREF; } break; +#line 1668 "asmparse.y" + { yyval.int32 = VT_EMPTY; } +#line 12495 "asmparse.cpp" +break; case 644: -#line 1643 "asmparse.y" -{ yyval.int32 = VT_DECIMAL; } break; +#line 1669 "asmparse.y" + { yyval.int32 = VT_NULL; } +#line 12500 "asmparse.cpp" +break; case 645: -#line 1644 "asmparse.y" -{ yyval.int32 = VT_DATE; } break; +#line 1670 "asmparse.y" + { yyval.int32 = VT_VARIANT; } +#line 12505 "asmparse.cpp" +break; case 646: -#line 1645 "asmparse.y" -{ yyval.int32 = VT_BSTR; } break; +#line 1671 "asmparse.y" + { yyval.int32 = VT_CY; } +#line 12510 "asmparse.cpp" +break; case 647: -#line 1646 "asmparse.y" -{ yyval.int32 = VT_LPSTR; } break; +#line 1672 "asmparse.y" + { yyval.int32 = VT_VOID; } +#line 12515 "asmparse.cpp" +break; case 648: -#line 1647 "asmparse.y" -{ yyval.int32 = VT_LPWSTR; } break; +#line 1673 "asmparse.y" + { yyval.int32 = VT_BOOL; } +#line 12520 "asmparse.cpp" +break; case 649: -#line 1648 "asmparse.y" -{ yyval.int32 = VT_UNKNOWN; } break; +#line 1674 "asmparse.y" + { yyval.int32 = VT_I1; } +#line 12525 "asmparse.cpp" +break; case 650: -#line 1649 "asmparse.y" -{ yyval.int32 = VT_DISPATCH; } break; +#line 1675 "asmparse.y" + { yyval.int32 = VT_I2; } +#line 12530 "asmparse.cpp" +break; case 651: -#line 1650 "asmparse.y" -{ yyval.int32 = VT_SAFEARRAY; } break; +#line 1676 "asmparse.y" + { yyval.int32 = VT_I4; } +#line 12535 "asmparse.cpp" +break; case 652: -#line 1651 "asmparse.y" -{ yyval.int32 = VT_INT; } break; +#line 1677 "asmparse.y" + { yyval.int32 = VT_I8; } +#line 12540 "asmparse.cpp" +break; case 653: -#line 1652 "asmparse.y" -{ yyval.int32 = VT_UINT; } break; +#line 1678 "asmparse.y" + { yyval.int32 = VT_R4; } +#line 12545 "asmparse.cpp" +break; case 654: -#line 1653 "asmparse.y" -{ yyval.int32 = VT_UINT; } break; +#line 1679 "asmparse.y" + { yyval.int32 = VT_R8; } +#line 12550 "asmparse.cpp" +break; case 655: -#line 1654 "asmparse.y" -{ yyval.int32 = VT_ERROR; } break; +#line 1680 "asmparse.y" + { yyval.int32 = VT_UI1; } +#line 12555 "asmparse.cpp" +break; case 656: -#line 1655 "asmparse.y" -{ yyval.int32 = VT_HRESULT; } break; +#line 1681 "asmparse.y" + { yyval.int32 = VT_UI2; } +#line 12560 "asmparse.cpp" +break; case 657: -#line 1656 "asmparse.y" -{ yyval.int32 = VT_CARRAY; } break; +#line 1682 "asmparse.y" + { yyval.int32 = VT_UI4; } +#line 12565 "asmparse.cpp" +break; case 658: -#line 1657 "asmparse.y" -{ yyval.int32 = VT_USERDEFINED; } break; +#line 1683 "asmparse.y" + { yyval.int32 = VT_UI8; } +#line 12570 "asmparse.cpp" +break; case 659: -#line 1658 "asmparse.y" -{ yyval.int32 = VT_RECORD; } break; +#line 1684 "asmparse.y" + { yyval.int32 = VT_UI1; } +#line 12575 "asmparse.cpp" +break; case 660: -#line 1659 "asmparse.y" -{ yyval.int32 = VT_FILETIME; } break; +#line 1685 "asmparse.y" + { yyval.int32 = VT_UI2; } +#line 12580 "asmparse.cpp" +break; case 661: -#line 1660 "asmparse.y" -{ yyval.int32 = VT_BLOB; } break; +#line 1686 "asmparse.y" + { yyval.int32 = VT_UI4; } +#line 12585 "asmparse.cpp" +break; case 662: -#line 1661 "asmparse.y" -{ yyval.int32 = VT_STREAM; } break; +#line 1687 "asmparse.y" + { yyval.int32 = VT_UI8; } +#line 12590 "asmparse.cpp" +break; case 663: -#line 1662 "asmparse.y" -{ yyval.int32 = VT_STORAGE; } break; +#line 1688 "asmparse.y" + { yyval.int32 = VT_PTR; } +#line 12595 "asmparse.cpp" +break; case 664: -#line 1663 "asmparse.y" -{ yyval.int32 = VT_STREAMED_OBJECT; } break; +#line 1689 "asmparse.y" + { yyval.int32 = yystack.l_mark[-2].int32 | VT_ARRAY; } +#line 12600 "asmparse.cpp" +break; case 665: -#line 1664 "asmparse.y" -{ yyval.int32 = VT_STORED_OBJECT; } break; +#line 1690 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32 | VT_VECTOR; } +#line 12605 "asmparse.cpp" +break; case 666: -#line 1665 "asmparse.y" -{ yyval.int32 = VT_BLOB_OBJECT; } break; +#line 1691 "asmparse.y" + { yyval.int32 = yystack.l_mark[-1].int32 | VT_BYREF; } +#line 12610 "asmparse.cpp" +break; case 667: -#line 1666 "asmparse.y" -{ yyval.int32 = VT_CF; } break; +#line 1692 "asmparse.y" + { yyval.int32 = VT_DECIMAL; } +#line 12615 "asmparse.cpp" +break; case 668: -#line 1667 "asmparse.y" -{ yyval.int32 = VT_CLSID; } break; +#line 1693 "asmparse.y" + { yyval.int32 = VT_DATE; } +#line 12620 "asmparse.cpp" +break; case 669: -#line 1671 "asmparse.y" -{ if(yypvt[-0].token == PASM->m_tkSysString) - { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); } - else if(yypvt[-0].token == PASM->m_tkSysObject) - { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_OBJECT); } - else - yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CLASS, yypvt[-0].token); } break; +#line 1694 "asmparse.y" + { yyval.int32 = VT_BSTR; } +#line 12625 "asmparse.cpp" +break; case 670: -#line 1677 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_OBJECT); } break; +#line 1695 "asmparse.y" + { yyval.int32 = VT_LPSTR; } +#line 12630 "asmparse.cpp" +break; case 671: -#line 1678 "asmparse.y" -{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, yypvt[-0].token); } break; +#line 1696 "asmparse.y" + { yyval.int32 = VT_LPWSTR; } +#line 12635 "asmparse.cpp" +break; case 672: -#line 1679 "asmparse.y" -{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, yypvt[-0].token); } break; +#line 1697 "asmparse.y" + { yyval.int32 = VT_UNKNOWN; } +#line 12640 "asmparse.cpp" +break; case 673: -#line 1680 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } break; +#line 1698 "asmparse.y" + { yyval.int32 = VT_DISPATCH; } +#line 12645 "asmparse.cpp" +break; case 674: -#line 1681 "asmparse.y" -{ yyval.binstr = parser->MakeTypeArray(ELEMENT_TYPE_ARRAY, yypvt[-3].binstr, yypvt[-1].binstr); } break; +#line 1699 "asmparse.y" + { yyval.int32 = VT_SAFEARRAY; } +#line 12650 "asmparse.cpp" +break; case 675: -#line 1682 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_BYREF); } break; +#line 1700 "asmparse.y" + { yyval.int32 = VT_INT; } +#line 12655 "asmparse.cpp" +break; case 676: -#line 1683 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_PTR); } break; +#line 1701 "asmparse.y" + { yyval.int32 = VT_UINT; } +#line 12660 "asmparse.cpp" +break; case 677: -#line 1684 "asmparse.y" -{ yyval.binstr = yypvt[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_PINNED); } break; +#line 1702 "asmparse.y" + { yyval.int32 = VT_UINT; } +#line 12665 "asmparse.cpp" +break; case 678: -#line 1685 "asmparse.y" -{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CMOD_REQD, yypvt[-1].token); - yyval.binstr->append(yypvt[-4].binstr); } break; +#line 1703 "asmparse.y" + { yyval.int32 = VT_ERROR; } +#line 12670 "asmparse.cpp" +break; case 679: -#line 1687 "asmparse.y" -{ yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CMOD_OPT, yypvt[-1].token); - yyval.binstr->append(yypvt[-4].binstr); } break; +#line 1704 "asmparse.y" + { yyval.int32 = VT_HRESULT; } +#line 12675 "asmparse.cpp" +break; case 680: -#line 1690 "asmparse.y" -{ yyval.binstr = parser->MakeSig(yypvt[-5].int32, yypvt[-4].binstr, yypvt[-1].binstr); - yyval.binstr->insertInt8(ELEMENT_TYPE_FNPTR); - PASM->delArgNameList(PASM->m_firstArgName); - PASM->m_firstArgName = parser->m_ANSFirst.POP(); - PASM->m_lastArgName = parser->m_ANSLast.POP(); - } break; +#line 1705 "asmparse.y" + { yyval.int32 = VT_CARRAY; } +#line 12680 "asmparse.cpp" +break; case 681: -#line 1696 "asmparse.y" -{ if(yypvt[-1].binstr == NULL) yyval.binstr = yypvt[-3].binstr; - else { - yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(ELEMENT_TYPE_GENERICINST); - yyval.binstr->append(yypvt[-3].binstr); - corEmitInt(yyval.binstr, corCountArgs(yypvt[-1].binstr)); - yyval.binstr->append(yypvt[-1].binstr); delete yypvt[-3].binstr; delete yypvt[-1].binstr; }} break; +#line 1706 "asmparse.y" + { yyval.int32 = VT_USERDEFINED; } +#line 12685 "asmparse.cpp" +break; case 682: -#line 1703 "asmparse.y" -{ //if(PASM->m_pCurMethod) { - // if(($3 < 0)||((DWORD)$3 >= PASM->m_pCurMethod->m_NumTyPars)) - // PASM->report->error("Invalid method type parameter '%d'\n",$3); - yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_MVAR); corEmitInt(yyval.binstr, yypvt[-0].int32); - //} else PASM->report->error("Method type parameter '%d' outside method scope\n",$3); - } break; +#line 1707 "asmparse.y" + { yyval.int32 = VT_RECORD; } +#line 12690 "asmparse.cpp" +break; case 683: -#line 1709 "asmparse.y" -{ //if(PASM->m_pCurClass) { - // if(($2 < 0)||((DWORD)$2 >= PASM->m_pCurClass->m_NumTyPars)) - // PASM->report->error("Invalid type parameter '%d'\n",$2); - yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_VAR); corEmitInt(yyval.binstr, yypvt[-0].int32); - //} else PASM->report->error("Type parameter '%d' outside class scope\n",$2); - } break; +#line 1708 "asmparse.y" + { yyval.int32 = VT_FILETIME; } +#line 12695 "asmparse.cpp" +break; case 684: -#line 1715 "asmparse.y" -{ int eltype = ELEMENT_TYPE_MVAR; - int n=-1; - if(PASM->m_pCurMethod) n = PASM->m_pCurMethod->FindTyPar(yypvt[-0].string); - else { - if(PASM->m_TyParList) n = PASM->m_TyParList->IndexOf(yypvt[-0].string); - if(n == -1) - { n = TyParFixupList.COUNT(); - TyParFixupList.PUSH(yypvt[-0].string); - eltype = ELEMENT_TYPE_MVARFIXUP; - } - } - if(n == -1) { PASM->report->error("Invalid method type parameter '%s'\n",yypvt[-0].string); - n = 0x1FFFFFFF; } - yyval.binstr = new BinStr(); yyval.binstr->appendInt8(eltype); corEmitInt(yyval.binstr,n); - } break; +#line 1709 "asmparse.y" + { yyval.int32 = VT_BLOB; } +#line 12700 "asmparse.cpp" +break; case 685: -#line 1730 "asmparse.y" -{ int eltype = ELEMENT_TYPE_VAR; - int n=-1; - if(PASM->m_pCurClass && !newclass) n = PASM->m_pCurClass->FindTyPar(yypvt[-0].string); - else { - if(PASM->m_TyParList) n = PASM->m_TyParList->IndexOf(yypvt[-0].string); - if(n == -1) - { n = TyParFixupList.COUNT(); - TyParFixupList.PUSH(yypvt[-0].string); - eltype = ELEMENT_TYPE_VARFIXUP; - } - } - if(n == -1) { PASM->report->error("Invalid type parameter '%s'\n",yypvt[-0].string); - n = 0x1FFFFFFF; } - yyval.binstr = new BinStr(); yyval.binstr->appendInt8(eltype); corEmitInt(yyval.binstr,n); - } break; +#line 1710 "asmparse.y" + { yyval.int32 = VT_STREAM; } +#line 12705 "asmparse.cpp" +break; case 686: -#line 1745 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_TYPEDBYREF); } break; +#line 1711 "asmparse.y" + { yyval.int32 = VT_STORAGE; } +#line 12710 "asmparse.cpp" +break; case 687: -#line 1746 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_VOID); } break; +#line 1712 "asmparse.y" + { yyval.int32 = VT_STREAMED_OBJECT; } +#line 12715 "asmparse.cpp" +break; case 688: -#line 1747 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I); } break; +#line 1713 "asmparse.y" + { yyval.int32 = VT_STORED_OBJECT; } +#line 12720 "asmparse.cpp" +break; case 689: -#line 1748 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U); } break; +#line 1714 "asmparse.y" + { yyval.int32 = VT_BLOB_OBJECT; } +#line 12725 "asmparse.cpp" +break; case 690: -#line 1749 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U); } break; +#line 1715 "asmparse.y" + { yyval.int32 = VT_CF; } +#line 12730 "asmparse.cpp" +break; case 691: -#line 1750 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1716 "asmparse.y" + { yyval.int32 = VT_CLSID; } +#line 12735 "asmparse.cpp" +break; case 692: -#line 1751 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SENTINEL); } break; +#line 1720 "asmparse.y" + { if(yystack.l_mark[0].token == PASM->m_tkSysString) + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); } + else if(yystack.l_mark[0].token == PASM->m_tkSysObject) + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_OBJECT); } + else + yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CLASS, yystack.l_mark[0].token); } +#line 12745 "asmparse.cpp" +break; case 693: -#line 1754 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); } break; +#line 1726 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_OBJECT); } +#line 12750 "asmparse.cpp" +break; case 694: -#line 1755 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); } break; +#line 1727 "asmparse.y" + { yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, yystack.l_mark[0].token); } +#line 12755 "asmparse.cpp" +break; case 695: -#line 1756 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); } break; +#line 1728 "asmparse.y" + { yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_VALUETYPE, yystack.l_mark[0].token); } +#line 12760 "asmparse.cpp" +break; case 696: -#line 1757 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); } break; +#line 1729 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_CTARG); } +#line 12765 "asmparse.cpp" +break; case 697: -#line 1758 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); } break; +#line 1730 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SZARRAY); } +#line 12770 "asmparse.cpp" +break; case 698: -#line 1759 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); } break; +#line 1731 "asmparse.y" + { yyval.binstr = parser->MakeTypeArray(ELEMENT_TYPE_ARRAY, yystack.l_mark[-3].binstr, yystack.l_mark[-1].binstr); } +#line 12775 "asmparse.cpp" +break; case 699: -#line 1760 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); } break; +#line 1732 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_BYREF); } +#line 12780 "asmparse.cpp" +break; case 700: -#line 1761 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); } break; +#line 1733 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_PTR); } +#line 12785 "asmparse.cpp" +break; case 701: -#line 1762 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); } break; +#line 1734 "asmparse.y" + { yyval.binstr = yystack.l_mark[-1].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_PINNED); } +#line 12790 "asmparse.cpp" +break; case 702: -#line 1763 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); } break; +#line 1735 "asmparse.y" + { yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CMOD_REQD, yystack.l_mark[-1].token); + yyval.binstr->append(yystack.l_mark[-4].binstr); } +#line 12796 "asmparse.cpp" +break; case 703: -#line 1764 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); } break; +#line 1737 "asmparse.y" + { yyval.binstr = parser->MakeTypeClass(ELEMENT_TYPE_CMOD_OPT, yystack.l_mark[-1].token); + yyval.binstr->append(yystack.l_mark[-4].binstr); } +#line 12802 "asmparse.cpp" +break; case 704: -#line 1765 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); } break; +#line 1740 "asmparse.y" + { yyval.binstr = parser->MakeSig(yystack.l_mark[-5].int32, yystack.l_mark[-4].binstr, yystack.l_mark[-1].binstr); + yyval.binstr->insertInt8(ELEMENT_TYPE_FNPTR); + PASM->delArgNameList(PASM->m_firstArgName); + PASM->m_firstArgName = parser->m_ANSFirst.POP(); + PASM->m_lastArgName = parser->m_ANSLast.POP(); + } +#line 12812 "asmparse.cpp" +break; case 705: -#line 1766 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); } break; +#line 1746 "asmparse.y" + { if(yystack.l_mark[-1].binstr == NULL) yyval.binstr = yystack.l_mark[-3].binstr; + else { + yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(ELEMENT_TYPE_GENERICINST); + yyval.binstr->append(yystack.l_mark[-3].binstr); + corEmitInt(yyval.binstr, corCountArgs(yystack.l_mark[-1].binstr)); + yyval.binstr->append(yystack.l_mark[-1].binstr); delete yystack.l_mark[-3].binstr; delete yystack.l_mark[-1].binstr; }} +#line 12823 "asmparse.cpp" +break; case 706: -#line 1767 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); } break; +#line 1753 "asmparse.y" + { /*if(PASM->m_pCurMethod) { */ + /* if(($3 < 0)||((DWORD)$3 >= PASM->m_pCurMethod->m_NumTyPars)) */ + /* PASM->report->error("Invalid method type parameter '%d'\n",$3); */ + yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_MVAR); corEmitInt(yyval.binstr, yystack.l_mark[0].int32); + /*} else PASM->report->error("Method type parameter '%d' outside method scope\n",$3); */ + } +#line 12833 "asmparse.cpp" +break; case 707: -#line 1768 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); } break; +#line 1759 "asmparse.y" + { /*if(PASM->m_pCurClass) { */ + /* if(($2 < 0)||((DWORD)$2 >= PASM->m_pCurClass->m_NumTyPars)) */ + /* PASM->report->error("Invalid type parameter '%d'\n",$2); */ + yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_VAR); corEmitInt(yyval.binstr, yystack.l_mark[0].int32); + /*} else PASM->report->error("Type parameter '%d' outside class scope\n",$2); */ + } +#line 12843 "asmparse.cpp" +break; case 708: -#line 1769 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); } break; +#line 1765 "asmparse.y" + { int eltype = ELEMENT_TYPE_MVAR; + int n=-1; + if(PASM->m_pCurMethod) n = PASM->m_pCurMethod->FindTyPar(yystack.l_mark[0].string); + else { + if(PASM->m_TyParList) n = PASM->m_TyParList->IndexOf(yystack.l_mark[0].string); + if(n == -1) + { n = TyParFixupList.COUNT(); + TyParFixupList.PUSH(yystack.l_mark[0].string); + eltype = ELEMENT_TYPE_MVARFIXUP; + } + } + if(n == -1) { PASM->report->error("Invalid method type parameter '%s'\n",yystack.l_mark[0].string); + n = 0x1FFFFFFF; } + yyval.binstr = new BinStr(); yyval.binstr->appendInt8(eltype); corEmitInt(yyval.binstr,n); + } +#line 12862 "asmparse.cpp" +break; case 709: -#line 1770 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); } break; +#line 1780 "asmparse.y" + { int eltype = ELEMENT_TYPE_VAR; + int n=-1; + if(PASM->m_pCurClass && !newclass) n = PASM->m_pCurClass->FindTyPar(yystack.l_mark[0].string); + else { + if(PASM->m_TyParList) n = PASM->m_TyParList->IndexOf(yystack.l_mark[0].string); + if(n == -1) + { n = TyParFixupList.COUNT(); + TyParFixupList.PUSH(yystack.l_mark[0].string); + eltype = ELEMENT_TYPE_VARFIXUP; + } + } + if(n == -1) { PASM->report->error("Invalid type parameter '%s'\n",yystack.l_mark[0].string); + n = 0x1FFFFFFF; } + yyval.binstr = new BinStr(); yyval.binstr->appendInt8(eltype); corEmitInt(yyval.binstr,n); + } +#line 12881 "asmparse.cpp" +break; case 710: -#line 1771 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->append(yypvt[-0].tdd->m_pbsTypeSpec); } break; +#line 1795 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_TYPEDBYREF); } +#line 12886 "asmparse.cpp" +break; case 711: -#line 1774 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; } break; +#line 1796 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_VOID); } +#line 12891 "asmparse.cpp" +break; case 712: -#line 1775 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yypvt[-2].binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; } break; +#line 1797 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I); } +#line 12896 "asmparse.cpp" +break; case 713: -#line 1778 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0x7FFFFFFF); yyval.binstr->appendInt32(0x7FFFFFFF); } break; +#line 1798 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U); } +#line 12901 "asmparse.cpp" +break; case 714: -#line 1779 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0x7FFFFFFF); yyval.binstr->appendInt32(0x7FFFFFFF); } break; +#line 1799 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U); } +#line 12906 "asmparse.cpp" +break; case 715: -#line 1780 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0); yyval.binstr->appendInt32(yypvt[-0].int32); } break; +#line 1800 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 12911 "asmparse.cpp" +break; case 716: -#line 1781 "asmparse.y" -{ FAIL_UNLESS(yypvt[-2].int32 <= yypvt[-0].int32, ("lower bound %d must be <= upper bound %d\n", yypvt[-2].int32, yypvt[-0].int32)); - if (yypvt[-2].int32 > yypvt[-0].int32) { YYERROR; }; - yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yypvt[-2].int32); yyval.binstr->appendInt32(yypvt[-0].int32-yypvt[-2].int32+1); } break; +#line 1801 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; yyval.binstr->insertInt8(ELEMENT_TYPE_SENTINEL); } +#line 12916 "asmparse.cpp" +break; case 717: -#line 1784 "asmparse.y" -{ yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yypvt[-1].int32); yyval.binstr->appendInt32(0x7FFFFFFF); } break; +#line 1804 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_CHAR); } +#line 12921 "asmparse.cpp" +break; case 718: -#line 1789 "asmparse.y" -{ PASM->AddPermissionDecl(yypvt[-4].secAct, yypvt[-3].token, yypvt[-1].pair); } break; +#line 1805 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_STRING); } +#line 12926 "asmparse.cpp" +break; case 719: -#line 1791 "asmparse.y" -{ PASM->AddPermissionDecl(yypvt[-5].secAct, yypvt[-4].token, yypvt[-1].binstr); } break; +#line 1806 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_BOOLEAN); } +#line 12931 "asmparse.cpp" +break; case 720: -#line 1792 "asmparse.y" -{ PASM->AddPermissionDecl(yypvt[-1].secAct, yypvt[-0].token, (NVPair *)NULL); } break; +#line 1807 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I1); } +#line 12936 "asmparse.cpp" +break; case 721: -#line 1793 "asmparse.y" -{ PASM->AddPermissionSetDecl(yypvt[-2].secAct, yypvt[-1].binstr); } break; +#line 1808 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I2); } +#line 12941 "asmparse.cpp" +break; case 722: -#line 1795 "asmparse.y" -{ PASM->AddPermissionSetDecl(yypvt[-1].secAct,BinStrToUnicode(yypvt[-0].binstr,true));} break; +#line 1809 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I4); } +#line 12946 "asmparse.cpp" +break; case 723: -#line 1797 "asmparse.y" -{ BinStr* ret = new BinStr(); - ret->insertInt8('.'); - corEmitInt(ret, nSecAttrBlobs); - ret->append(yypvt[-1].binstr); - PASM->AddPermissionSetDecl(yypvt[-4].secAct,ret); - nSecAttrBlobs = 0; } break; +#line 1810 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_I8); } +#line 12951 "asmparse.cpp" +break; case 724: -#line 1805 "asmparse.y" -{ yyval.binstr = new BinStr(); nSecAttrBlobs = 0;} break; +#line 1811 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R4); } +#line 12956 "asmparse.cpp" +break; case 725: -#line 1806 "asmparse.y" -{ yyval.binstr = yypvt[-0].binstr; nSecAttrBlobs = 1; } break; +#line 1812 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_R8); } +#line 12961 "asmparse.cpp" +break; case 726: -#line 1807 "asmparse.y" -{ yyval.binstr = yypvt[-2].binstr; yyval.binstr->append(yypvt[-0].binstr); nSecAttrBlobs++; } break; +#line 1813 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); } +#line 12966 "asmparse.cpp" +break; case 727: -#line 1811 "asmparse.y" -{ yyval.binstr = PASM->EncodeSecAttr(PASM->ReflectionNotation(yypvt[-4].token),yypvt[-1].binstr,nCustomBlobNVPairs); - nCustomBlobNVPairs = 0; } break; -case 728: #line 1814 "asmparse.y" -{ yyval.binstr = PASM->EncodeSecAttr(yypvt[-4].string,yypvt[-1].binstr,nCustomBlobNVPairs); - nCustomBlobNVPairs = 0; } break; + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); } +#line 12971 "asmparse.cpp" +break; +case 728: +#line 1815 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); } +#line 12976 "asmparse.cpp" +break; case 729: -#line 1818 "asmparse.y" -{ yyval.secAct = yypvt[-2].secAct; bParsingByteArray = TRUE; } break; +#line 1816 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); } +#line 12981 "asmparse.cpp" +break; case 730: -#line 1820 "asmparse.y" -{ yyval.secAct = yypvt[-2].secAct; bParsingByteArray = TRUE; } break; +#line 1817 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U1); } +#line 12986 "asmparse.cpp" +break; case 731: -#line 1823 "asmparse.y" -{ yyval.pair = yypvt[-0].pair; } break; +#line 1818 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U2); } +#line 12991 "asmparse.cpp" +break; case 732: -#line 1824 "asmparse.y" -{ yyval.pair = yypvt[-2].pair->Concat(yypvt[-0].pair); } break; +#line 1819 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U4); } +#line 12996 "asmparse.cpp" +break; case 733: -#line 1827 "asmparse.y" -{ yypvt[-2].binstr->appendInt8(0); yyval.pair = new NVPair(yypvt[-2].binstr, yypvt[-0].binstr); } break; +#line 1820 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt8(ELEMENT_TYPE_U8); } +#line 13001 "asmparse.cpp" +break; case 734: -#line 1830 "asmparse.y" -{ yyval.int32 = 1; } break; +#line 1821 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->append(yystack.l_mark[0].tdd->m_pbsTypeSpec); } +#line 13006 "asmparse.cpp" +break; case 735: -#line 1831 "asmparse.y" -{ yyval.int32 = 0; } break; +#line 1824 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; } +#line 13011 "asmparse.cpp" +break; case 736: -#line 1834 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_BOOLEAN); - yyval.binstr->appendInt8(yypvt[-0].int32); } break; +#line 1825 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yystack.l_mark[-2].binstr->append(yystack.l_mark[0].binstr); delete yystack.l_mark[0].binstr; } +#line 13016 "asmparse.cpp" +break; case 737: -#line 1837 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_I4); - yyval.binstr->appendInt32(yypvt[-0].int32); } break; +#line 1828 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0x7FFFFFFF); yyval.binstr->appendInt32(0x7FFFFFFF); } +#line 13021 "asmparse.cpp" +break; case 738: -#line 1840 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_I4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1829 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0x7FFFFFFF); yyval.binstr->appendInt32(0x7FFFFFFF); } +#line 13026 "asmparse.cpp" +break; case 739: -#line 1843 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_STRING); - yyval.binstr->append(yypvt[-0].binstr); delete yypvt[-0].binstr; - yyval.binstr->appendInt8(0); } break; +#line 1830 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt32(0); yyval.binstr->appendInt32(yystack.l_mark[0].int32); } +#line 13031 "asmparse.cpp" +break; case 740: -#line 1847 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); - char* sz = PASM->ReflectionNotation(yypvt[-5].token); - strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); - yyval.binstr->appendInt8(1); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1831 "asmparse.y" + { FAIL_UNLESS(yystack.l_mark[-2].int32 <= yystack.l_mark[0].int32, ("lower bound %d must be <= upper bound %d\n", yystack.l_mark[-2].int32, yystack.l_mark[0].int32)); + if (yystack.l_mark[-2].int32 > yystack.l_mark[0].int32) { YYERROR; }; + yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yystack.l_mark[-2].int32); yyval.binstr->appendInt32(yystack.l_mark[0].int32-yystack.l_mark[-2].int32+1); } +#line 13038 "asmparse.cpp" +break; case 741: -#line 1853 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); - char* sz = PASM->ReflectionNotation(yypvt[-5].token); - strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); - yyval.binstr->appendInt8(2); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1834 "asmparse.y" + { yyval.binstr = new BinStr(); yyval.binstr->appendInt32(yystack.l_mark[-1].int32); yyval.binstr->appendInt32(0x7FFFFFFF); } +#line 13043 "asmparse.cpp" +break; case 742: -#line 1859 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); - char* sz = PASM->ReflectionNotation(yypvt[-5].token); - strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); - yyval.binstr->appendInt8(4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1839 "asmparse.y" + { PASM->AddPermissionDecl(yystack.l_mark[-4].secAct, yystack.l_mark[-3].token, yystack.l_mark[-1].pair); } +#line 13048 "asmparse.cpp" +break; case 743: -#line 1865 "asmparse.y" -{ yyval.binstr = new BinStr(); - yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); - char* sz = PASM->ReflectionNotation(yypvt[-3].token); - strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); - yyval.binstr->appendInt8(4); - yyval.binstr->appendInt32(yypvt[-1].int32); } break; +#line 1841 "asmparse.y" + { PASM->AddPermissionDecl(yystack.l_mark[-5].secAct, yystack.l_mark[-4].token, yystack.l_mark[-1].binstr); } +#line 13053 "asmparse.cpp" +break; case 744: -#line 1873 "asmparse.y" -{ yyval.secAct = dclRequest; } break; +#line 1842 "asmparse.y" + { PASM->AddPermissionDecl(yystack.l_mark[-1].secAct, yystack.l_mark[0].token, (NVPair *)NULL); } +#line 13058 "asmparse.cpp" +break; case 745: -#line 1874 "asmparse.y" -{ yyval.secAct = dclDemand; } break; +#line 1843 "asmparse.y" + { PASM->AddPermissionSetDecl(yystack.l_mark[-2].secAct, yystack.l_mark[-1].binstr); } +#line 13063 "asmparse.cpp" +break; case 746: -#line 1875 "asmparse.y" -{ yyval.secAct = dclAssert; } break; +#line 1845 "asmparse.y" + { PASM->AddPermissionSetDecl(yystack.l_mark[-1].secAct,BinStrToUnicode(yystack.l_mark[0].binstr,true));} +#line 13068 "asmparse.cpp" +break; case 747: -#line 1876 "asmparse.y" -{ yyval.secAct = dclDeny; } break; +#line 1847 "asmparse.y" + { BinStr* ret = new BinStr(); + ret->insertInt8('.'); + corEmitInt(ret, nSecAttrBlobs); + ret->append(yystack.l_mark[-1].binstr); + PASM->AddPermissionSetDecl(yystack.l_mark[-4].secAct,ret); + nSecAttrBlobs = 0; } +#line 13078 "asmparse.cpp" +break; case 748: -#line 1877 "asmparse.y" -{ yyval.secAct = dclPermitOnly; } break; +#line 1855 "asmparse.y" + { yyval.binstr = new BinStr(); nSecAttrBlobs = 0;} +#line 13083 "asmparse.cpp" +break; case 749: -#line 1878 "asmparse.y" -{ yyval.secAct = dclLinktimeCheck; } break; +#line 1856 "asmparse.y" + { yyval.binstr = yystack.l_mark[0].binstr; nSecAttrBlobs = 1; } +#line 13088 "asmparse.cpp" +break; case 750: -#line 1879 "asmparse.y" -{ yyval.secAct = dclInheritanceCheck; } break; +#line 1857 "asmparse.y" + { yyval.binstr = yystack.l_mark[-2].binstr; yyval.binstr->append(yystack.l_mark[0].binstr); nSecAttrBlobs++; } +#line 13093 "asmparse.cpp" +break; case 751: -#line 1880 "asmparse.y" -{ yyval.secAct = dclRequestMinimum; } break; +#line 1861 "asmparse.y" + { yyval.binstr = PASM->EncodeSecAttr(PASM->ReflectionNotation(yystack.l_mark[-4].token),yystack.l_mark[-1].binstr,nCustomBlobNVPairs); + nCustomBlobNVPairs = 0; } +#line 13099 "asmparse.cpp" +break; case 752: -#line 1881 "asmparse.y" -{ yyval.secAct = dclRequestOptional; } break; +#line 1864 "asmparse.y" + { yyval.binstr = PASM->EncodeSecAttr(yystack.l_mark[-4].string,yystack.l_mark[-1].binstr,nCustomBlobNVPairs); + nCustomBlobNVPairs = 0; } +#line 13105 "asmparse.cpp" +break; case 753: -#line 1882 "asmparse.y" -{ yyval.secAct = dclRequestRefuse; } break; +#line 1868 "asmparse.y" + { yyval.secAct = yystack.l_mark[-2].secAct; bParsingByteArray = TRUE; } +#line 13110 "asmparse.cpp" +break; case 754: -#line 1883 "asmparse.y" -{ yyval.secAct = dclPrejitGrant; } break; +#line 1870 "asmparse.y" + { yyval.secAct = yystack.l_mark[-2].secAct; bParsingByteArray = TRUE; } +#line 13115 "asmparse.cpp" +break; case 755: -#line 1884 "asmparse.y" -{ yyval.secAct = dclPrejitDenied; } break; +#line 1873 "asmparse.y" + { yyval.pair = yystack.l_mark[0].pair; } +#line 13120 "asmparse.cpp" +break; case 756: -#line 1885 "asmparse.y" -{ yyval.secAct = dclNonCasDemand; } break; +#line 1874 "asmparse.y" + { yyval.pair = yystack.l_mark[-2].pair->Concat(yystack.l_mark[0].pair); } +#line 13125 "asmparse.cpp" +break; case 757: -#line 1886 "asmparse.y" -{ yyval.secAct = dclNonCasLinkDemand; } break; +#line 1877 "asmparse.y" + { yystack.l_mark[-2].binstr->appendInt8(0); yyval.pair = new NVPair(yystack.l_mark[-2].binstr, yystack.l_mark[0].binstr); } +#line 13130 "asmparse.cpp" +break; case 758: -#line 1887 "asmparse.y" -{ yyval.secAct = dclNonCasInheritance; } break; +#line 1880 "asmparse.y" + { yyval.int32 = 1; } +#line 13135 "asmparse.cpp" +break; case 759: -#line 1891 "asmparse.y" -{ PASM->ResetLineNumbers(); nCurrPC = PASM->m_CurPC; PENV->bExternSource = TRUE; PENV->bExternSourceAutoincrement = FALSE; } break; +#line 1881 "asmparse.y" + { yyval.int32 = 0; } +#line 13140 "asmparse.cpp" +break; case 760: -#line 1892 "asmparse.y" -{ PASM->ResetLineNumbers(); nCurrPC = PASM->m_CurPC; PENV->bExternSource = TRUE; PENV->bExternSourceAutoincrement = TRUE; } break; +#line 1884 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_BOOLEAN); + yyval.binstr->appendInt8(yystack.l_mark[0].int32); } +#line 13147 "asmparse.cpp" +break; case 761: -#line 1895 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-1].int32; - PENV->nExtCol = 0; PENV->nExtColEnd = static_cast(-1); - PASM->SetSourceFileName(yypvt[-0].string);} break; +#line 1887 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_I4); + yyval.binstr->appendInt32(yystack.l_mark[0].int32); } +#line 13154 "asmparse.cpp" +break; case 762: -#line 1898 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-0].int32; - PENV->nExtCol = 0; PENV->nExtColEnd = static_cast(-1); } break; +#line 1890 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_I4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 13161 "asmparse.cpp" +break; case 763: -#line 1900 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-3].int32; - PENV->nExtCol=yypvt[-1].int32; PENV->nExtColEnd = static_cast(-1); - PASM->SetSourceFileName(yypvt[-0].string);} break; +#line 1893 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_STRING); + yyval.binstr->append(yystack.l_mark[0].binstr); delete yystack.l_mark[0].binstr; + yyval.binstr->appendInt8(0); } +#line 13169 "asmparse.cpp" +break; case 764: -#line 1903 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-2].int32; - PENV->nExtCol=yypvt[-0].int32; PENV->nExtColEnd = static_cast(-1);} break; +#line 1897 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); + char* sz = PASM->ReflectionNotation(yystack.l_mark[-5].token); + strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); + yyval.binstr->appendInt8(1); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 13179 "asmparse.cpp" +break; case 765: -#line 1906 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-5].int32; - PENV->nExtCol=yypvt[-3].int32; PENV->nExtColEnd = yypvt[-1].int32; - PASM->SetSourceFileName(yypvt[-0].string);} break; +#line 1903 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); + char* sz = PASM->ReflectionNotation(yystack.l_mark[-5].token); + strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); + yyval.binstr->appendInt8(2); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 13189 "asmparse.cpp" +break; case 766: -#line 1910 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-4].int32; - PENV->nExtCol=yypvt[-2].int32; PENV->nExtColEnd = yypvt[-0].int32; } break; +#line 1909 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); + char* sz = PASM->ReflectionNotation(yystack.l_mark[-5].token); + strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); + yyval.binstr->appendInt8(4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 13199 "asmparse.cpp" +break; case 767: -#line 1913 "asmparse.y" -{ PENV->nExtLine = yypvt[-5].int32; PENV->nExtLineEnd = yypvt[-3].int32; - PENV->nExtCol=yypvt[-1].int32; PENV->nExtColEnd = static_cast(-1); - PASM->SetSourceFileName(yypvt[-0].string);} break; +#line 1915 "asmparse.y" + { yyval.binstr = new BinStr(); + yyval.binstr->appendInt8(SERIALIZATION_TYPE_ENUM); + char* sz = PASM->ReflectionNotation(yystack.l_mark[-3].token); + strcpy_s((char *)yyval.binstr->getBuff((unsigned)strlen(sz) + 1), strlen(sz) + 1,sz); + yyval.binstr->appendInt8(4); + yyval.binstr->appendInt32(yystack.l_mark[-1].int32); } +#line 13209 "asmparse.cpp" +break; case 768: -#line 1917 "asmparse.y" -{ PENV->nExtLine = yypvt[-4].int32; PENV->nExtLineEnd = yypvt[-2].int32; - PENV->nExtCol=yypvt[-0].int32; PENV->nExtColEnd = static_cast(-1); } break; +#line 1923 "asmparse.y" + { yyval.secAct = dclRequest; } +#line 13214 "asmparse.cpp" +break; case 769: -#line 1920 "asmparse.y" -{ PENV->nExtLine = yypvt[-7].int32; PENV->nExtLineEnd = yypvt[-5].int32; - PENV->nExtCol=yypvt[-3].int32; PENV->nExtColEnd = yypvt[-1].int32; - PASM->SetSourceFileName(yypvt[-0].string);} break; -case 770: #line 1924 "asmparse.y" -{ PENV->nExtLine = yypvt[-6].int32; PENV->nExtLineEnd = yypvt[-4].int32; - PENV->nExtCol=yypvt[-2].int32; PENV->nExtColEnd = yypvt[-0].int32; } break; + { yyval.secAct = dclDemand; } +#line 13219 "asmparse.cpp" +break; +case 770: +#line 1925 "asmparse.y" + { yyval.secAct = dclAssert; } +#line 13224 "asmparse.cpp" +break; case 771: #line 1926 "asmparse.y" -{ PENV->nExtLine = PENV->nExtLineEnd = yypvt[-1].int32 - 1; - PENV->nExtCol = 0; PENV->nExtColEnd = static_cast(-1); - PASM->SetSourceFileName(yypvt[-0].binstr);} break; + { yyval.secAct = dclDeny; } +#line 13229 "asmparse.cpp" +break; case 772: -#line 1933 "asmparse.y" -{ PASMM->AddFile(yypvt[-5].string, yypvt[-6].fileAttr|yypvt[-4].fileAttr|yypvt[-0].fileAttr, yypvt[-2].binstr); } break; +#line 1927 "asmparse.y" + { yyval.secAct = dclPermitOnly; } +#line 13234 "asmparse.cpp" +break; case 773: -#line 1934 "asmparse.y" -{ PASMM->AddFile(yypvt[-1].string, yypvt[-2].fileAttr|yypvt[-0].fileAttr, NULL); } break; +#line 1928 "asmparse.y" + { yyval.secAct = dclLinktimeCheck; } +#line 13239 "asmparse.cpp" +break; case 774: -#line 1937 "asmparse.y" -{ yyval.fileAttr = (CorFileFlags) 0; } break; +#line 1929 "asmparse.y" + { yyval.secAct = dclInheritanceCheck; } +#line 13244 "asmparse.cpp" +break; case 775: -#line 1938 "asmparse.y" -{ yyval.fileAttr = (CorFileFlags) (yypvt[-1].fileAttr | ffContainsNoMetaData); } break; +#line 1930 "asmparse.y" + { yyval.secAct = dclRequestMinimum; } +#line 13249 "asmparse.cpp" +break; case 776: -#line 1941 "asmparse.y" -{ yyval.fileAttr = (CorFileFlags) 0; } break; +#line 1931 "asmparse.y" + { yyval.secAct = dclRequestOptional; } +#line 13254 "asmparse.cpp" +break; case 777: -#line 1942 "asmparse.y" -{ yyval.fileAttr = (CorFileFlags) 0x80000000; } break; +#line 1932 "asmparse.y" + { yyval.secAct = dclRequestRefuse; } +#line 13259 "asmparse.cpp" +break; case 778: -#line 1945 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 1933 "asmparse.y" + { yyval.secAct = dclPrejitGrant; } +#line 13264 "asmparse.cpp" +break; case 779: -#line 1948 "asmparse.y" -{ PASMM->StartAssembly(yypvt[-0].string, NULL, (DWORD)yypvt[-1].asmAttr, FALSE); } break; +#line 1934 "asmparse.y" + { yyval.secAct = dclPrejitDenied; } +#line 13269 "asmparse.cpp" +break; case 780: -#line 1951 "asmparse.y" -{ yyval.asmAttr = (CorAssemblyFlags) 0; } break; +#line 1935 "asmparse.y" + { yyval.secAct = dclNonCasDemand; } +#line 13274 "asmparse.cpp" +break; case 781: -#line 1952 "asmparse.y" -{ yyval.asmAttr = (CorAssemblyFlags) (yypvt[-1].asmAttr | afRetargetable); } break; +#line 1936 "asmparse.y" + { yyval.secAct = dclNonCasLinkDemand; } +#line 13279 "asmparse.cpp" +break; case 782: -#line 1953 "asmparse.y" -{ yyval.asmAttr = (CorAssemblyFlags) (yypvt[-1].asmAttr | afContentType_WindowsRuntime); } break; +#line 1937 "asmparse.y" + { yyval.secAct = dclNonCasInheritance; } +#line 13284 "asmparse.cpp" +break; case 783: -#line 1954 "asmparse.y" -{ yyval.asmAttr = (CorAssemblyFlags) (yypvt[-1].asmAttr | afPA_NoPlatform); } break; +#line 1941 "asmparse.y" + { PASM->ResetLineNumbers(); nCurrPC = PASM->m_CurPC; PENV->bExternSource = TRUE; PENV->bExternSourceAutoincrement = FALSE; } +#line 13289 "asmparse.cpp" +break; case 784: -#line 1955 "asmparse.y" -{ yyval.asmAttr = yypvt[-2].asmAttr; } break; +#line 1942 "asmparse.y" + { PASM->ResetLineNumbers(); nCurrPC = PASM->m_CurPC; PENV->bExternSource = TRUE; PENV->bExternSourceAutoincrement = TRUE; } +#line 13294 "asmparse.cpp" +break; case 785: -#line 1956 "asmparse.y" -{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_MSIL); } break; +#line 1945 "asmparse.y" + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[-1].int32; + PENV->nExtCol = 0; PENV->nExtColEnd = static_cast(-1); + PASM->SetSourceFileName(yystack.l_mark[0].string);} +#line 13301 "asmparse.cpp" +break; case 786: -#line 1957 "asmparse.y" -{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_x86); } break; +#line 1948 "asmparse.y" + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[0].int32; + PENV->nExtCol = 0; PENV->nExtColEnd = static_cast(-1); } +#line 13307 "asmparse.cpp" +break; case 787: -#line 1958 "asmparse.y" -{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_AMD64); } break; +#line 1950 "asmparse.y" + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[-3].int32; + PENV->nExtCol=yystack.l_mark[-1].int32; PENV->nExtColEnd = static_cast(-1); + PASM->SetSourceFileName(yystack.l_mark[0].string);} +#line 13314 "asmparse.cpp" +break; case 788: -#line 1959 "asmparse.y" -{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_ARM); } break; +#line 1953 "asmparse.y" + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[-2].int32; + PENV->nExtCol=yystack.l_mark[0].int32; PENV->nExtColEnd = static_cast(-1);} +#line 13320 "asmparse.cpp" +break; case 789: +#line 1956 "asmparse.y" + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[-5].int32; + PENV->nExtCol=yystack.l_mark[-3].int32; PENV->nExtColEnd = yystack.l_mark[-1].int32; + PASM->SetSourceFileName(yystack.l_mark[0].string);} +#line 13327 "asmparse.cpp" +break; +case 790: #line 1960 "asmparse.y" -{ SET_PA(yyval.asmAttr,yypvt[-1].asmAttr,afPA_ARM64); } break; + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[-4].int32; + PENV->nExtCol=yystack.l_mark[-2].int32; PENV->nExtColEnd = yystack.l_mark[0].int32; } +#line 13333 "asmparse.cpp" +break; +case 791: +#line 1963 "asmparse.y" + { PENV->nExtLine = yystack.l_mark[-5].int32; PENV->nExtLineEnd = yystack.l_mark[-3].int32; + PENV->nExtCol=yystack.l_mark[-1].int32; PENV->nExtColEnd = static_cast(-1); + PASM->SetSourceFileName(yystack.l_mark[0].string);} +#line 13340 "asmparse.cpp" +break; case 792: #line 1967 "asmparse.y" -{ PASMM->SetAssemblyHashAlg(yypvt[-0].int32); } break; + { PENV->nExtLine = yystack.l_mark[-4].int32; PENV->nExtLineEnd = yystack.l_mark[-2].int32; + PENV->nExtCol=yystack.l_mark[0].int32; PENV->nExtColEnd = static_cast(-1); } +#line 13346 "asmparse.cpp" +break; +case 793: +#line 1970 "asmparse.y" + { PENV->nExtLine = yystack.l_mark[-7].int32; PENV->nExtLineEnd = yystack.l_mark[-5].int32; + PENV->nExtCol=yystack.l_mark[-3].int32; PENV->nExtColEnd = yystack.l_mark[-1].int32; + PASM->SetSourceFileName(yystack.l_mark[0].string);} +#line 13353 "asmparse.cpp" +break; +case 794: +#line 1974 "asmparse.y" + { PENV->nExtLine = yystack.l_mark[-6].int32; PENV->nExtLineEnd = yystack.l_mark[-4].int32; + PENV->nExtCol=yystack.l_mark[-2].int32; PENV->nExtColEnd = yystack.l_mark[0].int32; } +#line 13359 "asmparse.cpp" +break; case 795: -#line 1972 "asmparse.y" -{ yyval.int32 = yypvt[-0].int32; } break; +#line 1976 "asmparse.y" + { PENV->nExtLine = PENV->nExtLineEnd = yystack.l_mark[-1].int32 - 1; + PENV->nExtCol = 0; PENV->nExtColEnd = static_cast(-1); + PASM->SetSourceFileName(yystack.l_mark[0].binstr);} +#line 13366 "asmparse.cpp" +break; case 796: -#line 1973 "asmparse.y" -{ yyval.int32 = 0xFFFF; } break; +#line 1983 "asmparse.y" + { PASMM->AddFile(yystack.l_mark[-5].string, yystack.l_mark[-6].fileAttr|yystack.l_mark[-4].fileAttr|yystack.l_mark[0].fileAttr, yystack.l_mark[-2].binstr); } +#line 13371 "asmparse.cpp" +break; case 797: -#line 1976 "asmparse.y" -{ PASMM->SetAssemblyPublicKey(yypvt[-1].binstr); } break; +#line 1984 "asmparse.y" + { PASMM->AddFile(yystack.l_mark[-1].string, yystack.l_mark[-2].fileAttr|yystack.l_mark[0].fileAttr, NULL); } +#line 13376 "asmparse.cpp" +break; case 798: -#line 1978 "asmparse.y" -{ PASMM->SetAssemblyVer((USHORT)yypvt[-6].int32, (USHORT)yypvt[-4].int32, (USHORT)yypvt[-2].int32, (USHORT)yypvt[-0].int32); } break; +#line 1987 "asmparse.y" + { yyval.fileAttr = (CorFileFlags) 0; } +#line 13381 "asmparse.cpp" +break; case 799: -#line 1979 "asmparse.y" -{ yypvt[-0].binstr->appendInt8(0); PASMM->SetAssemblyLocale(yypvt[-0].binstr,TRUE); } break; +#line 1988 "asmparse.y" + { yyval.fileAttr = (CorFileFlags) (yystack.l_mark[-1].fileAttr | ffContainsNoMetaData); } +#line 13386 "asmparse.cpp" +break; case 800: -#line 1980 "asmparse.y" -{ PASMM->SetAssemblyLocale(yypvt[-1].binstr,FALSE); } break; +#line 1991 "asmparse.y" + { yyval.fileAttr = (CorFileFlags) 0; } +#line 13391 "asmparse.cpp" +break; +case 801: +#line 1992 "asmparse.y" + { yyval.fileAttr = (CorFileFlags) 0x80000000; } +#line 13396 "asmparse.cpp" +break; +case 802: +#line 1995 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 13401 "asmparse.cpp" +break; case 803: -#line 1985 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 1998 "asmparse.y" + { PASMM->StartAssembly(yystack.l_mark[0].string, NULL, (DWORD)yystack.l_mark[-1].asmAttr, FALSE); } +#line 13406 "asmparse.cpp" +break; case 804: -#line 1988 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 2001 "asmparse.y" + { yyval.asmAttr = (CorAssemblyFlags) 0; } +#line 13411 "asmparse.cpp" +break; case 805: -#line 1991 "asmparse.y" -{ bParsingByteArray = TRUE; } break; +#line 2002 "asmparse.y" + { yyval.asmAttr = (CorAssemblyFlags) (yystack.l_mark[-1].asmAttr | afRetargetable); } +#line 13416 "asmparse.cpp" +break; case 806: -#line 1995 "asmparse.y" -{ PASMM->StartAssembly(yypvt[-0].string, NULL, yypvt[-1].asmAttr, TRUE); } break; +#line 2003 "asmparse.y" + { yyval.asmAttr = (CorAssemblyFlags) (yystack.l_mark[-1].asmAttr | afContentType_WindowsRuntime); } +#line 13421 "asmparse.cpp" +break; case 807: -#line 1997 "asmparse.y" -{ PASMM->StartAssembly(yypvt[-2].string, yypvt[-0].string, yypvt[-3].asmAttr, TRUE); } break; -case 810: #line 2004 "asmparse.y" -{ PASMM->SetAssemblyHashBlob(yypvt[-1].binstr); } break; -case 812: + { yyval.asmAttr = (CorAssemblyFlags) (yystack.l_mark[-1].asmAttr | afPA_NoPlatform); } +#line 13426 "asmparse.cpp" +break; +case 808: +#line 2005 "asmparse.y" + { yyval.asmAttr = yystack.l_mark[-2].asmAttr; } +#line 13431 "asmparse.cpp" +break; +case 809: #line 2006 "asmparse.y" -{ PASMM->SetAssemblyPublicKeyToken(yypvt[-1].binstr); } break; -case 813: + { SET_PA(yyval.asmAttr,yystack.l_mark[-1].asmAttr,afPA_MSIL); } +#line 13436 "asmparse.cpp" +break; +case 810: #line 2007 "asmparse.y" -{ PASMM->SetAssemblyAutodetect(); } break; -case 814: + { SET_PA(yyval.asmAttr,yystack.l_mark[-1].asmAttr,afPA_x86); } +#line 13441 "asmparse.cpp" +break; +case 811: +#line 2008 "asmparse.y" + { SET_PA(yyval.asmAttr,yystack.l_mark[-1].asmAttr,afPA_AMD64); } +#line 13446 "asmparse.cpp" +break; +case 812: +#line 2009 "asmparse.y" + { SET_PA(yyval.asmAttr,yystack.l_mark[-1].asmAttr,afPA_ARM); } +#line 13451 "asmparse.cpp" +break; +case 813: #line 2010 "asmparse.y" -{ PASMM->StartComType(yypvt[-0].string, yypvt[-1].exptAttr);} break; -case 815: -#line 2013 "asmparse.y" -{ PASMM->StartComType(yypvt[-0].string, yypvt[-1].exptAttr); } break; + { SET_PA(yyval.asmAttr,yystack.l_mark[-1].asmAttr,afPA_ARM64); } +#line 13456 "asmparse.cpp" +break; case 816: -#line 2016 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) 0; } break; -case 817: #line 2017 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-1].exptAttr | tdNotPublic); } break; -case 818: -#line 2018 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-1].exptAttr | tdPublic); } break; + { PASMM->SetAssemblyHashAlg(yystack.l_mark[0].int32); } +#line 13461 "asmparse.cpp" +break; case 819: -#line 2019 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-1].exptAttr | tdForwarder); } break; +#line 2022 "asmparse.y" + { yyval.int32 = yystack.l_mark[0].int32; } +#line 13466 "asmparse.cpp" +break; case 820: -#line 2020 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedPublic); } break; +#line 2023 "asmparse.y" + { yyval.int32 = 0xFFFF; } +#line 13471 "asmparse.cpp" +break; case 821: -#line 2021 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedPrivate); } break; +#line 2026 "asmparse.y" + { PASMM->SetAssemblyPublicKey(yystack.l_mark[-1].binstr); } +#line 13476 "asmparse.cpp" +break; case 822: -#line 2022 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedFamily); } break; +#line 2028 "asmparse.y" + { PASMM->SetAssemblyVer((USHORT)yystack.l_mark[-6].int32, (USHORT)yystack.l_mark[-4].int32, (USHORT)yystack.l_mark[-2].int32, (USHORT)yystack.l_mark[0].int32); } +#line 13481 "asmparse.cpp" +break; case 823: -#line 2023 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedAssembly); } break; +#line 2029 "asmparse.y" + { yystack.l_mark[0].binstr->appendInt8(0); PASMM->SetAssemblyLocale(yystack.l_mark[0].binstr,TRUE); } +#line 13486 "asmparse.cpp" +break; case 824: -#line 2024 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedFamANDAssem); } break; -case 825: -#line 2025 "asmparse.y" -{ yyval.exptAttr = (CorTypeAttr) (yypvt[-2].exptAttr | tdNestedFamORAssem); } break; +#line 2030 "asmparse.y" + { PASMM->SetAssemblyLocale(yystack.l_mark[-1].binstr,FALSE); } +#line 13491 "asmparse.cpp" +break; +case 827: +#line 2035 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 13496 "asmparse.cpp" +break; case 828: -#line 2032 "asmparse.y" -{ PASMM->SetComTypeFile(yypvt[-0].string); } break; +#line 2038 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 13501 "asmparse.cpp" +break; case 829: -#line 2033 "asmparse.y" -{ PASMM->SetComTypeComType(yypvt[-0].string); } break; +#line 2041 "asmparse.y" + { bParsingByteArray = TRUE; } +#line 13506 "asmparse.cpp" +break; case 830: -#line 2034 "asmparse.y" -{ PASMM->SetComTypeAsmRef(yypvt[-0].string); } break; +#line 2045 "asmparse.y" + { PASMM->StartAssembly(yystack.l_mark[0].string, NULL, yystack.l_mark[-1].asmAttr, TRUE); } +#line 13511 "asmparse.cpp" +break; case 831: -#line 2035 "asmparse.y" -{ if(!PASMM->SetComTypeImplementationTok(yypvt[-1].int32)) - PASM->report->error("Invalid implementation of exported type\n"); } break; -case 832: -#line 2037 "asmparse.y" -{ if(!PASMM->SetComTypeClassTok(yypvt[-0].int32)) - PASM->report->error("Invalid TypeDefID of exported type\n"); } break; -case 835: -#line 2043 "asmparse.y" -{ PASMM->StartManifestRes(yypvt[-0].string, yypvt[-0].string, yypvt[-1].manresAttr); } break; +#line 2047 "asmparse.y" + { PASMM->StartAssembly(yystack.l_mark[-2].string, yystack.l_mark[0].string, yystack.l_mark[-3].asmAttr, TRUE); } +#line 13516 "asmparse.cpp" +break; +case 834: +#line 2054 "asmparse.y" + { PASMM->SetAssemblyHashBlob(yystack.l_mark[-1].binstr); } +#line 13521 "asmparse.cpp" +break; case 836: -#line 2045 "asmparse.y" -{ PASMM->StartManifestRes(yypvt[-2].string, yypvt[-0].string, yypvt[-3].manresAttr); } break; +#line 2056 "asmparse.y" + { PASMM->SetAssemblyPublicKeyToken(yystack.l_mark[-1].binstr); } +#line 13526 "asmparse.cpp" +break; case 837: -#line 2048 "asmparse.y" -{ yyval.manresAttr = (CorManifestResourceFlags) 0; } break; +#line 2057 "asmparse.y" + { PASMM->SetAssemblyAutodetect(); } +#line 13531 "asmparse.cpp" +break; case 838: -#line 2049 "asmparse.y" -{ yyval.manresAttr = (CorManifestResourceFlags) (yypvt[-1].manresAttr | mrPublic); } break; +#line 2060 "asmparse.y" + { PASMM->StartComType(yystack.l_mark[0].string, yystack.l_mark[-1].exptAttr);} +#line 13536 "asmparse.cpp" +break; case 839: -#line 2050 "asmparse.y" -{ yyval.manresAttr = (CorManifestResourceFlags) (yypvt[-1].manresAttr | mrPrivate); } break; +#line 2063 "asmparse.y" + { PASMM->StartComType(yystack.l_mark[0].string, yystack.l_mark[-1].exptAttr); } +#line 13541 "asmparse.cpp" +break; +case 840: +#line 2066 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) 0; } +#line 13546 "asmparse.cpp" +break; +case 841: +#line 2067 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-1].exptAttr | tdNotPublic); } +#line 13551 "asmparse.cpp" +break; case 842: -#line 2057 "asmparse.y" -{ PASMM->SetManifestResFile(yypvt[-2].string, (ULONG)yypvt[-0].int32); } break; +#line 2068 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-1].exptAttr | tdPublic); } +#line 13556 "asmparse.cpp" +break; case 843: -#line 2058 "asmparse.y" -{ PASMM->SetManifestResAsmRef(yypvt[-0].string); } break;/* End of actions */ -#line 329 "F:\\NetFXDev1\\src\\tools\\devdiv\\amd64\\yypars.c" - } - } - goto yystack; /* stack new state and value */ - } -#pragma warning(default:102) +#line 2069 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-1].exptAttr | tdForwarder); } +#line 13561 "asmparse.cpp" +break; +case 844: +#line 2070 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-2].exptAttr | tdNestedPublic); } +#line 13566 "asmparse.cpp" +break; +case 845: +#line 2071 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-2].exptAttr | tdNestedPrivate); } +#line 13571 "asmparse.cpp" +break; +case 846: +#line 2072 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-2].exptAttr | tdNestedFamily); } +#line 13576 "asmparse.cpp" +break; +case 847: +#line 2073 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-2].exptAttr | tdNestedAssembly); } +#line 13581 "asmparse.cpp" +break; +case 848: +#line 2074 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-2].exptAttr | tdNestedFamANDAssem); } +#line 13586 "asmparse.cpp" +break; +case 849: +#line 2075 "asmparse.y" + { yyval.exptAttr = (CorTypeAttr) (yystack.l_mark[-2].exptAttr | tdNestedFamORAssem); } +#line 13591 "asmparse.cpp" +break; +case 852: +#line 2082 "asmparse.y" + { PASMM->SetComTypeFile(yystack.l_mark[0].string); } +#line 13596 "asmparse.cpp" +break; +case 853: +#line 2083 "asmparse.y" + { PASMM->SetComTypeComType(yystack.l_mark[0].string); } +#line 13601 "asmparse.cpp" +break; +case 854: +#line 2084 "asmparse.y" + { PASMM->SetComTypeAsmRef(yystack.l_mark[0].string); } +#line 13606 "asmparse.cpp" +break; +case 855: +#line 2085 "asmparse.y" + { if(!PASMM->SetComTypeImplementationTok(yystack.l_mark[-1].int32)) + PASM->report->error("Invalid implementation of exported type\n"); } +#line 13612 "asmparse.cpp" +break; +case 856: +#line 2087 "asmparse.y" + { if(!PASMM->SetComTypeClassTok(yystack.l_mark[0].int32)) + PASM->report->error("Invalid TypeDefID of exported type\n"); } +#line 13618 "asmparse.cpp" +break; +case 859: +#line 2093 "asmparse.y" + { PASMM->StartManifestRes(yystack.l_mark[0].string, yystack.l_mark[0].string, yystack.l_mark[-1].manresAttr); } +#line 13623 "asmparse.cpp" +break; +case 860: +#line 2095 "asmparse.y" + { PASMM->StartManifestRes(yystack.l_mark[-2].string, yystack.l_mark[0].string, yystack.l_mark[-3].manresAttr); } +#line 13628 "asmparse.cpp" +break; +case 861: +#line 2098 "asmparse.y" + { yyval.manresAttr = (CorManifestResourceFlags) 0; } +#line 13633 "asmparse.cpp" +break; +case 862: +#line 2099 "asmparse.y" + { yyval.manresAttr = (CorManifestResourceFlags) (yystack.l_mark[-1].manresAttr | mrPublic); } +#line 13638 "asmparse.cpp" +break; +case 863: +#line 2100 "asmparse.y" + { yyval.manresAttr = (CorManifestResourceFlags) (yystack.l_mark[-1].manresAttr | mrPrivate); } +#line 13643 "asmparse.cpp" +break; +case 866: +#line 2107 "asmparse.y" + { PASMM->SetManifestResFile(yystack.l_mark[-2].string, (ULONG)yystack.l_mark[0].int32); } +#line 13648 "asmparse.cpp" +break; +case 867: +#line 2108 "asmparse.y" + { PASMM->SetManifestResAsmRef(yystack.l_mark[0].string); } +#line 13653 "asmparse.cpp" +break; +#line 13655 "asmparse.cpp" + default: + break; + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yystack.p_mark -= yym; +#endif + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + { + fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ + fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); +#endif + fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); + } +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *++yystack.p_mark = yyloc; +#endif + if (yychar < 0) + { +#if YYBTYACC + do { + if (yylvp < yylve) + { + /* we're currently re-reading tokens */ + yylval = *yylvp++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylloc = *yylpp++; +#endif + yychar = *yylexp++; + break; + } + if (yyps->save) + { + /* in trial mode; save scanner results for future parse attempts */ + if (yylvp == yylvlim) + { /* Enlarge lexical value queue */ + size_t p = (size_t) (yylvp - yylvals); + size_t s = (size_t) (yylvlim - yylvals); + + s += YYLVQUEUEGROWTH; + if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) + goto yyenomem; + if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) + goto yyenomem; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) + goto yyenomem; +#endif + yylvp = yylve = yylvals + p; + yylvlim = yylvals + s; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp = yylpe = yylpsns + p; + yylplim = yylpsns + s; +#endif + yylexp = yylexemes + p; + } + *yylexp = (YYINT) YYLEX; + *yylvp++ = yylval; + yylve++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *yylpp++ = yylloc; + yylpe++; +#endif + yychar = *yylexp++; + break; + } + /* normal operation, no conflict encountered */ +#endif /* YYBTYACC */ + yychar = YYLEX; +#if YYBTYACC + } while (0); +#endif /* YYBTYACC */ + if (yychar < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; + fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", + YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + { + fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC + if (!yytrial) +#endif /* YYBTYACC */ + fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); +#endif + fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); + } +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + *++yystack.p_mark = yyloc; +#endif + goto yyloop; +#if YYBTYACC + + /* Reduction declares that this path is valid. Set yypath and do a full parse */ +yyvalid: + if (yypath) YYABORT; + while (yyps->save) + { + YYParseState *save = yyps->save; + yyps->save = save->save; + save->save = yypath; + yypath = save; + } +#if YYDEBUG + if (yydebug) + fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", + YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); +#endif + if (yyerrctx) + { + yyFreeState(yyerrctx); + yyerrctx = NULL; + } + yylvp = yylvals + yypath->lexeme; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yylpp = yylpsns + yypath->lexeme; +#endif + yylexp = yylexemes + yypath->lexeme; + yychar = YYEMPTY; + yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); + memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); + yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); + memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); + memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif + yystate = yypath->state; + goto yyloop; +#endif /* YYBTYACC */ +yyoverflow: + YYERROR_CALL("yacc stack overflow"); +#if YYBTYACC + goto yyabort_nomem; +yyenomem: + YYERROR_CALL("memory exhausted"); +yyabort_nomem: +#endif /* YYBTYACC */ + yyresult = 2; + goto yyreturn; -#ifdef YYDUMP -YYLOCAL void YYNEAR YYPASCAL yydumpinfo(void) -{ - short stackindex; - short valindex; +yyabort: + yyresult = 1; + goto yyreturn; - //dump yys - printf("short yys[%d] {\n", YYMAXDEPTH); - for (stackindex = 0; stackindex < YYMAXDEPTH; stackindex++){ - if (stackindex) - printf(", %s", stackindex % 10 ? "\0" : "\n"); - printf("%6d", yys[stackindex]); - } - printf("\n};\n"); +yyaccept: +#if YYBTYACC + if (yyps->save) goto yyvalid; +#endif /* YYBTYACC */ + yyresult = 0; - //dump yyv - printf("YYSTYPE yyv[%d] {\n", YYMAXDEPTH); - for (valindex = 0; valindex < YYMAXDEPTH; valindex++){ - if (valindex) - printf(", %s", valindex % 5 ? "\0" : "\n"); - printf("%#*x", 3+sizeof(YYSTYPE), yyv[valindex]); - } - printf("\n};\n"); - } -#endif +yyreturn: +#if defined(YYDESTRUCT_CALL) + if (yychar != YYEOF && yychar != YYEMPTY) +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); +#else + YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ + + { + YYSTYPE *pv; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + YYLTYPE *pp; + + for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) + YYDESTRUCT_CALL("cleanup: discarding state", + yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); +#else + for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) + YYDESTRUCT_CALL("cleanup: discarding state", + yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ + } +#endif /* defined(YYDESTRUCT_CALL) */ + +#if YYBTYACC + if (yyerrctx) + { + yyFreeState(yyerrctx); + yyerrctx = NULL; + } + while (yyps) + { + YYParseState *save = yyps; + yyps = save->save; + save->save = NULL; + yyFreeState(save); + } + while (yypath) + { + YYParseState *save = yypath; + yypath = save->save; + save->save = NULL; + yyFreeState(save); + } +#endif /* YYBTYACC */ + yyfreestack(&yystack); + return (yyresult); +} diff --git a/src/coreclr/ilasm/typar.hpp b/src/coreclr/ilasm/typar.hpp index aee0c32c45262..00a98ad23fd16 100644 --- a/src/coreclr/ilasm/typar.hpp +++ b/src/coreclr/ilasm/typar.hpp @@ -16,6 +16,7 @@ class TyParDescr { m_pbsBounds = NULL; m_wzName = NULL; + m_tkType = 0; m_dwAttrs = 0; }; ~TyParDescr() @@ -24,9 +25,10 @@ class TyParDescr delete [] m_wzName; m_lstCA.RESET(true); }; - void Init(BinStr* bounds, LPCUTF8 name, DWORD attrs) + void Init(BinStr* bounds, mdToken type, LPCUTF8 name, DWORD attrs) { m_pbsBounds = bounds; + m_tkType = type; ULONG cTemp = (ULONG)strlen(name)+1; WCHAR *pwzName; m_wzName = pwzName = new WCHAR[cTemp]; @@ -38,6 +40,7 @@ class TyParDescr m_dwAttrs = attrs; }; BinStr* Bounds() { return m_pbsBounds; }; + mdToken Type() { return m_tkType; }; LPCWSTR Name() { return m_wzName; }; DWORD Attrs() { return m_dwAttrs; }; mdToken Token() { return m_token; }; @@ -49,6 +52,7 @@ class TyParDescr private: BinStr* m_pbsBounds; + mdToken m_tkType; LPCWSTR m_wzName; DWORD m_dwAttrs; mdToken m_token; @@ -61,11 +65,18 @@ class TyParList { { bound = (b == NULL) ? new BinStr() : b; bound->appendInt32(0); // zero terminator - attrs = a; name = n; next = nx; + attrs = a; unresolvedType = NULL; type = 0; name = n; next = nx; + }; + TyParList(DWORD a, BinStr* t, BinStr* b, LPCUTF8 n, TyParList* nx = NULL) + { + bound = (b == NULL) ? new BinStr() : b; + bound->appendInt32(0); // zero terminator + attrs = a; unresolvedType = t; type = 0; name = n; next = nx; }; ~TyParList() { - if( bound) delete bound; + if (bound) delete bound; + if (unresolvedType) delete unresolvedType; // To avoid excessive stack usage (especially in debug builds), we break the next chain // and delete as we traverse the link list @@ -110,10 +121,11 @@ class TyParList { #pragma warning(disable:6211) // "Leaking memory 'b' due to an exception. Consider using a local catch block to clean up memory" #endif /*_PREFAST_ */ - int ToArray(BinStr ***bounds, LPCWSTR** names, DWORD **attrs) + int ToArray(BinStr ***bounds, DWORD **types, LPCWSTR** names, DWORD **attrs) { int n = Count(); BinStr **b = new BinStr* [n]; + DWORD *t = new DWORD [n]; LPCWSTR *nam = new LPCWSTR [n]; DWORD *attr = attrs ? new DWORD [n] : NULL; TyParList *tp = this; @@ -127,13 +139,17 @@ class TyParList { WszMultiByteToWideChar(g_uCodePage,0,tp->name,-1,wzDllName,cTemp); nam[i] = (LPCWSTR)wzDllName; b[i] = tp->bound; + t[i] = tp->type; if (attr) attr[i] = tp->attrs; - tp->bound = 0; // to avoid deletion by destructor + // to avoid deletion by destructor + tp->bound = 0; + tp->unresolvedType = 0; i++; tp = tp->next; } *bounds = b; + *types = t; *names = nam; if (attrs) *attrs = attr; @@ -157,8 +173,10 @@ class TyParList { TyParList *tp = this; while (tp) { - pTPD[i].Init(tp->bound,tp->name,tp->attrs); - tp->bound = 0; // to avoid deletion by destructor + pTPD[i].Init(tp->bound,tp->type,tp->name,tp->attrs); + // to avoid deletion by destructor + tp->bound = 0; + tp->unresolvedType = 0; i++; tp = tp->next; } @@ -171,9 +189,12 @@ class TyParList { BinStr* Bound() { return bound; }; private: BinStr* bound; + BinStr* unresolvedType; + mdToken type; LPCUTF8 name; TyParList* next; DWORD attrs; + friend void ResolveTyParList(TyParList* list); }; typedef TyParList* pTyParList; diff --git a/src/coreclr/ildasm/dasm.cpp b/src/coreclr/ildasm/dasm.cpp index 860b36f2e9366..12ecf12776be3 100644 --- a/src/coreclr/ildasm/dasm.cpp +++ b/src/coreclr/ildasm/dasm.cpp @@ -1675,10 +1675,13 @@ BYTE* skipType(BYTE* ptr) break; } - case ELEMENT_TYPE_VALUETYPE : + case ELEMENT_TYPE_VALUETYPE : case ELEMENT_TYPE_CLASS : ptr += CorSigUncompressToken(ptr, &tk); break; + case ELEMENT_TYPE_CTARG : + ptr += CorSigUncompressConstTypeArgData((PCCOR_SIGNATURE&) ptr); // const type argument + break; case ELEMENT_TYPE_CMOD_REQD : case ELEMENT_TYPE_CMOD_OPT : @@ -3043,6 +3046,7 @@ char *DumpGenericPars(_Inout_updates_(SZSTRING_SIZE) char* szString, mdToken tok ULONG ulSequence; DWORD attr; mdToken tkOwner; + mdToken tkType; HCORENUM hEnumTyPar = NULL; HCORENUM hEnumTyParConstr = NULL; char* szptr = &szString[strlen(szString)]; @@ -3058,7 +3062,7 @@ char *DumpGenericPars(_Inout_updates_(SZSTRING_SIZE) char* szString, mdToken tok for (i = 1; NumTyPars != 0; i++) { - g_pPubImport->GetGenericParamProps(tkTyPar, &ulSequence, &attr, &tkOwner, NULL, wzArgName, UNIBUF_SIZE/2, &chName); + g_pPubImport->GetGenericParamProps(tkTyPar, &ulSequence, &attr, &tkOwner, &tkType, wzArgName, UNIBUF_SIZE/2, &chName); //if(u16_strlen(wzArgName) >= MAX_CLASSNAME_LENGTH) // wzArgName[MAX_CLASSNAME_LENGTH-1] = 0; hEnumTyParConstr = NULL; @@ -3095,27 +3099,47 @@ char *DumpGenericPars(_Inout_updates_(SZSTRING_SIZE) char* szString, mdToken tok { CQuickBytes out; mdToken tkConstrType,tkOwner; - szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"("); DWORD ix; + BOOL first = true, hasLiteralTypeParameter = false; for (ix=0; ixGetGenericParamConstraintProps(tkConstr[ix], &tkOwner, &tkConstrType))) return NULL; - - if(ix) szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),", "); + if (TypeFromToken(tkConstrType) == mdtGenericParamType) + { + hasLiteralTypeParameter = true; + continue; + } + if(first) + { + szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"("); + first = false; + } + else + { + szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),", "); + } CHECK_REMAINING_SIZE; out.Shrink(0); szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s",PrettyPrintClass(&out,tkConstrType,g_pImport)); CHECK_REMAINING_SIZE; } if(ix < NumConstrs) break; - szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),") "); + if (!hasLiteralTypeParameter || NumConstrs > 1) + { + szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),") "); + } CHECK_REMAINING_SIZE; } // re-get name, wzUniBuf may not contain it any more g_pPubImport->GetGenericParamProps(tkTyPar, NULL, &attr, NULL, NULL, wzArgName, UNIBUF_SIZE/2, &chName); //if(u16_strlen(wzArgName) >= MAX_CLASSNAME_LENGTH) // wzArgName[MAX_CLASSNAME_LENGTH-1] = 0; + if (RidFromToken(tkType)) + { + CQuickBytes out; + szptr += sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"literal %s ",PrettyPrintClass(&out, tkType, g_pImport)); + } if (chName) { char* sz = (char*)(&wzUniBuf[UNIBUF_SIZE/2]); diff --git a/src/coreclr/inc/cor.h b/src/coreclr/inc/cor.h index d6f31caeff96d..cb42d2c319b75 100644 --- a/src/coreclr/inc/cor.h +++ b/src/coreclr/inc/cor.h @@ -554,7 +554,7 @@ DECLARE_INTERFACE_(IMetaDataEmit2, IMetaDataEmit) ULONG ulParamSeq, // [IN] Index of the type parameter DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szname, // [IN] Name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) + mdToken tkType, // [IN] Type mdToken rtkConstraints[], // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) mdGenericParam *pgp) PURE; // [OUT] Put GenericParam token here @@ -562,7 +562,7 @@ DECLARE_INTERFACE_(IMetaDataEmit2, IMetaDataEmit) mdGenericParam gp, // [IN] GenericParam DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szName, // [IN] Optional name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) + mdToken tkType, // [IN] Type mdToken rtkConstraints[]) PURE;// [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) STDMETHOD(ResetENCLog)() PURE; // S_OK or error. @@ -1024,7 +1024,7 @@ DECLARE_INTERFACE_(IMetaDataImport2, IMetaDataImport) ULONG *pulParamSeq, // [OUT] Index of the type parameter DWORD *pdwParamFlags, // [OUT] Flags, for future use (e.g. variance) mdToken *ptOwner, // [OUT] Owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] For future use (e.g. non-type parameters) + mdToken *ptType, // [OUT] Type (TypeDefOrRef) _Out_writes_to_opt_(cchName, *pchName) LPWSTR wzname, // [OUT] Put name here ULONG cchName, // [IN] Size of buffer @@ -1766,6 +1766,44 @@ FORCEINLINE ULONG CorSigUncompressData( return CorSigUncompressBigData(pData); } +inline ULONG CorSigUncompressConstTypeArgData( + PCCOR_SIGNATURE & pData, // [IN,OUT] compressed const type argument data + CorElementType* pType = NULL) // [OUT] const type argument type +{ + ULONG size = 1; + CorElementType type = (CorElementType)*pData++; + if (pType) + *pType = type; + switch (type) + { + case ELEMENT_TYPE_BOOLEAN : + case ELEMENT_TYPE_I1 : + case ELEMENT_TYPE_U1 : + break; + case ELEMENT_TYPE_CHAR : + case ELEMENT_TYPE_I2 : + case ELEMENT_TYPE_U2 : + size = size << 1; + break; + case ELEMENT_TYPE_I4 : + case ELEMENT_TYPE_U4 : + case ELEMENT_TYPE_R4 : + size = size << 2; + break; + case ELEMENT_TYPE_I8 : + case ELEMENT_TYPE_U8 : + case ELEMENT_TYPE_R8 : + size = size << 3; + break; + default: + // _ASSERTE(!"Unsupported Const Type Argument"); + size = 0; + break; + } + + return size; +} + #ifdef HOST_WINDOWS inline HRESULT CorSigUncompressData(// return S_OK or E_BADIMAGEFORMAT if the signature is bad PCCOR_SIGNATURE pData, // [IN] compressed data @@ -1948,9 +1986,9 @@ inline ULONG CorSigUncompressToken( // return number of bytes of that compressed inline HRESULT CorSigUncompressToken( PCCOR_SIGNATURE pData, // [IN] compressed data - uint32_t dwLen, // [IN] Remaining length of sigature + uint32_t dwLen, // [IN] Remaining length of signature mdToken * pToken, // [OUT] the expanded *pData - uint32_t * dwTokenLength) // [OUT] The length of the token in the sigature + uint32_t * dwTokenLength) // [OUT] The length of the token in the signature { mdToken tk; mdToken tkType; @@ -2055,7 +2093,7 @@ inline ULONG CorSigUncompressElementType( // Return number of bytes of that co // // Given an uncompressed unsigned integer (iLen), Store it to pDataOut in a compressed format. // Return value is the number of bytes that the integer occupies in the compressed format. -// It is caller's responsibilityt to ensure *pDataOut has at least 4 bytes to write to. +// It is caller's responsibility to ensure *pDataOut has at least 4 bytes to write to. // // Note that this function returns -1 if iLen is too big to be compressed. We currently can // only represent to 0x1FFFFFFF. diff --git a/src/coreclr/inc/corhdr.h b/src/coreclr/inc/corhdr.h index 5c645000ce87d..22ec94a658ccd 100644 --- a/src/coreclr/inc/corhdr.h +++ b/src/coreclr/inc/corhdr.h @@ -912,8 +912,9 @@ typedef enum CorElementType // This is for signatures generated internally (which will not be persisted in any way). ELEMENT_TYPE_INTERNAL = 0x21, // INTERNAL + ELEMENT_TYPE_CTARG = 0x22, // const // Note that this is the max of base type excluding modifiers - ELEMENT_TYPE_MAX = 0x22, // first invalid element type + ELEMENT_TYPE_MAX = 0x23, // first invalid element type ELEMENT_TYPE_MODIFIER = 0x40, @@ -1503,6 +1504,7 @@ typedef enum CorTokenType mdtGenericParam = 0x2a000000, // mdtMethodSpec = 0x2b000000, // mdtGenericParamConstraint = 0x2c000000, + mdtGenericParamType = 0x2d000000, // mdtString = 0x70000000, // mdtName = 0x71000000, // diff --git a/src/coreclr/inc/corinfo.h b/src/coreclr/inc/corinfo.h index 4941bf56f7d68..ffaf3ddc532ad 100644 --- a/src/coreclr/inc/corinfo.h +++ b/src/coreclr/inc/corinfo.h @@ -718,6 +718,7 @@ enum CorInfoType // the JIT in "import only" mode. CORINFO_TYPE_VAR = 0x16, + CORINFO_TYPE_CTARG = 0x17, CORINFO_TYPE_COUNT, // number of jit types }; @@ -1572,6 +1573,11 @@ struct CORINFO_RESOLVED_TOKEN uint32_t cbTypeSpec; PCCOR_SIGNATURE pMethodSpec; uint32_t cbMethodSpec; + + // [Out] Only meaningful if the resolved token is a const value argument. + bool isConstValue; + CorInfoType constValueType; + uint64_t constValue; }; struct CORINFO_CALL_INFO @@ -2762,6 +2768,21 @@ class ICorStaticInfo CORINFO_HELPER_DESC * pAccessHelper /* If canAccessMethod returns something other than ALLOWED, then this is filled in. */ ) = 0; + + // Check if this is a const value + virtual bool isConstValue( + CORINFO_CLASS_HANDLE cls + ) = 0; + + // Return the const value if this is a const value type + virtual uint64_t getConstValue( + CORINFO_CLASS_HANDLE cls + ) = 0; + + // Return the type of the const value if this is a const value type + virtual CORINFO_CLASS_HANDLE getConstValueType( + CORINFO_CLASS_HANDLE cls + ) = 0; /**********************************************************************************/ // diff --git a/src/coreclr/inc/cortypeinfo.h b/src/coreclr/inc/cortypeinfo.h index 87d960301b64b..44cae0d3fd46b 100644 --- a/src/coreclr/inc/cortypeinfo.h +++ b/src/coreclr/inc/cortypeinfo.h @@ -13,44 +13,46 @@ #define NO_SIZE ((BYTE)-1) -// TYPEINFO(type (CorElementType), namespace, class, size, gcType, isArray,isPrim, isFloat,isModifier,isGenVariable) - -TYPEINFO(ELEMENT_TYPE_END, NULL, NULL, NO_SIZE, TYPE_GC_NONE, false, false, false, false, false) // 0x00 -TYPEINFO(ELEMENT_TYPE_VOID, "System", "Void", 0, TYPE_GC_NONE, false, true, false, false, false) // 0x01 -TYPEINFO(ELEMENT_TYPE_BOOLEAN, "System", "Boolean", 1, TYPE_GC_NONE, false, true, false, false, false) // 0x02 -TYPEINFO(ELEMENT_TYPE_CHAR, "System", "Char", 2, TYPE_GC_NONE, false, true, false, false, false) // 0x03 -TYPEINFO(ELEMENT_TYPE_I1, "System", "SByte", 1, TYPE_GC_NONE, false, true, false, false, false) // 0x04 -TYPEINFO(ELEMENT_TYPE_U1, "System", "Byte", 1, TYPE_GC_NONE, false, true, false, false, false) // 0x05 -TYPEINFO(ELEMENT_TYPE_I2, "System", "Int16", 2, TYPE_GC_NONE, false, true, false, false, false) // 0x06 -TYPEINFO(ELEMENT_TYPE_U2, "System", "UInt16", 2, TYPE_GC_NONE, false, true, false, false, false) // 0x07 -TYPEINFO(ELEMENT_TYPE_I4, "System", "Int32", 4, TYPE_GC_NONE, false, true, false, false, false) // 0x08 -TYPEINFO(ELEMENT_TYPE_U4, "System", "UInt32", 4, TYPE_GC_NONE, false, true, false, false, false) // 0x09 -TYPEINFO(ELEMENT_TYPE_I8, "System", "Int64", 8, TYPE_GC_NONE, false, true, false, false, false) // 0x0a -TYPEINFO(ELEMENT_TYPE_U8, "System", "UInt64", 8, TYPE_GC_NONE, false, true, false, false, false) // 0x0b - -TYPEINFO(ELEMENT_TYPE_R4, "System", "Single", 4, TYPE_GC_NONE, false, true, true, false, false) // 0x0c -TYPEINFO(ELEMENT_TYPE_R8, "System", "Double", 8, TYPE_GC_NONE, false, true, true, false, false) // 0x0d - -TYPEINFO(ELEMENT_TYPE_STRING, "System", "String", TARGET_POINTER_SIZE, TYPE_GC_REF, false, false, false, false, false) // 0x0e -TYPEINFO(ELEMENT_TYPE_PTR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_NONE, false, false, false, true, false) // 0x0f -TYPEINFO(ELEMENT_TYPE_BYREF, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_BYREF, false, false, false, true, false) // 0x10 -TYPEINFO(ELEMENT_TYPE_VALUETYPE, NULL, NULL, NO_SIZE, TYPE_GC_OTHER, false, false, false, false, false) // 0x11 -TYPEINFO(ELEMENT_TYPE_CLASS, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_REF, false, false, false, false, false) // 0x12 -TYPEINFO(ELEMENT_TYPE_VAR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_OTHER, false, false, false, false, true) // 0x13 -TYPEINFO(ELEMENT_TYPE_ARRAY, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_REF, true, false, false, true, false) // 0x14 - -TYPEINFO(ELEMENT_TYPE_GENERICINST, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_OTHER, false, false, false, false, false) // 0x15 -TYPEINFO(ELEMENT_TYPE_TYPEDBYREF, "System", "TypedReference",2*TARGET_POINTER_SIZE,TYPE_GC_BYREF, false, false, false, false, false) // 0x16 -TYPEINFO(ELEMENT_TYPE_VALUEARRAY_UNSUPPORTED, NULL,NULL, NO_SIZE, TYPE_GC_NONE, false, false, false, false, false) // 0x17 (unsupported, not in the ECMA spec) - -TYPEINFO(ELEMENT_TYPE_I, "System", "IntPtr", TARGET_POINTER_SIZE, TYPE_GC_NONE, false, true, false, false, false) // 0x18 -TYPEINFO(ELEMENT_TYPE_U, "System", "UIntPtr", TARGET_POINTER_SIZE, TYPE_GC_NONE, false, true, false, false, false) // 0x19 -TYPEINFO(ELEMENT_TYPE_R_UNSUPPORTED,NULL, NULL, NO_SIZE, TYPE_GC_NONE, false, false, false, false, false) // 0x1a (unsupported, not in the ECMA spec) - -TYPEINFO(ELEMENT_TYPE_FNPTR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_NONE, false, false, false, false, false) // 0x1b -TYPEINFO(ELEMENT_TYPE_OBJECT, "System", "Object", TARGET_POINTER_SIZE, TYPE_GC_REF, false, false, false, false, false) // 0x1c -TYPEINFO(ELEMENT_TYPE_SZARRAY, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_REF, true, false, false, true, false) // 0x1d -TYPEINFO(ELEMENT_TYPE_MVAR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_OTHER, false, false, false, false, true) // x01e -TYPEINFO(ELEMENT_TYPE_CMOD_REQD, NULL, NULL, 0, TYPE_GC_NONE, false, false, false, false, false) // 0x1f -TYPEINFO(ELEMENT_TYPE_CMOD_OPT, NULL, NULL, 0, TYPE_GC_NONE, false, false, false, false, false) // 0x20 -TYPEINFO(ELEMENT_TYPE_INTERNAL, NULL, NULL, 0, TYPE_GC_OTHER, false, false, false, false, false) // 0x21 +// TYPEINFO(type (CorElementType), namespace, class, size, gcType, isArray,isPrim, isFloat,isModifier,isGenVariable,isConst) + +TYPEINFO(ELEMENT_TYPE_END, NULL, NULL, NO_SIZE, TYPE_GC_NONE, false, false, false, false, false, false) // 0x00 +TYPEINFO(ELEMENT_TYPE_VOID, "System", "Void", 0, TYPE_GC_NONE, false, true, false, false, false, false) // 0x01 +TYPEINFO(ELEMENT_TYPE_BOOLEAN, "System", "Boolean", 1, TYPE_GC_NONE, false, true, false, false, false, false) // 0x02 +TYPEINFO(ELEMENT_TYPE_CHAR, "System", "Char", 2, TYPE_GC_NONE, false, true, false, false, false, false) // 0x03 +TYPEINFO(ELEMENT_TYPE_I1, "System", "SByte", 1, TYPE_GC_NONE, false, true, false, false, false, false) // 0x04 +TYPEINFO(ELEMENT_TYPE_U1, "System", "Byte", 1, TYPE_GC_NONE, false, true, false, false, false, false) // 0x05 +TYPEINFO(ELEMENT_TYPE_I2, "System", "Int16", 2, TYPE_GC_NONE, false, true, false, false, false, false) // 0x06 +TYPEINFO(ELEMENT_TYPE_U2, "System", "UInt16", 2, TYPE_GC_NONE, false, true, false, false, false, false) // 0x07 +TYPEINFO(ELEMENT_TYPE_I4, "System", "Int32", 4, TYPE_GC_NONE, false, true, false, false, false, false) // 0x08 +TYPEINFO(ELEMENT_TYPE_U4, "System", "UInt32", 4, TYPE_GC_NONE, false, true, false, false, false, false) // 0x09 +TYPEINFO(ELEMENT_TYPE_I8, "System", "Int64", 8, TYPE_GC_NONE, false, true, false, false, false, false) // 0x0a +TYPEINFO(ELEMENT_TYPE_U8, "System", "UInt64", 8, TYPE_GC_NONE, false, true, false, false, false, false) // 0x0b + +TYPEINFO(ELEMENT_TYPE_R4, "System", "Single", 4, TYPE_GC_NONE, false, true, true, false, false, false) // 0x0c +TYPEINFO(ELEMENT_TYPE_R8, "System", "Double", 8, TYPE_GC_NONE, false, true, true, false, false, false) // 0x0d + +TYPEINFO(ELEMENT_TYPE_STRING, "System", "String", TARGET_POINTER_SIZE, TYPE_GC_REF, false, false, false, false, false, false) // 0x0e +TYPEINFO(ELEMENT_TYPE_PTR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_NONE, false, false, false, true, false, false) // 0x0f +TYPEINFO(ELEMENT_TYPE_BYREF, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_BYREF, false, false, false, true, false, false) // 0x10 +TYPEINFO(ELEMENT_TYPE_VALUETYPE, NULL, NULL, NO_SIZE, TYPE_GC_OTHER, false, false, false, false, false, false) // 0x11 +TYPEINFO(ELEMENT_TYPE_CLASS, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_REF, false, false, false, false, false, false) // 0x12 +TYPEINFO(ELEMENT_TYPE_VAR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_OTHER, false, false, false, false, true, false) // 0x13 +TYPEINFO(ELEMENT_TYPE_ARRAY, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_REF, true, false, false, true, false, false) // 0x14 + +TYPEINFO(ELEMENT_TYPE_GENERICINST, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_OTHER, false, false, false, false, false, false) // 0x15 +TYPEINFO(ELEMENT_TYPE_TYPEDBYREF, "System", "TypedReference",2*TARGET_POINTER_SIZE,TYPE_GC_BYREF, false, false, false, false, false, false) // 0x16 +TYPEINFO(ELEMENT_TYPE_VALUEARRAY_UNSUPPORTED, NULL,NULL, NO_SIZE, TYPE_GC_NONE, false, false, false, false, false, false) // 0x17 (unsupported, not in the ECMA spec) + +TYPEINFO(ELEMENT_TYPE_I, "System", "IntPtr", TARGET_POINTER_SIZE, TYPE_GC_NONE, false, true, false, false, false, false) // 0x18 +TYPEINFO(ELEMENT_TYPE_U, "System", "UIntPtr", TARGET_POINTER_SIZE, TYPE_GC_NONE, false, true, false, false, false, false) // 0x19 +TYPEINFO(ELEMENT_TYPE_R_UNSUPPORTED,NULL, NULL, NO_SIZE, TYPE_GC_NONE, false, false, false, false, false, false) // 0x1a (unsupported, not in the ECMA spec) + +TYPEINFO(ELEMENT_TYPE_FNPTR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_NONE, false, false, false, false, false, false) // 0x1b +TYPEINFO(ELEMENT_TYPE_OBJECT, "System", "Object", TARGET_POINTER_SIZE, TYPE_GC_REF, false, false, false, false, false, false) // 0x1c +TYPEINFO(ELEMENT_TYPE_SZARRAY, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_REF, true, false, false, true, false, false) // 0x1d +TYPEINFO(ELEMENT_TYPE_MVAR, NULL, NULL, TARGET_POINTER_SIZE, TYPE_GC_OTHER, false, false, false, false, true, false) // x01e +TYPEINFO(ELEMENT_TYPE_CMOD_REQD, NULL, NULL, 0, TYPE_GC_NONE, false, false, false, false, false, false) // 0x1f +TYPEINFO(ELEMENT_TYPE_CMOD_OPT, NULL, NULL, 0, TYPE_GC_NONE, false, false, false, false, false, false) // 0x20 +TYPEINFO(ELEMENT_TYPE_INTERNAL, NULL, NULL, 0, TYPE_GC_OTHER, false, false, false, false, false, false) // 0x21 + +TYPEINFO(ELEMENT_TYPE_CTARG, NULL, NULL, 8, TYPE_GC_OTHER, false, false, false, false, false, true) // 0x22 diff --git a/src/coreclr/inc/formattype.cpp b/src/coreclr/inc/formattype.cpp index 64d401ffb4d61..16246f330e55b 100644 --- a/src/coreclr/inc/formattype.cpp +++ b/src/coreclr/inc/formattype.cpp @@ -85,6 +85,67 @@ static void appendStrNum(CQuickBytes *out, int num) { appendStr(out, buff); } +static void appendStrBlob(CQuickBytes *out, CorElementType type, PCCOR_SIGNATURE ptr, ULONG len) { + CONTRACTL + { + THROWS; + GC_NOTRIGGER; + } + CONTRACTL_END; + ULONG buffSize = len + 42; + char* buff = new char[buffSize]; + switch (type) + { + case ELEMENT_TYPE_BOOLEAN : + sprintf_s(buff, buffSize, "%s", *(BOOLEAN*)ptr == 1 ? "true" : "false"); + goto APPEND; + case ELEMENT_TYPE_CHAR : + sprintf_s(buff, buffSize, "%hX", *(WCHAR*)ptr); + goto APPEND; + case ELEMENT_TYPE_I1 : + sprintf_s(buff, buffSize, "%hhd", *(int8_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_U1 : + sprintf_s(buff, buffSize, "%hhu", *(uint8_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_I2 : + sprintf_s(buff, buffSize, "%hd", *(uint16_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_U2 : + sprintf_s(buff, buffSize, "%hu", *(uint16_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_I4 : + IN_TARGET_32BIT(case ELEMENT_TYPE_I:) + sprintf_s(buff, buffSize, "%d", *(uint32_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_U4 : + IN_TARGET_32BIT(case ELEMENT_TYPE_U:) + sprintf_s(buff, buffSize, "%u", *(uint32_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_R4 : + sprintf_s(buff, buffSize, "%f", *(float*)ptr); + goto APPEND; + case ELEMENT_TYPE_I8 : + IN_TARGET_64BIT(case ELEMENT_TYPE_I:) + sprintf_s(buff, buffSize, "%lld", *(int64_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_U8 : + IN_TARGET_64BIT(case ELEMENT_TYPE_U:) + sprintf_s(buff, buffSize, "%llu", *(uint64_t*)ptr); + goto APPEND; + case ELEMENT_TYPE_R8 : + sprintf_s(buff, buffSize, "%lf", *(double*)ptr); + goto APPEND; + APPEND: + appendStr(out, buff); + break; + default: + break; + } + + delete []buff; +} + PCCOR_SIGNATURE PrettyPrintSignature( PCCOR_SIGNATURE typePtr, // type to convert, unsigned typeLen, // the length of 'typePtr' @@ -484,6 +545,7 @@ PCCOR_SIGNATURE PrettyPrintType( CQuickBytes tmp; CQuickBytes Appendix; BOOL Reiterate; + BOOL HasData = FALSE; int n; do { @@ -527,6 +589,16 @@ PCCOR_SIGNATURE PrettyPrintType( str = "typedref"; goto APPEND; APPEND: appendStr(out, KEYWORD((char*)str)); + if (HasData) + { + HasData = FALSE; + appendChar(out, '('); + typePtr--; + ULONG len = CorSigUncompressConstTypeArgData(typePtr); + appendStrBlob(out, (CorElementType)typ, typePtr, len); + appendChar(out, ')'); + typePtr += len; + } break; case ELEMENT_TYPE_VALUETYPE : @@ -535,6 +607,10 @@ PCCOR_SIGNATURE PrettyPrintType( case ELEMENT_TYPE_CLASS : str = "class "; goto DO_CLASS; + case ELEMENT_TYPE_CTARG : + Reiterate = TRUE; + HasData = TRUE; + break; DO_CLASS: appendStr(out, KEYWORD((char*)str)); diff --git a/src/coreclr/inc/icorjitinfoimpl_generated.h b/src/coreclr/inc/icorjitinfoimpl_generated.h index 4fd79ef9303c7..b50af60863f4c 100644 --- a/src/coreclr/inc/icorjitinfoimpl_generated.h +++ b/src/coreclr/inc/icorjitinfoimpl_generated.h @@ -363,6 +363,15 @@ void* getArrayInitializationData( CORINFO_FIELD_HANDLE field, uint32_t size) override; +bool isConstValue( + CORINFO_CLASS_HANDLE cls) override; + +uint64_t getConstValue( + CORINFO_CLASS_HANDLE cls) override; + +CORINFO_CLASS_HANDLE getConstValueType( + CORINFO_CLASS_HANDLE cls) override; + CorInfoIsAccessAllowedResult canAccessClass( CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, diff --git a/src/coreclr/inc/jiteeversionguid.h b/src/coreclr/inc/jiteeversionguid.h index 70960ff577ee8..297bf62b70c1c 100644 --- a/src/coreclr/inc/jiteeversionguid.h +++ b/src/coreclr/inc/jiteeversionguid.h @@ -43,11 +43,11 @@ typedef const GUID *LPCGUID; #define GUID_DEFINED #endif // !GUID_DEFINED -constexpr GUID JITEEVersionIdentifier = { /* a2974440-e8ee-4d95-9e6e-799a330be1a0 */ - 0xa2974440, - 0xe8ee, - 0x4d95, - {0x9e, 0x6e, 0x79, 0x9a, 0x33, 0x0b, 0xe1, 0xa0} +constexpr GUID JITEEVersionIdentifier = { /* abb7adbf-5df8-4ada-bac9-3ac6db8a09c5 */ + 0xabb7adbf, + 0x5df8, + 0x4ada, + {0xba, 0xc9, 0x3a, 0xc6, 0xdb, 0x8a, 0x09, 0xc5} }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/coreclr/inc/metadata.h b/src/coreclr/inc/metadata.h index 766893bea17b8..8946536fc5cc9 100644 --- a/src/coreclr/inc/metadata.h +++ b/src/coreclr/inc/metadata.h @@ -1023,7 +1023,7 @@ DECLARE_INTERFACE_(IMDInternalImport, IUnknown) ULONG* pulSequence, // [OUT] Parameter sequence number DWORD* pdwAttr, // [OUT] Type parameter flags (for future use) mdToken *ptOwner, // [OUT] The owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] The kind (TypeDef/Ref/Spec, for future use) + mdToken *ptType, // [OUT] The type (TypeDef/Ref/Spec, for const generics) LPCSTR *szName) PURE; // [OUT] The name __checkReturn diff --git a/src/coreclr/inc/metamodelpub.h b/src/coreclr/inc/metamodelpub.h index b1eb8b961dbc5..8022ab10bd715 100644 --- a/src/coreclr/inc/metamodelpub.h +++ b/src/coreclr/inc/metamodelpub.h @@ -1401,7 +1401,6 @@ class NestedClassRec // Generics - class GenericParamRec { METADATA_FIELDS_PROTECTION: @@ -1409,7 +1408,7 @@ class GenericParamRec USHORT m_Flags; // index; zero = first var public: enum { - + COL_Number, // index; zero = first var COL_Flags, // flags, for future use COL_Owner, // typeDef/methodDef @@ -1417,7 +1416,7 @@ class GenericParamRec COL_COUNT, COL_KEY = COL_Owner }; - + USHORT GetNumber() { LIMITED_METHOD_CONTRACT; @@ -1509,7 +1508,7 @@ class GenericParamConstraintRec enum { COL_Owner, // GenericParam - COL_Constraint, // typeDef/Ref/Spec + COL_Constraint, // typeDef/Ref/Spec, can be masked by genericParamTypeMask COL_COUNT, COL_KEY = COL_Owner }; @@ -1729,20 +1728,21 @@ enum { #undef MiniMdTable // List of MiniMd coded token types. -#define MiniMdCodedTokens() \ - MiniMdCodedToken(TypeDefOrRef) \ - MiniMdCodedToken(HasConstant) \ - MiniMdCodedToken(HasCustomAttribute) \ - MiniMdCodedToken(HasFieldMarshal) \ - MiniMdCodedToken(HasDeclSecurity) \ - MiniMdCodedToken(MemberRefParent) \ - MiniMdCodedToken(HasSemantic) \ - MiniMdCodedToken(MethodDefOrRef) \ - MiniMdCodedToken(MemberForwarded) \ - MiniMdCodedToken(Implementation) \ - MiniMdCodedToken(CustomAttributeType) \ - MiniMdCodedToken(ResolutionScope) \ - MiniMdCodedToken(TypeOrMethodDef) \ +#define MiniMdCodedTokens() \ + MiniMdCodedToken(TypeDefOrRef) \ + MiniMdCodedToken(TypeDefOrRefOrGpType) \ + MiniMdCodedToken(HasConstant) \ + MiniMdCodedToken(HasCustomAttribute) \ + MiniMdCodedToken(HasFieldMarshal) \ + MiniMdCodedToken(HasDeclSecurity) \ + MiniMdCodedToken(MemberRefParent) \ + MiniMdCodedToken(HasSemantic) \ + MiniMdCodedToken(MethodDefOrRef) \ + MiniMdCodedToken(MemberForwarded) \ + MiniMdCodedToken(Implementation) \ + MiniMdCodedToken(CustomAttributeType) \ + MiniMdCodedToken(ResolutionScope) \ + MiniMdCodedToken(TypeOrMethodDef) \ #undef MiniMdCodedToken #define MiniMdCodedToken(x) CDTKN_##x, diff --git a/src/coreclr/inc/sigparser.h b/src/coreclr/inc/sigparser.h index 4446a37e372b5..a8dc6255862e9 100644 --- a/src/coreclr/inc/sigparser.h +++ b/src/coreclr/inc/sigparser.h @@ -160,6 +160,25 @@ class SigParser return hr; } + //------------------------------------------------------------------------ + // Remove one compressed const type argument value (using CorSigUncompressConstTypeArgData) + // from the head of the stream and return it. + //------------------------------------------------------------------------ + __checkReturn + FORCEINLINE HRESULT GetConstTypeArgData(PCCOR_SIGNATURE* pData, uint32_t* pCb) + { + WRAPPER_NO_CONTRACT; + SUPPORTS_DAC; + + uint32_t sizeOfData = 0; + + sizeOfData = CorSigUncompressConstTypeArgData(m_ptr); + SkipBytes(sizeOfData); + if (pCb) *pCb = sizeOfData; + if (pData) *pData = m_ptr; + + return S_OK; + } //------------------------------------------------------------------------- // Remove one byte and return it. @@ -241,6 +260,26 @@ class SigParser return META_E_BAD_SIGNATURE; } + + __checkReturn + FORCEINLINE HRESULT GetConstTypeArg(CorElementType * etype, uint32_t* pcb, PCCOR_SIGNATURE *ppsig) + { + uint32_t cb; + if (SUCCEEDED(PeekElemTypeSize(&cb))) + { + if (SUCCEEDED(GetElemType(etype))) + { + *pcb = cb; + *ppsig = m_ptr; + SkipBytes(cb); + + return S_OK; + } + } + + *etype = ELEMENT_TYPE_END; + return META_E_BAD_SIGNATURE; + } // Inlined version __checkReturn @@ -253,7 +292,8 @@ class SigParser { CorElementType typ = (CorElementType) * m_ptr; - if (typ < ELEMENT_TYPE_CMOD_REQD) // fast path with no modifiers: single byte + if (typ < ELEMENT_TYPE_CMOD_REQD + || typ == ELEMENT_TYPE_CTARG) // fast path with no modifiers: single byte { if (etype != NULL) { @@ -360,7 +400,8 @@ class SigParser { CorElementType typ = (CorElementType) * m_ptr; - if (typ < ELEMENT_TYPE_CMOD_REQD) // fast path with no modifiers: single byte + if (typ < ELEMENT_TYPE_CMOD_REQD + || typ == ELEMENT_TYPE_CTARG) // fast path with no modifiers: single byte { if ((typ == ELEMENT_TYPE_STRING) || (typ == ELEMENT_TYPE_OBJECT)) { @@ -407,6 +448,7 @@ class SigParser *pSize = 0; BYTE bElementType = 0; + CHECK_SIZE: hr = sigTemp.GetByte(&bElementType); if (FAILED(hr)) @@ -464,6 +506,11 @@ class SigParser case ELEMENT_TYPE_VOID: break; + + case ELEMENT_TYPE_CTARG: + // We need to check the next CorElementType + goto CHECK_SIZE; + break; case ELEMENT_TYPE_END: case ELEMENT_TYPE_CMOD_REQD: @@ -773,7 +820,7 @@ class CorTypeInfo unsigned isFloat : 1; unsigned isModifier : 1; unsigned isGenVar : 1; - // 1 more byte here to use for 32-bit + unsigned isConst : 1; }; protected: @@ -888,7 +935,20 @@ class CorTypeInfo return GetTypeInfo_NoThrow(type).isGenVar; } + FORCEINLINE static BOOL IsConstValue(CorElementType type) + { + WRAPPER_NO_CONTRACT; + CorTypeInfoEntry info = GetTypeInfo(type); + return info.isConst; + } + FORCEINLINE static BOOL IsConstValue_NoThrow(CorElementType type) + { + WRAPPER_NO_CONTRACT; + + CorTypeInfoEntry info = GetTypeInfo_NoThrow(type); + return info.isConst; + } FORCEINLINE static BOOL IsArray(CorElementType type) { WRAPPER_NO_CONTRACT; diff --git a/src/coreclr/jit/ICorJitInfo_names_generated.h b/src/coreclr/jit/ICorJitInfo_names_generated.h index fcc982f7b0be6..adbbe26a5c4c0 100644 --- a/src/coreclr/jit/ICorJitInfo_names_generated.h +++ b/src/coreclr/jit/ICorJitInfo_names_generated.h @@ -91,6 +91,9 @@ DEF_CLR_API(isSDArray) DEF_CLR_API(getArrayRank) DEF_CLR_API(getArrayIntrinsicID) DEF_CLR_API(getArrayInitializationData) +DEF_CLR_API(isConstValue) +DEF_CLR_API(getConstValue) +DEF_CLR_API(getConstValueType) DEF_CLR_API(canAccessClass) DEF_CLR_API(printFieldName) DEF_CLR_API(getFieldClass) diff --git a/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp b/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp index 88cca4f6f8cff..4ffe13ae28892 100644 --- a/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp +++ b/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp @@ -859,6 +859,33 @@ void* WrapICorJitInfo::getArrayInitializationData( return temp; } +bool WrapICorJitInfo::isConstValue( + CORINFO_CLASS_HANDLE cls) +{ + API_ENTER(isConstValue); + bool temp = wrapHnd->isConstValue(cls); + API_LEAVE(isConstValue); + return temp; +} + +uint64_t WrapICorJitInfo::getConstValue( + CORINFO_CLASS_HANDLE cls) +{ + API_ENTER(getConstValue); + uint64_t temp = wrapHnd->getConstValue(cls); + API_LEAVE(getConstValue); + return temp; +} + +CORINFO_CLASS_HANDLE WrapICorJitInfo::getConstValueType( + CORINFO_CLASS_HANDLE cls) +{ + API_ENTER(getConstValueType); + CORINFO_CLASS_HANDLE temp = wrapHnd->getConstValueType(cls); + API_LEAVE(getConstValueType); + return temp; +} + CorInfoIsAccessAllowedResult WrapICorJitInfo::canAccessClass( CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, diff --git a/src/coreclr/jit/compiler.h b/src/coreclr/jit/compiler.h index 3c4badb6088b4..3277e4e60ca97 100644 --- a/src/coreclr/jit/compiler.h +++ b/src/coreclr/jit/compiler.h @@ -7917,6 +7917,7 @@ class Compiler // functions exposed on top that have SPMI handling and additional buffer // handling. Note that the strings returned are never truncated here. void eePrintJitType(class StringPrinter* printer, var_types jitType); + void eePrintConstValue(class StringPrinter* printer, CORINFO_CLASS_HANDLE valueType, uint64_t value); void eePrintType(class StringPrinter* printer, CORINFO_CLASS_HANDLE clsHnd, bool includeInstantiation); void eePrintTypeOrJitAlias(class StringPrinter* printer, CORINFO_CLASS_HANDLE clsHnd, bool includeInstantiation); void eePrintMethod(class StringPrinter* printer, diff --git a/src/coreclr/jit/ee_il_dll.hpp b/src/coreclr/jit/ee_il_dll.hpp index c3801d88292f5..a04521ac06293 100644 --- a/src/coreclr/jit/ee_il_dll.hpp +++ b/src/coreclr/jit/ee_il_dll.hpp @@ -206,7 +206,8 @@ inline var_types JITtype2varType(CorInfoType type) // choice places to do with verification, where we use // verification types and CLASS_HANDLEs to track the difference. - TYP_REF, // CORINFO_TYPE_VAR = 0x16, + TYP_REF, // CORINFO_TYPE_VAR = 0x16, + TYP_UNDEF, // CORINFO_TYPE_CTARG = 0x17, }; // spot check to make certain enumerations have not changed @@ -267,7 +268,8 @@ inline var_types JitType2PreciseVarType(CorInfoType type) // choice places to do with verification, where we use // verification types and CLASS_HANDLEs to track the difference. - TYP_REF, // CORINFO_TYPE_VAR = 0x16, + TYP_REF, // CORINFO_TYPE_VAR = 0x16, + TYP_UNDEF, // CORINFO_TYPE_CTARG = 0x17, }; // spot check to make certain enumerations have not changed diff --git a/src/coreclr/jit/eeinterface.cpp b/src/coreclr/jit/eeinterface.cpp index d9852afb9e537..b0dc0defb6f63 100644 --- a/src/coreclr/jit/eeinterface.cpp +++ b/src/coreclr/jit/eeinterface.cpp @@ -93,6 +93,76 @@ void Compiler::eePrintJitType(StringPrinter* printer, var_types jitType) printer->Append(varTypeName(jitType)); } +//------------------------------------------------------------------------ +// eePrintConstValue: +// Print a const value. +// +// Arguments: +// printer - the printer +// valueType - the value type +// value - the value +// +void Compiler::eePrintConstValue(StringPrinter* printer, CORINFO_CLASS_HANDLE valueType, uint64_t value) +{ + eePrintType(printer, valueType, true); + printer->Append("("); + char buffer[64]; + switch (info.compCompHnd->asCorInfoType(valueType)) + { + case CORINFO_TYPE_BOOL: + printer->Append(*(uint8_t*)&value == 0 ? "true" : "false"); + break; + case CORINFO_TYPE_CHAR: + sprintf_s(buffer, 64, "%c", *(char*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_BYTE: + sprintf_s(buffer, 64, "%hhd", *(int8_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_UBYTE: + sprintf_s(buffer, 64, "%hhu", *(uint8_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_SHORT: + sprintf_s(buffer, 64, "%hd", *(int16_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_USHORT: + sprintf_s(buffer, 64, "%hu", *(uint16_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_INT: + sprintf_s(buffer, 64, "%d", *(int32_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_UINT: + sprintf_s(buffer, 64, "%u", *(uint32_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_LONG: + sprintf_s(buffer, 64, "%lld", *(int64_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_ULONG: + sprintf_s(buffer, 64, "%llu", *(uint64_t*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_FLOAT: + sprintf_s(buffer, 64, "%f", *(float*)&value); + printer->Append(buffer); + break; + case CORINFO_TYPE_DOUBLE: + sprintf_s(buffer, 64, "%lf", *(double*)&value); + printer->Append(buffer); + break; + default: + _ASSERTE(!"UNKNOWN CONST VALUE TYPE"); + break; + } + printer->Append(")"); +} + //------------------------------------------------------------------------ // eeAppendPrint: // Append the output of one of the JIT-EE 'print' functions to a StringPrinter. @@ -203,6 +273,11 @@ void Compiler::eePrintTypeOrJitAlias(StringPrinter* printer, CORINFO_CLASS_HANDL { eePrintType(printer, clsHnd, includeInstantiation); } + else if (typ == CORINFO_TYPE_CTARG) + { + eePrintConstValue(printer, info.compCompHnd->getConstValueType(clsHnd), + info.compCompHnd->getConstValue(clsHnd)); + } else { eePrintJitType(printer, JitType2PreciseVarType(typ)); diff --git a/src/coreclr/jit/importer.cpp b/src/coreclr/jit/importer.cpp index 995068c10aef6..70a4a14ffa548 100644 --- a/src/coreclr/jit/importer.cpp +++ b/src/coreclr/jit/importer.cpp @@ -9706,6 +9706,47 @@ void Compiler::impImportBlockCode(BasicBlock* block) lastLoadToken = codeAddr; _impResolveToken(CORINFO_TOKENKIND_Ldtoken); + if (resolvedToken.isConstValue) + { + switch (resolvedToken.constValueType) + { + case CORINFO_TYPE_BOOL: + case CORINFO_TYPE_BYTE: + case CORINFO_TYPE_UBYTE: + cval.intVal = (int)*(uint8_t*)&resolvedToken.constValue; + goto PUSH_I4CON; + case CORINFO_TYPE_CHAR: + case CORINFO_TYPE_SHORT: + case CORINFO_TYPE_USHORT: + cval.intVal = (int)*(uint16_t*)&resolvedToken.constValue; + goto PUSH_I4CON; + case CORINFO_TYPE_INT: + case CORINFO_TYPE_UINT: + cval.intVal = (int)*(uint32_t*)&resolvedToken.constValue; + goto PUSH_I4CON; + case CORINFO_TYPE_LONG: + case CORINFO_TYPE_ULONG: + cval.lngVal = (long)resolvedToken.constValue; + JITDUMP(" 0x%016llx", cval.lngVal); + impPushOnStack(gtNewLconNode(cval.lngVal), typeInfo(TYP_LONG)); + break; + case CORINFO_TYPE_FLOAT: + cval.dblVal = *(float*)&resolvedToken.constValue; + JITDUMP(" %#.17g", cval.dblVal); + impPushOnStack(gtNewDconNode(cval.dblVal, TYP_FLOAT), typeInfo(TYP_DOUBLE)); + break; + case CORINFO_TYPE_DOUBLE: + cval.dblVal = *(double*)&resolvedToken.constValue; + JITDUMP(" %#.17g", cval.dblVal); + impPushOnStack(gtNewDconNode(cval.dblVal), typeInfo(TYP_DOUBLE)); + break; + default: + _ASSERTE(!"UNKONWN CONST TYPE ARG"); + break; + } + break; + } + tokenType = info.compCompHnd->getTokenTypeAsHandle(&resolvedToken); op1 = impTokenToHandle(&resolvedToken, nullptr, true); diff --git a/src/coreclr/md/compiler/emit.cpp b/src/coreclr/md/compiler/emit.cpp index f2df925feaa8b..fa4c51310c965 100644 --- a/src/coreclr/md/compiler/emit.cpp +++ b/src/coreclr/md/compiler/emit.cpp @@ -1638,7 +1638,7 @@ STDMETHODIMP RegMeta::DefineGenericParam( // S_OK or error. ULONG ulParamSeq, // [IN] Index of the type parameter DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szName, // [IN] Name - DWORD reserved, // [IN] For future use + mdToken tkType, // [IN] Type mdToken rtkConstraints[], // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) mdGenericParam *pgp) // [OUT] Put GenericParam token here { @@ -1654,9 +1654,6 @@ STDMETHODIMP RegMeta::DefineGenericParam( // S_OK or error. IfFailGo(m_pStgdb->m_MiniMd.PreUpdate()); - if (reserved != 0) - IfFailGo(META_E_BAD_INPUT_PARAMETER); - // See if this version of the metadata can do Generics if (!m_pStgdb->m_MiniMd.SupportsGenerics()) IfFailGo(CLDB_E_INCOMPATIBLE); @@ -1707,7 +1704,7 @@ STDMETHODIMP RegMeta::DefineGenericParam( // S_OK or error. } // 2. Set its props - IfFailGo(_SetGenericParamProps(tkRet, pGenericParam, dwParamFlags, szName, reserved ,rtkConstraints)); + IfFailGo(_SetGenericParamProps(tkRet, pGenericParam, dwParamFlags, szName, tkType ,rtkConstraints)); IfFailGo(UpdateENCLog(tkRet)); } else @@ -1729,27 +1726,24 @@ STDMETHODIMP RegMeta::SetGenericParamProps( // S_OK or error. mdGenericParam gp, // [IN] GenericParam DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szName, // [IN] Optional name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) - mdToken rtkConstraints[]) // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) + mdToken tkType, // [IN] Type + mdToken rtkConstraints[]) // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) { #ifdef FEATURE_METADATA_EMIT_IN_DEBUGGER return E_NOTIMPL; #else //!FEATURE_METADATA_EMIT_IN_DEBUGGER HRESULT hr = S_OK; - if (reserved != 0) - IfFailGo(META_E_BAD_INPUT_PARAMETER); - // See if this version of the metadata can do Generics if (!m_pStgdb->m_MiniMd.SupportsGenerics()) IfFailGo(CLDB_E_INCOMPATIBLE); - + if (TypeFromToken(gp) == mdtGenericParam) { GenericParamRec *pGenericParam; IfFailGo(m_pStgdb->m_MiniMd.GetGenericParamRecord(RidFromToken(gp), &pGenericParam)); - IfFailGo(_SetGenericParamProps(gp,pGenericParam,dwParamFlags,szName,reserved,rtkConstraints)); + IfFailGo(_SetGenericParamProps(gp,pGenericParam,dwParamFlags,szName,tkType,rtkConstraints)); IfFailGo(UpdateENCLog(gp)); } else @@ -1768,7 +1762,7 @@ HRESULT RegMeta::_SetGenericParamProps( // S_OK or error. GenericParamRec *pGenericParam, // [IN] GenericParam record ptr DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szName, // [IN] Optional name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) + mdToken tkType, // [IN] Optional type mdToken rtkConstraints[]) // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) { #ifdef FEATURE_METADATA_EMIT_IN_DEBUGGER @@ -1787,10 +1781,10 @@ HRESULT RegMeta::_SetGenericParamProps( // S_OK or error. if (dwParamFlags != (DWORD) -1) pGenericParam->SetFlags((USHORT)dwParamFlags); - // If there is a new array of constraints, apply it. - if (rtkConstraints != NULL) + // If there is a type or a new array of constraints, apply it. + if (rtkConstraints != NULL || RidFromToken(tkType) != 0) { - //Clear existing constraints + //Clear existing type and constraints GenericParamConstraintRec* pGPCRec; RID ridGPC; RID rid; @@ -1808,19 +1802,35 @@ HRESULT RegMeta::_SetGenericParamProps( // S_OK or error. IfFailGo(UpdateENCLog(TokenFromRid(ridGPC,mdtGenericParamConstraint))); } - //Emit new constraints - mdToken* ptk; - for (ptk = rtkConstraints; (ptk != NULL)&&(RidFromToken(*ptk)!=0); ptk++) + if (RidFromToken(tkType) != 0) { + //Emit type IfFailGo(m_pStgdb->m_MiniMd.AddGenericParamConstraintRecord(&pGPCRec, &ridGPC)); IfFailGo(m_pStgdb->m_MiniMd.PutCol(TBL_GenericParamConstraint, GenericParamConstraintRec::COL_Owner, pGPCRec, RidFromToken(tkGP))); IfFailGo(m_pStgdb->m_MiniMd.PutToken(TBL_GenericParamConstraint, GenericParamConstraintRec::COL_Constraint, - pGPCRec, *ptk)); + pGPCRec, (tkType & ~mdtTypeSpec) | mdtGenericParamType)); IfFailGo(UpdateENCLog(TokenFromRid(ridGPC,mdtGenericParamConstraint))); } + + if (rtkConstraints != NULL) + { + //Emit new constraints + mdToken* ptk; + for (ptk = rtkConstraints; (ptk != NULL)&&(RidFromToken(*ptk)!=0); ptk++) + { + IfFailGo(m_pStgdb->m_MiniMd.AddGenericParamConstraintRecord(&pGPCRec, &ridGPC)); + IfFailGo(m_pStgdb->m_MiniMd.PutCol(TBL_GenericParamConstraint, + GenericParamConstraintRec::COL_Owner, + pGPCRec, RidFromToken(tkGP))); + IfFailGo(m_pStgdb->m_MiniMd.PutToken(TBL_GenericParamConstraint, + GenericParamConstraintRec::COL_Constraint, + pGPCRec, *ptk)); + IfFailGo(UpdateENCLog(TokenFromRid(ridGPC,mdtGenericParamConstraint))); + } + } } } else diff --git a/src/coreclr/md/compiler/import.cpp b/src/coreclr/md/compiler/import.cpp index 9c7d4c5a01b8c..3b0d8dc2f43cd 100644 --- a/src/coreclr/md/compiler/import.cpp +++ b/src/coreclr/md/compiler/import.cpp @@ -2816,7 +2816,7 @@ HRESULT RegMeta::GetGenericParamProps( // S_OK or error. ULONG* pulSequence, // [OUT] Parameter sequence number DWORD* pdwAttr, // [OUT] Type parameter flags (for future use) mdToken *ptOwner, // [OUT] The owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] The kind (TypeDef/Ref/Spec, for future use) + mdToken *ptType, // [OUT] The type (TypeDef/Ref/Spec, for const generics use) _Out_writes_opt_ (cchName) LPWSTR szName, // [OUT] The name ULONG cchName, // [IN] Size of name buffer ULONG *pchName) // [OUT] Actual size of name @@ -2846,6 +2846,22 @@ HRESULT RegMeta::GetGenericParamProps( // S_OK or error. *pdwAttr = pMiniMd->getFlagsOfGenericParam(pGenericParamRec); if (ptOwner) *ptOwner = pMiniMd->getOwnerOfGenericParam(pGenericParamRec); + if (ptType) + { + *ptType = NULL; + RID rid; + IfFailGo(pMiniMd->getGenericParamConstraintsForGenericParam(RidFromToken(rd), NULL, &rid)); + if (rid != 0) + { + GenericParamConstraintRec* gpcRec; + IfFailGo(pMiniMd->GetGenericParamConstraintRecord(rid, &gpcRec)); + mdToken tkType = pMiniMd->getConstraintOfGenericParamConstraint(gpcRec); + if (!IsNilToken(tkType) && (TypeFromToken(tkType) == mdtGenericParamType)) + { + *ptType = (tkType & ~mdtGenericParamType) | mdtTypeSpec; + } + } + } // This call has to be last to set 'hr', so CLDB_S_TRUNCATION is not rewritten with S_OK if (pchName || szName) IfFailGo(pMiniMd->getNameOfGenericParam(pGenericParamRec, szName, cchName, pchName)); diff --git a/src/coreclr/md/compiler/regmeta.h b/src/coreclr/md/compiler/regmeta.h index 78a854b778b0f..be7f075f8b816 100644 --- a/src/coreclr/md/compiler/regmeta.h +++ b/src/coreclr/md/compiler/regmeta.h @@ -601,7 +601,7 @@ class RegMeta : ULONG *pulParamSeq, // [OUT] Index of the type parameter DWORD *pdwParamFlags, // [OUT] Flags, for future use (e.g. variance) mdToken *ptOwner, // [OUT] Owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] For future use (e.g. non-type parameters) + mdToken *ptType, // [OUT] Type (TypeDefOrRef) _Out_writes_opt_ (cchName) LPWSTR wzname, // [OUT] Put name here ULONG cchName, // [IN] Size of buffer ULONG *pchName); // [OUT] Put size of name (wide chars) here. @@ -1082,7 +1082,7 @@ class RegMeta : ULONG ulParamSeq, // [IN] Index of the type parameter DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szname, // [IN] Name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) + mdToken tkType, // [IN] Type mdToken rtkConstraints[], // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) mdGenericParam *pgp); // [OUT] Put GenericParam token here @@ -1090,7 +1090,7 @@ class RegMeta : mdGenericParam gp, // [IN] GenericParam DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szName, // [IN] Optional name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) + mdToken tkType, // [IN] Type mdToken rtkConstraints[]); // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) #ifdef FEATURE_METADATA_EMIT_PORTABLE_PDB @@ -1682,7 +1682,7 @@ class RegMeta : GenericParamRec *pGenericParam, // [IN] GenericParam record ptr DWORD dwParamFlags, // [IN] Flags, for future use (e.g. variance) LPCWSTR szName, // [IN] Optional name - DWORD reserved, // [IN] For future use (e.g. non-type parameters) + mdToken tkType, // [IN] Optional type mdToken rtkConstraints[]); // [IN] Array of type constraints (TypeDef,TypeRef,TypeSpec) HRESULT _SetTypeDefProps( // S_OK or error. diff --git a/src/coreclr/md/enc/mdinternalrw.cpp b/src/coreclr/md/enc/mdinternalrw.cpp index 487d256f8de0f..fb9bf75df1883 100644 --- a/src/coreclr/md/enc/mdinternalrw.cpp +++ b/src/coreclr/md/enc/mdinternalrw.cpp @@ -3238,7 +3238,7 @@ HRESULT MDInternalRW::GetGenericParamProps( // S_OK or error. ULONG* pulSequence, // [OUT] Parameter sequence number DWORD* pdwAttr, // [OUT] Type parameter flags (for future use) mdToken *ptOwner, // [OUT] The owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] The kind (TypeDef/Ref/Spec, for future use) + mdToken *ptType, // [OUT] The type (TypeDef/Ref/Spec, for const generics) LPCSTR *szName) // [OUT] The name { HRESULT hr = NOERROR; @@ -3260,6 +3260,22 @@ HRESULT MDInternalRW::GetGenericParamProps( // S_OK or error. *pdwAttr = m_pStgdb->m_MiniMd.getFlagsOfGenericParam(pGenericParamRec); if (ptOwner) *ptOwner = m_pStgdb->m_MiniMd.getOwnerOfGenericParam(pGenericParamRec); + if (ptType) + { + *ptType = NULL; + RID rid; + IfFailGo(m_pStgdb->m_MiniMd.getGenericParamConstraintsForGenericParam(RidFromToken(rd), NULL, &rid)); + if (rid != 0) + { + GenericParamConstraintRec* gpcRec; + IfFailGo(m_pStgdb->m_MiniMd.GetGenericParamConstraintRecord(rid, &gpcRec)); + mdToken tkType = m_pStgdb->m_MiniMd.getConstraintOfGenericParamConstraint(gpcRec); + if (!IsNilToken(tkType) && (TypeFromToken(tkType) == mdtGenericParamType)) + { + *ptType = (tkType & ~mdtGenericParamType) | mdtTypeSpec; + } + } + } if (szName != NULL) { IfFailGo(m_pStgdb->m_MiniMd.getNameOfGenericParam(pGenericParamRec, szName)); diff --git a/src/coreclr/md/enc/metamodelrw.cpp b/src/coreclr/md/enc/metamodelrw.cpp index ff01a4dc30aed..dab95f1b1df42 100644 --- a/src/coreclr/md/enc/metamodelrw.cpp +++ b/src/coreclr/md/enc/metamodelrw.cpp @@ -310,10 +310,14 @@ ULONG CMiniMdRW::GetTableForToken( // Table index, or -1. mdToken tkn) // Token to find. { ULONG type = TypeFromToken(tkn); - // Get the type -- if a string, no associated table. if (type >= mdtString) return (ULONG) -1; + // Type of generic param is TypeSpec + if (type == mdtGenericParamType) + { + type = mdtTypeSpec; + } // Table number is same as high-byte of token. ULONG ixTbl = type >> 24; // Make sure. diff --git a/src/coreclr/md/inc/mdinternalrw.h b/src/coreclr/md/inc/mdinternalrw.h index 144d63b118995..a5e86af495407 100644 --- a/src/coreclr/md/inc/mdinternalrw.h +++ b/src/coreclr/md/inc/mdinternalrw.h @@ -547,7 +547,7 @@ class MDInternalRW : public IMDInternalImportENC, public IMDCommon ULONG* pulSequence, // [OUT] Parameter sequence number DWORD* pdwAttr, // [OUT] Type parameter flags (for future use) mdToken *ptOwner, // [OUT] The owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] The kind (TypeDef/Ref/Spec, for future use) + mdToken *ptType, // [OUT] The type (TypeDef/Ref/Spec, for const generics) LPCSTR *szName); // [OUT] The name __checkReturn diff --git a/src/coreclr/md/inc/metamodel.h b/src/coreclr/md/inc/metamodel.h index da47a62e7f36b..6b8e5978a8ce7 100644 --- a/src/coreclr/md/inc/metamodel.h +++ b/src/coreclr/md/inc/metamodel.h @@ -49,9 +49,10 @@ typedef enum MetadataVersion { MDVersion1 = 0x00000001, MDVersion2 = 0x00000002, + MDVersion3 = 0x00000003, // @TODO - this value should be updated when we increase the version number - MDDefaultVersion = 0x00000002 + MDDefaultVersion = 0x00000003 } MetadataVersion; @@ -554,6 +555,7 @@ class CMiniMdBase : public IMetaModelCommonRO // use that value to index into an array of token types. //***************************************************************************** static const mdToken mdtTypeDefOrRef[3]; + static const mdToken mdtTypeDefOrRefOrGpType[4]; static const mdToken mdtHasConstant[3]; static const mdToken mdtHasCustomAttribute[24]; static const mdToken mdtHasFieldMarshal[2]; @@ -1994,7 +1996,7 @@ template class CMiniMdTemplate : public CMiniMdBase //GenericParamConstraintRec mdToken _GETTKN(GenericParamConstraint,Owner,mdtGenericParam); - mdToken _GETCDTKN(GenericParamConstraint,Constraint,mdtTypeDefOrRef); + mdToken _GETCDTKN(GenericParamConstraint,Constraint,mdtTypeDefOrRefOrGpType); BOOL SupportsGenerics() { diff --git a/src/coreclr/md/runtime/mdinternalro.cpp b/src/coreclr/md/runtime/mdinternalro.cpp index 96d7255848552..0e42e27706ebc 100644 --- a/src/coreclr/md/runtime/mdinternalro.cpp +++ b/src/coreclr/md/runtime/mdinternalro.cpp @@ -2464,8 +2464,8 @@ HRESULT MDInternalRO::GetGenericParamProps( // S_OK or error. ULONG* pulSequence, // [OUT] Parameter sequence number DWORD* pdwAttr, // [OUT] Type parameter flags (for future use) mdToken *ptOwner, // [OUT] The owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] The kind (TypeDef/Ref/Spec, for future use) - LPCSTR *szName) // [OUT] The name + mdToken *ptType, // [OUT] Type (const generic parameter) + LPCSTR *szName) // [OUT] The name { HRESULT hr = NOERROR; GenericParamRec * pGenericParamRec = NULL; @@ -2488,6 +2488,22 @@ HRESULT MDInternalRO::GetGenericParamProps( // S_OK or error. *pdwAttr = m_LiteWeightStgdb.m_MiniMd.getFlagsOfGenericParam(pGenericParamRec); if (ptOwner) *ptOwner = m_LiteWeightStgdb.m_MiniMd.getOwnerOfGenericParam(pGenericParamRec); + if (ptType) + { + *ptType = NULL; + RID rid; + IfFailGo(m_LiteWeightStgdb.m_MiniMd.getGenericParamConstraintsForGenericParam(RidFromToken(rd), NULL, &rid)); + if (rid != 0) + { + GenericParamConstraintRec* gpcRec; + IfFailGo(m_LiteWeightStgdb.m_MiniMd.GetGenericParamConstraintRecord(rid, &gpcRec)); + mdToken tkType = m_LiteWeightStgdb.m_MiniMd.getConstraintOfGenericParamConstraint(gpcRec); + if (!IsNilToken(tkType) && (TypeFromToken(tkType) == mdtGenericParamType)) + { + *ptType = (tkType & ~mdtGenericParamType) | mdtTypeSpec; + } + } + } if (szName != NULL) { IfFailGo(m_LiteWeightStgdb.m_MiniMd.getNameOfGenericParam(pGenericParamRec, szName)); diff --git a/src/coreclr/md/runtime/mdinternalro.h b/src/coreclr/md/runtime/mdinternalro.h index b76c2f4067226..0e2b11ccbe714 100644 --- a/src/coreclr/md/runtime/mdinternalro.h +++ b/src/coreclr/md/runtime/mdinternalro.h @@ -534,7 +534,7 @@ class MDInternalRO : public IMDInternalImport, IMDCommon ULONG* pulSequence, // [OUT] Parameter sequence number DWORD* pdwAttr, // [OUT] Type parameter flags (for future use) mdToken *ptOwner, // [OUT] The owner (TypeDef or MethodDef) - DWORD *reserved, // [OUT] The kind (TypeDef/Ref/Spec, for future use) + mdToken *ptType, // [OUT] The Type (TypeDef/Ref/Spec, for const generics) LPCSTR *szName); // [OUT] The name __checkReturn diff --git a/src/coreclr/md/runtime/metamodel.cpp b/src/coreclr/md/runtime/metamodel.cpp index 3cbc82b6a50a7..80deb518ae308 100644 --- a/src/coreclr/md/runtime/metamodel.cpp +++ b/src/coreclr/md/runtime/metamodel.cpp @@ -109,8 +109,6 @@ const CMiniTableDefEx g_Tables[TBL_COUNT] = { // Define a table descriptor for the obsolete v1.0 GenericParam table definition. const CMiniTableDefEx g_Table_GenericParamV1_1 = { { rGenericParamV1_1Cols, ARRAY_SIZE(rGenericParamV1_1Cols), GenericParamV1_1Rec::COL_KEY, 0 }, rGenericParamV1_1ColNames, "GenericParamV1_"}; - - // Define the array of Ptr Tables. This is initialized to TBL_COUNT here. // The correct values will be set in the constructor for MiniMdRW. #undef MiniMdTable @@ -144,6 +142,11 @@ CMiniMdSchema::InitNew( m_major = METAMODEL_MAJOR_VER; m_minor = METAMODEL_MINOR_VER; } + else if (mdVersion == MDVersion3) + { + m_major = METAMODEL_MAJOR_VER; + m_minor = METAMODEL_MINOR_VER; + } else { return E_INVALIDARG; @@ -318,6 +321,13 @@ const mdToken CMiniMdBase::mdtTypeDefOrRef[3] = { mdtTypeSpec }; +const mdToken CMiniMdBase::mdtTypeDefOrRefOrGpType[4] = { + mdtTypeDef, + mdtTypeRef, + mdtTypeSpec, + mdtGenericParamType +}; + // This array needs to be ordered the same as the source tables are processed (currently // {field, param, property}) for binary search. const mdToken CMiniMdBase::mdtHasConstant[3] = { diff --git a/src/coreclr/md/runtime/metamodelcolumndefs.h b/src/coreclr/md/runtime/metamodelcolumndefs.h index 6790252d82553..06ed976745a60 100644 --- a/src/coreclr/md/runtime/metamodelcolumndefs.h +++ b/src/coreclr/md/runtime/metamodelcolumndefs.h @@ -394,7 +394,7 @@ // GenericParamConstraint SCHEMA_TABLE_START(GenericParamConstraint) SCHEMA_ITEM_RID(GenericParamConstraint, Owner, GenericParam) - SCHEMA_ITEM_CDTKN(GenericParamConstraint, Constraint, TypeDefOrRef) + SCHEMA_ITEM_CDTKN(GenericParamConstraint, Constraint, TypeDefOrRefOrGpType) SCHEMA_TABLE_END(GenericParamConstraint) #ifdef FEATURE_METADATA_EMIT_PORTABLE_PDB diff --git a/src/coreclr/tools/Common/Internal/Runtime/CorConstants.cs b/src/coreclr/tools/Common/Internal/Runtime/CorConstants.cs index 9754321213b9d..211c4368e9295 100644 --- a/src/coreclr/tools/Common/Internal/Runtime/CorConstants.cs +++ b/src/coreclr/tools/Common/Internal/Runtime/CorConstants.cs @@ -36,6 +36,7 @@ public enum CorElementType : byte ELEMENT_TYPE_MVAR = 30, ELEMENT_TYPE_CMOD_REQD = 31, ELEMENT_TYPE_CMOD_OPT = 32, + ELEMENT_TYPE_CTARG = 34, // ZapSig encoding for ELEMENT_TYPE_VAR and ELEMENT_TYPE_MVAR. It is always followed // by the RID of a GenericParam token, encoded as a compressed integer. diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs b/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs index 9d98650b91bbb..a2e326dfda9bb 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs @@ -1747,6 +1747,9 @@ private void resolveToken(ref CORINFO_RESOLVED_TOKEN pResolvedToken) pResolvedToken.hClass = null; pResolvedToken.hMethod = null; pResolvedToken.hField = null; + pResolvedToken.isConstValue = false; + pResolvedToken.constValueType = CorInfoType.CORINFO_TYPE_UNDEF; + pResolvedToken.constValue = 0; #if READYTORUN TypeDesc owningType = methodIL.OwningMethod.GetTypicalMethodDefinition().OwningType; @@ -2997,6 +3000,33 @@ private CorInfoIsAccessAllowedResult canAccessClass(ref CORINFO_RESOLVED_TOKEN p return CorInfoIsAccessAllowedResult.CORINFO_ACCESS_ALLOWED; } +#pragma warning disable CA1822 // Mark members as static + private bool isConstValue(CORINFO_CLASS_STRUCT_* cls) +#pragma warning restore CA1822 // Mark members as static + { + // Implemented for JIT only for now. + + return false; + } + +#pragma warning disable CA1822 // Mark members as static + private ulong getConstValue(CORINFO_CLASS_STRUCT_* cls) +#pragma warning restore CA1822 // Mark members as static + { + // Implemented for JIT only for now. + + return 0; + } + +#pragma warning disable CA1822 // Mark members as static + private CORINFO_CLASS_STRUCT_* getConstValueType(CORINFO_CLASS_STRUCT_* cls) +#pragma warning restore CA1822 // Mark members as static + { + // Implemented for JIT only for now. + + return (CORINFO_CLASS_STRUCT_*)0; + } + private nuint printFieldName(CORINFO_FIELD_STRUCT_* fld, byte* buffer, nuint bufferSize, nuint* requiredBufferSize) { FieldDesc field = HandleToObject(fld); diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs b/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs index 8d467b5880d9b..4be1acdf8b369 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs @@ -1300,6 +1300,51 @@ private static CorInfoArrayIntrinsic _getArrayIntrinsicID(IntPtr thisHandle, Int } } + [UnmanagedCallersOnly] + private static byte _isConstValue(IntPtr thisHandle, IntPtr* ppException, CORINFO_CLASS_STRUCT_* cls) + { + var _this = GetThis(thisHandle); + try + { + return _this.isConstValue(cls) ? (byte)1 : (byte)0; + } + catch (Exception ex) + { + *ppException = _this.AllocException(ex); + return default; + } + } + + [UnmanagedCallersOnly] + private static ulong _getConstValue(IntPtr thisHandle, IntPtr* ppException, CORINFO_CLASS_STRUCT_* cls) + { + var _this = GetThis(thisHandle); + try + { + return _this.getConstValue(cls); + } + catch (Exception ex) + { + *ppException = _this.AllocException(ex); + return default; + } + } + + [UnmanagedCallersOnly] + private static CORINFO_CLASS_STRUCT_* _getConstValueType(IntPtr thisHandle, IntPtr* ppException, CORINFO_CLASS_STRUCT_* cls) + { + var _this = GetThis(thisHandle); + try + { + return _this.getConstValueType(cls); + } + catch (Exception ex) + { + *ppException = _this.AllocException(ex); + return default; + } + } + [UnmanagedCallersOnly] private static CorInfoIsAccessAllowedResult _canAccessClass(IntPtr thisHandle, IntPtr* ppException, CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_STRUCT_* callerHandle, CORINFO_HELPER_DESC* pAccessHelper) { @@ -2522,7 +2567,7 @@ private static uint _getJitFlags(IntPtr thisHandle, IntPtr* ppException, CORJIT_ private static IntPtr GetUnmanagedCallbacks() { - void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 170); + void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 173); callbacks[0] = (delegate* unmanaged)&_isIntrinsic; callbacks[1] = (delegate* unmanaged)&_getMethodAttribs; @@ -2611,89 +2656,92 @@ private static IntPtr GetUnmanagedCallbacks() callbacks[84] = (delegate* unmanaged)&_getArrayRank; callbacks[85] = (delegate* unmanaged)&_getArrayIntrinsicID; callbacks[86] = (delegate* unmanaged)&_getArrayInitializationData; - callbacks[87] = (delegate* unmanaged)&_canAccessClass; - callbacks[88] = (delegate* unmanaged)&_printFieldName; - callbacks[89] = (delegate* unmanaged)&_getFieldClass; - callbacks[90] = (delegate* unmanaged)&_getFieldType; - callbacks[91] = (delegate* unmanaged)&_getFieldOffset; - callbacks[92] = (delegate* unmanaged)&_getFieldInfo; - callbacks[93] = (delegate* unmanaged)&_getThreadLocalFieldInfo; - callbacks[94] = (delegate* unmanaged)&_getThreadLocalStaticBlocksInfo; - callbacks[95] = (delegate* unmanaged)&_isFieldStatic; - callbacks[96] = (delegate* unmanaged)&_getArrayOrStringLength; - callbacks[97] = (delegate* unmanaged)&_getBoundaries; - callbacks[98] = (delegate* unmanaged)&_setBoundaries; - callbacks[99] = (delegate* unmanaged)&_getVars; - callbacks[100] = (delegate* unmanaged)&_setVars; - callbacks[101] = (delegate* unmanaged)&_reportRichMappings; - callbacks[102] = (delegate* unmanaged)&_allocateArray; - callbacks[103] = (delegate* unmanaged)&_freeArray; - callbacks[104] = (delegate* unmanaged)&_getArgNext; - callbacks[105] = (delegate* unmanaged)&_getArgType; - callbacks[106] = (delegate* unmanaged)&_getExactClasses; - callbacks[107] = (delegate* unmanaged)&_getArgClass; - callbacks[108] = (delegate* unmanaged)&_getHFAType; - callbacks[109] = (delegate* unmanaged)&_runWithErrorTrap; - callbacks[110] = (delegate* unmanaged)&_runWithSPMIErrorTrap; - callbacks[111] = (delegate* unmanaged)&_getEEInfo; - callbacks[112] = (delegate* unmanaged)&_getJitTimeLogFilename; - callbacks[113] = (delegate* unmanaged)&_getMethodDefFromMethod; - callbacks[114] = (delegate* unmanaged)&_printMethodName; - callbacks[115] = (delegate* unmanaged)&_getMethodNameFromMetadata; - callbacks[116] = (delegate* unmanaged)&_getMethodHash; - callbacks[117] = (delegate* unmanaged)&_getSystemVAmd64PassStructInRegisterDescriptor; - callbacks[118] = (delegate* unmanaged)&_getLoongArch64PassStructInRegisterFlags; - callbacks[119] = (delegate* unmanaged)&_getRISCV64PassStructInRegisterFlags; - callbacks[120] = (delegate* unmanaged)&_getThreadTLSIndex; - callbacks[121] = (delegate* unmanaged)&_getAddrOfCaptureThreadGlobal; - callbacks[122] = (delegate* unmanaged)&_getHelperFtn; - callbacks[123] = (delegate* unmanaged)&_getFunctionEntryPoint; - callbacks[124] = (delegate* unmanaged)&_getFunctionFixedEntryPoint; - callbacks[125] = (delegate* unmanaged)&_getMethodSync; - callbacks[126] = (delegate* unmanaged)&_getLazyStringLiteralHelper; - callbacks[127] = (delegate* unmanaged)&_embedModuleHandle; - callbacks[128] = (delegate* unmanaged)&_embedClassHandle; - callbacks[129] = (delegate* unmanaged)&_embedMethodHandle; - callbacks[130] = (delegate* unmanaged)&_embedFieldHandle; - callbacks[131] = (delegate* unmanaged)&_embedGenericHandle; - callbacks[132] = (delegate* unmanaged)&_getLocationOfThisType; - callbacks[133] = (delegate* unmanaged)&_getAddressOfPInvokeTarget; - callbacks[134] = (delegate* unmanaged)&_GetCookieForPInvokeCalliSig; - callbacks[135] = (delegate* unmanaged)&_canGetCookieForPInvokeCalliSig; - callbacks[136] = (delegate* unmanaged)&_getJustMyCodeHandle; - callbacks[137] = (delegate* unmanaged)&_GetProfilingHandle; - callbacks[138] = (delegate* unmanaged)&_getCallInfo; - callbacks[139] = (delegate* unmanaged)&_getClassDomainID; - callbacks[140] = (delegate* unmanaged)&_getStaticFieldContent; - callbacks[141] = (delegate* unmanaged)&_getObjectContent; - callbacks[142] = (delegate* unmanaged)&_getStaticFieldCurrentClass; - callbacks[143] = (delegate* unmanaged)&_getVarArgsHandle; - callbacks[144] = (delegate* unmanaged)&_canGetVarArgsHandle; - callbacks[145] = (delegate* unmanaged)&_constructStringLiteral; - callbacks[146] = (delegate* unmanaged)&_emptyStringLiteral; - callbacks[147] = (delegate* unmanaged)&_getFieldThreadLocalStoreID; - callbacks[148] = (delegate* unmanaged)&_GetDelegateCtor; - callbacks[149] = (delegate* unmanaged)&_MethodCompileComplete; - callbacks[150] = (delegate* unmanaged)&_getTailCallHelpers; - callbacks[151] = (delegate* unmanaged)&_convertPInvokeCalliToCall; - callbacks[152] = (delegate* unmanaged)&_notifyInstructionSetUsage; - callbacks[153] = (delegate* unmanaged)&_updateEntryPointForTailCall; - callbacks[154] = (delegate* unmanaged)&_allocMem; - callbacks[155] = (delegate* unmanaged)&_reserveUnwindInfo; - callbacks[156] = (delegate* unmanaged)&_allocUnwindInfo; - callbacks[157] = (delegate* unmanaged)&_allocGCInfo; - callbacks[158] = (delegate* unmanaged)&_setEHcount; - callbacks[159] = (delegate* unmanaged)&_setEHinfo; - callbacks[160] = (delegate* unmanaged)&_logMsg; - callbacks[161] = (delegate* unmanaged)&_doAssert; - callbacks[162] = (delegate* unmanaged)&_reportFatalError; - callbacks[163] = (delegate* unmanaged)&_getPgoInstrumentationResults; - callbacks[164] = (delegate* unmanaged)&_allocPgoInstrumentationBySchema; - callbacks[165] = (delegate* unmanaged)&_recordCallSite; - callbacks[166] = (delegate* unmanaged)&_recordRelocation; - callbacks[167] = (delegate* unmanaged)&_getRelocTypeHint; - callbacks[168] = (delegate* unmanaged)&_getExpectedTargetArchitecture; - callbacks[169] = (delegate* unmanaged)&_getJitFlags; + callbacks[87] = (delegate* unmanaged)&_isConstValue; + callbacks[88] = (delegate* unmanaged)&_getConstValue; + callbacks[89] = (delegate* unmanaged)&_getConstValueType; + callbacks[90] = (delegate* unmanaged)&_canAccessClass; + callbacks[91] = (delegate* unmanaged)&_printFieldName; + callbacks[92] = (delegate* unmanaged)&_getFieldClass; + callbacks[93] = (delegate* unmanaged)&_getFieldType; + callbacks[94] = (delegate* unmanaged)&_getFieldOffset; + callbacks[95] = (delegate* unmanaged)&_getFieldInfo; + callbacks[96] = (delegate* unmanaged)&_getThreadLocalFieldInfo; + callbacks[97] = (delegate* unmanaged)&_getThreadLocalStaticBlocksInfo; + callbacks[98] = (delegate* unmanaged)&_isFieldStatic; + callbacks[99] = (delegate* unmanaged)&_getArrayOrStringLength; + callbacks[100] = (delegate* unmanaged)&_getBoundaries; + callbacks[101] = (delegate* unmanaged)&_setBoundaries; + callbacks[102] = (delegate* unmanaged)&_getVars; + callbacks[103] = (delegate* unmanaged)&_setVars; + callbacks[104] = (delegate* unmanaged)&_reportRichMappings; + callbacks[105] = (delegate* unmanaged)&_allocateArray; + callbacks[106] = (delegate* unmanaged)&_freeArray; + callbacks[107] = (delegate* unmanaged)&_getArgNext; + callbacks[108] = (delegate* unmanaged)&_getArgType; + callbacks[109] = (delegate* unmanaged)&_getExactClasses; + callbacks[110] = (delegate* unmanaged)&_getArgClass; + callbacks[111] = (delegate* unmanaged)&_getHFAType; + callbacks[112] = (delegate* unmanaged)&_runWithErrorTrap; + callbacks[113] = (delegate* unmanaged)&_runWithSPMIErrorTrap; + callbacks[114] = (delegate* unmanaged)&_getEEInfo; + callbacks[115] = (delegate* unmanaged)&_getJitTimeLogFilename; + callbacks[116] = (delegate* unmanaged)&_getMethodDefFromMethod; + callbacks[117] = (delegate* unmanaged)&_printMethodName; + callbacks[118] = (delegate* unmanaged)&_getMethodNameFromMetadata; + callbacks[119] = (delegate* unmanaged)&_getMethodHash; + callbacks[120] = (delegate* unmanaged)&_getSystemVAmd64PassStructInRegisterDescriptor; + callbacks[121] = (delegate* unmanaged)&_getLoongArch64PassStructInRegisterFlags; + callbacks[122] = (delegate* unmanaged)&_getRISCV64PassStructInRegisterFlags; + callbacks[123] = (delegate* unmanaged)&_getThreadTLSIndex; + callbacks[124] = (delegate* unmanaged)&_getAddrOfCaptureThreadGlobal; + callbacks[125] = (delegate* unmanaged)&_getHelperFtn; + callbacks[126] = (delegate* unmanaged)&_getFunctionEntryPoint; + callbacks[127] = (delegate* unmanaged)&_getFunctionFixedEntryPoint; + callbacks[128] = (delegate* unmanaged)&_getMethodSync; + callbacks[129] = (delegate* unmanaged)&_getLazyStringLiteralHelper; + callbacks[130] = (delegate* unmanaged)&_embedModuleHandle; + callbacks[131] = (delegate* unmanaged)&_embedClassHandle; + callbacks[132] = (delegate* unmanaged)&_embedMethodHandle; + callbacks[133] = (delegate* unmanaged)&_embedFieldHandle; + callbacks[134] = (delegate* unmanaged)&_embedGenericHandle; + callbacks[135] = (delegate* unmanaged)&_getLocationOfThisType; + callbacks[136] = (delegate* unmanaged)&_getAddressOfPInvokeTarget; + callbacks[137] = (delegate* unmanaged)&_GetCookieForPInvokeCalliSig; + callbacks[138] = (delegate* unmanaged)&_canGetCookieForPInvokeCalliSig; + callbacks[139] = (delegate* unmanaged)&_getJustMyCodeHandle; + callbacks[140] = (delegate* unmanaged)&_GetProfilingHandle; + callbacks[141] = (delegate* unmanaged)&_getCallInfo; + callbacks[142] = (delegate* unmanaged)&_getClassDomainID; + callbacks[143] = (delegate* unmanaged)&_getStaticFieldContent; + callbacks[144] = (delegate* unmanaged)&_getObjectContent; + callbacks[145] = (delegate* unmanaged)&_getStaticFieldCurrentClass; + callbacks[146] = (delegate* unmanaged)&_getVarArgsHandle; + callbacks[147] = (delegate* unmanaged)&_canGetVarArgsHandle; + callbacks[148] = (delegate* unmanaged)&_constructStringLiteral; + callbacks[149] = (delegate* unmanaged)&_emptyStringLiteral; + callbacks[150] = (delegate* unmanaged)&_getFieldThreadLocalStoreID; + callbacks[151] = (delegate* unmanaged)&_GetDelegateCtor; + callbacks[152] = (delegate* unmanaged)&_MethodCompileComplete; + callbacks[153] = (delegate* unmanaged)&_getTailCallHelpers; + callbacks[154] = (delegate* unmanaged)&_convertPInvokeCalliToCall; + callbacks[155] = (delegate* unmanaged)&_notifyInstructionSetUsage; + callbacks[156] = (delegate* unmanaged)&_updateEntryPointForTailCall; + callbacks[157] = (delegate* unmanaged)&_allocMem; + callbacks[158] = (delegate* unmanaged)&_reserveUnwindInfo; + callbacks[159] = (delegate* unmanaged)&_allocUnwindInfo; + callbacks[160] = (delegate* unmanaged)&_allocGCInfo; + callbacks[161] = (delegate* unmanaged)&_setEHcount; + callbacks[162] = (delegate* unmanaged)&_setEHinfo; + callbacks[163] = (delegate* unmanaged)&_logMsg; + callbacks[164] = (delegate* unmanaged)&_doAssert; + callbacks[165] = (delegate* unmanaged)&_reportFatalError; + callbacks[166] = (delegate* unmanaged)&_getPgoInstrumentationResults; + callbacks[167] = (delegate* unmanaged)&_allocPgoInstrumentationBySchema; + callbacks[168] = (delegate* unmanaged)&_recordCallSite; + callbacks[169] = (delegate* unmanaged)&_recordRelocation; + callbacks[170] = (delegate* unmanaged)&_getRelocTypeHint; + callbacks[171] = (delegate* unmanaged)&_getExpectedTargetArchitecture; + callbacks[172] = (delegate* unmanaged)&_getJitFlags; return (IntPtr)callbacks; } diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs b/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs index 47e7e6bb7dd71..c432c9f526704 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs @@ -302,6 +302,11 @@ public unsafe struct CORINFO_RESOLVED_TOKEN public uint cbTypeSpec; public byte* pMethodSpec; public uint cbMethodSpec; + + // [Out] Only meaningful if the resolved token is a const value argument. + public bool isConstValue; + public CorInfoType constValueType; + public ulong constValue; } [StructLayout(LayoutKind.Sequential)] @@ -678,6 +683,7 @@ public enum CorInfoType // the JIT in "import only" mode. CORINFO_TYPE_VAR = 0x16, + CORINFO_TYPE_CTARG = 0x17, CORINFO_TYPE_COUNT, // number of jit types } diff --git a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt index bc620591465f4..266a91d567819 100644 --- a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt +++ b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt @@ -54,6 +54,7 @@ uint8_t*,byte* uint8_t**,byte** GSCookie*,IntPtr* GSCookie**,IntPtr** +uint64_t,ulong bool*,ref bool BoolStar,byte*,bool*,bool* @@ -248,6 +249,9 @@ FUNCTIONS unsigned getArrayRank(CORINFO_CLASS_HANDLE cls) CorInfoArrayIntrinsic getArrayIntrinsicID(CORINFO_METHOD_HANDLE ftn) void* getArrayInitializationData(CORINFO_FIELD_HANDLE field, uint32_t size) + bool isConstValue(CORINFO_CLASS_HANDLE cls) + uint64_t getConstValue(CORINFO_CLASS_HANDLE cls) + CORINFO_CLASS_HANDLE getConstValueType(CORINFO_CLASS_HANDLE cls) CorInfoIsAccessAllowedResult canAccessClass(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, CORINFO_HELPER_DESC* pAccessHelper) size_t printFieldName(CORINFO_FIELD_HANDLE field, char* buffer, size_t bufferSize, size_t* pRequiredBufferSize) CORINFO_CLASS_HANDLE getFieldClass(CORINFO_FIELD_HANDLE field) diff --git a/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h b/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h index 2ec781cb7f7b5..a4e0167c4e897 100644 --- a/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h +++ b/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h @@ -98,6 +98,9 @@ struct JitInterfaceCallbacks unsigned (* getArrayRank)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_CLASS_HANDLE cls); CorInfoArrayIntrinsic (* getArrayIntrinsicID)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE ftn); void* (* getArrayInitializationData)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_FIELD_HANDLE field, uint32_t size); + bool (* isConstValue)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_CLASS_HANDLE cls); + uint64_t (* getConstValue)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_CLASS_HANDLE cls); + CORINFO_CLASS_HANDLE (* getConstValueType)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_CLASS_HANDLE cls); CorInfoIsAccessAllowedResult (* canAccessClass)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, CORINFO_HELPER_DESC* pAccessHelper); size_t (* printFieldName)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_FIELD_HANDLE field, char* buffer, size_t bufferSize, size_t* pRequiredBufferSize); CORINFO_CLASS_HANDLE (* getFieldClass)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_FIELD_HANDLE field); @@ -1043,6 +1046,33 @@ class JitInterfaceWrapper : public ICorJitInfo return temp; } + virtual bool isConstValue( + CORINFO_CLASS_HANDLE cls) +{ + CorInfoExceptionClass* pException = nullptr; + bool temp = _callbacks->isConstValue(_thisHandle, &pException, cls); + if (pException != nullptr) throw pException; + return temp; +} + + virtual uint64_t getConstValue( + CORINFO_CLASS_HANDLE cls) +{ + CorInfoExceptionClass* pException = nullptr; + uint64_t temp = _callbacks->getConstValue(_thisHandle, &pException, cls); + if (pException != nullptr) throw pException; + return temp; +} + + virtual CORINFO_CLASS_HANDLE getConstValueType( + CORINFO_CLASS_HANDLE cls) +{ + CorInfoExceptionClass* pException = nullptr; + CORINFO_CLASS_HANDLE temp = _callbacks->getConstValueType(_thisHandle, &pException, cls); + if (pException != nullptr) throw pException; + return temp; +} + virtual CorInfoIsAccessAllowedResult canAccessClass( CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, diff --git a/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h b/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h index 82bcb14d3a169..9b6428b55d9d7 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h +++ b/src/coreclr/tools/superpmi/superpmi-shared/agnostic.h @@ -131,6 +131,9 @@ struct Agnostic_CORINFO_RESOLVED_TOKENout DWORD cbTypeSpec; DWORD pMethodSpec_Index; DWORD cbMethodSpec; + DWORD isConstValue; + DWORD constValueType; + DWORDLONG constValue; }; struct Agnostic_GetArgType_Key diff --git a/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h b/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h index c09cd84b059e4..e0d7866a1ff7b 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h +++ b/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h @@ -52,6 +52,9 @@ LWM(GetExactClasses, DLD, Agnostic_GetExactClassesResult) LWM(GetArrayInitializationData, DLD, DWORDLONG) LWM(GetArrayRank, DWORDLONG, DWORD) LWM(GetArrayIntrinsicID, DWORDLONG, DWORD) +LWM(IsConstValue, DWORDLONG, DWORD) +LWM(GetConstValueType, DWORDLONG, DWORDLONG) +LWM(GetConstValue, DWORDLONG, DWORDLONG) LWM(GetBoundaries, DWORDLONG, Agnostic_GetBoundaries) LWM(GetBoxHelper, DWORDLONG, DWORD) LWM(GetBuiltinClass, DWORD, DWORDLONG) diff --git a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp index a7c6d9b9d3fab..101a146ce4f37 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp @@ -5149,6 +5149,80 @@ void* MethodContext::repGetArrayInitializationData(CORINFO_FIELD_HANDLE field, D return result; } +void MethodContext::recIsConstValue(CORINFO_CLASS_HANDLE cls, bool result) +{ + if (IsConstValue == nullptr) + IsConstValue = new LightWeightMap(); + + DWORDLONG key = CastHandle(cls); + DWORD value = result ? 0 : 1; + IsConstValue->Add(key, value); + DEBUG_REC(dmpIsConstValue(key, value)); +} + +void MethodContext::dmpIsConstValue(DWORDLONG key, DWORD value) +{ + printf("IsConstValue key cls-%016" PRIX64 ", value res-%u", key, value); +} + +bool MethodContext::repIsConstValue(CORINFO_CLASS_HANDLE cls) +{ + DWORDLONG key = CastHandle(cls); + DWORD value = LookupByKeyOrMissNoMessage(IsConstValue, key); + + DEBUG_REP(dmpIsConstValue(key, value)); + bool result = (bool)value; + return result; +} + +void MethodContext::recGetConstValue(CORINFO_CLASS_HANDLE cls, DWORDLONG result) +{ + if (GetConstValue == nullptr) + GetConstValue = new LightWeightMap(); + + DWORDLONG key = CastHandle(cls); + GetConstValue->Add(key, result); + DEBUG_REC(dmpGetConstValue(key, result)); +} + +void MethodContext::dmpGetConstValue(DWORDLONG key, DWORDLONG value) +{ + printf("GetConstValue key cls-%016" PRIX64 ", value res-0x%016" PRIX64, key, value); +} + +DWORDLONG MethodContext::repGetConstValue(CORINFO_CLASS_HANDLE cls) +{ + DWORDLONG key = CastHandle(cls); + DWORDLONG value = LookupByKeyOrMissNoMessage(GetConstValue, key); + + DEBUG_REP(dmpGetConstValue(key, value)); + return value; +} + +void MethodContext::recGetConstValueType(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result) +{ + if (GetConstValueType == nullptr) + GetConstValueType = new LightWeightMap(); + + DWORDLONG key = CastHandle(cls); + GetConstValueType->Add(key, CastHandle(result)); + DEBUG_REC(dmpGetConstValueType(key, result)); +} + +void MethodContext::dmpGetConstValueType(DWORDLONG key, DWORDLONG value) +{ + printf("GetConstValueType key cls-%016" PRIX64 ", value res-%016" PRIX64 "", key, value); +} + +CORINFO_CLASS_HANDLE MethodContext::repGetConstValueType(CORINFO_CLASS_HANDLE cls) +{ + DWORDLONG key = CastHandle(cls); + DWORDLONG value = LookupByKeyOrMissNoMessage(GetConstValueType, key); + + DEBUG_REP(dmpGetConstValueType(key, value)); + return (CORINFO_CLASS_HANDLE)value; +} + void MethodContext::recGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP* pLookup) { if (GetAddressOfPInvokeTarget == nullptr) diff --git a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h index 2af725f63f7ae..f513df5effcf7 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h +++ b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h @@ -649,6 +649,18 @@ class MethodContext void dmpGetArrayInitializationData(DLD key, DWORDLONG value); void* repGetArrayInitializationData(CORINFO_FIELD_HANDLE field, DWORD size); + void recIsConstValue(CORINFO_CLASS_HANDLE cls, bool result); + void dmpIsConstValue(DWORDLONG key, DWORD value); + bool repIsConstValue(CORINFO_CLASS_HANDLE cls); + + void recGetConstValue(CORINFO_CLASS_HANDLE cls, DWORDLONG result); + void dmpGetConstValue(DWORDLONG key, DWORDLONG value); + DWORDLONG repGetConstValue(CORINFO_CLASS_HANDLE cls); + + void recGetConstValueType(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result); + void dmpGetConstValueType(DWORDLONG key, DWORDLONG value); + CORINFO_CLASS_HANDLE repGetConstValueType(CORINFO_CLASS_HANDLE cls); + void recGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP* pLookup); void dmpGetAddressOfPInvokeTarget(DWORDLONG key, DLD value); void repGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP* pLookup); @@ -1138,6 +1150,9 @@ enum mcPackets Packet_GetObjectContent = 210, Packet_GetTypeLayout = 211, Packet_HaveSameMethodDefinition = 212, + Packet_IsConstValue = 213, + Packet_GetConstValueType = 214, + Packet_GetConstValue = 215, }; void SetDebugDumpVariables(); diff --git a/src/coreclr/tools/superpmi/superpmi-shared/spmidumphelper.cpp b/src/coreclr/tools/superpmi/superpmi-shared/spmidumphelper.cpp index 083b80c03286c..f7aefe8538289 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/spmidumphelper.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shared/spmidumphelper.cpp @@ -23,9 +23,10 @@ std::string SpmiDumpHelper::DumpAgnostic_CORINFO_RESOLVED_TOKENout( const Agnostic_CORINFO_RESOLVED_TOKENout& tokenOut) { char buffer[MAX_BUFFER_SIZE]; - sprintf_s(buffer, MAX_BUFFER_SIZE, "cls-%016llX meth-%016llX fld-%016llX ti-%u ts-%u mi-%u ms-%u", tokenOut.hClass, + sprintf_s(buffer, MAX_BUFFER_SIZE, "cls-%016llX meth-%016llX fld-%016llX ti-%u ts-%u mi-%u ms-%u ic-%u cvt-%u cv-%016llX", tokenOut.hClass, tokenOut.hMethod, tokenOut.hField, tokenOut.pTypeSpec_Index, tokenOut.cbTypeSpec, - tokenOut.pMethodSpec_Index, tokenOut.cbMethodSpec); + tokenOut.pMethodSpec_Index, tokenOut.cbMethodSpec, + tokenOut.isConstValue, tokenOut.constValueType, tokenOut.constValue); return std::string(buffer); } diff --git a/src/coreclr/tools/superpmi/superpmi-shared/spmirecordhelper.h b/src/coreclr/tools/superpmi/superpmi-shared/spmirecordhelper.h index 1214894b231ab..29d68393b5c32 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/spmirecordhelper.h +++ b/src/coreclr/tools/superpmi/superpmi-shared/spmirecordhelper.h @@ -144,6 +144,10 @@ inline Agnostic_CORINFO_RESOLVED_TOKENout SpmiRecordsHelper:: tokenOut.cbTypeSpec = (DWORD)pResolvedToken->cbTypeSpec; tokenOut.cbMethodSpec = (DWORD)pResolvedToken->cbMethodSpec; + + tokenOut.isConstValue = pResolvedToken->isConstValue ? 1 : 0; + tokenOut.constValueType = (DWORD)pResolvedToken->constValueType; + tokenOut.constValue = (DWORDLONG)pResolvedToken->constValue; } tokenOut.pTypeSpec_Index = -1; @@ -165,6 +169,9 @@ inline Agnostic_CORINFO_RESOLVED_TOKENout SpmiRecordsHelper::StoreAgnostic_CORIN (DWORD)buffers->AddBuffer((unsigned char*)pResolvedToken->pTypeSpec, pResolvedToken->cbTypeSpec); tokenOut.pMethodSpec_Index = (DWORD)buffers->AddBuffer((unsigned char*)pResolvedToken->pMethodSpec, pResolvedToken->cbMethodSpec); + tokenOut.isConstValue = pResolvedToken->isConstValue ? 1 : 0; + tokenOut.constValueType = (DWORD)pResolvedToken->constValueType; + tokenOut.constValue = (DWORDLONG)pResolvedToken->constValue; } return tokenOut; @@ -182,6 +189,9 @@ inline Agnostic_CORINFO_RESOLVED_TOKENout SpmiRecordsHelper::RestoreAgnostic_COR (DWORD)buffers->Contains((unsigned char*)pResolvedToken->pTypeSpec, pResolvedToken->cbTypeSpec); tokenOut.pMethodSpec_Index = (DWORD)buffers->Contains((unsigned char*)pResolvedToken->pMethodSpec, pResolvedToken->cbMethodSpec); + tokenOut.isConstValue = pResolvedToken->isConstValue ? 1 : 0; + tokenOut.constValueType = (DWORD)pResolvedToken->constValueType; + tokenOut.constValue = (DWORDLONG)pResolvedToken->constValue; } return tokenOut; } @@ -238,6 +248,9 @@ inline void SpmiRecordsHelper::Restore_CORINFO_RESOLVED_TOKENout( pResolvedToken->cbTypeSpec = (ULONG)tokenOut.cbTypeSpec; pResolvedToken->pMethodSpec = (PCCOR_SIGNATURE)buffers->GetBuffer(tokenOut.pMethodSpec_Index); pResolvedToken->cbMethodSpec = (ULONG)tokenOut.cbMethodSpec; + pResolvedToken->isConstValue = (bool)tokenOut.isConstValue; + pResolvedToken->constValueType = (CorInfoType)tokenOut.constValueType; + pResolvedToken->constValue = (uint64_t)tokenOut.constValue; } } diff --git a/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp b/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp index 90ad83f09b0a4..7277f2d8c5775 100644 --- a/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp @@ -998,6 +998,32 @@ CorInfoIsAccessAllowedResult interceptor_ICJI::canAccessClass( return temp; } + +bool interceptor_ICJI::isConstValue(CORINFO_CLASS_HANDLE cls) +{ + mc->cr->AddCall("isConstValue"); + bool temp = original_ICorJitInfo->isConstValue(cls); + mc->recIsConstValue(cls, temp); + return temp; +} + +uint64_t interceptor_ICJI::getConstValue(CORINFO_CLASS_HANDLE cls) +{ + mc->cr->AddCall("getConstValue"); + uint64_t temp = original_ICorJitInfo->getConstValue(cls); + mc->recGetConstValue(cls, temp); + return temp; +} + +CORINFO_CLASS_HANDLE interceptor_ICJI::getConstValueType(CORINFO_CLASS_HANDLE cls) +{ + mc->cr->AddCall("getConstValueType"); + CORINFO_CLASS_HANDLE temp = original_ICorJitInfo->getConstValueType(cls); + mc->recGetConstValueType(cls, temp); + return temp; +} + + /**********************************************************************************/ // // ICorFieldInfo diff --git a/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp b/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp index ef01fa5977d75..f36707207364f 100644 --- a/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp @@ -702,6 +702,27 @@ void* interceptor_ICJI::getArrayInitializationData( return original_ICorJitInfo->getArrayInitializationData(field, size); } +bool interceptor_ICJI::isConstValue( + CORINFO_CLASS_HANDLE cls) +{ + mcs->AddCall("isConstValue"); + return original_ICorJitInfo->isConstValue(cls); +} + +uint64_t interceptor_ICJI::getConstValue( + CORINFO_CLASS_HANDLE cls) +{ + mcs->AddCall("getConstValue"); + return original_ICorJitInfo->getConstValue(cls); +} + +CORINFO_CLASS_HANDLE interceptor_ICJI::getConstValueType( + CORINFO_CLASS_HANDLE cls) +{ + mcs->AddCall("getConstValueType"); + return original_ICorJitInfo->getConstValueType(cls); +} + CorInfoIsAccessAllowedResult interceptor_ICJI::canAccessClass( CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, diff --git a/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp b/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp index 8dd3ebb08d92e..4b4bf79d39169 100644 --- a/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp @@ -615,6 +615,24 @@ void* interceptor_ICJI::getArrayInitializationData( return original_ICorJitInfo->getArrayInitializationData(field, size); } +bool interceptor_ICJI::isConstValue( + CORINFO_CLASS_HANDLE cls) +{ + return original_ICorJitInfo->isConstValue(cls); +} + +uint64_t interceptor_ICJI::getConstValue( + CORINFO_CLASS_HANDLE cls) +{ + return original_ICorJitInfo->getConstValue(cls); +} + +CORINFO_CLASS_HANDLE interceptor_ICJI::getConstValueType( + CORINFO_CLASS_HANDLE cls) +{ + return original_ICorJitInfo->getConstValueType(cls); +} + CorInfoIsAccessAllowedResult interceptor_ICJI::canAccessClass( CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, diff --git a/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp b/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp index 7e7f3e67416c8..c49ebbc04d9c0 100644 --- a/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp +++ b/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp @@ -816,6 +816,7 @@ void* MyICJI::getArrayInitializationData(CORINFO_FIELD_HANDLE field, uint32_t si return jitInstance->mc->repGetArrayInitializationData(field, size); } + // Check Visibility rules. CorInfoIsAccessAllowedResult MyICJI::canAccessClass(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, @@ -829,6 +830,23 @@ CorInfoIsAccessAllowedResult MyICJI::canAccessClass(CORINFO_RESOLVED_TOKEN* pRes return jitInstance->mc->repCanAccessClass(pResolvedToken, callerHandle, pAccessHelper); } +bool MyICJI::isConstValue(CORINFO_CLASS_HANDLE cls) +{ + jitInstance->mc->cr->AddCall("isConstValue"); + return jitInstance->mc->repIsConstValue(cls); +} + +uint64_t MyICJI::getConstValue(CORINFO_CLASS_HANDLE cls) +{ + jitInstance->mc->cr->AddCall("getConstValue"); + return jitInstance->mc->repGetConstValue(cls); +} + +CORINFO_CLASS_HANDLE MyICJI::getConstValueType(CORINFO_CLASS_HANDLE cls) +{ + jitInstance->mc->cr->AddCall("getConstValueType"); + return jitInstance->mc->repGetConstValueType(cls); +} /**********************************************************************************/ // // ICorFieldInfo diff --git a/src/coreclr/utilcode/sigparser.cpp b/src/coreclr/utilcode/sigparser.cpp index 272b97ae68b88..ea1758ae2f3b1 100644 --- a/src/coreclr/utilcode/sigparser.cpp +++ b/src/coreclr/utilcode/sigparser.cpp @@ -40,6 +40,9 @@ HRESULT SigParser::SkipExactlyOne() case ELEMENT_TYPE_MVAR: IfFailRet(GetData(NULL)); // Skip variable number break; + case ELEMENT_TYPE_CTARG: + IfFailRet(GetConstTypeArgData(NULL, NULL)); + break; case ELEMENT_TYPE_VAR_ZAPSIG: IfFailRet(GetData(NULL)); // Skip RID break; diff --git a/src/coreclr/utilcode/util.cpp b/src/coreclr/utilcode/util.cpp index 6fc4b2b668cbd..eeb9e3be11e24 100644 --- a/src/coreclr/utilcode/util.cpp +++ b/src/coreclr/utilcode/util.cpp @@ -1773,6 +1773,18 @@ HRESULT validateOneArg( //@todo GENERICS: check that index is in range break; + case ELEMENT_TYPE_CTARG: + { + CorElementType argType; + uint32_t argCb; + PCCOR_SIGNATURE argSig; + if (FAILED(pSig->GetConstTypeArg(&argType, &argCb, &argSig))) + { + IfFailGo(VLDTR_E_SIG_BADELTYPE); + } + } + break; + case ELEMENT_TYPE_GENERICINST: // Validate the generic type. IfFailGo(validateOneArg(tk, pSig, pulNSentinels, pImport, TRUE)); diff --git a/src/coreclr/vm/binder.h b/src/coreclr/vm/binder.h index 8e9369cc85a1b..9ee71322b7615 100644 --- a/src/coreclr/vm/binder.h +++ b/src/coreclr/vm/binder.h @@ -40,7 +40,7 @@ struct HardCodedMetaSig enum BinderClassID { -#define TYPEINFO(e,ns,c,s,g,ia,ip,if,im,gv) CLASS__ ## e, +#define TYPEINFO(e,ns,c,s,g,ia,ip,if,im,gv,ic) CLASS__ ## e, #include "cortypeinfo.h" #undef TYPEINFO diff --git a/src/coreclr/vm/ceeload.cpp b/src/coreclr/vm/ceeload.cpp index f3e3a882d3878..ab7a17eb41c59 100644 --- a/src/coreclr/vm/ceeload.cpp +++ b/src/coreclr/vm/ceeload.cpp @@ -467,6 +467,11 @@ void Module::Initialize(AllocMemTracker *pamTracker, LPCWSTR szName) { m_pAvailableParamTypes = EETypeHashTable::Create(GetLoaderAllocator(), this, PARAMTYPES_HASH_BUCKETS, pamTracker); } + + if (m_pAvailableConstValues == NULL) + { + m_pAvailableConstValues = EETypeHashTable::Create(GetLoaderAllocator(), this, PARAMTYPES_HASH_BUCKETS, pamTracker); + } if (m_pInstMethodHashTable == NULL) { diff --git a/src/coreclr/vm/ceeload.h b/src/coreclr/vm/ceeload.h index 4d714d2024196..9ae1a55d43e35 100644 --- a/src/coreclr/vm/ceeload.h +++ b/src/coreclr/vm/ceeload.h @@ -787,6 +787,9 @@ class Module : public ModuleBase // Hashtable of generic type instances PTR_EETypeHashTable m_pAvailableParamTypes; + // Hashtable of const value instances + PTR_EETypeHashTable m_pAvailableConstValues; + // For protecting additions to m_pInstMethodHashTable CrstExplicitInit m_InstMethodHashTableCrst; @@ -1166,6 +1169,14 @@ class Module : public ModuleBase return m_pAvailableParamTypes; } + EETypeHashTable *GetAvailableConstValues() + { + LIMITED_METHOD_CONTRACT; + SUPPORTS_DAC; + + return m_pAvailableConstValues; + } + InstMethodHashTable *GetInstMethodHashTable() { LIMITED_METHOD_CONTRACT; diff --git a/src/coreclr/vm/class.cpp b/src/coreclr/vm/class.cpp index 0062632396c95..c3f9fe5d5406f 100644 --- a/src/coreclr/vm/class.cpp +++ b/src/coreclr/vm/class.cpp @@ -925,9 +925,9 @@ EEClass::CheckVarianceInSig( uint32_t ntypars; IfFailThrow(psig.GetData(&ntypars)); - // If this is a value type, or position == gpNonVariant, then + // If this is a value type or a const argument, or position == gpNonVariant, then // we're disallowing covariant and contravariant completely - if (typ == ELEMENT_TYPE_VALUETYPE || position == gpNonVariant) + if (typ == ELEMENT_TYPE_VALUETYPE || typ == ELEMENT_TYPE_CTARG || position == gpNonVariant) { for (unsigned i = 0; i < ntypars; i++) { diff --git a/src/coreclr/vm/class.h b/src/coreclr/vm/class.h index 8d5785dd48a64..a40eaaa834dec 100644 --- a/src/coreclr/vm/class.h +++ b/src/coreclr/vm/class.h @@ -2025,7 +2025,6 @@ class DelegateEEClass : public EEClass }; - typedef DPTR(ArrayClass) PTR_ArrayClass; diff --git a/src/coreclr/vm/classcompat.h b/src/coreclr/vm/classcompat.h index 2320318c954fb..952a33874318a 100644 --- a/src/coreclr/vm/classcompat.h +++ b/src/coreclr/vm/classcompat.h @@ -261,6 +261,7 @@ class MethodTableBuilder BOOL IsAbstract() { LIMITED_METHOD_CONTRACT; return IsTdAbstract(bmtType->dwAttr); } BOOL HasLayout() { LIMITED_METHOD_CONTRACT; return bmtProp->fHasLayout; } BOOL IsDelegate() { LIMITED_METHOD_CONTRACT; return bmtProp->fIsDelegate; } + BOOL IsConstValue() { LIMITED_METHOD_CONTRACT; return bmtProp->fIsConstValue; } Module *GetModule() { LIMITED_METHOD_CONTRACT; return bmtType->pModule; } Assembly *GetAssembly() { WRAPPER_NO_CONTRACT; return GetModule()->GetAssembly(); } ClassLoader *GetClassLoader() { WRAPPER_NO_CONTRACT; return GetModule()->GetClassLoader(); } @@ -280,6 +281,7 @@ class MethodTableBuilder // we create that object. void SetIsValueClass() { LIMITED_METHOD_CONTRACT; bmtProp->fIsValueClass = TRUE; } void SetEnum() { LIMITED_METHOD_CONTRACT; bmtProp->fIsEnum = TRUE; } + void SetIsConstValue() { LIMITED_METHOD_CONTRACT; bmtProp->fIsConstValue = TRUE; } void SetHasLayout() { LIMITED_METHOD_CONTRACT; bmtProp->fHasLayout = TRUE; } void SetIsDelegate() { LIMITED_METHOD_CONTRACT; bmtProp->fIsDelegate = TRUE; } #ifdef _DEBUG @@ -320,6 +322,7 @@ class MethodTableBuilder BOOL fIsComClassInterface; BOOL fHasLayout; BOOL fIsDelegate; + BOOL fIsConstValue; LPUTF8 szDebugClassName; diff --git a/src/coreclr/vm/clsload.cpp b/src/coreclr/vm/clsload.cpp index 06775e004629d..6033272209d7c 100644 --- a/src/coreclr/vm/clsload.cpp +++ b/src/coreclr/vm/clsload.cpp @@ -235,6 +235,8 @@ Module *ClassLoader::ComputeLoaderModule(TypeKey *typeKey) Instantiation()); else if (typeKey->GetKind() == ELEMENT_TYPE_FNPTR) return ComputeLoaderModuleForFunctionPointer(typeKey->GetRetAndArgTypes(), typeKey->GetNumArgs() + 1); + else if (typeKey->GetKind() == ELEMENT_TYPE_CTARG) + return ComputeLoaderModuleForConstValue(typeKey->GetConstValueType()); else return ComputeLoaderModuleForParamType(typeKey->GetElementType()); } @@ -1119,8 +1121,10 @@ TypeHandle ClassLoader::LookupInLoaderModule(TypeKey *pKey) Module *pLoaderModule = ComputeLoaderModule(pKey); PREFIX_ASSUME(pLoaderModule!=NULL); - - return LookupTypeKey(pKey, pLoaderModule->GetAvailableParamTypes()); + + return LookupTypeKey(pKey, CorTypeInfo::IsConstValue_NoThrow(pKey->GetKind()) ? + pLoaderModule->GetAvailableConstValues() : + pLoaderModule->GetAvailableParamTypes()); } @@ -1650,6 +1654,51 @@ TypeHandle ClassLoader::LoadFnptrTypeThrowing(BYTE callConv, RETURN(LoadConstructedTypeThrowing(&key, fLoadTypes, level)); } +TypeHandle ClassLoader::LoadConstValueTypeThrowing(TypeHandle valueType, + uint64_t value, + CorElementType typ /* ELEMENT_TYPE_CTARG */, + LoadTypesFlag fLoadTypes /* LoadTypes */, + ClassLoadLevel level /* CLASS_LOADED */) +{ + CONTRACT(TypeHandle) + { + if (FORBIDGC_LOADER_USE_ENABLED()) NOTHROW; else THROWS; + if (FORBIDGC_LOADER_USE_ENABLED()) GC_NOTRIGGER; else GC_TRIGGERS; + if (FORBIDGC_LOADER_USE_ENABLED()) FORBID_FAULT; else { INJECT_FAULT(COMPlusThrowOM()); } + if (FORBIDGC_LOADER_USE_ENABLED() || fLoadTypes != LoadTypes) { LOADS_TYPE(CLASS_LOAD_BEGIN); } else { LOADS_TYPE(level); } + PRECONDITION(level > CLASS_LOAD_BEGIN && level <= CLASS_LOADED); + POSTCONDITION(CheckPointer(RETVAL, ((fLoadTypes == LoadTypes) ? NULL_NOT_OK : NULL_OK))); + MODE_ANY; + SUPPORTS_DAC; + } + CONTRACT_END + + TypeKey key(valueType, value); + + TypeHandle typeHnd = LookupTypeHandleForTypeKey(&key); + if (!typeHnd.IsNull()) + { + RETURN(typeHnd); + } + + // If we're not loading any types at all, then we're not creating + // instantiations either because we're in FORBIDGC_LOADER_USE mode, so + // we should bail out here. + if (fLoadTypes == DontLoadTypes) + RETURN TypeHandle(); + +#ifndef DACCESS_COMPILE + // If we got here, we now have to allocate a new const value type. + // By definition, forbidgc-users aren't allowed to reach this point. + CONSISTENCY_CHECK(!FORBIDGC_LOADER_USE_ENABLED()); + Module *pLoaderModule = ComputeLoaderModule(&key); + RETURN(pLoaderModule->GetClassLoader()->LoadTypeHandleForTypeKey(&key, typeHnd, level)); +#else + DacNotImpl(); + RETURN(typeHnd); +#endif +} + // Find an instantiation of a generic type if it has already been created. // If typeDef is not a generic type or is already instantiated then throw an exception. // If its arity does not match ntypars then throw an exception. @@ -2968,6 +3017,13 @@ TypeHandle ClassLoader::CreateTypeHandleForTypeKey(TypeKey* pKey, AllocMemTracke typeHnd = TypeHandle(new(mem) FnPtrTypeDesc(pKey->GetCallConv(), numArgs, pKey->GetRetAndArgTypes())); } + else if (pKey->GetKind() == ELEMENT_TYPE_CTARG) + { + Module *pLoaderModule = ComputeLoaderModule(pKey); + PREFIX_ASSUME(pLoaderModule != NULL); + BYTE* mem = (BYTE*) pamTracker->Track(pLoaderModule->GetAssembly()->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(sizeof(ConstValueTypeDesc)) + S_SIZE_T(sizeof(TypeHandle)))); + typeHnd = TypeHandle(new(mem) ConstValueTypeDesc(pKey->GetConstValueType(), pKey->GetConstValue())); + } else { Module *pLoaderModule = ComputeLoaderModule(pKey); @@ -3049,7 +3105,8 @@ TypeHandle ClassLoader::PublishType(TypeKey *pTypeKey, TypeHandle typeHnd) if (pTypeKey->IsConstructed()) { Module *pLoaderModule = ComputeLoaderModule(pTypeKey); - EETypeHashTable *pTable = pLoaderModule->GetAvailableParamTypes(); + EETypeHashTable *pTable = CorTypeInfo::IsConstValue_NoThrow(pTypeKey->GetKind()) ? + pLoaderModule->GetAvailableConstValues() : pLoaderModule->GetAvailableParamTypes(); CrstHolder ch(&pLoaderModule->GetClassLoader()->m_AvailableTypesLock); diff --git a/src/coreclr/vm/clsload.hpp b/src/coreclr/vm/clsload.hpp index fd2aabe3801ed..2e2c2eda99200 100644 --- a/src/coreclr/vm/clsload.hpp +++ b/src/coreclr/vm/clsload.hpp @@ -566,6 +566,7 @@ class ClassLoader static Module * ComputeLoaderModule(TypeKey * typeKey); inline static PTR_Module ComputeLoaderModuleForFunctionPointer(TypeHandle * pRetAndArgTypes, DWORD NumArgsPlusRetType); inline static PTR_Module ComputeLoaderModuleForParamType(TypeHandle paramType); + inline static PTR_Module ComputeLoaderModuleForConstValue(TypeHandle valueType); private: static PTR_Module ComputeLoaderModuleWorker(Module *pDefinitionModule, // the module that declares the generic type or method @@ -699,6 +700,12 @@ class ClassLoader LoadTypesFlag fLoadTypes = LoadTypes, ClassLoadLevel level = CLASS_LOADED); + static TypeHandle LoadConstValueTypeThrowing(TypeHandle valueType, + uint64_t value, + CorElementType typ = ELEMENT_TYPE_CTARG, + LoadTypesFlag fLoadTypes = LoadTypes, + ClassLoadLevel level = CLASS_LOADED); + // External class loader entry point // Load types by name - doesn't support nested types. // See overload using NameHandle. diff --git a/src/coreclr/vm/clsload.inl b/src/coreclr/vm/clsload.inl index d12b81f162a93..3bfd7c391770f 100644 --- a/src/coreclr/vm/clsload.inl +++ b/src/coreclr/vm/clsload.inl @@ -56,6 +56,20 @@ inline PTR_Module ClassLoader::ComputeLoaderModuleForParamType(TypeHandle paramT return paramType.GetLoaderModule(); } +inline PTR_Module ClassLoader::ComputeLoaderModuleForConstValue(TypeHandle type) +{ + CONTRACTL + { + NOTHROW; + GC_NOTRIGGER; + MODE_ANY; + SUPPORTS_DAC; + } + CONTRACTL_END; + + return type.GetLoaderModule(); +} + //****************************************************************************** inline void AccessCheckOptions::Initialize( diff --git a/src/coreclr/vm/corelib.cpp b/src/coreclr/vm/corelib.cpp index b6ae49b2a1d1c..443e26151e8e3 100644 --- a/src/coreclr/vm/corelib.cpp +++ b/src/coreclr/vm/corelib.cpp @@ -225,7 +225,7 @@ extern const USHORT c_nCoreLibFieldDescriptions; const CoreLibClassDescription c_rgCoreLibClassDescriptions[] = { - #define TYPEINFO(e,ns,c,s,g,ia,ip,if,im,gv) { ns, c }, + #define TYPEINFO(e,ns,c,s,g,ia,ip,if,im,gv,ic) { ns, c }, #include "cortypeinfo.h" #undef TYPEINFO diff --git a/src/coreclr/vm/generics.cpp b/src/coreclr/vm/generics.cpp index fe2f438c266e0..b1a734e3a504e 100644 --- a/src/coreclr/vm/generics.cpp +++ b/src/coreclr/vm/generics.cpp @@ -709,7 +709,7 @@ void RecursionGraph::AddDependency(MethodTable *pMT, TypeHandleList *pExpansionV } else { - _ASSERTE(thArg.IsGenericVariable()); + _ASSERTE(thArg.IsGenericVariable() || thArg.IsConstValue()); } } } diff --git a/src/coreclr/vm/genmeth.cpp b/src/coreclr/vm/genmeth.cpp index 96bbc53a25e48..3e7c226dbc15f 100644 --- a/src/coreclr/vm/genmeth.cpp +++ b/src/coreclr/vm/genmeth.cpp @@ -1422,9 +1422,11 @@ void InstantiatedMethodDesc::SetupGenericMethodDefinition(IMDInternalImport* pIM TypeVarTypeDesc* pTypeVarTypeDesc = pModule->LookupGenericParam(tkTyPar); if (pTypeVarTypeDesc == NULL) { + mdToken tkType; + IfFailThrow(pIMDII->GetGenericParamProps(tkTyPar, NULL, NULL, NULL, &tkType, NULL)); // Do NOT use pamTracker for this memory as we need it stay allocated even if the load fails. void* mem = (void*)pAllocator->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(sizeof(TypeVarTypeDesc))); - pTypeVarTypeDesc = new (mem) TypeVarTypeDesc(pModule, tok, i, tkTyPar); + pTypeVarTypeDesc = new (mem) TypeVarTypeDesc(pModule, tok, tkType, i, tkTyPar); pModule->StoreGenericParamThrowing(tkTyPar, pTypeVarTypeDesc); } diff --git a/src/coreclr/vm/jitinterface.cpp b/src/coreclr/vm/jitinterface.cpp index cd14e4f54dc7d..2544f49e1be59 100644 --- a/src/coreclr/vm/jitinterface.cpp +++ b/src/coreclr/vm/jitinterface.cpp @@ -416,6 +416,8 @@ CorInfoType CEEInfo::asCorInfoType(CorElementType eeType, CORINFO_TYPE_UNDEF, // CMOD_REQD CORINFO_TYPE_UNDEF, // CMOD_OPT CORINFO_TYPE_UNDEF, // INTERNAL + + CORINFO_TYPE_CTARG, // CTARG }; _ASSERTE(sizeof(map) == ELEMENT_TYPE_MAX); @@ -889,6 +891,9 @@ void CEEInfo::resolveToken(/* IN, OUT */ CORINFO_RESOLVED_TOKEN * pResolvedToken pResolvedToken->cbTypeSpec = NULL; pResolvedToken->pMethodSpec = NULL; pResolvedToken->cbMethodSpec = NULL; + pResolvedToken->isConstValue = false; + pResolvedToken->constValueType = CORINFO_TYPE_UNDEF; + pResolvedToken->constValue = 0; TypeHandle th; MethodDesc * pMD = NULL; @@ -1106,25 +1111,36 @@ void CEEInfo::resolveToken(/* IN, OUT */ CORINFO_RESOLVED_TOKEN * pResolvedToken // tokenType specific verification and transformations // CorElementType et = th.GetInternalCorElementType(); - switch (tokenType) + if (et == CorElementType::ELEMENT_TYPE_CTARG) { - case CORINFO_TOKENKIND_Ldtoken: - // Allow everything. - break; - - case CORINFO_TOKENKIND_Newarr: - // Disallow ELEMENT_TYPE_BYREF and ELEMENT_TYPE_VOID - if (et == ELEMENT_TYPE_BYREF || et == ELEMENT_TYPE_VOID) - COMPlusThrow(kInvalidProgramException); + // This is a const type parameter, we need to load the type and value from TypeDesc. + pResolvedToken->isConstValue = th.AsTypeDesc()->IsConstValue(); + _ASSERTE(pResolvedToken->isConstValue); + pResolvedToken->constValueType = asCorInfoType(th.AsTypeDesc()->GetConstValueType().GetInternalCorElementType()); + pResolvedToken->constValue = th.AsTypeDesc()->GetConstValue(); + } + else + { + switch (tokenType) + { + case CORINFO_TOKENKIND_Ldtoken: + // Allow everything. + break; + + case CORINFO_TOKENKIND_Newarr: + // Disallow ELEMENT_TYPE_BYREF and ELEMENT_TYPE_VOID + if (et == ELEMENT_TYPE_BYREF || et == ELEMENT_TYPE_VOID) + COMPlusThrow(kInvalidProgramException); - th = ClassLoader::LoadArrayTypeThrowing(th); - break; + th = ClassLoader::LoadArrayTypeThrowing(th); + break; - default: - // Disallow ELEMENT_TYPE_BYREF and ELEMENT_TYPE_VOID - if (et == ELEMENT_TYPE_BYREF || et == ELEMENT_TYPE_VOID) - COMPlusThrow(kInvalidProgramException); - break; + default: + // Disallow ELEMENT_TYPE_BYREF and ELEMENT_TYPE_VOID + if (et == ELEMENT_TYPE_BYREF || et == ELEMENT_TYPE_VOID) + COMPlusThrow(kInvalidProgramException); + break; + } } // The JIT interface should always return fully loaded types @@ -4946,6 +4962,67 @@ CorInfoIsAccessAllowedResult CEEInfo::canAccessClass( return isAccessAllowed; } + +// Check if this is a const value +bool CEEInfo::isConstValue(CORINFO_CLASS_HANDLE cls) +{ + CONTRACTL { + THROWS; + GC_TRIGGERS; + MODE_PREEMPTIVE; + } CONTRACTL_END; + + bool result = false; + + JIT_TO_EE_TRANSITION(); + + result = ((TypeHandle)cls).IsConstValue(); + + EE_TO_JIT_TRANSITION(); + + return result; +} + +// Return the const value if this is a const value type +uint64_t CEEInfo::getConstValue(CORINFO_CLASS_HANDLE cls) +{ + CONTRACTL { + THROWS; + GC_TRIGGERS; + MODE_PREEMPTIVE; + } CONTRACTL_END; + + uint64_t result = 0; + + JIT_TO_EE_TRANSITION(); + + result = ((TypeHandle)cls).GetConstValue(); + + EE_TO_JIT_TRANSITION(); + + return result; +} + +// Return the type of the const value if this is a const value type +CORINFO_CLASS_HANDLE CEEInfo::getConstValueType(CORINFO_CLASS_HANDLE cls) +{ + CONTRACTL { + THROWS; + GC_TRIGGERS; + MODE_PREEMPTIVE; + } CONTRACTL_END; + + CORINFO_CLASS_HANDLE result = nullptr; + + JIT_TO_EE_TRANSITION(); + + result = (CORINFO_CLASS_HANDLE)((TypeHandle)cls).GetConstValueType().AsTAddr(); + + EE_TO_JIT_TRANSITION(); + + return result; +} + //--------------------------------------------------------------------------------------- // Given a method descriptor ftnHnd, extract signature information into sigInfo // Obtain (representative) instantiation information from ftnHnd's owner class @@ -6731,6 +6808,7 @@ mdToken FindGenericMethodArgTypeSpec(IMDInternalImport* pInternalImport) mdToken token; static const BYTE signature[] = { ELEMENT_TYPE_MVAR, 0 }; + static const BYTE cSignature[] = { ELEMENT_TYPE_MVAR, 0 }; hEnumTypeSpecs.EnumAllInit(mdtTypeSpec); while (hEnumTypeSpecs.EnumNext(&token)) @@ -6740,6 +6818,8 @@ mdToken FindGenericMethodArgTypeSpec(IMDInternalImport* pInternalImport) IfFailThrow(pInternalImport->GetTypeSpecFromToken(token, &pSig, &cbSig)); if (cbSig == sizeof(signature) && memcmp(pSig, signature, cbSig) == 0) return token; + if (cbSig == sizeof(cSignature) && memcmp(pSig, cSignature, cbSig) == 0) + return token; } COMPlusThrowHR(COR_E_BADIMAGEFORMAT); diff --git a/src/coreclr/vm/methodtable.h b/src/coreclr/vm/methodtable.h index 69f16bec6ebdd..f632b5821f711 100644 --- a/src/coreclr/vm/methodtable.h +++ b/src/coreclr/vm/methodtable.h @@ -440,6 +440,8 @@ SystemVClassificationType CorInfoType2UnixAmd64Classification(CorElementType eeT SystemVClassificationTypeUnknown, // ELEMENT_TYPE_CMOD_REQD SystemVClassificationTypeUnknown, // ELEMENT_TYPE_CMOD_OPT SystemVClassificationTypeUnknown, // ELEMENT_TYPE_INTERNAL + + SystemVClassificationTypeStruct, // ELEMENT_TYPE_CTARG }; _ASSERTE(sizeof(toSystemVAmd64ClassificationTypeMap) == ELEMENT_TYPE_MAX); @@ -1010,7 +1012,7 @@ class MethodTable //------------------------------------------------------------------- // METHOD TABLES AS TYPE DESCRIPTORS // - // A MethodTable can represeent a type such as "String" or an + // A MethodTable can represent a type such as "String" or an // instantiated type such as "List". // diff --git a/src/coreclr/vm/methodtablebuilder.cpp b/src/coreclr/vm/methodtablebuilder.cpp index 16a074d54f077..ac3a1c5b001ca 100644 --- a/src/coreclr/vm/methodtablebuilder.cpp +++ b/src/coreclr/vm/methodtablebuilder.cpp @@ -12104,7 +12104,8 @@ MethodTableBuilder::GatherGenericsInfo( { pInternalImport->EnumNext(&hEnumGenericPars, &tkTyPar); DWORD flags; - if (FAILED(pInternalImport->GetGenericParamProps(tkTyPar, NULL, &flags, NULL, NULL, NULL))) + mdToken tkTyParType; + if (FAILED(pInternalImport->GetGenericParamProps(tkTyPar, NULL, &flags, NULL, &tkTyParType, NULL))) { pModule->GetAssembly()->ThrowTypeLoadException(pInternalImport, cl, IDS_CLASSLOAD_BADFORMAT); } @@ -12119,7 +12120,7 @@ MethodTableBuilder::GatherGenericsInfo( { // Do NOT use the alloc tracker for this memory as we need it stay allocated even if the load fails. void* mem = (void*)pModule->GetLoaderAllocator()->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(sizeof(TypeVarTypeDesc))); - pTypeVarTypeDesc = new (mem) TypeVarTypeDesc(pModule, cl, i, tkTyPar); + pTypeVarTypeDesc = new (mem) TypeVarTypeDesc(pModule, cl, tkTyParType, i, tkTyPar); pModule->StoreGenericParamThrowing(tkTyPar, pTypeVarTypeDesc); } diff --git a/src/coreclr/vm/sigformat.cpp b/src/coreclr/vm/sigformat.cpp index 52ac7f9ad3192..9794a5c249003 100644 --- a/src/coreclr/vm/sigformat.cpp +++ b/src/coreclr/vm/sigformat.cpp @@ -338,13 +338,85 @@ void SigFormat::AddTypeString(Module* pModule, SigPointer sig, const SigTypeCont AddString(")"); break; } - + case ELEMENT_TYPE_CTARG: + { + CorElementType constValueType; + uint32_t cbSig; + PCCOR_SIGNATURE pSig; + IfFailThrow(sig.GetConstTypeArg(&constValueType, &cbSig, &pSig)); + uint64_t constValue = 0; + memcpy(&constValue, pSig, cbSig); + AddConstValueTypeString(constValueType, constValue); + break; + } default: AddString("**UNKNOWN TYPE**"); } } +void SigFormat::AddConstValueTypeString(CorElementType constValueType, uint64_t constValue) +{ + char buffer[42]; + switch (constValueType) + { + case ELEMENT_TYPE_BOOLEAN: + AddString("Boolean ("); + sprintf_s(buffer, sizeof(buffer), *(uint8_t*)&constValue == 1 ? "true" : "false"); + break; + case ELEMENT_TYPE_I1: + AddString("SByte ("); + sprintf_s(buffer, sizeof(buffer), "%hhd", *(int8_t*)&constValue); + break; + case ELEMENT_TYPE_U1: + AddString("Byte ("); + sprintf_s(buffer, sizeof(buffer), "%hhu", *(uint8_t*)&constValue); + break; + case ELEMENT_TYPE_I2: + AddString("Int16 ("); + sprintf_s(buffer, sizeof(buffer), "%hd", *(int16_t*)&constValue); + break; + case ELEMENT_TYPE_U2: + AddString("UInt16 ("); + sprintf_s(buffer, sizeof(buffer), "%hu", *(uint16_t*)&constValue); + break; + case ELEMENT_TYPE_CHAR: + AddString("Char ("); + sprintf_s(buffer, sizeof(buffer), "0x%04hX", *(uint16_t*)&constValue); + break; + case ELEMENT_TYPE_I4: + AddString("Int32 ("); + sprintf_s(buffer, sizeof(buffer), "%d", *(int32_t*)&constValue); + break; + case ELEMENT_TYPE_U4: + AddString("UInt32 ("); + sprintf_s(buffer, sizeof(buffer), "%u", *(uint32_t*)&constValue); + break; + case ELEMENT_TYPE_I8: + AddString("Int64 ("); + sprintf_s(buffer, sizeof(buffer), "%lld", *(int64_t*)&constValue); + break; + case ELEMENT_TYPE_U8: + AddString("UInt64 ("); + sprintf_s(buffer, sizeof(buffer), "%llu", *(uint64_t*)&constValue); + break; + case ELEMENT_TYPE_R4: + AddString("Single ("); + sprintf_s(buffer, sizeof(buffer), "%f", *(float*)&constValue); + break; + case ELEMENT_TYPE_R8: + AddString("Double ("); + sprintf_s(buffer, sizeof(buffer), "%lf", *(double*)&constValue); + break; + default: + AddString("**UNKNOWN CONST VALUE TYPE** ("); + sprintf_s(buffer, sizeof(buffer), "**UNKNOWN CONST VALUE**"); + break; + } + AddString(buffer); + AddString(")"); +} + void SigFormat::FormatSig(MetaSig &sig, LPCUTF8 szMemberName, LPCUTF8 szClassName, LPCUTF8 szNameSpace) { CONTRACTL @@ -568,7 +640,13 @@ void SigFormat::AddType(TypeHandle th) break; } - + case ELEMENT_TYPE_CTARG: + { + _ASSERTE(th.IsConstValue()); + AddConstValueTypeString(th.AsConstValue()->GetConstValueType().GetInternalCorElementType(), + th.AsConstValue()->GetConstValue()); + break; + } default: AddString("**UNKNOWN TYPE**"); } diff --git a/src/coreclr/vm/sigformat.h b/src/coreclr/vm/sigformat.h index 65a50db0a8448..762b0b1db03bb 100644 --- a/src/coreclr/vm/sigformat.h +++ b/src/coreclr/vm/sigformat.h @@ -35,6 +35,7 @@ class SigFormat size_t _pos; void AddString(LPCUTF8 s); + void AddConstValueTypeString(CorElementType constValueType, uint64_t constValue); void AddTypeString(Module* pModule, SigPointer sig, const SigTypeContext *pTypeContext); }; diff --git a/src/coreclr/vm/siginfo.cpp b/src/coreclr/vm/siginfo.cpp index eb35f3a372538..6ce2617645659 100644 --- a/src/coreclr/vm/siginfo.cpp +++ b/src/coreclr/vm/siginfo.cpp @@ -28,8 +28,8 @@ /*******************************************************************/ const CorTypeInfo::CorTypeInfoEntry CorTypeInfo::info[ELEMENT_TYPE_MAX] = { -#define TYPEINFO(enumName,nameSpace,className,size,gcType,isArray,isPrim,isFloat,isModifier,isGenVar) \ - { nameSpace, className, enumName, size, gcType, isArray, isPrim, isFloat, isModifier, isGenVar }, +#define TYPEINFO(enumName,nameSpace,className,size,gcType,isArray,isPrim,isFloat,isModifier,isGenVar,isConstValue) \ + { nameSpace, className, enumName, size, gcType, isArray, isPrim, isFloat, isModifier, isGenVar, isConstValue }, #include "cortypeinfo.h" # undef TYPEINFO }; @@ -126,6 +126,8 @@ DEFINEELEMENTTYPEINFO(ELEMENT_TYPE_MVAR, -1, TYPE_GC DEFINEELEMENTTYPEINFO(ELEMENT_TYPE_CMOD_REQD, -1, TYPE_GC_NONE, 1) DEFINEELEMENTTYPEINFO(ELEMENT_TYPE_CMOD_OPT, -1, TYPE_GC_NONE, 1) DEFINEELEMENTTYPEINFO(ELEMENT_TYPE_INTERNAL, -1, TYPE_GC_NONE, 0) + +DEFINEELEMENTTYPEINFO(ELEMENT_TYPE_CTARG, 8, TYPE_GC_OTHER, 0) }; unsigned GetSizeForCorElementType(CorElementType etyp) @@ -221,6 +223,17 @@ void SigPointer::ConvertToInternalExactlyOne(Module* pSigModule, SigTypeContext pSigBuilder->AppendData(varNum); } break; + case ELEMENT_TYPE_CTARG: + { + CorElementType etype; + PCCOR_SIGNATURE elem; + uint32_t cb; + // Skip const type argument + IfFailThrowBF(GetConstTypeArg(&etype, &cb, &elem), BFA_BAD_COMPLUS_SIG, pSigModule); + pSigBuilder->AppendElementType(etype); + pSigBuilder->AppendBlob((void*)elem, cb); + } + break; case ELEMENT_TYPE_OBJECT: case ELEMENT_TYPE_STRING: case ELEMENT_TYPE_TYPEDBYREF: @@ -1322,6 +1335,24 @@ TypeHandle SigPointer::GetTypeHandleThrowing( ClassLoader::EnsureLoaded(thRet, level); break; } + + case ELEMENT_TYPE_CTARG: + { +#ifndef DACCESS_COMPILE + CorElementType valueType; + uint32_t cb; + PCCOR_SIGNATURE elem; + IfFailThrowBF(psig.GetConstTypeArg(&valueType, &cb, &elem), BFA_BAD_SIGNATURE, pOrigModule); + uint64_t value = 0; + memcpy(&value, elem, cb); + TypeHandle th = TypeHandle(CoreLibBinder::GetElementType(valueType)); + thRet = ClassLoader::LoadConstValueTypeThrowing(th, value, typ, fLoadTypes, level); +#else + DacNotImpl(); + thRet = TypeHandle(); +#endif + break; + } case ELEMENT_TYPE_GENERICINST: { @@ -4793,11 +4824,12 @@ BOOL MetaSig::CompareVariableConstraints(const Substitution *pSubst1, IMDInternalImport *pInternalImport2 = pModule2->GetMDImport(); DWORD specialConstraints1,specialConstraints2; + mdToken type1, type2; // check special constraints { - IfFailThrow(pInternalImport1->GetGenericParamProps(tok1, NULL, &specialConstraints1, NULL, NULL, NULL)); - IfFailThrow(pInternalImport2->GetGenericParamProps(tok2, NULL, &specialConstraints2, NULL, NULL, NULL)); + IfFailThrow(pInternalImport1->GetGenericParamProps(tok1, NULL, &specialConstraints1, NULL, &type1, NULL)); + IfFailThrow(pInternalImport2->GetGenericParamProps(tok2, NULL, &specialConstraints2, NULL, &type2, NULL)); specialConstraints1 = specialConstraints1 & gpSpecialConstraintMask; specialConstraints2 = specialConstraints2 & gpSpecialConstraintMask; @@ -4821,6 +4853,10 @@ BOOL MetaSig::CompareVariableConstraints(const Substitution *pSubst1, if ((specialConstraints2 & gpAcceptByRefLike) == 0) return FALSE; } + if (type1 != type2) + { + return FALSE; + } } @@ -4833,6 +4869,10 @@ BOOL MetaSig::CompareVariableConstraints(const Substitution *pSubst1, mdToken tkConstraintType1, tkParam1; IfFailThrow(pInternalImport1->GetGenericParamConstraintProps(tkConstraint1, &tkParam1, &tkConstraintType1)); _ASSERTE(tkParam1 == tok1); + if (TypeFromToken(tkConstraintType1) == mdtGenericParamType) + { + continue; + } // for each non-object constraint, // and, in the case of a notNullableValueType, each non-ValueType constraint, diff --git a/src/coreclr/vm/typedesc.cpp b/src/coreclr/vm/typedesc.cpp index 95e86ccc96169..994d041ca6885 100644 --- a/src/coreclr/vm/typedesc.cpp +++ b/src/coreclr/vm/typedesc.cpp @@ -72,6 +72,11 @@ PTR_Module TypeDesc::GetLoaderModule() { return dac_cast(this)->GetModule(); } + else if (IsConstValue()) + { + PTR_ConstValueTypeDesc asConstValue = dac_cast(this); + return ClassLoader::ComputeLoaderModuleForConstValue(asConstValue->GetConstValueType()); + } else { PTR_Module retVal = NULL; @@ -169,7 +174,7 @@ PTR_Module TypeDesc::GetModule() { return asVar->GetModule(); } - _ASSERTE(GetInternalCorElementType() == ELEMENT_TYPE_FNPTR); + _ASSERTE(GetInternalCorElementType() == ELEMENT_TYPE_FNPTR || GetInternalCorElementType() == ELEMENT_TYPE_CTARG); return GetLoaderModule(); } @@ -304,6 +309,12 @@ BOOL TypeDesc::IsGenericVariable() return CorTypeInfo::IsGenericVariable_NoThrow(GetInternalCorElementType()); } +BOOL TypeDesc::IsConstValue() +{ + LIMITED_METHOD_DAC_CONTRACT; + return CorTypeInfo::IsConstValue_NoThrow(GetInternalCorElementType()); +} + BOOL TypeDesc::IsFnPtr() { LIMITED_METHOD_DAC_CONTRACT; @@ -875,8 +886,7 @@ void TypeVarTypeDesc::LoadConstraints(ClassLoadLevel level /* = CLASS_LOADED */) { LoaderAllocator* pAllocator = GetModule()->GetLoaderAllocator(); // If there is a single class constraint we place it at index 0 of the array - AllocMemHolder constraints - (pAllocator->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(numConstraints) * S_SIZE_T(sizeof(TypeHandle)))); + AllocMemHolder constraints; DWORD i = 0; while (pInternalImport->EnumNext(&hEnum, &tkConstraint)) @@ -887,6 +897,21 @@ void TypeVarTypeDesc::LoadConstraints(ClassLoadLevel level /* = CLASS_LOADED */) { GetModule()->GetAssembly()->ThrowTypeLoadException(pInternalImport, pMT->GetCl(), IDS_CLASSLOAD_BADFORMAT); } + + if (i == 0) + { + // The first entry may be the type of type parameter, we need to skip it + if (TypeFromToken(tkConstraintType) == mdtGenericParamType) + { + numConstraints--; + continue; + } + else + { + constraints = (pAllocator->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(numConstraints) * S_SIZE_T(sizeof(TypeHandle)))); + } + } + _ASSERTE(tkParam == GetToken()); TypeHandle thConstraint = ClassLoader::LoadTypeDefOrRefOrSpecThrowing(GetModule(), tkConstraintType, &typeContext, @@ -1115,6 +1140,10 @@ TypeHandle LoadTypeVarConstraint(TypeVarTypeDesc *pTypeVar, mdGenericParamConstr ClassLoader::LoadTypes, CLASS_DEPENDENCIES_LOADED, FALSE, pInstContext->m_pSubstChain); } + else if (TypeFromToken(tkConstraintType) == mdtGenericParamType) + { + return TypeHandle(); + } else { LoadConstraintOnOpenType: @@ -1379,7 +1408,11 @@ void GatherConstraintsRecursive(TypeVarTypeDesc *pTyArg, ArrayList *pArgList, co { TypeHandle thConstraint = LoadTypeVarConstraint(pTyArg, tkConstraint, pInstContext); - if (thConstraint.IsGenericVariable()) + if (thConstraint.IsNull()) + { + continue; + } + else if (thConstraint.IsGenericVariable()) { // see if it's safe to recursively call ourselves if (!TypeHandleList::Exists(pVisitedVars, thConstraint)) @@ -1445,7 +1478,8 @@ BOOL TypeVarTypeDesc::SatisfiesConstraints(SigTypeContext *pTypeContextOfConstra // First check special constraints DWORD flags; - IfFailThrow(pInternalImport->GetGenericParamProps(genericParamToken, NULL, &flags, NULL, NULL, NULL)); + mdToken tkType; + IfFailThrow(pInternalImport->GetGenericParamProps(genericParamToken, NULL, &flags, NULL, &tkType, NULL)); DWORD specialConstraints = flags & gpSpecialConstraintMask; @@ -1504,6 +1538,21 @@ BOOL TypeVarTypeDesc::SatisfiesConstraints(SigTypeContext *pTypeContextOfConstra // GatherConstraintsRecursive(pTyVar, &argList, pInstContext); } + else if (thArg.IsConstValue()) + { + if (!RidFromToken(tkType)) + return FALSE; + ConstValueTypeDesc *pConVal = thArg.AsConstValue(); + TypeHandle thType = ClassLoader::LoadTypeDefOrRefOrSpecThrowing(GetModule(), + tkType, + pTypeContextOfConstraintDeclarer, + ClassLoader::ThrowIfNotFound, + ClassLoader::FailIfUninstDefOrRef, + ClassLoader::LoadTypes, + CLASS_DEPENDENCIES_LOADED); + if (!pConVal->GetConstValueType().IsEquivalentTo(thType)) + return FALSE; + } else { if ((specialConstraints & gpNotNullableValueTypeConstraint) != 0) @@ -1551,6 +1600,9 @@ BOOL TypeVarTypeDesc::SatisfiesConstraints(SigTypeContext *pTypeContextOfConstra mdToken tkConstraintType, tkParam; IfFailThrow(pInternalImport->GetGenericParamConstraintProps(tkConstraint, &tkParam, &tkConstraintType)); + if (TypeFromToken(tkConstraintType) == mdtGenericParamType) + continue; + _ASSERTE(tkParam == GetToken()); TypeHandle thConstraint = ClassLoader::LoadTypeDefOrRefOrSpecThrowing(GetModule(), tkConstraintType, diff --git a/src/coreclr/vm/typedesc.h b/src/coreclr/vm/typedesc.h index b86845c81e21c..260af32620400 100644 --- a/src/coreclr/vm/typedesc.h +++ b/src/coreclr/vm/typedesc.h @@ -103,6 +103,9 @@ class TypeDesc // VAR, MVAR BOOL IsGenericVariable(); + // CTARG + BOOL IsConstValue(); + // ELEMENT_TYPE_FNPTR BOOL IsFnPtr(); @@ -164,6 +167,9 @@ class TypeDesc Instantiation GetClassOrArrayInstantiation(); // only meaningful for ParamTypeDesc; see above TypeHandle GetRootTypeParam(); // only allowed for ParamTypeDesc, helper method used to avoid recursion + TypeHandle GetConstValueType(); // only meaningful for ConstValueTypeDesc + uint64_t GetConstValue(); // only meaningful for ConstValueTypeDesc + // Note that if the TypeDesc, e.g. a function pointer type, involves parts that may // come from either a SharedDomain or an AppDomain then special rules apply to GetDomain. // It returns the SharedDomain if all the @@ -310,6 +316,53 @@ class ParamTypeDesc : public TypeDesc { RUNTIMETYPEHANDLE m_hExposedClassObject; }; +typedef DPTR(class ConstValueTypeDesc) PTR_ConstValueTypeDesc; + +class ConstValueTypeDesc : public TypeDesc +{ + friend class TypeDesc; +public: +#ifndef DACCESS_COMPILE + + ConstValueTypeDesc(TypeHandle type, uint64_t value) : + TypeDesc(CorElementType::ELEMENT_TYPE_CTARG), m_type(type) + { + CONTRACTL + { + NOTHROW; + GC_NOTRIGGER; + } + CONTRACTL_END; + + m_value = value; + } + +#endif // #ifndef DACCESS_COMPILE + + // placement new operator + void* operator new(size_t size, void* spot) { LIMITED_METHOD_CONTRACT; return (spot); } + + TypeHandle GetConstValueType() + { + LIMITED_METHOD_CONTRACT; + SUPPORTS_DAC; + + return m_type; + } + + uint64_t GetConstValue() + { + LIMITED_METHOD_CONTRACT; + SUPPORTS_DAC; + + return m_value; + } + +protected: + TypeHandle m_type; + uint64_t m_value; +}; + /*************************************************************************/ // These are for verification of generic code and reflection over generic code. // Each TypeVarTypeDesc represents a class or method type variable, as specified by a GenericParam entry. @@ -322,8 +375,8 @@ class TypeVarTypeDesc : public TypeDesc #ifndef DACCESS_COMPILE - TypeVarTypeDesc(PTR_Module pModule, mdToken typeOrMethodDef, unsigned int index, mdGenericParam token) : - TypeDesc(TypeFromToken(typeOrMethodDef) == mdtTypeDef ? ELEMENT_TYPE_VAR : ELEMENT_TYPE_MVAR) + TypeVarTypeDesc(PTR_Module pModule, mdToken typeOrMethodDef, mdToken type, unsigned int index, mdGenericParam token) : + TypeDesc(GetTypeVarTokenType(pModule, typeOrMethodDef, type, token)) { CONTRACTL { @@ -338,12 +391,22 @@ class TypeVarTypeDesc : public TypeDesc m_pModule = pModule; m_typeOrMethodDef = typeOrMethodDef; + m_type = type; m_token = token; m_index = index; m_hExposedClassObject = 0; m_constraints = NULL; m_numConstraints = (DWORD)-1; } + + CorElementType GetTypeVarTokenType(PTR_Module pModule, mdToken typeOrMethodDef, mdToken type, mdGenericParam token) + { + LIMITED_METHOD_CONTRACT; + + BOOL isTypeDef = TypeFromToken(typeOrMethodDef) == mdtTypeDef; + return isTypeDef ? ELEMENT_TYPE_VAR : ELEMENT_TYPE_MVAR; + } + #endif // #ifndef DACCESS_COMPILE // placement new operator @@ -364,6 +427,13 @@ class TypeVarTypeDesc : public TypeDesc return m_index; } + mdToken GetType() + { + LIMITED_METHOD_CONTRACT; + SUPPORTS_DAC; + return m_type; + } + mdGenericParam GetToken() { LIMITED_METHOD_CONTRACT; @@ -457,6 +527,9 @@ class TypeVarTypeDesc : public TypeDesc // Declaring type or method mdToken m_typeOrMethodDef; + // the type of const type parameter if it is + mdToken m_type; + // Constraints, determined on first call to GetConstraints Volatile m_numConstraints; // -1 until number has been determined PTR_TypeHandle m_constraints; diff --git a/src/coreclr/vm/typedesc.inl b/src/coreclr/vm/typedesc.inl index 9cdd6b4911f31..cd03d3322444b 100644 --- a/src/coreclr/vm/typedesc.inl +++ b/src/coreclr/vm/typedesc.inl @@ -49,6 +49,25 @@ inline TypeHandle ParamTypeDesc::GetTypeParam() { return(this->m_Arg); } +inline TypeHandle TypeDesc::GetConstValueType() { + LIMITED_METHOD_DAC_CONTRACT; + + if (IsGenericVariable()) + return TypeHandle(); + + _ASSERTE(IsConstValue()); + ConstValueTypeDesc* asConstValue = dac_cast(this); + return(asConstValue->m_type); +} + +inline uint64_t TypeDesc::GetConstValue() { + LIMITED_METHOD_DAC_CONTRACT; + + _ASSERTE(IsConstValue()); + ConstValueTypeDesc* asConstValue = dac_cast(this); + return(asConstValue->m_value); +} + inline Instantiation TypeDesc::GetClassOrArrayInstantiation() { LIMITED_METHOD_DAC_CONTRACT; diff --git a/src/coreclr/vm/typehandle.cpp b/src/coreclr/vm/typehandle.cpp index 053cc759217c7..d221b43ee4898 100644 --- a/src/coreclr/vm/typehandle.cpp +++ b/src/coreclr/vm/typehandle.cpp @@ -1014,6 +1014,30 @@ BOOL TypeHandle::IsFnPtrType() const (GetSignatureCorElementType() == ELEMENT_TYPE_FNPTR)); } +BOOL TypeHandle::IsConstValue() const +{ + LIMITED_METHOD_DAC_CONTRACT; + + return (IsTypeDesc() && + (GetSignatureCorElementType() == ELEMENT_TYPE_CTARG)); +} + +uint64_t TypeHandle::GetConstValue() const +{ + LIMITED_METHOD_DAC_CONTRACT; + + _ASSERTE(IsTypeDesc()); + return AsConstValue()->GetConstValue(); +} + +TypeHandle TypeHandle::GetConstValueType() const +{ + LIMITED_METHOD_DAC_CONTRACT; + + _ASSERTE(IsTypeDesc()); + return AsConstValue()->GetConstValueType(); +} + BOOL TypeHandle::IsRestored() const { LIMITED_METHOD_DAC_CONTRACT; @@ -1479,7 +1503,12 @@ TypeKey TypeHandle::GetTypeKey() const { TypeDesc *pTD = AsTypeDesc(); CorElementType etype = pTD->GetInternalCorElementType(); - if (CorTypeInfo::IsModifier_NoThrow(etype) || etype == ELEMENT_TYPE_VALUETYPE) + if (etype == ELEMENT_TYPE_CTARG) + { + TypeKey tk(AsConstValue()->GetConstValueType(), AsConstValue()->GetConstValue()); + return tk; + } + else if (CorTypeInfo::IsModifier_NoThrow(etype) || etype == ELEMENT_TYPE_VALUETYPE) { TypeKey tk(etype, pTD->GetTypeParam()); return tk; diff --git a/src/coreclr/vm/typehandle.h b/src/coreclr/vm/typehandle.h index 8e2287eb9d3f2..618aeadb0ce20 100644 --- a/src/coreclr/vm/typehandle.h +++ b/src/coreclr/vm/typehandle.h @@ -22,6 +22,7 @@ class TypeHandle; class Instantiation; class FnPtrTypeDesc; class ParamTypeDesc; +class ConstValueTypeDesc; class TypeVarTypeDesc; class MethodTable; class EEClass; @@ -39,6 +40,7 @@ struct CORINFO_CLASS_STRUCT_; typedef DPTR(class TypeVarTypeDesc) PTR_TypeVarTypeDesc; typedef SPTR(class FnPtrTypeDesc) PTR_FnPtrTypeDesc; typedef DPTR(class ParamTypeDesc) PTR_ParamTypeDesc; +typedef DPTR(class ConstValueTypeDesc) PTR_ConstValueTypeDesc; typedef DPTR(class TypeDesc) PTR_TypeDesc; typedef DPTR(class TypeHandle) PTR_TypeHandle; @@ -476,6 +478,11 @@ class TypeHandle // VAR or MVAR BOOL IsGenericVariable() const; + + // CTARG + BOOL IsConstValue() const; + uint64_t GetConstValue() const; + TypeHandle GetConstValueType() const; // BYREF BOOL IsByRef() const; @@ -508,6 +515,8 @@ class TypeHandle inline BOOL HasTypeEquivalence() const; FnPtrTypeDesc* AsFnPtrType() const; + + ConstValueTypeDesc* AsConstValue() const; TypeVarTypeDesc* AsGenericVariable() const; @@ -555,14 +564,15 @@ class TypeHandle union { - TADDR m_asTAddr; // we look at the low order bits + TADDR m_asTAddr; // we look at the low order bits #ifndef DACCESS_COMPILE - void * m_asPtr; - PTR_MethodTable m_asMT; - PTR_TypeDesc m_asTypeDesc; - PTR_ParamTypeDesc m_asParamTypeDesc; - PTR_TypeVarTypeDesc m_asTypeVarTypeDesc; - PTR_FnPtrTypeDesc m_asFnPtrTypeDesc; + void * m_asPtr; + PTR_MethodTable m_asMT; + PTR_TypeDesc m_asTypeDesc; + PTR_ParamTypeDesc m_asParamTypeDesc; + PTR_TypeVarTypeDesc m_asTypeVarTypeDesc; + PTR_FnPtrTypeDesc m_asFnPtrTypeDesc; + PTR_ConstValueTypeDesc m_asConstValueTypeDesc; #endif }; }; diff --git a/src/coreclr/vm/typehandle.inl b/src/coreclr/vm/typehandle.inl index dca823aff6d16..97a851030cbb5 100644 --- a/src/coreclr/vm/typehandle.inl +++ b/src/coreclr/vm/typehandle.inl @@ -98,6 +98,17 @@ inline FnPtrTypeDesc* TypeHandle::AsFnPtrType() const return result; } +inline ConstValueTypeDesc* TypeHandle::AsConstValue() const +{ + LIMITED_METHOD_DAC_CONTRACT; + + _ASSERTE(IsConstValue()); + + ConstValueTypeDesc* result = PTR_ConstValueTypeDesc(m_asTAddr - 2); + PREFIX_ASSUME(result != NULL); + return result; +} + inline TypeVarTypeDesc* TypeHandle::AsGenericVariable() const { LIMITED_METHOD_DAC_CONTRACT; diff --git a/src/coreclr/vm/typehash.cpp b/src/coreclr/vm/typehash.cpp index dfc355c3fafba..27fcfb56b67ae 100644 --- a/src/coreclr/vm/typehash.cpp +++ b/src/coreclr/vm/typehash.cpp @@ -197,6 +197,18 @@ static DWORD HashParamType(CorElementType kind, TypeHandle typeParam) return (DWORD)dwHash; } +static DWORD HashConstValueType(TypeHandle valueType, uint64_t value) +{ + WRAPPER_NO_CONTRACT; + INT_PTR dwHash = 5381; + DWORD lowerPart = (DWORD)(value & 0xFFFFFFFF); + DWORD higherPart = (DWORD)((value & 0xFFFFFFFF00000000) >> 32); + dwHash = ((dwHash << 5) + dwHash) ^ valueType.AsTAddr(); + dwHash = ((dwHash << 5) + dwHash) ^ higherPart; + dwHash = ((dwHash << 5) + dwHash) ^ lowerPart; + return (DWORD)dwHash; +} + // Calculate hash value from type handle static DWORD HashTypeHandle(TypeHandle t) { @@ -225,6 +237,11 @@ static DWORD HashTypeHandle(TypeHandle t) FnPtrTypeDesc* pTD = t.AsFnPtrType(); retVal = HashFnPtrType(pTD->GetCallConv(), pTD->GetNumArgs(), pTD->GetRetAndArgTypesPointer()); } + else if (t.IsConstValue()) + { + ConstValueTypeDesc* pTD = t.AsConstValue(); + retVal = HashConstValueType(pTD->GetConstValueType(), pTD->GetConstValue()); + } else if (t.IsGenericVariable()) { _ASSERTE(!"Generic variables are unexpected here."); @@ -259,6 +276,10 @@ DWORD HashTypeKey(TypeKey* pKey) { return HashFnPtrType(pKey->GetCallConv(), pKey->GetNumArgs(), pKey->GetRetAndArgTypes()); } + else if (pKey->GetKind() == ELEMENT_TYPE_CTARG) + { + return HashConstValueType(pKey->GetConstValueType(), pKey->GetConstValue()); + } else { return HashParamType(pKey->GetKind(), pKey->GetElementType()); @@ -327,6 +348,29 @@ EETypeHashEntry_t *EETypeHashTable::FindItem(TypeKey* pKey) pSearch = BaseFindNextEntryByHash(&sContext); } } + else if (kind == ELEMENT_TYPE_CTARG) + { + for (pSearch = BaseFindFirstEntryByHash(dwHash, &sContext); + pSearch != NULL; + pSearch = BaseFindNextEntryByHash(&sContext)) + { + if (!pSearch->GetTypeHandle().IsConstValue()) + continue; + + TypeHandle valueType = pKey->GetConstValueType(); + if ((pSearch->GetTypeHandle().GetConstValueType() != valueType)) + continue; + + uint64_t sourceValue = pSearch->GetTypeHandle().GetConstValue(); + uint64_t targetValue = pKey->GetConstValue(); + + if (sourceValue != targetValue) + continue; + + result = pSearch; + break; + } + } else { // Type parameters for array and pointer types are necessarily in the same loader module @@ -359,7 +403,7 @@ EETypeHashEntry_t *EETypeHashTable::FindItem(TypeKey* pKey) if (pSearch->GetTypeHandle().GetSignatureCorElementType() != kind) continue; - + if (pSearch->GetTypeHandle().GetTypeParam() != pKey->GetElementType()) continue; @@ -528,8 +572,8 @@ VOID EETypeHashTable::InsertValue(TypeHandle data) PRECONDITION(IsUnsealed()); // If we are sealed then we should not be adding to this hashtable PRECONDITION(CheckPointer(data)); PRECONDITION(!data.IsGenericTypeDefinition()); // Generic type defs live in typedef table (availableClasses) - PRECONDITION(data.HasInstantiation() || data.HasTypeParam() || data.IsFnPtrType()); // It's an instantiated type or an array/ptr/byref type - PRECONDITION(m_pModule == NULL || GetModule()->IsTenured()); // Destruct won't destruct m_pAvailableParamTypes for non-tenured modules - so make sure no one tries to insert one before the Module has been tenured + PRECONDITION(data.HasInstantiation() || data.HasTypeParam() || data.IsFnPtrType() || data.IsConstValue()); // It's an instantiated type or an array/ptr/byref/const type + PRECONDITION(m_pModule == NULL || GetModule()->IsTenured()); // Destruct won't destruct m_pAvailableParamTypes and m_pAvailableConstValues for non-tenured modules - so make sure no one tries to insert one before the Module has been tenured } CONTRACTL_END diff --git a/src/coreclr/vm/typehashingalgorithms.h b/src/coreclr/vm/typehashingalgorithms.h index fc428c1ef3de6..e7074b7eaa91e 100644 --- a/src/coreclr/vm/typehashingalgorithms.h +++ b/src/coreclr/vm/typehashingalgorithms.h @@ -76,6 +76,13 @@ inline static int ComputeByrefTypeHashCode(int parameterTypeHashcode) return (parameterTypeHashcode + _rotl(parameterTypeHashcode, 7)) ^ 0x4C85; } +inline static int ComputeConstValueTypeHashCode(int constValueTypeHashcode, uint64_t constValue) +{ + LIMITED_METHOD_CONTRACT; + + return (constValueTypeHashcode + _rotl(constValueTypeHashcode, 11)) ^ (int)(constValue & 0xFFFFFFFF) ^ (int)((constValue & 0xFFFFFFFF00000000) >> 32); +} + inline static int ComputeNestedTypeHashCode(int enclosingTypeHashcode, int nestedTypeNameHash) { LIMITED_METHOD_CONTRACT; diff --git a/src/coreclr/vm/typekey.h b/src/coreclr/vm/typekey.h index 57044cc5f7aaa..96d38384a301d 100644 --- a/src/coreclr/vm/typekey.h +++ b/src/coreclr/vm/typekey.h @@ -9,6 +9,7 @@ // Support for type lookups based on components of the type (as opposed to string) // Used in // * Table of constructed types (Module::m_pAvailableParamTypes) +// * Table of const values (Module::m_pAvailableConstValues) // * Types currently being loaded (ClassLoader::m_pUnresolvedClassHash) // // Type handles are in one-to-one correspondence with TypeKeys @@ -27,6 +28,7 @@ class TypeKey // ELEMENT_TYPE_PTR and ELEMENT_TYPE_BYREF for pointer types // ELEMENT_TYPE_FNPTR for function pointer types // ELEMENT_TYPE_VALUETYPE for native value types (used in IL stubs) + // ELEMENT_TYPE_CTARG for const value types (used in const generic instantiations) CorElementType m_kind; union @@ -57,6 +59,12 @@ class TypeKey DWORD m_numArgs; TypeHandle* m_pRetAndArgTypes; } asFnPtr; + + struct + { + TADDR m_valueType; + uint64_t m_value; + } asConstValue; } u; public: @@ -99,6 +107,17 @@ class TypeKey u.asFnPtr.m_numArgs = numArgs; u.asFnPtr.m_pRetAndArgTypes = retAndArgTypes; } + + // Constructor for const value type + TypeKey(TypeHandle valueType, uint64_t value) + { + WRAPPER_NO_CONTRACT; + SUPPORTS_DAC; + PRECONDITION(CheckPointer(valueType)); + m_kind = ELEMENT_TYPE_CTARG; + u.asConstValue.m_value = value; + u.asConstValue.m_valueType = valueType.AsTAddr(); + } CorElementType GetKind() const { @@ -124,6 +143,22 @@ class TypeKey return TypeHandle::FromTAddr(u.asParamType.m_paramType); } + TypeHandle GetConstValueType() const + { + WRAPPER_NO_CONTRACT; + SUPPORTS_DAC; + PRECONDITION(m_kind == ELEMENT_TYPE_CTARG); + return TypeHandle::FromTAddr(u.asConstValue.m_valueType); + } + + uint64_t GetConstValue() const + { + WRAPPER_NO_CONTRACT; + SUPPORTS_DAC; + PRECONDITION(m_kind == ELEMENT_TYPE_CTARG); + return u.asConstValue.m_value; + } + BOOL IsConstructed() const { LIMITED_METHOD_CONTRACT; @@ -240,6 +275,11 @@ class TypeKey return pKey1->u.asParamType.m_paramType == pKey2->u.asParamType.m_paramType && pKey1->u.asParamType.m_rank == pKey2->u.asParamType.m_rank; } + else if (pKey1->m_kind == ELEMENT_TYPE_CTARG) + { + return pKey1->u.asConstValue.m_valueType == pKey2->u.asConstValue.m_valueType + && pKey1->u.asConstValue.m_value == pKey2->u.asConstValue.m_value; + } else { _ASSERTE(pKey1->m_kind == ELEMENT_TYPE_FNPTR); diff --git a/src/coreclr/vm/typestring.cpp b/src/coreclr/vm/typestring.cpp index e92e6d525312e..a50e7bb9a6218 100644 --- a/src/coreclr/vm/typestring.cpp +++ b/src/coreclr/vm/typestring.cpp @@ -767,11 +767,65 @@ void TypeString::AppendType(TypeNameBuilder& tnb, TypeHandle ty, Instantiation t LPCSTR szName = NULL; mdToken mdOwner; + mdToken mdType; - IfFailThrow(ty.GetModule()->GetMDImport()->GetGenericParamProps(token, NULL, NULL, &mdOwner, NULL, &szName)); + IfFailThrow(ty.GetModule()->GetMDImport()->GetGenericParamProps(token, NULL, NULL, &mdOwner, &mdType, &szName)); _ASSERTE(TypeFromToken(mdOwner) == mdtTypeDef || TypeFromToken(mdOwner) == mdtMethodDef); + if (RidFromToken(mdType)) + { + _ASSERTE(TypeFromToken(mdType) == mdtTypeSpec); + PCCOR_SIGNATURE pSig; + ULONG cSig; + IfFailThrow(ty.GetModule()->GetMDImport()->GetTypeSpecFromToken(mdType, &pSig, &cSig)); + SmallStackSString typeName(SString::Utf8, "literal "); + LPCSTR str; + switch (*pSig++) + { + case ELEMENT_TYPE_BOOLEAN : + str = "bool"; goto APPEND; + case ELEMENT_TYPE_CHAR : + str = "char"; goto APPEND; + case ELEMENT_TYPE_I1 : + str = "int8"; goto APPEND; + case ELEMENT_TYPE_U1 : + str = "uint8"; goto APPEND; + case ELEMENT_TYPE_I2 : + str = "int16"; goto APPEND; + case ELEMENT_TYPE_U2 : + str = "uint16"; goto APPEND; + case ELEMENT_TYPE_I4 : + str = "int32"; goto APPEND; + case ELEMENT_TYPE_U4 : + str = "uint32"; goto APPEND; + case ELEMENT_TYPE_I8 : + str = "int64"; goto APPEND; + case ELEMENT_TYPE_U8 : + str = "uint64"; goto APPEND; + case ELEMENT_TYPE_R4 : + str = "float32"; goto APPEND; + case ELEMENT_TYPE_R8 : + str = "float64"; goto APPEND; + APPEND: + typeName.AppendUTF8(str); + break; + case ELEMENT_TYPE_VAR : + typeName.AppendUTF8("!"); + goto APPEND_VAR; + case ELEMENT_TYPE_MVAR : + typeName.AppendUTF8("!!"); + APPEND_VAR: + typeName.AppendPrintf("%u", CorSigUncompressData(pSig)); + break; + default: + _ASSERTE(!"UNKNOWN CONST TYPE PARAMETER"); + break; + } + typeName.AppendUTF8(" "); + tnb.Append(typeName.GetUnicode()); + } + LPCSTR szPrefix; if (!(format & FormatGenericParam)) szPrefix = ""; @@ -830,6 +884,14 @@ void TypeString::AppendType(TypeNameBuilder& tnb, TypeHandle ty, Instantiation t tnb.AddNameNoEscaping(W("")); } } + // or a const value + else if (ty.IsConstValue()) + { + AppendType(tnb, ty.AsConstValue()->GetConstValueType(), Instantiation(), format & ~FormatAssembly); + tnb.Append(W("(")); + AppendConstValue(tnb, ty.AsConstValue()->GetConstValueType().GetInternalCorElementType(), ty.AsConstValue()->GetConstValue()); + tnb.Append(W(")")); + } // ...otherwise it's just a plain type def or an instantiated type else @@ -1153,6 +1215,14 @@ void TypeString::AppendTypeKey(TypeNameBuilder& tnb, TypeKey *pTypeKey, DWORD fo { RETURN; } + else if (kind == ELEMENT_TYPE_CTARG) + { + TypeHandle valueType = pTypeKey->GetConstValueType(); + AppendType(tnb, valueType, Instantiation(), format & ~FormatAssembly); + tnb.Append(W("(")); + AppendConstValue(tnb, valueType.GetInternalCorElementType(), pTypeKey->GetConstValue()); + tnb.Append(W(")")); + } // ...otherwise it's just a plain type def or an instantiated type else @@ -1213,6 +1283,69 @@ void TypeString::AppendTypeKey(SString& ss, TypeKey *pTypeKey, DWORD format) RETURN; } +void TypeString::AppendConstValue(TypeNameBuilder& tnb, CorElementType valueType, uint64_t value) +{ + CONTRACT_VOID + { + MODE_ANY; + GC_NOTRIGGER; + THROWS; + } + CONTRACT_END + + WCHAR buffer[64]{}; + SString pValueString = SString(buffer, 64); + switch (valueType) + { + case ELEMENT_TYPE_BOOLEAN: + if (*(uint8_t*)&value == 0) + pValueString.Printf("false"); + else + pValueString.Printf("true"); + break; + case ELEMENT_TYPE_CHAR: + pValueString.Printf("%hX", *(WCHAR*)&value); + break; + case ELEMENT_TYPE_I1: + pValueString.Printf("%hhd", *(uint8_t*)&value); + break; + case ELEMENT_TYPE_U1: + pValueString.Printf("%hhu", *(int8_t*)&value); + break; + case ELEMENT_TYPE_I2: + pValueString.Printf("%hd", *(uint16_t*)&value); + break; + case ELEMENT_TYPE_U2: + pValueString.Printf("%hu", *(int16_t*)&value); + break; + case ELEMENT_TYPE_I4: + pValueString.Printf("%d", *(uint32_t*)&value); + break; + case ELEMENT_TYPE_U4: + pValueString.Printf("%u", *(int32_t*)&value); + break; + case ELEMENT_TYPE_I8: + pValueString.Printf("%lld", *(uint64_t*)&value); + break; + case ELEMENT_TYPE_U8: + pValueString.Printf("%llu", *(int64_t*)&value); + break; + case ELEMENT_TYPE_R4: + pValueString.Printf("%f", *(float*)&value); + break; + case ELEMENT_TYPE_R8: + pValueString.Printf("%lf", *(double*)&value); + break; + default: + _ASSERTE(!"UNKONWN CONST VALUE TYPE"); + pValueString.Printf("/* UNKNOWN CONST VALUE*/"); + break; + } + tnb.Append(pValueString.GetUnicode()); + + RETURN; +} + /*static*/ void TypeString::EscapeSimpleTypeName(SString* ssTypeName, SString* ssEscapedTypeName) { diff --git a/src/coreclr/vm/typestring.h b/src/coreclr/vm/typestring.h index 8f00e7ebbd3f8..a88ffc22c60cb 100644 --- a/src/coreclr/vm/typestring.h +++ b/src/coreclr/vm/typestring.h @@ -204,6 +204,7 @@ class TypeString static void AppendInst(TypeNameBuilder& tnb, Instantiation inst, DWORD format = FormatNamespace); static void AppendType(TypeNameBuilder& tnb, TypeHandle t, Instantiation typeInstantiation, DWORD format = FormatNamespace); // ???? static void AppendTypeKey(TypeNameBuilder& tnb, TypeKey *pTypeKey, DWORD format = FormatNamespace); + static void AppendConstValue(TypeNameBuilder& tnb, CorElementType valueType, uint64_t value); static void AppendParamTypeQualifier(TypeNameBuilder& tnb, CorElementType kind, DWORD rank); static void EscapeSimpleTypeName(SString* ssTypeName, SString* ssEscapedTypeName); static bool ContainsReservedChar(LPCWSTR pTypeName); diff --git a/src/coreclr/vm/versionresilienthashcode.cpp b/src/coreclr/vm/versionresilienthashcode.cpp index 85bd146d8dc46..886820a396cb2 100644 --- a/src/coreclr/vm/versionresilienthashcode.cpp +++ b/src/coreclr/vm/versionresilienthashcode.cpp @@ -153,6 +153,11 @@ int GetVersionResilientTypeHashCode(TypeHandle type) { return ComputeByrefTypeHashCode(GetVersionResilientTypeHashCode(type.AsTypeDesc()->GetTypeParam())); } + else + if (type.IsConstValue()) + { + return ComputeConstValueTypeHashCode(GetVersionResilientTypeHashCode(type.AsTypeDesc()->GetConstValueType()), type.AsTypeDesc()->GetConstValue()); + } assert(false); return 0;