diff --git a/src/grammar/impala/ImpalaSqlParser.g4 b/src/grammar/impala/ImpalaSqlParser.g4 index e57398f7..9f427d2a 100644 --- a/src/grammar/impala/ImpalaSqlParser.g4 +++ b/src/grammar/impala/ImpalaSqlParser.g4 @@ -96,7 +96,7 @@ createKuduTableAsSelect : KW_CREATE KW_EXTERNAL? KW_TABLE ifNotExists? tableNameCreate ( LPAREN kuduTableElement (COMMA kuduTableElement)* (COMMA KW_PRIMARY KW_KEY columnAliases)? RPAREN )? (KW_PRIMARY KW_KEY columnAliases?)? (KW_PARTITION KW_BY kuduPartitionClause)? ( - commentClause + KW_COMMENT comment=stringLiteral )? KW_STORED KW_AS KW_KUDU (KW_TBLPROPERTIES tblProp=properties)? (KW_AS queryStatement)? ; @@ -156,8 +156,13 @@ alterDatabase ; alterStatsKey - : KW_ALTER KW_TABLE tableNamePath KW_SET KW_COLUMN KW_STATS columnNamePath LPAREN statsKey EQ stringLiteral ( - COMMA statsKey EQ stringLiteral + : KW_ALTER KW_TABLE tableNamePath KW_SET KW_COLUMN KW_STATS columnNamePath LPAREN ( + STATS_NUMDVS + | STATS_NUMNULLS + | STATS_AVGSIZE + | STATS_MAXSIZE + ) EQ stringLiteral ( + COMMA (STATS_NUMDVS | STATS_NUMNULLS | STATS_AVGSIZE | STATS_MAXSIZE) EQ stringLiteral )? RPAREN ; @@ -670,13 +675,6 @@ kuduStorageAttr | KW_BLOCK_SIZE number ; -statsKey - : STATS_NUMDVS - | STATS_NUMNULLS - | STATS_AVGSIZE - | STATS_MAXSIZE - ; - fileFormat : KW_TEXTFILE | KW_PARQUET @@ -870,17 +868,12 @@ joinCriteria sampledRelation : aliasedRelation ( - KW_TABLESAMPLE sampleType LPAREN percentage=expression RPAREN ( + KW_TABLESAMPLE (KW_BERNOULLI | KW_SYSTEM) LPAREN percentage=expression RPAREN ( KW_REPEATABLE LPAREN seed=expression RPAREN )? )? ; -sampleType - : KW_BERNOULLI - | KW_SYSTEM - ; - aliasedRelation : relationPrimary (KW_AS? alias=identifier columnAliases?)? ; @@ -962,7 +955,7 @@ primaryExpression | identifier stringLiteral # typeConstructor | DOUBLE_PRECISION stringLiteral # typeConstructor | number # numericLiteral - | booleanValue # booleanLiteral + | (KW_TRUE | KW_FALSE) # booleanLiteral | stringLiteral # stringLiteralValues | BINARY_LITERAL # binaryLiteral | QUESTION # parameter @@ -991,7 +984,7 @@ primaryExpression | name=KW_CURRENT_USER # currentUser | name=KW_CURRENT_PATH # currentPath | KW_SUBSTRING LPAREN valueExpression KW_FROM valueExpression (KW_FOR valueExpression)? RPAREN # substring - | KW_NORMALIZE LPAREN valueExpression (COMMA normalForm)? RPAREN # normalize + | KW_NORMALIZE LPAREN valueExpression (COMMA (KW_NFD | KW_NFC | KW_NFKD | KW_NFKC))? RPAREN # normalize | KW_EXTRACT LPAREN identifier KW_FROM valueExpression RPAREN # extract | LPAREN expression RPAREN # parenthesizedExpression | KW_GROUPING LPAREN (qualifiedName (COMMA qualifiedName)*)? RPAREN # groupingOperation @@ -1017,11 +1010,6 @@ comparisonQuantifier | KW_ANY ; -booleanValue - : KW_TRUE - | KW_FALSE - ; - interval : INTEGER_VALUE intervalField | LPAREN INTEGER_VALUE RPAREN intervalField @@ -1044,13 +1032,6 @@ intervalField | KW_SECONDS ; -normalForm - : KW_NFD - | KW_NFC - | KW_NFKD - | KW_NFKC - ; - type : type KW_ARRAY | KW_ARRAY LT type GT @@ -1116,10 +1097,8 @@ over * https://github.com/tunnelvisionlabs/antlr4ts/issues/417 */ windowFrame - : frameType=KW_RANGE start_=frameBound - | frameType=KW_ROWS start_=frameBound - | frameType=KW_RANGE KW_BETWEEN start_=frameBound KW_AND end=frameBound - | frameType=KW_ROWS KW_BETWEEN start_=frameBound KW_AND end=frameBound + : frameType=(KW_RANGE | KW_ROWS) start_=frameBound + | frameType=(KW_RANGE | KW_ROWS) KW_BETWEEN start_=frameBound KW_AND end=frameBound ; frameBound diff --git a/src/lib/impala/ImpalaSqlParser.interp b/src/lib/impala/ImpalaSqlParser.interp index 1f50007c..3cd54f56 100644 --- a/src/lib/impala/ImpalaSqlParser.interp +++ b/src/lib/impala/ImpalaSqlParser.interp @@ -702,7 +702,6 @@ columnSpecWithKudu createColumnSpecWithKudu kuduAttributes kuduStorageAttr -statsKey fileFormat kuduPartitionClause hashClause @@ -739,7 +738,6 @@ relation joinType joinCriteria sampledRelation -sampleType aliasedRelation columnAliases relationPrimary @@ -757,10 +755,8 @@ primaryExpression stringLiteral comparisonOperator comparisonQuantifier -booleanValue interval intervalField -normalForm type dataType typeParameter @@ -785,4 +781,4 @@ nonReserved atn: -[4, 1, 289, 2855, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 1, 0, 5, 0, 400, 8, 0, 10, 0, 12, 0, 403, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 409, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 433, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 446, 8, 4, 1, 5, 1, 5, 3, 5, 450, 8, 5, 1, 5, 1, 5, 3, 5, 454, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 461, 8, 5, 10, 5, 12, 5, 464, 9, 5, 1, 5, 1, 5, 3, 5, 468, 8, 5, 1, 5, 1, 5, 3, 5, 472, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 478, 8, 5, 3, 5, 480, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 485, 8, 5, 1, 6, 1, 6, 3, 6, 489, 8, 6, 1, 6, 1, 6, 3, 6, 493, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 500, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 505, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 511, 8, 7, 1, 7, 1, 7, 3, 7, 515, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 522, 8, 7, 10, 7, 12, 7, 525, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 531, 8, 7, 1, 7, 1, 7, 3, 7, 535, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 540, 8, 7, 3, 7, 542, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 547, 8, 7, 1, 7, 3, 7, 550, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 557, 8, 7, 1, 7, 1, 7, 3, 7, 561, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 566, 8, 8, 1, 8, 1, 8, 3, 8, 570, 8, 8, 1, 8, 3, 8, 573, 8, 8, 1, 8, 1, 8, 3, 8, 577, 8, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 585, 8, 9, 1, 9, 1, 9, 3, 9, 589, 8, 9, 1, 9, 1, 9, 3, 9, 593, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 601, 8, 11, 1, 11, 1, 11, 3, 11, 605, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 612, 8, 11, 10, 11, 12, 11, 615, 9, 11, 3, 11, 617, 8, 11, 1, 11, 3, 11, 620, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 626, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 633, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 644, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 649, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 654, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 659, 8, 11, 1, 12, 1, 12, 1, 12, 3, 12, 664, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 671, 8, 12, 10, 12, 12, 12, 674, 9, 12, 3, 12, 676, 8, 12, 1, 12, 3, 12, 679, 8, 12, 1, 12, 1, 12, 3, 12, 683, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 709, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 735, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 744, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 754, 8, 16, 1, 16, 3, 16, 757, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 771, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 789, 8, 20, 3, 20, 791, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 798, 8, 20, 10, 20, 12, 20, 801, 9, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 811, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 820, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 827, 8, 22, 1, 22, 1, 22, 3, 22, 831, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 838, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 844, 8, 23, 1, 23, 3, 23, 847, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 852, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 859, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 873, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 886, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 891, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 896, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 902, 8, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 3, 32, 938, 8, 32, 1, 32, 3, 32, 941, 8, 32, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 947, 8, 33, 1, 33, 3, 33, 950, 8, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 956, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 962, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 974, 8, 35, 3, 35, 976, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 987, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 995, 8, 37, 1, 38, 1, 38, 1, 38, 3, 38, 1000, 8, 38, 1, 38, 1, 38, 3, 38, 1004, 8, 38, 1, 39, 1, 39, 1, 39, 3, 39, 1009, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 1016, 8, 40, 1, 40, 1, 40, 3, 40, 1020, 8, 40, 1, 41, 1, 41, 3, 41, 1024, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1030, 8, 41, 1, 42, 1, 42, 3, 42, 1034, 8, 42, 1, 42, 1, 42, 3, 42, 1038, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1045, 8, 42, 10, 42, 12, 42, 1048, 9, 42, 3, 42, 1050, 8, 42, 1, 42, 3, 42, 1053, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 1061, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1075, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 1082, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1095, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1101, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1106, 8, 49, 1, 49, 3, 49, 1109, 8, 49, 1, 50, 3, 50, 1112, 8, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1117, 8, 50, 1, 50, 1, 50, 3, 50, 1121, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1128, 8, 50, 10, 50, 12, 50, 1131, 9, 50, 1, 50, 1, 50, 3, 50, 1135, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 1141, 8, 51, 1, 52, 1, 52, 3, 52, 1145, 8, 52, 1, 52, 1, 52, 3, 52, 1149, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 1154, 8, 53, 1, 53, 3, 53, 1157, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 1163, 8, 53, 10, 53, 12, 53, 1166, 9, 53, 3, 53, 1168, 8, 53, 1, 53, 3, 53, 1171, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 1181, 8, 54, 10, 54, 12, 54, 1184, 9, 54, 3, 54, 1186, 8, 54, 1, 54, 3, 54, 1189, 8, 54, 1, 55, 1, 55, 1, 55, 3, 55, 1194, 8, 55, 1, 55, 1, 55, 3, 55, 1198, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1214, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 1219, 8, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1224, 8, 57, 10, 57, 12, 57, 1227, 9, 57, 3, 57, 1229, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1235, 8, 58, 1, 58, 3, 58, 1238, 8, 58, 1, 58, 1, 58, 1, 58, 5, 58, 1243, 8, 58, 10, 58, 12, 58, 1246, 9, 58, 3, 58, 1248, 8, 58, 1, 59, 1, 59, 3, 59, 1252, 8, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1257, 8, 59, 1, 59, 3, 59, 1260, 8, 59, 1, 59, 1, 59, 1, 59, 5, 59, 1265, 8, 59, 10, 59, 12, 59, 1268, 9, 59, 3, 59, 1270, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 3, 64, 1294, 8, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1308, 8, 65, 1, 65, 1, 65, 3, 65, 1312, 8, 65, 1, 66, 1, 66, 3, 66, 1316, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1336, 8, 68, 3, 68, 1338, 8, 68, 3, 68, 1340, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1349, 8, 69, 3, 69, 1351, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1360, 8, 70, 3, 70, 1362, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1371, 8, 71, 3, 71, 1373, 8, 71, 1, 72, 1, 72, 1, 72, 3, 72, 1378, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1387, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1396, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1405, 8, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1416, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1422, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1427, 8, 78, 1, 78, 3, 78, 1430, 8, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1443, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1453, 8, 80, 1, 80, 1, 80, 3, 80, 1457, 8, 80, 1, 81, 1, 81, 1, 81, 3, 81, 1462, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 1471, 8, 82, 10, 82, 12, 82, 1474, 9, 82, 1, 82, 1, 82, 3, 82, 1478, 8, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1509, 8, 93, 10, 93, 12, 93, 1512, 9, 93, 1, 94, 1, 94, 1, 94, 5, 94, 1517, 8, 94, 10, 94, 12, 94, 1520, 9, 94, 1, 95, 1, 95, 3, 95, 1524, 8, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 3, 97, 1531, 8, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 3, 99, 1538, 8, 99, 1, 100, 1, 100, 3, 100, 1542, 8, 100, 1, 101, 1, 101, 1, 101, 3, 101, 1547, 8, 101, 1, 101, 3, 101, 1550, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1555, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1560, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1565, 8, 101, 1, 101, 1, 101, 3, 101, 1569, 8, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1578, 8, 101, 1, 101, 3, 101, 1581, 8, 101, 1, 101, 1, 101, 3, 101, 1585, 8, 101, 1, 102, 1, 102, 1, 102, 5, 102, 1590, 8, 102, 10, 102, 12, 102, 1593, 9, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 3, 104, 1601, 8, 104, 1, 104, 1, 104, 3, 104, 1605, 8, 104, 5, 104, 1607, 8, 104, 10, 104, 12, 104, 1610, 9, 104, 1, 104, 1, 104, 1, 105, 1, 105, 3, 105, 1616, 8, 105, 1, 106, 3, 106, 1619, 8, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 1627, 8, 107, 10, 107, 12, 107, 1630, 9, 107, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1636, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1641, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1646, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1651, 8, 108, 1, 108, 1, 108, 5, 108, 1655, 8, 108, 10, 108, 12, 108, 1658, 9, 108, 3, 108, 1660, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1669, 8, 109, 1, 109, 3, 109, 1672, 8, 109, 1, 109, 3, 109, 1675, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 1681, 8, 110, 1, 111, 1, 111, 1, 111, 3, 111, 1686, 8, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1694, 8, 113, 10, 113, 12, 113, 1697, 9, 113, 3, 113, 1699, 8, 113, 1, 113, 3, 113, 1702, 8, 113, 1, 113, 1, 113, 3, 113, 1706, 8, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 5, 115, 1714, 8, 115, 10, 115, 12, 115, 1717, 9, 115, 3, 115, 1719, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1725, 8, 116, 1, 116, 1, 116, 5, 116, 1729, 8, 116, 10, 116, 12, 116, 1732, 9, 116, 3, 116, 1734, 8, 116, 1, 117, 3, 117, 1737, 8, 117, 1, 117, 1, 117, 3, 117, 1741, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1751, 8, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 5, 121, 1760, 8, 121, 10, 121, 12, 121, 1763, 9, 121, 1, 121, 1, 121, 3, 121, 1767, 8, 121, 1, 121, 3, 121, 1770, 8, 121, 1, 122, 1, 122, 3, 122, 1774, 8, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 3, 123, 1781, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 5, 123, 1789, 8, 123, 10, 123, 12, 123, 1792, 9, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1803, 8, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1809, 8, 124, 3, 124, 1811, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1820, 8, 125, 1, 125, 3, 125, 1823, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1830, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1840, 8, 127, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1846, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1852, 8, 129, 10, 129, 12, 129, 1855, 9, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 5, 130, 1863, 8, 130, 10, 130, 12, 130, 1866, 9, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 5, 131, 1873, 8, 131, 10, 131, 12, 131, 1876, 9, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1886, 8, 132, 3, 132, 1888, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1894, 8, 132, 1, 133, 1, 133, 1, 133, 3, 133, 1899, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1907, 8, 134, 10, 134, 12, 134, 1910, 9, 134, 3, 134, 1912, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1918, 8, 134, 3, 134, 1920, 8, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1928, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1934, 8, 135, 1, 135, 5, 135, 1937, 8, 135, 10, 135, 12, 135, 1940, 9, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 5, 136, 1949, 8, 136, 10, 136, 12, 136, 1952, 9, 136, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 1958, 8, 136, 1, 137, 1, 137, 3, 137, 1962, 8, 137, 1, 137, 1, 137, 3, 137, 1966, 8, 137, 1, 138, 1, 138, 3, 138, 1970, 8, 138, 1, 138, 3, 138, 1973, 8, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 5, 138, 1980, 8, 138, 10, 138, 12, 138, 1983, 9, 138, 3, 138, 1985, 8, 138, 1, 138, 3, 138, 1988, 8, 138, 1, 138, 1, 138, 1, 138, 3, 138, 1993, 8, 138, 1, 138, 3, 138, 1996, 8, 138, 1, 139, 1, 139, 1, 139, 5, 139, 2001, 8, 139, 10, 139, 12, 139, 2004, 9, 139, 1, 140, 1, 140, 1, 140, 3, 140, 2009, 8, 140, 1, 141, 1, 141, 1, 141, 3, 141, 2014, 8, 141, 1, 142, 3, 142, 2017, 8, 142, 1, 142, 1, 142, 1, 142, 5, 142, 2022, 8, 142, 10, 142, 12, 142, 2025, 9, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 5, 144, 2033, 8, 144, 10, 144, 12, 144, 2036, 9, 144, 3, 144, 2038, 8, 144, 1, 144, 1, 144, 3, 144, 2042, 8, 144, 1, 145, 1, 145, 3, 145, 2046, 8, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 3, 147, 2055, 8, 147, 1, 147, 1, 147, 3, 147, 2059, 8, 147, 1, 147, 1, 147, 1, 147, 3, 147, 2064, 8, 147, 1, 148, 3, 148, 2067, 8, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 3, 151, 2078, 8, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 2094, 8, 152, 5, 152, 2096, 8, 152, 10, 152, 12, 152, 2099, 9, 152, 1, 153, 3, 153, 2102, 8, 153, 1, 153, 1, 153, 3, 153, 2106, 8, 153, 1, 153, 1, 153, 3, 153, 2110, 8, 153, 1, 153, 1, 153, 3, 153, 2114, 8, 153, 1, 153, 1, 153, 3, 153, 2118, 8, 153, 1, 153, 1, 153, 3, 153, 2122, 8, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 2132, 8, 153, 1, 154, 1, 154, 1, 154, 3, 154, 2137, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 5, 154, 2144, 8, 154, 10, 154, 12, 154, 2147, 9, 154, 1, 154, 1, 154, 3, 154, 2151, 8, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2164, 8, 155, 3, 155, 2166, 8, 155, 1, 156, 1, 156, 1, 157, 1, 157, 3, 157, 2172, 8, 157, 1, 157, 1, 157, 3, 157, 2176, 8, 157, 3, 157, 2178, 8, 157, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2184, 8, 158, 10, 158, 12, 158, 2187, 9, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 2195, 8, 159, 1, 160, 3, 160, 2198, 8, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 2211, 8, 162, 10, 162, 12, 162, 2214, 9, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2219, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 3, 164, 2227, 8, 164, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 3, 166, 2234, 8, 166, 1, 166, 1, 166, 3, 166, 2238, 8, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 5, 166, 2246, 8, 166, 10, 166, 12, 166, 2249, 9, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2259, 8, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2267, 8, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 5, 167, 2274, 8, 167, 10, 167, 12, 167, 2277, 9, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2282, 8, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2287, 8, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2293, 8, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2299, 8, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2304, 8, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2309, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2315, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2326, 8, 168, 10, 168, 12, 168, 2329, 9, 168, 1, 169, 1, 169, 1, 169, 3, 169, 2334, 8, 169, 1, 169, 1, 169, 1, 169, 5, 169, 2339, 8, 169, 10, 169, 12, 169, 2342, 9, 169, 3, 169, 2344, 8, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 5, 169, 2351, 8, 169, 10, 169, 12, 169, 2354, 9, 169, 3, 169, 2356, 8, 169, 1, 169, 1, 169, 3, 169, 2360, 8, 169, 1, 169, 3, 169, 2363, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2389, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2395, 8, 170, 5, 170, 2397, 8, 170, 10, 170, 12, 170, 2400, 9, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2409, 8, 170, 10, 170, 12, 170, 2412, 9, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2421, 8, 170, 1, 170, 3, 170, 2424, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2435, 8, 170, 10, 170, 12, 170, 2438, 9, 170, 3, 170, 2440, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 4, 170, 2457, 8, 170, 11, 170, 12, 170, 2458, 1, 170, 1, 170, 3, 170, 2463, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 4, 170, 2469, 8, 170, 11, 170, 12, 170, 2470, 1, 170, 1, 170, 3, 170, 2475, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2498, 8, 170, 10, 170, 12, 170, 2501, 9, 170, 3, 170, 2503, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2512, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2518, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2524, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2530, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2541, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2550, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2570, 8, 170, 10, 170, 12, 170, 2573, 9, 170, 3, 170, 2575, 8, 170, 1, 170, 3, 170, 2578, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2588, 8, 170, 10, 170, 12, 170, 2591, 9, 170, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 2597, 8, 171, 3, 171, 2599, 8, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 2621, 8, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 5, 178, 2648, 8, 178, 10, 178, 12, 178, 2651, 9, 178, 1, 178, 1, 178, 1, 178, 1, 178, 3, 178, 2657, 8, 178, 1, 178, 1, 178, 1, 178, 1, 178, 5, 178, 2663, 8, 178, 10, 178, 12, 178, 2666, 9, 178, 1, 178, 1, 178, 3, 178, 2670, 8, 178, 3, 178, 2672, 8, 178, 1, 178, 1, 178, 5, 178, 2676, 8, 178, 10, 178, 12, 178, 2679, 9, 178, 1, 179, 1, 179, 1, 180, 1, 180, 3, 180, 2685, 8, 180, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 2691, 8, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 5, 184, 2706, 8, 184, 10, 184, 12, 184, 2709, 9, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 3, 185, 2716, 8, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 5, 185, 2723, 8, 185, 10, 185, 12, 185, 2726, 9, 185, 3, 185, 2728, 8, 185, 1, 185, 3, 185, 2731, 8, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 2751, 8, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 2762, 8, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 3, 188, 2769, 8, 188, 1, 189, 1, 189, 1, 189, 5, 189, 2774, 8, 189, 10, 189, 12, 189, 2777, 9, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 2790, 8, 190, 3, 190, 2792, 8, 190, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 5, 192, 2799, 8, 192, 10, 192, 12, 192, 2802, 9, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 2810, 8, 193, 1, 193, 1, 193, 1, 193, 5, 193, 2815, 8, 193, 10, 193, 12, 193, 2818, 9, 193, 3, 193, 2820, 8, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 2828, 8, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 2835, 8, 195, 1, 196, 3, 196, 2838, 8, 196, 1, 196, 1, 196, 3, 196, 2842, 8, 196, 1, 196, 1, 196, 3, 196, 2846, 8, 196, 1, 196, 3, 196, 2849, 8, 196, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 10, 799, 1472, 1656, 1695, 1715, 1730, 1761, 1790, 1864, 2398, 6, 270, 304, 332, 336, 340, 356, 199, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 0, 33, 2, 0, 46, 46, 170, 170, 2, 0, 166, 166, 204, 204, 2, 0, 176, 176, 202, 202, 2, 0, 69, 69, 80, 80, 2, 0, 27, 27, 159, 159, 2, 0, 103, 103, 144, 144, 2, 0, 47, 47, 171, 171, 2, 0, 3, 3, 12, 12, 3, 0, 87, 87, 166, 166, 204, 204, 2, 0, 178, 178, 209, 209, 1, 0, 245, 248, 2, 0, 147, 147, 219, 223, 2, 0, 65, 65, 95, 95, 2, 0, 64, 64, 200, 200, 2, 0, 10, 10, 55, 55, 2, 0, 75, 75, 112, 112, 2, 0, 2, 2, 57, 57, 2, 0, 14, 14, 185, 185, 3, 0, 106, 106, 115, 115, 164, 164, 2, 0, 105, 105, 163, 163, 4, 0, 70, 70, 133, 133, 194, 194, 208, 208, 1, 0, 255, 256, 1, 0, 257, 259, 1, 0, 249, 254, 3, 0, 2, 2, 6, 6, 181, 181, 2, 0, 70, 70, 194, 194, 5, 0, 48, 49, 91, 92, 122, 125, 172, 173, 217, 218, 1, 0, 127, 130, 2, 0, 8, 8, 227, 244, 2, 0, 77, 77, 149, 149, 4, 0, 46, 46, 178, 178, 188, 188, 209, 209, 16, 0, 28, 29, 40, 40, 43, 43, 48, 48, 68, 68, 91, 91, 114, 114, 122, 122, 124, 124, 158, 158, 165, 165, 172, 172, 184, 184, 196, 196, 204, 204, 217, 217, 23, 0, 14, 14, 43, 44, 48, 49, 65, 65, 68, 68, 91, 91, 95, 95, 110, 110, 119, 119, 122, 125, 127, 130, 137, 137, 140, 140, 152, 153, 172, 173, 180, 180, 184, 185, 195, 195, 204, 204, 213, 213, 217, 217, 220, 220, 231, 231, 3172, 0, 401, 1, 0, 0, 0, 2, 406, 1, 0, 0, 0, 4, 432, 1, 0, 0, 0, 6, 434, 1, 0, 0, 0, 8, 445, 1, 0, 0, 0, 10, 447, 1, 0, 0, 0, 12, 486, 1, 0, 0, 0, 14, 508, 1, 0, 0, 0, 16, 562, 1, 0, 0, 0, 18, 581, 1, 0, 0, 0, 20, 594, 1, 0, 0, 0, 22, 598, 1, 0, 0, 0, 24, 660, 1, 0, 0, 0, 26, 708, 1, 0, 0, 0, 28, 710, 1, 0, 0, 0, 30, 718, 1, 0, 0, 0, 32, 738, 1, 0, 0, 0, 34, 758, 1, 0, 0, 0, 36, 765, 1, 0, 0, 0, 38, 774, 1, 0, 0, 0, 40, 782, 1, 0, 0, 0, 42, 804, 1, 0, 0, 0, 44, 814, 1, 0, 0, 0, 46, 832, 1, 0, 0, 0, 48, 853, 1, 0, 0, 0, 50, 874, 1, 0, 0, 0, 52, 880, 1, 0, 0, 0, 54, 897, 1, 0, 0, 0, 56, 906, 1, 0, 0, 0, 58, 913, 1, 0, 0, 0, 60, 921, 1, 0, 0, 0, 62, 928, 1, 0, 0, 0, 64, 935, 1, 0, 0, 0, 66, 944, 1, 0, 0, 0, 68, 955, 1, 0, 0, 0, 70, 957, 1, 0, 0, 0, 72, 977, 1, 0, 0, 0, 74, 994, 1, 0, 0, 0, 76, 996, 1, 0, 0, 0, 78, 1005, 1, 0, 0, 0, 80, 1012, 1, 0, 0, 0, 82, 1021, 1, 0, 0, 0, 84, 1031, 1, 0, 0, 0, 86, 1054, 1, 0, 0, 0, 88, 1060, 1, 0, 0, 0, 90, 1062, 1, 0, 0, 0, 92, 1069, 1, 0, 0, 0, 94, 1081, 1, 0, 0, 0, 96, 1083, 1, 0, 0, 0, 98, 1090, 1, 0, 0, 0, 100, 1111, 1, 0, 0, 0, 102, 1140, 1, 0, 0, 0, 104, 1142, 1, 0, 0, 0, 106, 1150, 1, 0, 0, 0, 108, 1172, 1, 0, 0, 0, 110, 1190, 1, 0, 0, 0, 112, 1213, 1, 0, 0, 0, 114, 1215, 1, 0, 0, 0, 116, 1230, 1, 0, 0, 0, 118, 1249, 1, 0, 0, 0, 120, 1271, 1, 0, 0, 0, 122, 1276, 1, 0, 0, 0, 124, 1281, 1, 0, 0, 0, 126, 1286, 1, 0, 0, 0, 128, 1291, 1, 0, 0, 0, 130, 1298, 1, 0, 0, 0, 132, 1313, 1, 0, 0, 0, 134, 1319, 1, 0, 0, 0, 136, 1339, 1, 0, 0, 0, 138, 1341, 1, 0, 0, 0, 140, 1352, 1, 0, 0, 0, 142, 1363, 1, 0, 0, 0, 144, 1377, 1, 0, 0, 0, 146, 1379, 1, 0, 0, 0, 148, 1388, 1, 0, 0, 0, 150, 1397, 1, 0, 0, 0, 152, 1406, 1, 0, 0, 0, 154, 1409, 1, 0, 0, 0, 156, 1417, 1, 0, 0, 0, 158, 1433, 1, 0, 0, 0, 160, 1437, 1, 0, 0, 0, 162, 1461, 1, 0, 0, 0, 164, 1463, 1, 0, 0, 0, 166, 1479, 1, 0, 0, 0, 168, 1482, 1, 0, 0, 0, 170, 1486, 1, 0, 0, 0, 172, 1489, 1, 0, 0, 0, 174, 1493, 1, 0, 0, 0, 176, 1495, 1, 0, 0, 0, 178, 1497, 1, 0, 0, 0, 180, 1499, 1, 0, 0, 0, 182, 1501, 1, 0, 0, 0, 184, 1503, 1, 0, 0, 0, 186, 1505, 1, 0, 0, 0, 188, 1513, 1, 0, 0, 0, 190, 1523, 1, 0, 0, 0, 192, 1525, 1, 0, 0, 0, 194, 1530, 1, 0, 0, 0, 196, 1532, 1, 0, 0, 0, 198, 1537, 1, 0, 0, 0, 200, 1541, 1, 0, 0, 0, 202, 1546, 1, 0, 0, 0, 204, 1586, 1, 0, 0, 0, 206, 1594, 1, 0, 0, 0, 208, 1598, 1, 0, 0, 0, 210, 1613, 1, 0, 0, 0, 212, 1618, 1, 0, 0, 0, 214, 1622, 1, 0, 0, 0, 216, 1631, 1, 0, 0, 0, 218, 1661, 1, 0, 0, 0, 220, 1676, 1, 0, 0, 0, 222, 1682, 1, 0, 0, 0, 224, 1687, 1, 0, 0, 0, 226, 1689, 1, 0, 0, 0, 228, 1707, 1, 0, 0, 0, 230, 1710, 1, 0, 0, 0, 232, 1720, 1, 0, 0, 0, 234, 1740, 1, 0, 0, 0, 236, 1750, 1, 0, 0, 0, 238, 1752, 1, 0, 0, 0, 240, 1754, 1, 0, 0, 0, 242, 1769, 1, 0, 0, 0, 244, 1771, 1, 0, 0, 0, 246, 1778, 1, 0, 0, 0, 248, 1810, 1, 0, 0, 0, 250, 1822, 1, 0, 0, 0, 252, 1829, 1, 0, 0, 0, 254, 1839, 1, 0, 0, 0, 256, 1841, 1, 0, 0, 0, 258, 1847, 1, 0, 0, 0, 260, 1858, 1, 0, 0, 0, 262, 1869, 1, 0, 0, 0, 264, 1877, 1, 0, 0, 0, 266, 1895, 1, 0, 0, 0, 268, 1900, 1, 0, 0, 0, 270, 1921, 1, 0, 0, 0, 272, 1957, 1, 0, 0, 0, 274, 1959, 1, 0, 0, 0, 276, 1967, 1, 0, 0, 0, 278, 1997, 1, 0, 0, 0, 280, 2005, 1, 0, 0, 0, 282, 2010, 1, 0, 0, 0, 284, 2016, 1, 0, 0, 0, 286, 2026, 1, 0, 0, 0, 288, 2041, 1, 0, 0, 0, 290, 2043, 1, 0, 0, 0, 292, 2050, 1, 0, 0, 0, 294, 2063, 1, 0, 0, 0, 296, 2066, 1, 0, 0, 0, 298, 2070, 1, 0, 0, 0, 300, 2072, 1, 0, 0, 0, 302, 2077, 1, 0, 0, 0, 304, 2081, 1, 0, 0, 0, 306, 2131, 1, 0, 0, 0, 308, 2150, 1, 0, 0, 0, 310, 2152, 1, 0, 0, 0, 312, 2167, 1, 0, 0, 0, 314, 2169, 1, 0, 0, 0, 316, 2179, 1, 0, 0, 0, 318, 2194, 1, 0, 0, 0, 320, 2197, 1, 0, 0, 0, 322, 2201, 1, 0, 0, 0, 324, 2205, 1, 0, 0, 0, 326, 2220, 1, 0, 0, 0, 328, 2226, 1, 0, 0, 0, 330, 2228, 1, 0, 0, 0, 332, 2237, 1, 0, 0, 0, 334, 2308, 1, 0, 0, 0, 336, 2314, 1, 0, 0, 0, 338, 2330, 1, 0, 0, 0, 340, 2577, 1, 0, 0, 0, 342, 2598, 1, 0, 0, 0, 344, 2600, 1, 0, 0, 0, 346, 2602, 1, 0, 0, 0, 348, 2604, 1, 0, 0, 0, 350, 2620, 1, 0, 0, 0, 352, 2622, 1, 0, 0, 0, 354, 2624, 1, 0, 0, 0, 356, 2671, 1, 0, 0, 0, 358, 2680, 1, 0, 0, 0, 360, 2684, 1, 0, 0, 0, 362, 2690, 1, 0, 0, 0, 364, 2692, 1, 0, 0, 0, 366, 2697, 1, 0, 0, 0, 368, 2702, 1, 0, 0, 0, 370, 2710, 1, 0, 0, 0, 372, 2750, 1, 0, 0, 0, 374, 2761, 1, 0, 0, 0, 376, 2768, 1, 0, 0, 0, 378, 2770, 1, 0, 0, 0, 380, 2791, 1, 0, 0, 0, 382, 2793, 1, 0, 0, 0, 384, 2795, 1, 0, 0, 0, 386, 2819, 1, 0, 0, 0, 388, 2827, 1, 0, 0, 0, 390, 2834, 1, 0, 0, 0, 392, 2848, 1, 0, 0, 0, 394, 2850, 1, 0, 0, 0, 396, 2852, 1, 0, 0, 0, 398, 400, 3, 2, 1, 0, 399, 398, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 405, 5, 0, 0, 1, 405, 1, 1, 0, 0, 0, 406, 408, 3, 4, 2, 0, 407, 409, 5, 262, 0, 0, 408, 407, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 3, 1, 0, 0, 0, 410, 433, 3, 212, 106, 0, 411, 433, 3, 6, 3, 0, 412, 433, 3, 8, 4, 0, 413, 433, 3, 26, 13, 0, 414, 433, 3, 64, 32, 0, 415, 433, 3, 66, 33, 0, 416, 433, 3, 68, 34, 0, 417, 433, 3, 74, 37, 0, 418, 433, 3, 88, 44, 0, 419, 433, 3, 94, 47, 0, 420, 433, 3, 100, 50, 0, 421, 433, 3, 102, 51, 0, 422, 433, 3, 108, 54, 0, 423, 433, 3, 110, 55, 0, 424, 433, 3, 112, 56, 0, 425, 433, 3, 144, 72, 0, 426, 433, 3, 152, 76, 0, 427, 433, 3, 154, 77, 0, 428, 433, 3, 156, 78, 0, 429, 433, 3, 158, 79, 0, 430, 433, 3, 160, 80, 0, 431, 433, 3, 162, 81, 0, 432, 410, 1, 0, 0, 0, 432, 411, 1, 0, 0, 0, 432, 412, 1, 0, 0, 0, 432, 413, 1, 0, 0, 0, 432, 414, 1, 0, 0, 0, 432, 415, 1, 0, 0, 0, 432, 416, 1, 0, 0, 0, 432, 417, 1, 0, 0, 0, 432, 418, 1, 0, 0, 0, 432, 419, 1, 0, 0, 0, 432, 420, 1, 0, 0, 0, 432, 421, 1, 0, 0, 0, 432, 422, 1, 0, 0, 0, 432, 423, 1, 0, 0, 0, 432, 424, 1, 0, 0, 0, 432, 425, 1, 0, 0, 0, 432, 426, 1, 0, 0, 0, 432, 427, 1, 0, 0, 0, 432, 428, 1, 0, 0, 0, 432, 429, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 432, 431, 1, 0, 0, 0, 433, 5, 1, 0, 0, 0, 434, 435, 5, 203, 0, 0, 435, 436, 3, 184, 92, 0, 436, 7, 1, 0, 0, 0, 437, 446, 3, 18, 9, 0, 438, 446, 3, 20, 10, 0, 439, 446, 3, 22, 11, 0, 440, 446, 3, 24, 12, 0, 441, 446, 3, 16, 8, 0, 442, 446, 3, 14, 7, 0, 443, 446, 3, 12, 6, 0, 444, 446, 3, 10, 5, 0, 445, 437, 1, 0, 0, 0, 445, 438, 1, 0, 0, 0, 445, 439, 1, 0, 0, 0, 445, 440, 1, 0, 0, 0, 445, 441, 1, 0, 0, 0, 445, 442, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 445, 444, 1, 0, 0, 0, 446, 9, 1, 0, 0, 0, 447, 449, 5, 37, 0, 0, 448, 450, 5, 19, 0, 0, 449, 448, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 453, 5, 188, 0, 0, 452, 454, 3, 172, 86, 0, 453, 452, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 471, 3, 174, 87, 0, 456, 457, 5, 265, 0, 0, 457, 462, 3, 222, 111, 0, 458, 459, 5, 263, 0, 0, 459, 461, 3, 222, 111, 0, 460, 458, 1, 0, 0, 0, 461, 464, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 467, 1, 0, 0, 0, 464, 462, 1, 0, 0, 0, 465, 466, 5, 263, 0, 0, 466, 468, 3, 216, 108, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 5, 266, 0, 0, 470, 472, 1, 0, 0, 0, 471, 456, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 479, 1, 0, 0, 0, 473, 474, 5, 17, 0, 0, 474, 477, 5, 26, 0, 0, 475, 478, 3, 316, 158, 0, 476, 478, 3, 260, 130, 0, 477, 475, 1, 0, 0, 0, 477, 476, 1, 0, 0, 0, 478, 480, 1, 0, 0, 0, 479, 473, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 484, 3, 202, 101, 0, 482, 483, 5, 9, 0, 0, 483, 485, 3, 212, 106, 0, 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 11, 1, 0, 0, 0, 486, 488, 5, 37, 0, 0, 487, 489, 5, 19, 0, 0, 488, 487, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 492, 5, 188, 0, 0, 491, 493, 3, 172, 86, 0, 492, 491, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 3, 174, 87, 0, 495, 499, 5, 115, 0, 0, 496, 500, 3, 186, 93, 0, 497, 498, 5, 147, 0, 0, 498, 500, 3, 342, 171, 0, 499, 496, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 504, 1, 0, 0, 0, 501, 502, 5, 17, 0, 0, 502, 503, 5, 26, 0, 0, 503, 505, 3, 260, 130, 0, 504, 501, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 3, 202, 101, 0, 507, 13, 1, 0, 0, 0, 508, 510, 5, 37, 0, 0, 509, 511, 5, 19, 0, 0, 510, 509, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 5, 188, 0, 0, 513, 515, 3, 172, 86, 0, 514, 513, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 534, 3, 174, 87, 0, 517, 518, 5, 265, 0, 0, 518, 523, 3, 224, 112, 0, 519, 520, 5, 263, 0, 0, 520, 522, 3, 224, 112, 0, 521, 519, 1, 0, 0, 0, 522, 525, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 530, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 526, 527, 5, 263, 0, 0, 527, 528, 5, 150, 0, 0, 528, 529, 5, 110, 0, 0, 529, 531, 3, 316, 158, 0, 530, 526, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 533, 5, 266, 0, 0, 533, 535, 1, 0, 0, 0, 534, 517, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 541, 1, 0, 0, 0, 536, 537, 5, 150, 0, 0, 537, 539, 5, 110, 0, 0, 538, 540, 3, 316, 158, 0, 539, 538, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 542, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 546, 1, 0, 0, 0, 543, 544, 5, 145, 0, 0, 544, 545, 5, 26, 0, 0, 545, 547, 3, 242, 121, 0, 546, 543, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 549, 1, 0, 0, 0, 548, 550, 3, 228, 114, 0, 549, 548, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 552, 5, 23, 0, 0, 552, 553, 5, 9, 0, 0, 553, 556, 5, 111, 0, 0, 554, 555, 5, 25, 0, 0, 555, 557, 3, 258, 129, 0, 556, 554, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 560, 1, 0, 0, 0, 558, 559, 5, 9, 0, 0, 559, 561, 3, 212, 106, 0, 560, 558, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 15, 1, 0, 0, 0, 562, 563, 5, 37, 0, 0, 563, 565, 5, 212, 0, 0, 564, 566, 3, 172, 86, 0, 565, 564, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 569, 3, 178, 89, 0, 568, 570, 3, 208, 104, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 572, 1, 0, 0, 0, 571, 573, 3, 228, 114, 0, 572, 571, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 576, 1, 0, 0, 0, 574, 575, 5, 25, 0, 0, 575, 577, 3, 258, 129, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 5, 9, 0, 0, 579, 580, 3, 212, 106, 0, 580, 17, 1, 0, 0, 0, 581, 582, 5, 37, 0, 0, 582, 584, 7, 0, 0, 0, 583, 585, 3, 172, 86, 0, 584, 583, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 588, 3, 176, 88, 0, 587, 589, 3, 228, 114, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 592, 1, 0, 0, 0, 590, 591, 5, 24, 0, 0, 591, 593, 3, 342, 171, 0, 592, 590, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 19, 1, 0, 0, 0, 594, 595, 5, 37, 0, 0, 595, 596, 5, 166, 0, 0, 596, 597, 3, 390, 195, 0, 597, 21, 1, 0, 0, 0, 598, 600, 5, 37, 0, 0, 599, 601, 5, 12, 0, 0, 600, 599, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 5, 84, 0, 0, 603, 605, 3, 172, 86, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 619, 3, 180, 90, 0, 607, 616, 5, 265, 0, 0, 608, 613, 3, 356, 178, 0, 609, 610, 5, 263, 0, 0, 610, 612, 3, 356, 178, 0, 611, 609, 1, 0, 0, 0, 612, 615, 1, 0, 0, 0, 613, 611, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 617, 1, 0, 0, 0, 615, 613, 1, 0, 0, 0, 616, 608, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 620, 5, 266, 0, 0, 619, 607, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 5, 160, 0, 0, 622, 625, 3, 356, 178, 0, 623, 624, 5, 102, 0, 0, 624, 626, 3, 356, 178, 0, 625, 623, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 628, 5, 24, 0, 0, 628, 632, 5, 274, 0, 0, 629, 630, 5, 104, 0, 0, 630, 631, 5, 249, 0, 0, 631, 633, 5, 274, 0, 0, 632, 629, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 635, 5, 206, 0, 0, 635, 636, 5, 249, 0, 0, 636, 637, 5, 274, 0, 0, 637, 638, 5, 126, 0, 0, 638, 639, 5, 249, 0, 0, 639, 643, 5, 274, 0, 0, 640, 641, 5, 18, 0, 0, 641, 642, 5, 249, 0, 0, 642, 644, 5, 274, 0, 0, 643, 640, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 648, 1, 0, 0, 0, 645, 646, 5, 20, 0, 0, 646, 647, 5, 249, 0, 0, 647, 649, 5, 274, 0, 0, 648, 645, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 653, 1, 0, 0, 0, 650, 651, 5, 187, 0, 0, 651, 652, 5, 249, 0, 0, 652, 654, 5, 274, 0, 0, 653, 650, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 658, 1, 0, 0, 0, 655, 656, 5, 76, 0, 0, 656, 657, 5, 249, 0, 0, 657, 659, 5, 274, 0, 0, 658, 655, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 23, 1, 0, 0, 0, 660, 661, 5, 37, 0, 0, 661, 663, 5, 84, 0, 0, 662, 664, 3, 172, 86, 0, 663, 662, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 678, 3, 180, 90, 0, 666, 675, 5, 265, 0, 0, 667, 672, 3, 356, 178, 0, 668, 669, 5, 263, 0, 0, 669, 671, 3, 356, 178, 0, 670, 668, 1, 0, 0, 0, 671, 674, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 676, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 675, 667, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 5, 266, 0, 0, 678, 666, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 682, 1, 0, 0, 0, 680, 681, 5, 160, 0, 0, 681, 683, 3, 356, 178, 0, 682, 680, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 5, 24, 0, 0, 685, 686, 5, 274, 0, 0, 686, 687, 5, 186, 0, 0, 687, 688, 5, 249, 0, 0, 688, 689, 3, 342, 171, 0, 689, 25, 1, 0, 0, 0, 690, 709, 3, 28, 14, 0, 691, 709, 3, 62, 31, 0, 692, 709, 3, 60, 30, 0, 693, 709, 3, 58, 29, 0, 694, 709, 3, 54, 27, 0, 695, 709, 3, 56, 28, 0, 696, 709, 3, 52, 26, 0, 697, 709, 3, 48, 24, 0, 698, 709, 3, 50, 25, 0, 699, 709, 3, 46, 23, 0, 700, 709, 3, 44, 22, 0, 701, 709, 3, 42, 21, 0, 702, 709, 3, 40, 20, 0, 703, 709, 3, 34, 17, 0, 704, 709, 3, 30, 15, 0, 705, 709, 3, 32, 16, 0, 706, 709, 3, 36, 18, 0, 707, 709, 3, 38, 19, 0, 708, 690, 1, 0, 0, 0, 708, 691, 1, 0, 0, 0, 708, 692, 1, 0, 0, 0, 708, 693, 1, 0, 0, 0, 708, 694, 1, 0, 0, 0, 708, 695, 1, 0, 0, 0, 708, 696, 1, 0, 0, 0, 708, 697, 1, 0, 0, 0, 708, 698, 1, 0, 0, 0, 708, 699, 1, 0, 0, 0, 708, 700, 1, 0, 0, 0, 708, 701, 1, 0, 0, 0, 708, 702, 1, 0, 0, 0, 708, 703, 1, 0, 0, 0, 708, 704, 1, 0, 0, 0, 708, 705, 1, 0, 0, 0, 708, 706, 1, 0, 0, 0, 708, 707, 1, 0, 0, 0, 709, 27, 1, 0, 0, 0, 710, 711, 5, 4, 0, 0, 711, 712, 5, 46, 0, 0, 712, 713, 3, 184, 92, 0, 713, 714, 5, 176, 0, 0, 714, 715, 5, 142, 0, 0, 715, 716, 7, 1, 0, 0, 716, 717, 3, 390, 195, 0, 717, 29, 1, 0, 0, 0, 718, 719, 5, 4, 0, 0, 719, 720, 5, 188, 0, 0, 720, 721, 3, 186, 93, 0, 721, 722, 5, 176, 0, 0, 722, 723, 5, 32, 0, 0, 723, 724, 5, 182, 0, 0, 724, 725, 3, 194, 97, 0, 725, 726, 5, 265, 0, 0, 726, 727, 3, 238, 119, 0, 727, 728, 5, 249, 0, 0, 728, 734, 3, 342, 171, 0, 729, 730, 5, 263, 0, 0, 730, 731, 3, 238, 119, 0, 731, 732, 5, 249, 0, 0, 732, 733, 3, 342, 171, 0, 733, 735, 1, 0, 0, 0, 734, 729, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 737, 5, 266, 0, 0, 737, 31, 1, 0, 0, 0, 738, 739, 5, 4, 0, 0, 739, 740, 5, 188, 0, 0, 740, 743, 3, 186, 93, 0, 741, 742, 5, 145, 0, 0, 742, 744, 3, 330, 165, 0, 743, 741, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, 756, 5, 176, 0, 0, 746, 747, 5, 30, 0, 0, 747, 748, 5, 94, 0, 0, 748, 753, 3, 342, 171, 0, 749, 750, 5, 216, 0, 0, 750, 751, 5, 151, 0, 0, 751, 752, 5, 249, 0, 0, 752, 754, 3, 392, 196, 0, 753, 749, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 757, 1, 0, 0, 0, 755, 757, 5, 197, 0, 0, 756, 746, 1, 0, 0, 0, 756, 755, 1, 0, 0, 0, 757, 33, 1, 0, 0, 0, 758, 759, 5, 4, 0, 0, 759, 760, 5, 188, 0, 0, 760, 761, 3, 186, 93, 0, 761, 762, 5, 31, 0, 0, 762, 763, 3, 194, 97, 0, 763, 764, 3, 230, 115, 0, 764, 35, 1, 0, 0, 0, 765, 766, 5, 4, 0, 0, 766, 767, 5, 188, 0, 0, 767, 768, 3, 186, 93, 0, 768, 770, 5, 58, 0, 0, 769, 771, 5, 32, 0, 0, 770, 769, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 773, 3, 194, 97, 0, 773, 37, 1, 0, 0, 0, 774, 775, 5, 4, 0, 0, 775, 776, 5, 188, 0, 0, 776, 777, 3, 186, 93, 0, 777, 778, 5, 176, 0, 0, 778, 779, 5, 142, 0, 0, 779, 780, 7, 1, 0, 0, 780, 781, 3, 390, 195, 0, 781, 39, 1, 0, 0, 0, 782, 783, 5, 4, 0, 0, 783, 784, 5, 188, 0, 0, 784, 790, 3, 186, 93, 0, 785, 791, 5, 158, 0, 0, 786, 788, 5, 1, 0, 0, 787, 789, 3, 172, 86, 0, 788, 787, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 791, 1, 0, 0, 0, 790, 785, 1, 0, 0, 0, 790, 786, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 793, 5, 33, 0, 0, 793, 794, 5, 265, 0, 0, 794, 799, 3, 230, 115, 0, 795, 796, 5, 263, 0, 0, 796, 798, 3, 230, 115, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 800, 802, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 803, 5, 266, 0, 0, 803, 41, 1, 0, 0, 0, 804, 805, 5, 4, 0, 0, 805, 806, 5, 188, 0, 0, 806, 807, 3, 186, 93, 0, 807, 808, 5, 1, 0, 0, 808, 810, 5, 32, 0, 0, 809, 811, 3, 172, 86, 0, 810, 809, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 813, 3, 232, 116, 0, 813, 43, 1, 0, 0, 0, 814, 815, 5, 4, 0, 0, 815, 816, 5, 188, 0, 0, 816, 817, 3, 186, 93, 0, 817, 819, 5, 4, 0, 0, 818, 820, 5, 32, 0, 0, 819, 818, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 830, 3, 194, 97, 0, 822, 826, 5, 176, 0, 0, 823, 827, 3, 236, 118, 0, 824, 825, 5, 34, 0, 0, 825, 827, 3, 342, 171, 0, 826, 823, 1, 0, 0, 0, 826, 824, 1, 0, 0, 0, 827, 831, 1, 0, 0, 0, 828, 829, 5, 58, 0, 0, 829, 831, 5, 51, 0, 0, 830, 822, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 45, 1, 0, 0, 0, 832, 833, 5, 4, 0, 0, 833, 834, 5, 188, 0, 0, 834, 835, 3, 186, 93, 0, 835, 837, 5, 1, 0, 0, 836, 838, 3, 172, 86, 0, 837, 836, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 851, 1, 0, 0, 0, 839, 840, 5, 145, 0, 0, 840, 843, 3, 330, 165, 0, 841, 842, 5, 24, 0, 0, 842, 844, 3, 342, 171, 0, 843, 841, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 846, 1, 0, 0, 0, 845, 847, 3, 250, 125, 0, 846, 845, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 852, 1, 0, 0, 0, 848, 849, 5, 154, 0, 0, 849, 850, 5, 145, 0, 0, 850, 852, 3, 248, 124, 0, 851, 839, 1, 0, 0, 0, 851, 848, 1, 0, 0, 0, 852, 47, 1, 0, 0, 0, 853, 854, 5, 4, 0, 0, 854, 855, 5, 188, 0, 0, 855, 858, 3, 186, 93, 0, 856, 857, 5, 145, 0, 0, 857, 859, 3, 330, 165, 0, 858, 856, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 872, 5, 176, 0, 0, 861, 862, 5, 72, 0, 0, 862, 873, 3, 240, 120, 0, 863, 864, 5, 168, 0, 0, 864, 865, 5, 79, 0, 0, 865, 873, 3, 264, 132, 0, 866, 867, 5, 24, 0, 0, 867, 873, 3, 342, 171, 0, 868, 869, 5, 25, 0, 0, 869, 873, 3, 258, 129, 0, 870, 871, 5, 175, 0, 0, 871, 873, 3, 258, 129, 0, 872, 861, 1, 0, 0, 0, 872, 863, 1, 0, 0, 0, 872, 866, 1, 0, 0, 0, 872, 868, 1, 0, 0, 0, 872, 870, 1, 0, 0, 0, 873, 49, 1, 0, 0, 0, 874, 875, 5, 4, 0, 0, 875, 876, 5, 188, 0, 0, 876, 877, 3, 186, 93, 0, 877, 878, 5, 155, 0, 0, 878, 879, 5, 146, 0, 0, 879, 51, 1, 0, 0, 0, 880, 881, 5, 4, 0, 0, 881, 882, 5, 188, 0, 0, 882, 883, 3, 186, 93, 0, 883, 885, 5, 58, 0, 0, 884, 886, 3, 170, 85, 0, 885, 884, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 895, 1, 0, 0, 0, 887, 888, 5, 145, 0, 0, 888, 890, 3, 330, 165, 0, 889, 891, 5, 22, 0, 0, 890, 889, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 896, 1, 0, 0, 0, 892, 893, 5, 154, 0, 0, 893, 894, 5, 145, 0, 0, 894, 896, 3, 248, 124, 0, 895, 887, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 896, 53, 1, 0, 0, 0, 897, 898, 5, 4, 0, 0, 898, 899, 5, 212, 0, 0, 899, 901, 3, 188, 94, 0, 900, 902, 3, 208, 104, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 5, 9, 0, 0, 904, 905, 3, 212, 106, 0, 905, 55, 1, 0, 0, 0, 906, 907, 5, 4, 0, 0, 907, 908, 5, 212, 0, 0, 908, 909, 3, 188, 94, 0, 909, 910, 5, 156, 0, 0, 910, 911, 5, 193, 0, 0, 911, 912, 3, 188, 94, 0, 912, 57, 1, 0, 0, 0, 913, 914, 5, 4, 0, 0, 914, 915, 5, 212, 0, 0, 915, 916, 3, 188, 94, 0, 916, 917, 5, 176, 0, 0, 917, 918, 5, 142, 0, 0, 918, 919, 7, 1, 0, 0, 919, 920, 3, 384, 192, 0, 920, 59, 1, 0, 0, 0, 921, 922, 5, 4, 0, 0, 922, 923, 5, 188, 0, 0, 923, 924, 3, 186, 93, 0, 924, 925, 5, 156, 0, 0, 925, 926, 5, 193, 0, 0, 926, 927, 3, 186, 93, 0, 927, 61, 1, 0, 0, 0, 928, 929, 5, 4, 0, 0, 929, 930, 5, 212, 0, 0, 930, 931, 3, 188, 94, 0, 931, 932, 7, 2, 0, 0, 932, 933, 5, 25, 0, 0, 933, 934, 3, 258, 129, 0, 934, 63, 1, 0, 0, 0, 935, 937, 5, 196, 0, 0, 936, 938, 5, 188, 0, 0, 937, 936, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 940, 1, 0, 0, 0, 939, 941, 3, 170, 85, 0, 940, 939, 1, 0, 0, 0, 940, 941, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 943, 3, 186, 93, 0, 943, 65, 1, 0, 0, 0, 944, 946, 5, 56, 0, 0, 945, 947, 5, 46, 0, 0, 946, 945, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 949, 1, 0, 0, 0, 948, 950, 7, 3, 0, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 952, 3, 384, 192, 0, 952, 67, 1, 0, 0, 0, 953, 956, 3, 70, 35, 0, 954, 956, 3, 72, 36, 0, 955, 953, 1, 0, 0, 0, 955, 954, 1, 0, 0, 0, 956, 69, 1, 0, 0, 0, 957, 958, 5, 36, 0, 0, 958, 959, 5, 182, 0, 0, 959, 961, 3, 186, 93, 0, 960, 962, 3, 316, 158, 0, 961, 960, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 975, 1, 0, 0, 0, 963, 964, 5, 190, 0, 0, 964, 965, 5, 185, 0, 0, 965, 966, 5, 265, 0, 0, 966, 967, 3, 392, 196, 0, 967, 973, 5, 266, 0, 0, 968, 969, 5, 157, 0, 0, 969, 970, 5, 265, 0, 0, 970, 971, 3, 392, 196, 0, 971, 972, 5, 266, 0, 0, 972, 974, 1, 0, 0, 0, 973, 968, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 976, 1, 0, 0, 0, 975, 963, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 71, 1, 0, 0, 0, 977, 978, 5, 36, 0, 0, 978, 979, 5, 96, 0, 0, 979, 980, 5, 182, 0, 0, 980, 986, 3, 186, 93, 0, 981, 982, 5, 145, 0, 0, 982, 983, 5, 265, 0, 0, 983, 984, 3, 330, 165, 0, 984, 985, 5, 266, 0, 0, 985, 987, 1, 0, 0, 0, 986, 981, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 73, 1, 0, 0, 0, 988, 995, 3, 86, 43, 0, 989, 995, 3, 84, 42, 0, 990, 995, 3, 82, 41, 0, 991, 995, 3, 78, 39, 0, 992, 995, 3, 80, 40, 0, 993, 995, 3, 76, 38, 0, 994, 988, 1, 0, 0, 0, 994, 989, 1, 0, 0, 0, 994, 990, 1, 0, 0, 0, 994, 991, 1, 0, 0, 0, 994, 992, 1, 0, 0, 0, 994, 993, 1, 0, 0, 0, 995, 75, 1, 0, 0, 0, 996, 997, 5, 58, 0, 0, 997, 999, 7, 0, 0, 0, 998, 1000, 3, 170, 85, 0, 999, 998, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1003, 3, 184, 92, 0, 1002, 1004, 7, 4, 0, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 77, 1, 0, 0, 0, 1005, 1006, 5, 58, 0, 0, 1006, 1008, 5, 212, 0, 0, 1007, 1009, 3, 170, 85, 0, 1008, 1007, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1010, 1, 0, 0, 0, 1010, 1011, 3, 188, 94, 0, 1011, 79, 1, 0, 0, 0, 1012, 1013, 5, 58, 0, 0, 1013, 1015, 5, 188, 0, 0, 1014, 1016, 3, 170, 85, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1019, 3, 186, 93, 0, 1018, 1020, 5, 22, 0, 0, 1019, 1018, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 81, 1, 0, 0, 0, 1021, 1023, 5, 58, 0, 0, 1022, 1024, 5, 96, 0, 0, 1023, 1022, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1026, 5, 182, 0, 0, 1026, 1029, 3, 186, 93, 0, 1027, 1028, 5, 145, 0, 0, 1028, 1030, 3, 330, 165, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 83, 1, 0, 0, 0, 1031, 1033, 5, 58, 0, 0, 1032, 1034, 5, 12, 0, 0, 1033, 1032, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1037, 5, 84, 0, 0, 1036, 1038, 3, 170, 85, 0, 1037, 1036, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1052, 3, 190, 95, 0, 1040, 1049, 5, 265, 0, 0, 1041, 1046, 3, 356, 178, 0, 1042, 1043, 5, 263, 0, 0, 1043, 1045, 3, 356, 178, 0, 1044, 1042, 1, 0, 0, 0, 1045, 1048, 1, 0, 0, 0, 1046, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1050, 1, 0, 0, 0, 1048, 1046, 1, 0, 0, 0, 1049, 1041, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1053, 5, 266, 0, 0, 1052, 1040, 1, 0, 0, 0, 1052, 1053, 1, 0, 0, 0, 1053, 85, 1, 0, 0, 0, 1054, 1055, 5, 58, 0, 0, 1055, 1056, 5, 166, 0, 0, 1056, 1057, 3, 390, 195, 0, 1057, 87, 1, 0, 0, 0, 1058, 1061, 3, 90, 45, 0, 1059, 1061, 3, 92, 46, 0, 1060, 1058, 1, 0, 0, 0, 1060, 1059, 1, 0, 0, 0, 1061, 89, 1, 0, 0, 0, 1062, 1063, 5, 86, 0, 0, 1063, 1064, 5, 166, 0, 0, 1064, 1065, 3, 390, 195, 0, 1065, 1066, 5, 193, 0, 0, 1066, 1067, 5, 87, 0, 0, 1067, 1068, 3, 390, 195, 0, 1068, 91, 1, 0, 0, 0, 1069, 1070, 5, 86, 0, 0, 1070, 1071, 3, 380, 190, 0, 1071, 1072, 5, 136, 0, 0, 1072, 1074, 3, 382, 191, 0, 1073, 1075, 3, 384, 192, 0, 1074, 1073, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1077, 5, 193, 0, 0, 1077, 1078, 3, 388, 194, 0, 1078, 93, 1, 0, 0, 0, 1079, 1082, 3, 96, 48, 0, 1080, 1082, 3, 98, 49, 0, 1081, 1079, 1, 0, 0, 0, 1081, 1080, 1, 0, 0, 0, 1082, 95, 1, 0, 0, 0, 1083, 1084, 5, 161, 0, 0, 1084, 1085, 5, 166, 0, 0, 1085, 1086, 3, 390, 195, 0, 1086, 1087, 5, 82, 0, 0, 1087, 1088, 5, 87, 0, 0, 1088, 1089, 3, 390, 195, 0, 1089, 97, 1, 0, 0, 0, 1090, 1094, 5, 161, 0, 0, 1091, 1092, 5, 86, 0, 0, 1092, 1093, 5, 137, 0, 0, 1093, 1095, 5, 78, 0, 0, 1094, 1091, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 3, 380, 190, 0, 1097, 1098, 5, 136, 0, 0, 1098, 1100, 3, 382, 191, 0, 1099, 1101, 3, 384, 192, 0, 1100, 1099, 1, 0, 0, 0, 1100, 1101, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1108, 5, 82, 0, 0, 1103, 1109, 3, 388, 194, 0, 1104, 1106, 5, 166, 0, 0, 1105, 1104, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1109, 3, 390, 195, 0, 1108, 1103, 1, 0, 0, 0, 1108, 1105, 1, 0, 0, 0, 1109, 99, 1, 0, 0, 0, 1110, 1112, 3, 214, 107, 0, 1111, 1110, 1, 0, 0, 0, 1111, 1112, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1114, 5, 99, 0, 0, 1114, 1116, 7, 5, 0, 0, 1115, 1117, 5, 188, 0, 0, 1116, 1115, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1118, 1, 0, 0, 0, 1118, 1120, 3, 186, 93, 0, 1119, 1121, 3, 316, 158, 0, 1120, 1119, 1, 0, 0, 0, 1120, 1121, 1, 0, 0, 0, 1121, 1134, 1, 0, 0, 0, 1122, 1123, 5, 145, 0, 0, 1123, 1124, 5, 265, 0, 0, 1124, 1129, 3, 330, 165, 0, 1125, 1126, 5, 263, 0, 0, 1126, 1128, 3, 330, 165, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1131, 1, 0, 0, 0, 1129, 1127, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1132, 1, 0, 0, 0, 1131, 1129, 1, 0, 0, 0, 1132, 1133, 5, 266, 0, 0, 1133, 1135, 1, 0, 0, 0, 1134, 1122, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1137, 3, 212, 106, 0, 1137, 101, 1, 0, 0, 0, 1138, 1141, 3, 104, 52, 0, 1139, 1141, 3, 106, 53, 0, 1140, 1138, 1, 0, 0, 0, 1140, 1139, 1, 0, 0, 0, 1141, 103, 1, 0, 0, 0, 1142, 1144, 5, 50, 0, 0, 1143, 1145, 5, 82, 0, 0, 1144, 1143, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1146, 1, 0, 0, 0, 1146, 1148, 3, 186, 93, 0, 1147, 1149, 3, 280, 140, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 105, 1, 0, 0, 0, 1150, 1151, 5, 50, 0, 0, 1151, 1156, 3, 186, 93, 0, 1152, 1154, 5, 9, 0, 0, 1153, 1152, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1157, 3, 390, 195, 0, 1156, 1153, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1158, 1, 0, 0, 0, 1158, 1167, 5, 82, 0, 0, 1159, 1164, 3, 304, 152, 0, 1160, 1161, 5, 263, 0, 0, 1161, 1163, 3, 304, 152, 0, 1162, 1160, 1, 0, 0, 0, 1163, 1166, 1, 0, 0, 0, 1164, 1162, 1, 0, 0, 0, 1164, 1165, 1, 0, 0, 0, 1165, 1168, 1, 0, 0, 0, 1166, 1164, 1, 0, 0, 0, 1167, 1159, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1170, 1, 0, 0, 0, 1169, 1171, 3, 280, 140, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 107, 1, 0, 0, 0, 1172, 1173, 5, 54, 0, 0, 1173, 1174, 3, 186, 93, 0, 1174, 1175, 5, 176, 0, 0, 1175, 1185, 3, 204, 102, 0, 1176, 1177, 5, 82, 0, 0, 1177, 1182, 3, 304, 152, 0, 1178, 1179, 5, 263, 0, 0, 1179, 1181, 3, 304, 152, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1184, 1, 0, 0, 0, 1182, 1180, 1, 0, 0, 0, 1182, 1183, 1, 0, 0, 0, 1183, 1186, 1, 0, 0, 0, 1184, 1182, 1, 0, 0, 0, 1185, 1176, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1188, 1, 0, 0, 0, 1187, 1189, 3, 280, 140, 0, 1188, 1187, 1, 0, 0, 0, 1188, 1189, 1, 0, 0, 0, 1189, 109, 1, 0, 0, 0, 1190, 1191, 5, 207, 0, 0, 1191, 1193, 5, 103, 0, 0, 1192, 1194, 5, 188, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 3, 186, 93, 0, 1196, 1198, 3, 316, 158, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1200, 3, 212, 106, 0, 1200, 111, 1, 0, 0, 0, 1201, 1214, 3, 132, 66, 0, 1202, 1214, 3, 134, 67, 0, 1203, 1214, 3, 136, 68, 0, 1204, 1214, 3, 130, 65, 0, 1205, 1214, 3, 128, 64, 0, 1206, 1214, 3, 126, 63, 0, 1207, 1214, 3, 124, 62, 0, 1208, 1214, 3, 122, 61, 0, 1209, 1214, 3, 120, 60, 0, 1210, 1214, 3, 118, 59, 0, 1211, 1214, 3, 116, 58, 0, 1212, 1214, 3, 114, 57, 0, 1213, 1201, 1, 0, 0, 0, 1213, 1202, 1, 0, 0, 0, 1213, 1203, 1, 0, 0, 0, 1213, 1204, 1, 0, 0, 0, 1213, 1205, 1, 0, 0, 0, 1213, 1206, 1, 0, 0, 0, 1213, 1207, 1, 0, 0, 0, 1213, 1208, 1, 0, 0, 0, 1213, 1209, 1, 0, 0, 0, 1213, 1210, 1, 0, 0, 0, 1213, 1211, 1, 0, 0, 0, 1213, 1212, 1, 0, 0, 0, 1214, 113, 1, 0, 0, 0, 1215, 1216, 5, 179, 0, 0, 1216, 1228, 7, 6, 0, 0, 1217, 1219, 5, 115, 0, 0, 1218, 1217, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1225, 3, 342, 171, 0, 1221, 1222, 5, 271, 0, 0, 1222, 1224, 3, 342, 171, 0, 1223, 1221, 1, 0, 0, 0, 1224, 1227, 1, 0, 0, 0, 1225, 1223, 1, 0, 0, 0, 1225, 1226, 1, 0, 0, 0, 1226, 1229, 1, 0, 0, 0, 1227, 1225, 1, 0, 0, 0, 1228, 1218, 1, 0, 0, 0, 1228, 1229, 1, 0, 0, 0, 1229, 115, 1, 0, 0, 0, 1230, 1231, 5, 179, 0, 0, 1231, 1234, 5, 189, 0, 0, 1232, 1233, 5, 94, 0, 0, 1233, 1235, 3, 186, 93, 0, 1234, 1232, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1247, 1, 0, 0, 0, 1236, 1238, 5, 115, 0, 0, 1237, 1236, 1, 0, 0, 0, 1237, 1238, 1, 0, 0, 0, 1238, 1239, 1, 0, 0, 0, 1239, 1244, 3, 342, 171, 0, 1240, 1241, 5, 271, 0, 0, 1241, 1243, 3, 342, 171, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1248, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1237, 1, 0, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 117, 1, 0, 0, 0, 1249, 1251, 5, 179, 0, 0, 1250, 1252, 7, 7, 0, 0, 1251, 1250, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1256, 5, 85, 0, 0, 1254, 1255, 5, 94, 0, 0, 1255, 1257, 3, 184, 92, 0, 1256, 1254, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1269, 1, 0, 0, 0, 1258, 1260, 5, 115, 0, 0, 1259, 1258, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1266, 3, 342, 171, 0, 1262, 1263, 5, 271, 0, 0, 1263, 1265, 3, 342, 171, 0, 1264, 1262, 1, 0, 0, 0, 1265, 1268, 1, 0, 0, 0, 1266, 1264, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1270, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1269, 1259, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 119, 1, 0, 0, 0, 1271, 1272, 5, 179, 0, 0, 1272, 1273, 5, 37, 0, 0, 1273, 1274, 5, 188, 0, 0, 1274, 1275, 3, 186, 93, 0, 1275, 121, 1, 0, 0, 0, 1276, 1277, 5, 179, 0, 0, 1277, 1278, 5, 37, 0, 0, 1278, 1279, 5, 212, 0, 0, 1279, 1280, 3, 188, 94, 0, 1280, 123, 1, 0, 0, 0, 1281, 1282, 5, 179, 0, 0, 1282, 1283, 5, 188, 0, 0, 1283, 1284, 5, 182, 0, 0, 1284, 1285, 3, 186, 93, 0, 1285, 125, 1, 0, 0, 0, 1286, 1287, 5, 179, 0, 0, 1287, 1288, 5, 32, 0, 0, 1288, 1289, 5, 182, 0, 0, 1289, 1290, 3, 186, 93, 0, 1290, 127, 1, 0, 0, 0, 1291, 1293, 5, 179, 0, 0, 1292, 1294, 5, 154, 0, 0, 1293, 1292, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1296, 5, 146, 0, 0, 1296, 1297, 3, 186, 93, 0, 1297, 129, 1, 0, 0, 0, 1298, 1299, 5, 179, 0, 0, 1299, 1300, 5, 73, 0, 0, 1300, 1301, 5, 94, 0, 0, 1301, 1311, 3, 186, 93, 0, 1302, 1303, 5, 145, 0, 0, 1303, 1304, 5, 265, 0, 0, 1304, 1307, 3, 330, 165, 0, 1305, 1306, 5, 263, 0, 0, 1306, 1308, 3, 330, 165, 0, 1307, 1305, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1310, 5, 266, 0, 0, 1310, 1312, 1, 0, 0, 0, 1311, 1302, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 131, 1, 0, 0, 0, 1313, 1315, 5, 179, 0, 0, 1314, 1316, 5, 39, 0, 0, 1315, 1314, 1, 0, 0, 0, 1315, 1316, 1, 0, 0, 0, 1316, 1317, 1, 0, 0, 0, 1317, 1318, 5, 167, 0, 0, 1318, 133, 1, 0, 0, 0, 1319, 1320, 5, 179, 0, 0, 1320, 1321, 5, 166, 0, 0, 1321, 1322, 5, 86, 0, 0, 1322, 1323, 5, 87, 0, 0, 1323, 1324, 3, 390, 195, 0, 1324, 135, 1, 0, 0, 0, 1325, 1340, 3, 138, 69, 0, 1326, 1340, 3, 140, 70, 0, 1327, 1340, 3, 142, 71, 0, 1328, 1329, 5, 179, 0, 0, 1329, 1330, 5, 86, 0, 0, 1330, 1331, 7, 8, 0, 0, 1331, 1337, 3, 390, 195, 0, 1332, 1333, 5, 136, 0, 0, 1333, 1335, 7, 9, 0, 0, 1334, 1336, 3, 384, 192, 0, 1335, 1334, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 1338, 1, 0, 0, 0, 1337, 1332, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1340, 1, 0, 0, 0, 1339, 1325, 1, 0, 0, 0, 1339, 1326, 1, 0, 0, 0, 1339, 1327, 1, 0, 0, 0, 1339, 1328, 1, 0, 0, 0, 1340, 137, 1, 0, 0, 0, 1341, 1342, 5, 179, 0, 0, 1342, 1343, 5, 86, 0, 0, 1343, 1344, 7, 8, 0, 0, 1344, 1350, 3, 390, 195, 0, 1345, 1346, 5, 136, 0, 0, 1346, 1348, 5, 46, 0, 0, 1347, 1349, 3, 184, 92, 0, 1348, 1347, 1, 0, 0, 0, 1348, 1349, 1, 0, 0, 0, 1349, 1351, 1, 0, 0, 0, 1350, 1345, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, 0, 1351, 139, 1, 0, 0, 0, 1352, 1353, 5, 179, 0, 0, 1353, 1354, 5, 86, 0, 0, 1354, 1355, 7, 8, 0, 0, 1355, 1361, 3, 390, 195, 0, 1356, 1357, 5, 136, 0, 0, 1357, 1359, 5, 188, 0, 0, 1358, 1360, 3, 186, 93, 0, 1359, 1358, 1, 0, 0, 0, 1359, 1360, 1, 0, 0, 0, 1360, 1362, 1, 0, 0, 0, 1361, 1356, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 141, 1, 0, 0, 0, 1363, 1364, 5, 179, 0, 0, 1364, 1365, 5, 86, 0, 0, 1365, 1366, 7, 8, 0, 0, 1366, 1372, 3, 390, 195, 0, 1367, 1368, 5, 136, 0, 0, 1368, 1370, 5, 32, 0, 0, 1369, 1371, 3, 194, 97, 0, 1370, 1369, 1, 0, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1373, 1, 0, 0, 0, 1372, 1367, 1, 0, 0, 0, 1372, 1373, 1, 0, 0, 0, 1373, 143, 1, 0, 0, 0, 1374, 1378, 3, 146, 73, 0, 1375, 1378, 3, 148, 74, 0, 1376, 1378, 3, 150, 75, 0, 1377, 1374, 1, 0, 0, 0, 1377, 1375, 1, 0, 0, 0, 1377, 1376, 1, 0, 0, 0, 1378, 145, 1, 0, 0, 0, 1379, 1380, 5, 34, 0, 0, 1380, 1381, 5, 136, 0, 0, 1381, 1382, 5, 46, 0, 0, 1382, 1383, 3, 184, 92, 0, 1383, 1386, 5, 108, 0, 0, 1384, 1387, 3, 342, 171, 0, 1385, 1387, 5, 133, 0, 0, 1386, 1384, 1, 0, 0, 0, 1386, 1385, 1, 0, 0, 0, 1387, 147, 1, 0, 0, 0, 1388, 1389, 5, 34, 0, 0, 1389, 1390, 5, 136, 0, 0, 1390, 1391, 5, 188, 0, 0, 1391, 1392, 3, 186, 93, 0, 1392, 1395, 5, 108, 0, 0, 1393, 1396, 3, 342, 171, 0, 1394, 1396, 5, 133, 0, 0, 1395, 1393, 1, 0, 0, 0, 1395, 1394, 1, 0, 0, 0, 1396, 149, 1, 0, 0, 0, 1397, 1398, 5, 34, 0, 0, 1398, 1399, 5, 136, 0, 0, 1399, 1400, 5, 32, 0, 0, 1400, 1401, 3, 194, 97, 0, 1401, 1404, 5, 108, 0, 0, 1402, 1405, 3, 342, 171, 0, 1403, 1405, 5, 133, 0, 0, 1404, 1402, 1, 0, 0, 0, 1404, 1403, 1, 0, 0, 0, 1405, 151, 1, 0, 0, 0, 1406, 1407, 5, 67, 0, 0, 1407, 1408, 3, 4, 2, 0, 1408, 153, 1, 0, 0, 0, 1409, 1415, 5, 176, 0, 0, 1410, 1416, 5, 2, 0, 0, 1411, 1412, 3, 390, 195, 0, 1412, 1413, 5, 249, 0, 0, 1413, 1414, 3, 330, 165, 0, 1414, 1416, 1, 0, 0, 0, 1415, 1410, 1, 0, 0, 0, 1415, 1411, 1, 0, 0, 0, 1415, 1416, 1, 0, 0, 0, 1416, 155, 1, 0, 0, 0, 1417, 1418, 5, 264, 0, 0, 1418, 1419, 5, 180, 0, 0, 1419, 1429, 5, 265, 0, 0, 1420, 1422, 3, 342, 171, 0, 1421, 1420, 1, 0, 0, 0, 1421, 1422, 1, 0, 0, 0, 1422, 1430, 1, 0, 0, 0, 1423, 1426, 3, 342, 171, 0, 1424, 1425, 5, 263, 0, 0, 1425, 1427, 3, 330, 165, 0, 1426, 1424, 1, 0, 0, 0, 1426, 1427, 1, 0, 0, 0, 1427, 1430, 1, 0, 0, 0, 1428, 1430, 3, 330, 165, 0, 1429, 1421, 1, 0, 0, 0, 1429, 1423, 1, 0, 0, 0, 1429, 1428, 1, 0, 0, 0, 1430, 1431, 1, 0, 0, 0, 1431, 1432, 5, 266, 0, 0, 1432, 157, 1, 0, 0, 0, 1433, 1434, 5, 107, 0, 0, 1434, 1435, 5, 121, 0, 0, 1435, 1436, 3, 186, 93, 0, 1436, 159, 1, 0, 0, 0, 1437, 1438, 5, 118, 0, 0, 1438, 1439, 5, 45, 0, 0, 1439, 1440, 5, 98, 0, 0, 1440, 1442, 5, 274, 0, 0, 1441, 1443, 5, 144, 0, 0, 1442, 1441, 1, 0, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1444, 1, 0, 0, 0, 1444, 1445, 5, 103, 0, 0, 1445, 1446, 5, 188, 0, 0, 1446, 1456, 3, 186, 93, 0, 1447, 1448, 5, 145, 0, 0, 1448, 1449, 5, 265, 0, 0, 1449, 1452, 3, 330, 165, 0, 1450, 1451, 5, 263, 0, 0, 1451, 1453, 3, 330, 165, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1453, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1455, 5, 266, 0, 0, 1455, 1457, 1, 0, 0, 0, 1456, 1447, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 161, 1, 0, 0, 0, 1458, 1462, 3, 164, 82, 0, 1459, 1462, 3, 166, 83, 0, 1460, 1462, 3, 168, 84, 0, 1461, 1458, 1, 0, 0, 0, 1461, 1459, 1, 0, 0, 0, 1461, 1460, 1, 0, 0, 0, 1462, 163, 1, 0, 0, 0, 1463, 1464, 5, 162, 0, 0, 1464, 1477, 3, 186, 93, 0, 1465, 1466, 5, 145, 0, 0, 1466, 1467, 5, 265, 0, 0, 1467, 1472, 3, 330, 165, 0, 1468, 1469, 5, 263, 0, 0, 1469, 1471, 3, 330, 165, 0, 1470, 1468, 1, 0, 0, 0, 1471, 1474, 1, 0, 0, 0, 1472, 1473, 1, 0, 0, 0, 1472, 1470, 1, 0, 0, 0, 1473, 1475, 1, 0, 0, 0, 1474, 1472, 1, 0, 0, 0, 1475, 1476, 5, 266, 0, 0, 1476, 1478, 1, 0, 0, 0, 1477, 1465, 1, 0, 0, 0, 1477, 1478, 1, 0, 0, 0, 1478, 165, 1, 0, 0, 0, 1479, 1480, 5, 162, 0, 0, 1480, 1481, 5, 13, 0, 0, 1481, 167, 1, 0, 0, 0, 1482, 1483, 5, 162, 0, 0, 1483, 1484, 5, 85, 0, 0, 1484, 1485, 3, 190, 95, 0, 1485, 169, 1, 0, 0, 0, 1486, 1487, 5, 93, 0, 0, 1487, 1488, 5, 66, 0, 0, 1488, 171, 1, 0, 0, 0, 1489, 1490, 5, 93, 0, 0, 1490, 1491, 5, 132, 0, 0, 1491, 1492, 5, 66, 0, 0, 1492, 173, 1, 0, 0, 0, 1493, 1494, 3, 384, 192, 0, 1494, 175, 1, 0, 0, 0, 1495, 1496, 3, 384, 192, 0, 1496, 177, 1, 0, 0, 0, 1497, 1498, 3, 384, 192, 0, 1498, 179, 1, 0, 0, 0, 1499, 1500, 3, 384, 192, 0, 1500, 181, 1, 0, 0, 0, 1501, 1502, 3, 384, 192, 0, 1502, 183, 1, 0, 0, 0, 1503, 1504, 3, 384, 192, 0, 1504, 185, 1, 0, 0, 0, 1505, 1510, 3, 390, 195, 0, 1506, 1507, 5, 261, 0, 0, 1507, 1509, 3, 390, 195, 0, 1508, 1506, 1, 0, 0, 0, 1509, 1512, 1, 0, 0, 0, 1510, 1508, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 187, 1, 0, 0, 0, 1512, 1510, 1, 0, 0, 0, 1513, 1518, 3, 390, 195, 0, 1514, 1515, 5, 261, 0, 0, 1515, 1517, 3, 390, 195, 0, 1516, 1514, 1, 0, 0, 0, 1517, 1520, 1, 0, 0, 0, 1518, 1516, 1, 0, 0, 0, 1518, 1519, 1, 0, 0, 0, 1519, 189, 1, 0, 0, 0, 1520, 1518, 1, 0, 0, 0, 1521, 1524, 3, 394, 197, 0, 1522, 1524, 3, 384, 192, 0, 1523, 1521, 1, 0, 0, 0, 1523, 1522, 1, 0, 0, 0, 1524, 191, 1, 0, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 193, 1, 0, 0, 0, 1527, 1528, 4, 97, 0, 0, 1528, 1531, 3, 192, 96, 0, 1529, 1531, 3, 386, 193, 0, 1530, 1527, 1, 0, 0, 0, 1530, 1529, 1, 0, 0, 0, 1531, 195, 1, 0, 0, 0, 1532, 1533, 3, 384, 192, 0, 1533, 197, 1, 0, 0, 0, 1534, 1535, 4, 99, 1, 0, 1535, 1538, 3, 192, 96, 0, 1536, 1538, 3, 386, 193, 0, 1537, 1534, 1, 0, 0, 0, 1537, 1536, 1, 0, 0, 0, 1538, 199, 1, 0, 0, 0, 1539, 1542, 3, 186, 93, 0, 1540, 1542, 3, 188, 94, 0, 1541, 1539, 1, 0, 0, 0, 1541, 1540, 1, 0, 0, 0, 1542, 201, 1, 0, 0, 0, 1543, 1544, 5, 21, 0, 0, 1544, 1545, 5, 26, 0, 0, 1545, 1547, 3, 316, 158, 0, 1546, 1543, 1, 0, 0, 0, 1546, 1547, 1, 0, 0, 0, 1547, 1549, 1, 0, 0, 0, 1548, 1550, 3, 228, 114, 0, 1549, 1548, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1554, 1, 0, 0, 0, 1551, 1552, 5, 168, 0, 0, 1552, 1553, 5, 79, 0, 0, 1553, 1555, 3, 264, 132, 0, 1554, 1551, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1559, 1, 0, 0, 0, 1556, 1557, 5, 216, 0, 0, 1557, 1558, 5, 175, 0, 0, 1558, 1560, 3, 258, 129, 0, 1559, 1556, 1, 0, 0, 0, 1559, 1560, 1, 0, 0, 0, 1560, 1564, 1, 0, 0, 0, 1561, 1562, 5, 23, 0, 0, 1562, 1563, 5, 9, 0, 0, 1563, 1565, 3, 240, 120, 0, 1564, 1561, 1, 0, 0, 0, 1564, 1565, 1, 0, 0, 0, 1565, 1568, 1, 0, 0, 0, 1566, 1567, 5, 24, 0, 0, 1567, 1569, 3, 342, 171, 0, 1568, 1566, 1, 0, 0, 0, 1568, 1569, 1, 0, 0, 0, 1569, 1580, 1, 0, 0, 0, 1570, 1571, 5, 30, 0, 0, 1571, 1572, 5, 94, 0, 0, 1572, 1577, 3, 384, 192, 0, 1573, 1574, 5, 216, 0, 0, 1574, 1575, 5, 151, 0, 0, 1575, 1576, 5, 249, 0, 0, 1576, 1578, 5, 277, 0, 0, 1577, 1573, 1, 0, 0, 0, 1577, 1578, 1, 0, 0, 0, 1578, 1581, 1, 0, 0, 0, 1579, 1581, 5, 197, 0, 0, 1580, 1570, 1, 0, 0, 0, 1580, 1579, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 1584, 1, 0, 0, 0, 1582, 1583, 5, 25, 0, 0, 1583, 1585, 3, 258, 129, 0, 1584, 1582, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 203, 1, 0, 0, 0, 1586, 1591, 3, 206, 103, 0, 1587, 1588, 5, 263, 0, 0, 1588, 1590, 3, 206, 103, 0, 1589, 1587, 1, 0, 0, 0, 1590, 1593, 1, 0, 0, 0, 1591, 1589, 1, 0, 0, 0, 1591, 1592, 1, 0, 0, 0, 1592, 205, 1, 0, 0, 0, 1593, 1591, 1, 0, 0, 0, 1594, 1595, 3, 384, 192, 0, 1595, 1596, 5, 249, 0, 0, 1596, 1597, 3, 330, 165, 0, 1597, 207, 1, 0, 0, 0, 1598, 1600, 5, 265, 0, 0, 1599, 1601, 3, 210, 105, 0, 1600, 1599, 1, 0, 0, 0, 1600, 1601, 1, 0, 0, 0, 1601, 1608, 1, 0, 0, 0, 1602, 1604, 5, 263, 0, 0, 1603, 1605, 3, 210, 105, 0, 1604, 1603, 1, 0, 0, 0, 1604, 1605, 1, 0, 0, 0, 1605, 1607, 1, 0, 0, 0, 1606, 1602, 1, 0, 0, 0, 1607, 1610, 1, 0, 0, 0, 1608, 1606, 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1611, 1, 0, 0, 0, 1610, 1608, 1, 0, 0, 0, 1611, 1612, 5, 266, 0, 0, 1612, 209, 1, 0, 0, 0, 1613, 1615, 3, 182, 91, 0, 1614, 1616, 3, 228, 114, 0, 1615, 1614, 1, 0, 0, 0, 1615, 1616, 1, 0, 0, 0, 1616, 211, 1, 0, 0, 0, 1617, 1619, 3, 214, 107, 0, 1618, 1617, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 1621, 3, 268, 134, 0, 1621, 213, 1, 0, 0, 0, 1622, 1623, 5, 216, 0, 0, 1623, 1628, 3, 290, 145, 0, 1624, 1625, 5, 263, 0, 0, 1625, 1627, 3, 290, 145, 0, 1626, 1624, 1, 0, 0, 0, 1627, 1630, 1, 0, 0, 0, 1628, 1626, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 215, 1, 0, 0, 0, 1630, 1628, 1, 0, 0, 0, 1631, 1632, 5, 150, 0, 0, 1632, 1633, 5, 110, 0, 0, 1633, 1635, 3, 316, 158, 0, 1634, 1636, 5, 53, 0, 0, 1635, 1634, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1640, 1, 0, 0, 0, 1637, 1641, 5, 225, 0, 0, 1638, 1639, 5, 263, 0, 0, 1639, 1641, 5, 225, 0, 0, 1640, 1637, 1, 0, 0, 0, 1640, 1638, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1645, 1, 0, 0, 0, 1642, 1646, 5, 226, 0, 0, 1643, 1644, 5, 263, 0, 0, 1644, 1646, 5, 226, 0, 0, 1645, 1642, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1659, 1, 0, 0, 0, 1647, 1648, 5, 263, 0, 0, 1648, 1651, 3, 218, 109, 0, 1649, 1651, 3, 218, 109, 0, 1650, 1647, 1, 0, 0, 0, 1650, 1649, 1, 0, 0, 0, 1651, 1656, 1, 0, 0, 0, 1652, 1653, 5, 263, 0, 0, 1653, 1655, 3, 218, 109, 0, 1654, 1652, 1, 0, 0, 0, 1655, 1658, 1, 0, 0, 0, 1656, 1657, 1, 0, 0, 0, 1656, 1654, 1, 0, 0, 0, 1657, 1660, 1, 0, 0, 0, 1658, 1656, 1, 0, 0, 0, 1659, 1650, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 217, 1, 0, 0, 0, 1661, 1662, 5, 81, 0, 0, 1662, 1663, 5, 110, 0, 0, 1663, 1664, 3, 316, 158, 0, 1664, 1665, 5, 224, 0, 0, 1665, 1666, 3, 186, 93, 0, 1666, 1668, 3, 316, 158, 0, 1667, 1669, 5, 53, 0, 0, 1668, 1667, 1, 0, 0, 0, 1668, 1669, 1, 0, 0, 0, 1669, 1671, 1, 0, 0, 0, 1670, 1672, 5, 225, 0, 0, 1671, 1670, 1, 0, 0, 0, 1671, 1672, 1, 0, 0, 0, 1672, 1674, 1, 0, 0, 0, 1673, 1675, 5, 226, 0, 0, 1674, 1673, 1, 0, 0, 0, 1674, 1675, 1, 0, 0, 0, 1675, 219, 1, 0, 0, 0, 1676, 1677, 3, 194, 97, 0, 1677, 1680, 3, 356, 178, 0, 1678, 1679, 5, 34, 0, 0, 1679, 1681, 3, 342, 171, 0, 1680, 1678, 1, 0, 0, 0, 1680, 1681, 1, 0, 0, 0, 1681, 221, 1, 0, 0, 0, 1682, 1683, 3, 182, 91, 0, 1683, 1685, 3, 356, 178, 0, 1684, 1686, 3, 228, 114, 0, 1685, 1684, 1, 0, 0, 0, 1685, 1686, 1, 0, 0, 0, 1686, 223, 1, 0, 0, 0, 1687, 1688, 3, 226, 113, 0, 1688, 225, 1, 0, 0, 0, 1689, 1690, 3, 182, 91, 0, 1690, 1698, 3, 356, 178, 0, 1691, 1695, 3, 234, 117, 0, 1692, 1694, 3, 234, 117, 0, 1693, 1692, 1, 0, 0, 0, 1694, 1697, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1699, 1, 0, 0, 0, 1697, 1695, 1, 0, 0, 0, 1698, 1691, 1, 0, 0, 0, 1698, 1699, 1, 0, 0, 0, 1699, 1701, 1, 0, 0, 0, 1700, 1702, 3, 228, 114, 0, 1701, 1700, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1705, 1, 0, 0, 0, 1703, 1704, 5, 150, 0, 0, 1704, 1706, 5, 110, 0, 0, 1705, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 227, 1, 0, 0, 0, 1707, 1708, 5, 34, 0, 0, 1708, 1709, 3, 342, 171, 0, 1709, 229, 1, 0, 0, 0, 1710, 1718, 3, 220, 110, 0, 1711, 1715, 3, 234, 117, 0, 1712, 1714, 3, 234, 117, 0, 1713, 1712, 1, 0, 0, 0, 1714, 1717, 1, 0, 0, 0, 1715, 1716, 1, 0, 0, 0, 1715, 1713, 1, 0, 0, 0, 1716, 1719, 1, 0, 0, 0, 1717, 1715, 1, 0, 0, 0, 1718, 1711, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 231, 1, 0, 0, 0, 1720, 1721, 3, 182, 91, 0, 1721, 1724, 3, 356, 178, 0, 1722, 1723, 5, 34, 0, 0, 1723, 1725, 3, 342, 171, 0, 1724, 1722, 1, 0, 0, 0, 1724, 1725, 1, 0, 0, 0, 1725, 1733, 1, 0, 0, 0, 1726, 1730, 3, 234, 117, 0, 1727, 1729, 3, 234, 117, 0, 1728, 1727, 1, 0, 0, 0, 1729, 1732, 1, 0, 0, 0, 1730, 1731, 1, 0, 0, 0, 1730, 1728, 1, 0, 0, 0, 1731, 1734, 1, 0, 0, 0, 1732, 1730, 1, 0, 0, 0, 1733, 1726, 1, 0, 0, 0, 1733, 1734, 1, 0, 0, 0, 1734, 233, 1, 0, 0, 0, 1735, 1737, 5, 132, 0, 0, 1736, 1735, 1, 0, 0, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1741, 5, 133, 0, 0, 1739, 1741, 3, 236, 118, 0, 1740, 1736, 1, 0, 0, 0, 1740, 1739, 1, 0, 0, 0, 1741, 235, 1, 0, 0, 0, 1742, 1743, 5, 60, 0, 0, 1743, 1751, 3, 330, 165, 0, 1744, 1745, 5, 35, 0, 0, 1745, 1751, 3, 330, 165, 0, 1746, 1747, 5, 51, 0, 0, 1747, 1751, 3, 330, 165, 0, 1748, 1749, 5, 16, 0, 0, 1749, 1751, 3, 392, 196, 0, 1750, 1742, 1, 0, 0, 0, 1750, 1744, 1, 0, 0, 0, 1750, 1746, 1, 0, 0, 0, 1750, 1748, 1, 0, 0, 0, 1751, 237, 1, 0, 0, 0, 1752, 1753, 7, 10, 0, 0, 1753, 239, 1, 0, 0, 0, 1754, 1755, 7, 11, 0, 0, 1755, 241, 1, 0, 0, 0, 1756, 1761, 3, 244, 122, 0, 1757, 1758, 5, 263, 0, 0, 1758, 1760, 3, 244, 122, 0, 1759, 1757, 1, 0, 0, 0, 1760, 1763, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, 0, 1762, 1766, 1, 0, 0, 0, 1763, 1761, 1, 0, 0, 0, 1764, 1765, 5, 263, 0, 0, 1765, 1767, 3, 246, 123, 0, 1766, 1764, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1770, 1, 0, 0, 0, 1768, 1770, 3, 246, 123, 0, 1769, 1756, 1, 0, 0, 0, 1769, 1768, 1, 0, 0, 0, 1770, 243, 1, 0, 0, 0, 1771, 1773, 5, 89, 0, 0, 1772, 1774, 3, 316, 158, 0, 1773, 1772, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1775, 1, 0, 0, 0, 1775, 1776, 5, 146, 0, 0, 1776, 1777, 3, 392, 196, 0, 1777, 245, 1, 0, 0, 0, 1778, 1780, 5, 154, 0, 0, 1779, 1781, 3, 316, 158, 0, 1780, 1779, 1, 0, 0, 0, 1780, 1781, 1, 0, 0, 0, 1781, 1782, 1, 0, 0, 0, 1782, 1783, 5, 265, 0, 0, 1783, 1784, 5, 145, 0, 0, 1784, 1790, 3, 248, 124, 0, 1785, 1786, 5, 263, 0, 0, 1786, 1787, 5, 145, 0, 0, 1787, 1789, 3, 248, 124, 0, 1788, 1785, 1, 0, 0, 0, 1789, 1792, 1, 0, 0, 0, 1790, 1791, 1, 0, 0, 0, 1790, 1788, 1, 0, 0, 0, 1791, 1793, 1, 0, 0, 0, 1792, 1790, 1, 0, 0, 0, 1793, 1794, 5, 266, 0, 0, 1794, 247, 1, 0, 0, 0, 1795, 1796, 5, 210, 0, 0, 1796, 1797, 3, 254, 127, 0, 1797, 1798, 3, 330, 165, 0, 1798, 1811, 1, 0, 0, 0, 1799, 1800, 3, 330, 165, 0, 1800, 1801, 3, 252, 126, 0, 1801, 1803, 1, 0, 0, 0, 1802, 1799, 1, 0, 0, 0, 1802, 1803, 1, 0, 0, 0, 1803, 1804, 1, 0, 0, 0, 1804, 1808, 5, 211, 0, 0, 1805, 1806, 3, 252, 126, 0, 1806, 1807, 3, 330, 165, 0, 1807, 1809, 1, 0, 0, 0, 1808, 1805, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 1811, 1, 0, 0, 0, 1810, 1795, 1, 0, 0, 0, 1810, 1802, 1, 0, 0, 0, 1811, 249, 1, 0, 0, 0, 1812, 1813, 5, 30, 0, 0, 1813, 1814, 5, 94, 0, 0, 1814, 1819, 3, 390, 195, 0, 1815, 1816, 5, 216, 0, 0, 1816, 1817, 5, 151, 0, 0, 1817, 1818, 5, 249, 0, 0, 1818, 1820, 3, 392, 196, 0, 1819, 1815, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1823, 1, 0, 0, 0, 1821, 1823, 5, 197, 0, 0, 1822, 1812, 1, 0, 0, 0, 1822, 1821, 1, 0, 0, 0, 1823, 251, 1, 0, 0, 0, 1824, 1830, 1, 0, 0, 0, 1825, 1830, 5, 251, 0, 0, 1826, 1830, 5, 252, 0, 0, 1827, 1830, 5, 253, 0, 0, 1828, 1830, 5, 254, 0, 0, 1829, 1824, 1, 0, 0, 0, 1829, 1825, 1, 0, 0, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1829, 1828, 1, 0, 0, 0, 1830, 253, 1, 0, 0, 0, 1831, 1840, 5, 249, 0, 0, 1832, 1840, 5, 250, 0, 0, 1833, 1840, 5, 115, 0, 0, 1834, 1840, 5, 164, 0, 0, 1835, 1840, 5, 163, 0, 0, 1836, 1840, 5, 15, 0, 0, 1837, 1840, 5, 94, 0, 0, 1838, 1840, 3, 252, 126, 0, 1839, 1831, 1, 0, 0, 0, 1839, 1832, 1, 0, 0, 0, 1839, 1833, 1, 0, 0, 0, 1839, 1834, 1, 0, 0, 0, 1839, 1835, 1, 0, 0, 0, 1839, 1836, 1, 0, 0, 0, 1839, 1837, 1, 0, 0, 0, 1839, 1838, 1, 0, 0, 0, 1840, 255, 1, 0, 0, 0, 1841, 1842, 5, 115, 0, 0, 1842, 1845, 3, 384, 192, 0, 1843, 1844, 7, 12, 0, 0, 1844, 1846, 5, 153, 0, 0, 1845, 1843, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 257, 1, 0, 0, 0, 1847, 1848, 5, 265, 0, 0, 1848, 1853, 3, 266, 133, 0, 1849, 1850, 5, 263, 0, 0, 1850, 1852, 3, 266, 133, 0, 1851, 1849, 1, 0, 0, 0, 1852, 1855, 1, 0, 0, 0, 1853, 1851, 1, 0, 0, 0, 1853, 1854, 1, 0, 0, 0, 1854, 1856, 1, 0, 0, 0, 1855, 1853, 1, 0, 0, 0, 1856, 1857, 5, 266, 0, 0, 1857, 259, 1, 0, 0, 0, 1858, 1859, 5, 265, 0, 0, 1859, 1864, 3, 220, 110, 0, 1860, 1861, 5, 263, 0, 0, 1861, 1863, 3, 220, 110, 0, 1862, 1860, 1, 0, 0, 0, 1863, 1866, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1864, 1862, 1, 0, 0, 0, 1865, 1867, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1867, 1868, 5, 266, 0, 0, 1868, 261, 1, 0, 0, 0, 1869, 1874, 3, 330, 165, 0, 1870, 1871, 5, 263, 0, 0, 1871, 1873, 3, 330, 165, 0, 1872, 1870, 1, 0, 0, 0, 1873, 1876, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 263, 1, 0, 0, 0, 1876, 1874, 1, 0, 0, 0, 1877, 1887, 5, 52, 0, 0, 1878, 1879, 5, 71, 0, 0, 1879, 1880, 5, 191, 0, 0, 1880, 1881, 5, 26, 0, 0, 1881, 1885, 3, 342, 171, 0, 1882, 1883, 5, 63, 0, 0, 1883, 1884, 5, 26, 0, 0, 1884, 1886, 3, 342, 171, 0, 1885, 1882, 1, 0, 0, 0, 1885, 1886, 1, 0, 0, 0, 1886, 1888, 1, 0, 0, 0, 1887, 1878, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1893, 1, 0, 0, 0, 1889, 1890, 5, 117, 0, 0, 1890, 1891, 5, 191, 0, 0, 1891, 1892, 5, 26, 0, 0, 1892, 1894, 3, 342, 171, 0, 1893, 1889, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 265, 1, 0, 0, 0, 1895, 1898, 3, 390, 195, 0, 1896, 1897, 5, 249, 0, 0, 1897, 1899, 3, 330, 165, 0, 1898, 1896, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 267, 1, 0, 0, 0, 1900, 1911, 3, 270, 135, 0, 1901, 1902, 5, 139, 0, 0, 1902, 1903, 5, 26, 0, 0, 1903, 1908, 3, 274, 137, 0, 1904, 1905, 5, 263, 0, 0, 1905, 1907, 3, 274, 137, 0, 1906, 1904, 1, 0, 0, 0, 1907, 1910, 1, 0, 0, 0, 1908, 1906, 1, 0, 0, 0, 1908, 1909, 1, 0, 0, 0, 1909, 1912, 1, 0, 0, 0, 1910, 1908, 1, 0, 0, 0, 1911, 1901, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1912, 1919, 1, 0, 0, 0, 1913, 1914, 5, 116, 0, 0, 1914, 1917, 3, 330, 165, 0, 1915, 1916, 5, 135, 0, 0, 1916, 1918, 5, 277, 0, 0, 1917, 1915, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1920, 1, 0, 0, 0, 1919, 1913, 1, 0, 0, 0, 1919, 1920, 1, 0, 0, 0, 1920, 269, 1, 0, 0, 0, 1921, 1922, 6, 135, -1, 0, 1922, 1923, 3, 272, 136, 0, 1923, 1938, 1, 0, 0, 0, 1924, 1925, 10, 2, 0, 0, 1925, 1927, 5, 100, 0, 0, 1926, 1928, 3, 292, 146, 0, 1927, 1926, 1, 0, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1929, 1, 0, 0, 0, 1929, 1937, 3, 270, 135, 3, 1930, 1931, 10, 1, 0, 0, 1931, 1933, 7, 13, 0, 0, 1932, 1934, 3, 292, 146, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1937, 3, 270, 135, 2, 1936, 1924, 1, 0, 0, 0, 1936, 1930, 1, 0, 0, 0, 1937, 1940, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 271, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1941, 1958, 3, 276, 138, 0, 1942, 1943, 5, 188, 0, 0, 1943, 1958, 3, 186, 93, 0, 1944, 1945, 5, 211, 0, 0, 1945, 1950, 3, 330, 165, 0, 1946, 1947, 5, 263, 0, 0, 1947, 1949, 3, 330, 165, 0, 1948, 1946, 1, 0, 0, 0, 1949, 1952, 1, 0, 0, 0, 1950, 1948, 1, 0, 0, 0, 1950, 1951, 1, 0, 0, 0, 1951, 1958, 1, 0, 0, 0, 1952, 1950, 1, 0, 0, 0, 1953, 1954, 5, 265, 0, 0, 1954, 1955, 3, 268, 134, 0, 1955, 1956, 5, 266, 0, 0, 1956, 1958, 1, 0, 0, 0, 1957, 1941, 1, 0, 0, 0, 1957, 1942, 1, 0, 0, 0, 1957, 1944, 1, 0, 0, 0, 1957, 1953, 1, 0, 0, 0, 1958, 273, 1, 0, 0, 0, 1959, 1961, 3, 328, 164, 0, 1960, 1962, 7, 14, 0, 0, 1961, 1960, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1965, 1, 0, 0, 0, 1963, 1964, 5, 134, 0, 0, 1964, 1966, 7, 15, 0, 0, 1965, 1963, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 275, 1, 0, 0, 0, 1967, 1969, 5, 174, 0, 0, 1968, 1970, 3, 292, 146, 0, 1969, 1968, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 1972, 1, 0, 0, 0, 1971, 1973, 5, 183, 0, 0, 1972, 1971, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1984, 3, 278, 139, 0, 1975, 1976, 5, 82, 0, 0, 1976, 1981, 3, 304, 152, 0, 1977, 1978, 5, 263, 0, 0, 1978, 1980, 3, 304, 152, 0, 1979, 1977, 1, 0, 0, 0, 1980, 1983, 1, 0, 0, 0, 1981, 1979, 1, 0, 0, 0, 1981, 1982, 1, 0, 0, 0, 1982, 1985, 1, 0, 0, 0, 1983, 1981, 1, 0, 0, 0, 1984, 1975, 1, 0, 0, 0, 1984, 1985, 1, 0, 0, 0, 1985, 1987, 1, 0, 0, 0, 1986, 1988, 3, 280, 140, 0, 1987, 1986, 1, 0, 0, 0, 1987, 1988, 1, 0, 0, 0, 1988, 1992, 1, 0, 0, 0, 1989, 1990, 5, 87, 0, 0, 1990, 1991, 5, 26, 0, 0, 1991, 1993, 3, 284, 142, 0, 1992, 1989, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1995, 1, 0, 0, 0, 1994, 1996, 3, 282, 141, 0, 1995, 1994, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 277, 1, 0, 0, 0, 1997, 2002, 3, 294, 147, 0, 1998, 1999, 5, 263, 0, 0, 1999, 2001, 3, 294, 147, 0, 2000, 1998, 1, 0, 0, 0, 2001, 2004, 1, 0, 0, 0, 2002, 2000, 1, 0, 0, 0, 2002, 2003, 1, 0, 0, 0, 2003, 279, 1, 0, 0, 0, 2004, 2002, 1, 0, 0, 0, 2005, 2008, 5, 215, 0, 0, 2006, 2009, 3, 332, 166, 0, 2007, 2009, 3, 198, 99, 0, 2008, 2006, 1, 0, 0, 0, 2008, 2007, 1, 0, 0, 0, 2009, 281, 1, 0, 0, 0, 2010, 2013, 5, 90, 0, 0, 2011, 2014, 3, 332, 166, 0, 2012, 2014, 3, 198, 99, 0, 2013, 2011, 1, 0, 0, 0, 2013, 2012, 1, 0, 0, 0, 2014, 283, 1, 0, 0, 0, 2015, 2017, 3, 292, 146, 0, 2016, 2015, 1, 0, 0, 0, 2016, 2017, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 2023, 3, 286, 143, 0, 2019, 2020, 5, 263, 0, 0, 2020, 2022, 3, 286, 143, 0, 2021, 2019, 1, 0, 0, 0, 2022, 2025, 1, 0, 0, 0, 2023, 2021, 1, 0, 0, 0, 2023, 2024, 1, 0, 0, 0, 2024, 285, 1, 0, 0, 0, 2025, 2023, 1, 0, 0, 0, 2026, 2027, 3, 288, 144, 0, 2027, 287, 1, 0, 0, 0, 2028, 2037, 5, 265, 0, 0, 2029, 2034, 3, 328, 164, 0, 2030, 2031, 5, 263, 0, 0, 2031, 2033, 3, 328, 164, 0, 2032, 2030, 1, 0, 0, 0, 2033, 2036, 1, 0, 0, 0, 2034, 2032, 1, 0, 0, 0, 2034, 2035, 1, 0, 0, 0, 2035, 2038, 1, 0, 0, 0, 2036, 2034, 1, 0, 0, 0, 2037, 2029, 1, 0, 0, 0, 2037, 2038, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 2042, 5, 266, 0, 0, 2040, 2042, 3, 328, 164, 0, 2041, 2028, 1, 0, 0, 0, 2041, 2040, 1, 0, 0, 0, 2042, 289, 1, 0, 0, 0, 2043, 2045, 3, 390, 195, 0, 2044, 2046, 3, 316, 158, 0, 2045, 2044, 1, 0, 0, 0, 2045, 2046, 1, 0, 0, 0, 2046, 2047, 1, 0, 0, 0, 2047, 2048, 5, 9, 0, 0, 2048, 2049, 3, 322, 161, 0, 2049, 291, 1, 0, 0, 0, 2050, 2051, 7, 16, 0, 0, 2051, 293, 1, 0, 0, 0, 2052, 2054, 3, 298, 149, 0, 2053, 2055, 3, 296, 148, 0, 2054, 2053, 1, 0, 0, 0, 2054, 2055, 1, 0, 0, 0, 2055, 2064, 1, 0, 0, 0, 2056, 2058, 3, 300, 150, 0, 2057, 2059, 3, 296, 148, 0, 2058, 2057, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2064, 1, 0, 0, 0, 2060, 2064, 3, 302, 151, 0, 2061, 2062, 4, 147, 4, 0, 2062, 2064, 3, 192, 96, 0, 2063, 2052, 1, 0, 0, 0, 2063, 2056, 1, 0, 0, 0, 2063, 2060, 1, 0, 0, 0, 2063, 2061, 1, 0, 0, 0, 2064, 295, 1, 0, 0, 0, 2065, 2067, 5, 9, 0, 0, 2066, 2065, 1, 0, 0, 0, 2066, 2067, 1, 0, 0, 0, 2067, 2068, 1, 0, 0, 0, 2068, 2069, 3, 390, 195, 0, 2069, 297, 1, 0, 0, 0, 2070, 2071, 3, 194, 97, 0, 2071, 299, 1, 0, 0, 0, 2072, 2073, 3, 330, 165, 0, 2073, 301, 1, 0, 0, 0, 2074, 2075, 3, 384, 192, 0, 2075, 2076, 5, 261, 0, 0, 2076, 2078, 1, 0, 0, 0, 2077, 2074, 1, 0, 0, 0, 2077, 2078, 1, 0, 0, 0, 2078, 2079, 1, 0, 0, 0, 2079, 2080, 5, 257, 0, 0, 2080, 303, 1, 0, 0, 0, 2081, 2082, 6, 152, -1, 0, 2082, 2083, 3, 310, 155, 0, 2083, 2097, 1, 0, 0, 0, 2084, 2093, 10, 2, 0, 0, 2085, 2086, 5, 38, 0, 0, 2086, 2087, 5, 109, 0, 0, 2087, 2094, 3, 310, 155, 0, 2088, 2089, 3, 306, 153, 0, 2089, 2090, 5, 109, 0, 0, 2090, 2091, 3, 304, 152, 0, 2091, 2092, 3, 308, 154, 0, 2092, 2094, 1, 0, 0, 0, 2093, 2085, 1, 0, 0, 0, 2093, 2088, 1, 0, 0, 0, 2094, 2096, 1, 0, 0, 0, 2095, 2084, 1, 0, 0, 0, 2096, 2099, 1, 0, 0, 0, 2097, 2095, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 305, 1, 0, 0, 0, 2099, 2097, 1, 0, 0, 0, 2100, 2102, 5, 97, 0, 0, 2101, 2100, 1, 0, 0, 0, 2101, 2102, 1, 0, 0, 0, 2102, 2132, 1, 0, 0, 0, 2103, 2105, 5, 114, 0, 0, 2104, 2106, 5, 97, 0, 0, 2105, 2104, 1, 0, 0, 0, 2105, 2106, 1, 0, 0, 0, 2106, 2132, 1, 0, 0, 0, 2107, 2109, 5, 165, 0, 0, 2108, 2110, 5, 97, 0, 0, 2109, 2108, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2132, 1, 0, 0, 0, 2111, 2113, 5, 114, 0, 0, 2112, 2114, 5, 141, 0, 0, 2113, 2112, 1, 0, 0, 0, 2113, 2114, 1, 0, 0, 0, 2114, 2132, 1, 0, 0, 0, 2115, 2117, 5, 165, 0, 0, 2116, 2118, 5, 141, 0, 0, 2117, 2116, 1, 0, 0, 0, 2117, 2118, 1, 0, 0, 0, 2118, 2132, 1, 0, 0, 0, 2119, 2121, 5, 83, 0, 0, 2120, 2122, 5, 141, 0, 0, 2121, 2120, 1, 0, 0, 0, 2121, 2122, 1, 0, 0, 0, 2122, 2132, 1, 0, 0, 0, 2123, 2124, 5, 114, 0, 0, 2124, 2132, 5, 177, 0, 0, 2125, 2126, 5, 165, 0, 0, 2126, 2132, 5, 177, 0, 0, 2127, 2128, 5, 114, 0, 0, 2128, 2132, 5, 7, 0, 0, 2129, 2130, 5, 165, 0, 0, 2130, 2132, 5, 7, 0, 0, 2131, 2101, 1, 0, 0, 0, 2131, 2103, 1, 0, 0, 0, 2131, 2107, 1, 0, 0, 0, 2131, 2111, 1, 0, 0, 0, 2131, 2115, 1, 0, 0, 0, 2131, 2119, 1, 0, 0, 0, 2131, 2123, 1, 0, 0, 0, 2131, 2125, 1, 0, 0, 0, 2131, 2127, 1, 0, 0, 0, 2131, 2129, 1, 0, 0, 0, 2132, 307, 1, 0, 0, 0, 2133, 2136, 5, 136, 0, 0, 2134, 2137, 3, 332, 166, 0, 2135, 2137, 3, 198, 99, 0, 2136, 2134, 1, 0, 0, 0, 2136, 2135, 1, 0, 0, 0, 2137, 2151, 1, 0, 0, 0, 2138, 2139, 5, 205, 0, 0, 2139, 2140, 5, 265, 0, 0, 2140, 2145, 3, 390, 195, 0, 2141, 2142, 5, 263, 0, 0, 2142, 2144, 3, 390, 195, 0, 2143, 2141, 1, 0, 0, 0, 2144, 2147, 1, 0, 0, 0, 2145, 2143, 1, 0, 0, 0, 2145, 2146, 1, 0, 0, 0, 2146, 2148, 1, 0, 0, 0, 2147, 2145, 1, 0, 0, 0, 2148, 2149, 5, 266, 0, 0, 2149, 2151, 1, 0, 0, 0, 2150, 2133, 1, 0, 0, 0, 2150, 2138, 1, 0, 0, 0, 2151, 309, 1, 0, 0, 0, 2152, 2165, 3, 314, 157, 0, 2153, 2154, 5, 190, 0, 0, 2154, 2155, 3, 312, 156, 0, 2155, 2156, 5, 265, 0, 0, 2156, 2157, 3, 330, 165, 0, 2157, 2163, 5, 266, 0, 0, 2158, 2159, 5, 157, 0, 0, 2159, 2160, 5, 265, 0, 0, 2160, 2161, 3, 330, 165, 0, 2161, 2162, 5, 266, 0, 0, 2162, 2164, 1, 0, 0, 0, 2163, 2158, 1, 0, 0, 0, 2163, 2164, 1, 0, 0, 0, 2164, 2166, 1, 0, 0, 0, 2165, 2153, 1, 0, 0, 0, 2165, 2166, 1, 0, 0, 0, 2166, 311, 1, 0, 0, 0, 2167, 2168, 7, 17, 0, 0, 2168, 313, 1, 0, 0, 0, 2169, 2177, 3, 318, 159, 0, 2170, 2172, 5, 9, 0, 0, 2171, 2170, 1, 0, 0, 0, 2171, 2172, 1, 0, 0, 0, 2172, 2173, 1, 0, 0, 0, 2173, 2175, 3, 390, 195, 0, 2174, 2176, 3, 316, 158, 0, 2175, 2174, 1, 0, 0, 0, 2175, 2176, 1, 0, 0, 0, 2176, 2178, 1, 0, 0, 0, 2177, 2171, 1, 0, 0, 0, 2177, 2178, 1, 0, 0, 0, 2178, 315, 1, 0, 0, 0, 2179, 2180, 5, 265, 0, 0, 2180, 2185, 3, 194, 97, 0, 2181, 2182, 5, 263, 0, 0, 2182, 2184, 3, 194, 97, 0, 2183, 2181, 1, 0, 0, 0, 2184, 2187, 1, 0, 0, 0, 2185, 2183, 1, 0, 0, 0, 2185, 2186, 1, 0, 0, 0, 2186, 2188, 1, 0, 0, 0, 2187, 2185, 1, 0, 0, 0, 2188, 2189, 5, 266, 0, 0, 2189, 317, 1, 0, 0, 0, 2190, 2195, 3, 200, 100, 0, 2191, 2195, 3, 320, 160, 0, 2192, 2195, 3, 324, 162, 0, 2193, 2195, 3, 326, 163, 0, 2194, 2190, 1, 0, 0, 0, 2194, 2191, 1, 0, 0, 0, 2194, 2192, 1, 0, 0, 0, 2194, 2193, 1, 0, 0, 0, 2195, 319, 1, 0, 0, 0, 2196, 2198, 5, 113, 0, 0, 2197, 2196, 1, 0, 0, 0, 2197, 2198, 1, 0, 0, 0, 2198, 2199, 1, 0, 0, 0, 2199, 2200, 3, 322, 161, 0, 2200, 321, 1, 0, 0, 0, 2201, 2202, 5, 265, 0, 0, 2202, 2203, 3, 212, 106, 0, 2203, 2204, 5, 266, 0, 0, 2204, 323, 1, 0, 0, 0, 2205, 2206, 5, 201, 0, 0, 2206, 2207, 5, 265, 0, 0, 2207, 2212, 3, 330, 165, 0, 2208, 2209, 5, 263, 0, 0, 2209, 2211, 3, 330, 165, 0, 2210, 2208, 1, 0, 0, 0, 2211, 2214, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2212, 2213, 1, 0, 0, 0, 2213, 2215, 1, 0, 0, 0, 2214, 2212, 1, 0, 0, 0, 2215, 2218, 5, 266, 0, 0, 2216, 2217, 5, 216, 0, 0, 2217, 2219, 5, 140, 0, 0, 2218, 2216, 1, 0, 0, 0, 2218, 2219, 1, 0, 0, 0, 2219, 325, 1, 0, 0, 0, 2220, 2221, 5, 265, 0, 0, 2221, 2222, 3, 304, 152, 0, 2222, 2223, 5, 266, 0, 0, 2223, 327, 1, 0, 0, 0, 2224, 2227, 3, 194, 97, 0, 2225, 2227, 3, 330, 165, 0, 2226, 2224, 1, 0, 0, 0, 2226, 2225, 1, 0, 0, 0, 2227, 329, 1, 0, 0, 0, 2228, 2229, 3, 332, 166, 0, 2229, 331, 1, 0, 0, 0, 2230, 2231, 6, 166, -1, 0, 2231, 2233, 3, 336, 168, 0, 2232, 2234, 3, 334, 167, 0, 2233, 2232, 1, 0, 0, 0, 2233, 2234, 1, 0, 0, 0, 2234, 2238, 1, 0, 0, 0, 2235, 2236, 5, 132, 0, 0, 2236, 2238, 3, 332, 166, 3, 2237, 2230, 1, 0, 0, 0, 2237, 2235, 1, 0, 0, 0, 2238, 2247, 1, 0, 0, 0, 2239, 2240, 10, 2, 0, 0, 2240, 2241, 5, 5, 0, 0, 2241, 2246, 3, 332, 166, 3, 2242, 2243, 10, 1, 0, 0, 2243, 2244, 5, 138, 0, 0, 2244, 2246, 3, 332, 166, 2, 2245, 2239, 1, 0, 0, 0, 2245, 2242, 1, 0, 0, 0, 2246, 2249, 1, 0, 0, 0, 2247, 2245, 1, 0, 0, 0, 2247, 2248, 1, 0, 0, 0, 2248, 333, 1, 0, 0, 0, 2249, 2247, 1, 0, 0, 0, 2250, 2251, 3, 344, 172, 0, 2251, 2252, 3, 336, 168, 0, 2252, 2309, 1, 0, 0, 0, 2253, 2254, 3, 344, 172, 0, 2254, 2255, 3, 346, 173, 0, 2255, 2256, 3, 322, 161, 0, 2256, 2309, 1, 0, 0, 0, 2257, 2259, 5, 132, 0, 0, 2258, 2257, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 2260, 1, 0, 0, 0, 2260, 2261, 5, 15, 0, 0, 2261, 2262, 3, 336, 168, 0, 2262, 2263, 5, 5, 0, 0, 2263, 2264, 3, 336, 168, 0, 2264, 2309, 1, 0, 0, 0, 2265, 2267, 5, 132, 0, 0, 2266, 2265, 1, 0, 0, 0, 2266, 2267, 1, 0, 0, 0, 2267, 2268, 1, 0, 0, 0, 2268, 2269, 5, 94, 0, 0, 2269, 2270, 5, 265, 0, 0, 2270, 2275, 3, 330, 165, 0, 2271, 2272, 5, 263, 0, 0, 2272, 2274, 3, 330, 165, 0, 2273, 2271, 1, 0, 0, 0, 2274, 2277, 1, 0, 0, 0, 2275, 2273, 1, 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2278, 1, 0, 0, 0, 2277, 2275, 1, 0, 0, 0, 2278, 2279, 5, 266, 0, 0, 2279, 2309, 1, 0, 0, 0, 2280, 2282, 5, 132, 0, 0, 2281, 2280, 1, 0, 0, 0, 2281, 2282, 1, 0, 0, 0, 2282, 2283, 1, 0, 0, 0, 2283, 2284, 5, 94, 0, 0, 2284, 2309, 3, 322, 161, 0, 2285, 2287, 5, 132, 0, 0, 2286, 2285, 1, 0, 0, 0, 2286, 2287, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2289, 7, 18, 0, 0, 2289, 2292, 3, 336, 168, 0, 2290, 2291, 5, 62, 0, 0, 2291, 2293, 3, 336, 168, 0, 2292, 2290, 1, 0, 0, 0, 2292, 2293, 1, 0, 0, 0, 2293, 2309, 1, 0, 0, 0, 2294, 2295, 7, 19, 0, 0, 2295, 2309, 3, 336, 168, 0, 2296, 2298, 5, 108, 0, 0, 2297, 2299, 5, 132, 0, 0, 2298, 2297, 1, 0, 0, 0, 2298, 2299, 1, 0, 0, 0, 2299, 2300, 1, 0, 0, 0, 2300, 2309, 7, 20, 0, 0, 2301, 2303, 5, 108, 0, 0, 2302, 2304, 5, 132, 0, 0, 2303, 2302, 1, 0, 0, 0, 2303, 2304, 1, 0, 0, 0, 2304, 2305, 1, 0, 0, 0, 2305, 2306, 5, 57, 0, 0, 2306, 2307, 5, 82, 0, 0, 2307, 2309, 3, 336, 168, 0, 2308, 2250, 1, 0, 0, 0, 2308, 2253, 1, 0, 0, 0, 2308, 2258, 1, 0, 0, 0, 2308, 2266, 1, 0, 0, 0, 2308, 2281, 1, 0, 0, 0, 2308, 2286, 1, 0, 0, 0, 2308, 2294, 1, 0, 0, 0, 2308, 2296, 1, 0, 0, 0, 2308, 2301, 1, 0, 0, 0, 2309, 335, 1, 0, 0, 0, 2310, 2311, 6, 168, -1, 0, 2311, 2315, 3, 340, 170, 0, 2312, 2313, 7, 21, 0, 0, 2313, 2315, 3, 336, 168, 4, 2314, 2310, 1, 0, 0, 0, 2314, 2312, 1, 0, 0, 0, 2315, 2327, 1, 0, 0, 0, 2316, 2317, 10, 3, 0, 0, 2317, 2318, 7, 22, 0, 0, 2318, 2326, 3, 336, 168, 4, 2319, 2320, 10, 2, 0, 0, 2320, 2321, 7, 21, 0, 0, 2321, 2326, 3, 336, 168, 3, 2322, 2323, 10, 1, 0, 0, 2323, 2324, 5, 260, 0, 0, 2324, 2326, 3, 336, 168, 2, 2325, 2316, 1, 0, 0, 0, 2325, 2319, 1, 0, 0, 0, 2325, 2322, 1, 0, 0, 0, 2326, 2329, 1, 0, 0, 0, 2327, 2325, 1, 0, 0, 0, 2327, 2328, 1, 0, 0, 0, 2328, 337, 1, 0, 0, 0, 2329, 2327, 1, 0, 0, 0, 2330, 2331, 3, 190, 95, 0, 2331, 2343, 5, 265, 0, 0, 2332, 2334, 3, 292, 146, 0, 2333, 2332, 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2335, 1, 0, 0, 0, 2335, 2340, 3, 330, 165, 0, 2336, 2337, 5, 263, 0, 0, 2337, 2339, 3, 330, 165, 0, 2338, 2336, 1, 0, 0, 0, 2339, 2342, 1, 0, 0, 0, 2340, 2338, 1, 0, 0, 0, 2340, 2341, 1, 0, 0, 0, 2341, 2344, 1, 0, 0, 0, 2342, 2340, 1, 0, 0, 0, 2343, 2333, 1, 0, 0, 0, 2343, 2344, 1, 0, 0, 0, 2344, 2355, 1, 0, 0, 0, 2345, 2346, 5, 139, 0, 0, 2346, 2347, 5, 26, 0, 0, 2347, 2352, 3, 274, 137, 0, 2348, 2349, 5, 263, 0, 0, 2349, 2351, 3, 274, 137, 0, 2350, 2348, 1, 0, 0, 0, 2351, 2354, 1, 0, 0, 0, 2352, 2350, 1, 0, 0, 0, 2352, 2353, 1, 0, 0, 0, 2353, 2356, 1, 0, 0, 0, 2354, 2352, 1, 0, 0, 0, 2355, 2345, 1, 0, 0, 0, 2355, 2356, 1, 0, 0, 0, 2356, 2357, 1, 0, 0, 0, 2357, 2359, 5, 266, 0, 0, 2358, 2360, 3, 366, 183, 0, 2359, 2358, 1, 0, 0, 0, 2359, 2360, 1, 0, 0, 0, 2360, 2362, 1, 0, 0, 0, 2361, 2363, 3, 370, 185, 0, 2362, 2361, 1, 0, 0, 0, 2362, 2363, 1, 0, 0, 0, 2363, 339, 1, 0, 0, 0, 2364, 2365, 6, 170, -1, 0, 2365, 2578, 5, 133, 0, 0, 2366, 2578, 3, 350, 175, 0, 2367, 2368, 3, 390, 195, 0, 2368, 2369, 3, 342, 171, 0, 2369, 2578, 1, 0, 0, 0, 2370, 2371, 5, 286, 0, 0, 2371, 2578, 3, 342, 171, 0, 2372, 2578, 3, 392, 196, 0, 2373, 2578, 3, 348, 174, 0, 2374, 2578, 3, 342, 171, 0, 2375, 2578, 5, 276, 0, 0, 2376, 2578, 5, 272, 0, 0, 2377, 2378, 5, 148, 0, 0, 2378, 2379, 5, 265, 0, 0, 2379, 2380, 3, 336, 168, 0, 2380, 2381, 5, 94, 0, 0, 2381, 2382, 3, 336, 168, 0, 2382, 2383, 5, 266, 0, 0, 2383, 2578, 1, 0, 0, 0, 2384, 2385, 5, 265, 0, 0, 2385, 2388, 3, 330, 165, 0, 2386, 2387, 5, 9, 0, 0, 2387, 2389, 3, 356, 178, 0, 2388, 2386, 1, 0, 0, 0, 2388, 2389, 1, 0, 0, 0, 2389, 2398, 1, 0, 0, 0, 2390, 2391, 5, 263, 0, 0, 2391, 2394, 3, 330, 165, 0, 2392, 2393, 5, 9, 0, 0, 2393, 2395, 3, 356, 178, 0, 2394, 2392, 1, 0, 0, 0, 2394, 2395, 1, 0, 0, 0, 2395, 2397, 1, 0, 0, 0, 2396, 2390, 1, 0, 0, 0, 2397, 2400, 1, 0, 0, 0, 2398, 2399, 1, 0, 0, 0, 2398, 2396, 1, 0, 0, 0, 2399, 2401, 1, 0, 0, 0, 2400, 2398, 1, 0, 0, 0, 2401, 2402, 5, 266, 0, 0, 2402, 2578, 1, 0, 0, 0, 2403, 2404, 5, 168, 0, 0, 2404, 2405, 5, 265, 0, 0, 2405, 2410, 3, 330, 165, 0, 2406, 2407, 5, 263, 0, 0, 2407, 2409, 3, 330, 165, 0, 2408, 2406, 1, 0, 0, 0, 2409, 2412, 1, 0, 0, 0, 2410, 2408, 1, 0, 0, 0, 2410, 2411, 1, 0, 0, 0, 2411, 2413, 1, 0, 0, 0, 2412, 2410, 1, 0, 0, 0, 2413, 2414, 5, 266, 0, 0, 2414, 2578, 1, 0, 0, 0, 2415, 2416, 3, 190, 95, 0, 2416, 2417, 5, 265, 0, 0, 2417, 2418, 5, 257, 0, 0, 2418, 2420, 5, 266, 0, 0, 2419, 2421, 3, 366, 183, 0, 2420, 2419, 1, 0, 0, 0, 2420, 2421, 1, 0, 0, 0, 2421, 2423, 1, 0, 0, 0, 2422, 2424, 3, 370, 185, 0, 2423, 2422, 1, 0, 0, 0, 2423, 2424, 1, 0, 0, 0, 2424, 2578, 1, 0, 0, 0, 2425, 2578, 3, 338, 169, 0, 2426, 2427, 3, 390, 195, 0, 2427, 2428, 5, 273, 0, 0, 2428, 2429, 3, 330, 165, 0, 2429, 2578, 1, 0, 0, 0, 2430, 2439, 5, 265, 0, 0, 2431, 2436, 3, 390, 195, 0, 2432, 2433, 5, 263, 0, 0, 2433, 2435, 3, 390, 195, 0, 2434, 2432, 1, 0, 0, 0, 2435, 2438, 1, 0, 0, 0, 2436, 2434, 1, 0, 0, 0, 2436, 2437, 1, 0, 0, 0, 2437, 2440, 1, 0, 0, 0, 2438, 2436, 1, 0, 0, 0, 2439, 2431, 1, 0, 0, 0, 2439, 2440, 1, 0, 0, 0, 2440, 2441, 1, 0, 0, 0, 2441, 2442, 5, 266, 0, 0, 2442, 2443, 5, 273, 0, 0, 2443, 2578, 3, 330, 165, 0, 2444, 2445, 5, 265, 0, 0, 2445, 2446, 3, 212, 106, 0, 2446, 2447, 5, 266, 0, 0, 2447, 2578, 1, 0, 0, 0, 2448, 2449, 5, 66, 0, 0, 2449, 2450, 5, 265, 0, 0, 2450, 2451, 3, 212, 106, 0, 2451, 2452, 5, 266, 0, 0, 2452, 2578, 1, 0, 0, 0, 2453, 2454, 5, 28, 0, 0, 2454, 2456, 3, 336, 168, 0, 2455, 2457, 3, 364, 182, 0, 2456, 2455, 1, 0, 0, 0, 2457, 2458, 1, 0, 0, 0, 2458, 2456, 1, 0, 0, 0, 2458, 2459, 1, 0, 0, 0, 2459, 2462, 1, 0, 0, 0, 2460, 2461, 5, 59, 0, 0, 2461, 2463, 3, 330, 165, 0, 2462, 2460, 1, 0, 0, 0, 2462, 2463, 1, 0, 0, 0, 2463, 2464, 1, 0, 0, 0, 2464, 2465, 5, 61, 0, 0, 2465, 2578, 1, 0, 0, 0, 2466, 2468, 5, 28, 0, 0, 2467, 2469, 3, 364, 182, 0, 2468, 2467, 1, 0, 0, 0, 2469, 2470, 1, 0, 0, 0, 2470, 2468, 1, 0, 0, 0, 2470, 2471, 1, 0, 0, 0, 2471, 2474, 1, 0, 0, 0, 2472, 2473, 5, 59, 0, 0, 2473, 2475, 3, 330, 165, 0, 2474, 2472, 1, 0, 0, 0, 2474, 2475, 1, 0, 0, 0, 2475, 2476, 1, 0, 0, 0, 2476, 2477, 5, 61, 0, 0, 2477, 2578, 1, 0, 0, 0, 2478, 2479, 5, 29, 0, 0, 2479, 2480, 5, 265, 0, 0, 2480, 2481, 3, 330, 165, 0, 2481, 2482, 5, 9, 0, 0, 2482, 2483, 3, 356, 178, 0, 2483, 2484, 5, 266, 0, 0, 2484, 2578, 1, 0, 0, 0, 2485, 2486, 5, 195, 0, 0, 2486, 2487, 5, 265, 0, 0, 2487, 2488, 3, 330, 165, 0, 2488, 2489, 5, 9, 0, 0, 2489, 2490, 3, 356, 178, 0, 2490, 2491, 5, 266, 0, 0, 2491, 2578, 1, 0, 0, 0, 2492, 2493, 5, 8, 0, 0, 2493, 2502, 5, 267, 0, 0, 2494, 2499, 3, 330, 165, 0, 2495, 2496, 5, 263, 0, 0, 2496, 2498, 3, 330, 165, 0, 2497, 2495, 1, 0, 0, 0, 2498, 2501, 1, 0, 0, 0, 2499, 2497, 1, 0, 0, 0, 2499, 2500, 1, 0, 0, 0, 2500, 2503, 1, 0, 0, 0, 2501, 2499, 1, 0, 0, 0, 2502, 2494, 1, 0, 0, 0, 2502, 2503, 1, 0, 0, 0, 2503, 2504, 1, 0, 0, 0, 2504, 2578, 5, 268, 0, 0, 2505, 2578, 3, 196, 98, 0, 2506, 2578, 5, 40, 0, 0, 2507, 2511, 5, 42, 0, 0, 2508, 2509, 5, 265, 0, 0, 2509, 2510, 5, 277, 0, 0, 2510, 2512, 5, 266, 0, 0, 2511, 2508, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2578, 1, 0, 0, 0, 2513, 2517, 5, 43, 0, 0, 2514, 2515, 5, 265, 0, 0, 2515, 2516, 5, 277, 0, 0, 2516, 2518, 5, 266, 0, 0, 2517, 2514, 1, 0, 0, 0, 2517, 2518, 1, 0, 0, 0, 2518, 2578, 1, 0, 0, 0, 2519, 2523, 5, 119, 0, 0, 2520, 2521, 5, 265, 0, 0, 2521, 2522, 5, 277, 0, 0, 2522, 2524, 5, 266, 0, 0, 2523, 2520, 1, 0, 0, 0, 2523, 2524, 1, 0, 0, 0, 2524, 2578, 1, 0, 0, 0, 2525, 2529, 5, 120, 0, 0, 2526, 2527, 5, 265, 0, 0, 2527, 2528, 5, 277, 0, 0, 2528, 2530, 5, 266, 0, 0, 2529, 2526, 1, 0, 0, 0, 2529, 2530, 1, 0, 0, 0, 2530, 2578, 1, 0, 0, 0, 2531, 2578, 5, 44, 0, 0, 2532, 2578, 5, 41, 0, 0, 2533, 2534, 5, 184, 0, 0, 2534, 2535, 5, 265, 0, 0, 2535, 2536, 3, 336, 168, 0, 2536, 2537, 5, 82, 0, 0, 2537, 2540, 3, 336, 168, 0, 2538, 2539, 5, 78, 0, 0, 2539, 2541, 3, 336, 168, 0, 2540, 2538, 1, 0, 0, 0, 2540, 2541, 1, 0, 0, 0, 2541, 2542, 1, 0, 0, 0, 2542, 2543, 5, 266, 0, 0, 2543, 2578, 1, 0, 0, 0, 2544, 2545, 5, 131, 0, 0, 2545, 2546, 5, 265, 0, 0, 2546, 2549, 3, 336, 168, 0, 2547, 2548, 5, 263, 0, 0, 2548, 2550, 3, 354, 177, 0, 2549, 2547, 1, 0, 0, 0, 2549, 2550, 1, 0, 0, 0, 2550, 2551, 1, 0, 0, 0, 2551, 2552, 5, 266, 0, 0, 2552, 2578, 1, 0, 0, 0, 2553, 2554, 5, 68, 0, 0, 2554, 2555, 5, 265, 0, 0, 2555, 2556, 3, 390, 195, 0, 2556, 2557, 5, 82, 0, 0, 2557, 2558, 3, 336, 168, 0, 2558, 2559, 5, 266, 0, 0, 2559, 2578, 1, 0, 0, 0, 2560, 2561, 5, 265, 0, 0, 2561, 2562, 3, 330, 165, 0, 2562, 2563, 5, 266, 0, 0, 2563, 2578, 1, 0, 0, 0, 2564, 2565, 5, 88, 0, 0, 2565, 2574, 5, 265, 0, 0, 2566, 2571, 3, 384, 192, 0, 2567, 2568, 5, 263, 0, 0, 2568, 2570, 3, 384, 192, 0, 2569, 2567, 1, 0, 0, 0, 2570, 2573, 1, 0, 0, 0, 2571, 2569, 1, 0, 0, 0, 2571, 2572, 1, 0, 0, 0, 2572, 2575, 1, 0, 0, 0, 2573, 2571, 1, 0, 0, 0, 2574, 2566, 1, 0, 0, 0, 2574, 2575, 1, 0, 0, 0, 2575, 2576, 1, 0, 0, 0, 2576, 2578, 5, 266, 0, 0, 2577, 2364, 1, 0, 0, 0, 2577, 2366, 1, 0, 0, 0, 2577, 2367, 1, 0, 0, 0, 2577, 2370, 1, 0, 0, 0, 2577, 2372, 1, 0, 0, 0, 2577, 2373, 1, 0, 0, 0, 2577, 2374, 1, 0, 0, 0, 2577, 2375, 1, 0, 0, 0, 2577, 2376, 1, 0, 0, 0, 2577, 2377, 1, 0, 0, 0, 2577, 2384, 1, 0, 0, 0, 2577, 2403, 1, 0, 0, 0, 2577, 2415, 1, 0, 0, 0, 2577, 2425, 1, 0, 0, 0, 2577, 2426, 1, 0, 0, 0, 2577, 2430, 1, 0, 0, 0, 2577, 2444, 1, 0, 0, 0, 2577, 2448, 1, 0, 0, 0, 2577, 2453, 1, 0, 0, 0, 2577, 2466, 1, 0, 0, 0, 2577, 2478, 1, 0, 0, 0, 2577, 2485, 1, 0, 0, 0, 2577, 2492, 1, 0, 0, 0, 2577, 2505, 1, 0, 0, 0, 2577, 2506, 1, 0, 0, 0, 2577, 2507, 1, 0, 0, 0, 2577, 2513, 1, 0, 0, 0, 2577, 2519, 1, 0, 0, 0, 2577, 2525, 1, 0, 0, 0, 2577, 2531, 1, 0, 0, 0, 2577, 2532, 1, 0, 0, 0, 2577, 2533, 1, 0, 0, 0, 2577, 2544, 1, 0, 0, 0, 2577, 2553, 1, 0, 0, 0, 2577, 2560, 1, 0, 0, 0, 2577, 2564, 1, 0, 0, 0, 2578, 2589, 1, 0, 0, 0, 2579, 2580, 10, 15, 0, 0, 2580, 2581, 5, 267, 0, 0, 2581, 2582, 3, 336, 168, 0, 2582, 2583, 5, 268, 0, 0, 2583, 2588, 1, 0, 0, 0, 2584, 2585, 10, 13, 0, 0, 2585, 2586, 5, 261, 0, 0, 2586, 2588, 3, 390, 195, 0, 2587, 2579, 1, 0, 0, 0, 2587, 2584, 1, 0, 0, 0, 2588, 2591, 1, 0, 0, 0, 2589, 2587, 1, 0, 0, 0, 2589, 2590, 1, 0, 0, 0, 2590, 341, 1, 0, 0, 0, 2591, 2589, 1, 0, 0, 0, 2592, 2599, 5, 274, 0, 0, 2593, 2596, 5, 275, 0, 0, 2594, 2595, 5, 198, 0, 0, 2595, 2597, 5, 274, 0, 0, 2596, 2594, 1, 0, 0, 0, 2596, 2597, 1, 0, 0, 0, 2597, 2599, 1, 0, 0, 0, 2598, 2592, 1, 0, 0, 0, 2598, 2593, 1, 0, 0, 0, 2599, 343, 1, 0, 0, 0, 2600, 2601, 7, 23, 0, 0, 2601, 345, 1, 0, 0, 0, 2602, 2603, 7, 24, 0, 0, 2603, 347, 1, 0, 0, 0, 2604, 2605, 7, 25, 0, 0, 2605, 349, 1, 0, 0, 0, 2606, 2607, 5, 277, 0, 0, 2607, 2621, 3, 352, 176, 0, 2608, 2609, 5, 265, 0, 0, 2609, 2610, 5, 277, 0, 0, 2610, 2611, 5, 266, 0, 0, 2611, 2621, 3, 352, 176, 0, 2612, 2613, 5, 101, 0, 0, 2613, 2614, 5, 277, 0, 0, 2614, 2621, 3, 352, 176, 0, 2615, 2616, 5, 101, 0, 0, 2616, 2617, 5, 265, 0, 0, 2617, 2618, 5, 277, 0, 0, 2618, 2619, 5, 266, 0, 0, 2619, 2621, 3, 352, 176, 0, 2620, 2606, 1, 0, 0, 0, 2620, 2608, 1, 0, 0, 0, 2620, 2612, 1, 0, 0, 0, 2620, 2615, 1, 0, 0, 0, 2621, 351, 1, 0, 0, 0, 2622, 2623, 7, 26, 0, 0, 2623, 353, 1, 0, 0, 0, 2624, 2625, 7, 27, 0, 0, 2625, 355, 1, 0, 0, 0, 2626, 2627, 6, 178, -1, 0, 2627, 2628, 5, 8, 0, 0, 2628, 2629, 5, 251, 0, 0, 2629, 2630, 3, 356, 178, 0, 2630, 2631, 5, 253, 0, 0, 2631, 2672, 1, 0, 0, 0, 2632, 2633, 5, 235, 0, 0, 2633, 2634, 5, 251, 0, 0, 2634, 2635, 3, 356, 178, 0, 2635, 2636, 5, 263, 0, 0, 2636, 2637, 3, 356, 178, 0, 2637, 2638, 5, 253, 0, 0, 2638, 2672, 1, 0, 0, 0, 2639, 2640, 5, 240, 0, 0, 2640, 2641, 5, 251, 0, 0, 2641, 2642, 3, 390, 195, 0, 2642, 2649, 3, 356, 178, 0, 2643, 2644, 5, 263, 0, 0, 2644, 2645, 3, 390, 195, 0, 2645, 2646, 3, 356, 178, 0, 2646, 2648, 1, 0, 0, 0, 2647, 2643, 1, 0, 0, 0, 2648, 2651, 1, 0, 0, 0, 2649, 2647, 1, 0, 0, 0, 2649, 2650, 1, 0, 0, 0, 2650, 2652, 1, 0, 0, 0, 2651, 2649, 1, 0, 0, 0, 2652, 2653, 5, 253, 0, 0, 2653, 2672, 1, 0, 0, 0, 2654, 2657, 3, 362, 181, 0, 2655, 2657, 3, 358, 179, 0, 2656, 2654, 1, 0, 0, 0, 2656, 2655, 1, 0, 0, 0, 2657, 2669, 1, 0, 0, 0, 2658, 2659, 5, 265, 0, 0, 2659, 2664, 3, 360, 180, 0, 2660, 2661, 5, 263, 0, 0, 2661, 2663, 3, 360, 180, 0, 2662, 2660, 1, 0, 0, 0, 2663, 2666, 1, 0, 0, 0, 2664, 2662, 1, 0, 0, 0, 2664, 2665, 1, 0, 0, 0, 2665, 2667, 1, 0, 0, 0, 2666, 2664, 1, 0, 0, 0, 2667, 2668, 5, 266, 0, 0, 2668, 2670, 1, 0, 0, 0, 2669, 2658, 1, 0, 0, 0, 2669, 2670, 1, 0, 0, 0, 2670, 2672, 1, 0, 0, 0, 2671, 2626, 1, 0, 0, 0, 2671, 2632, 1, 0, 0, 0, 2671, 2639, 1, 0, 0, 0, 2671, 2656, 1, 0, 0, 0, 2672, 2677, 1, 0, 0, 0, 2673, 2674, 10, 5, 0, 0, 2674, 2676, 5, 8, 0, 0, 2675, 2673, 1, 0, 0, 0, 2676, 2679, 1, 0, 0, 0, 2677, 2675, 1, 0, 0, 0, 2677, 2678, 1, 0, 0, 0, 2678, 357, 1, 0, 0, 0, 2679, 2677, 1, 0, 0, 0, 2680, 2681, 7, 28, 0, 0, 2681, 359, 1, 0, 0, 0, 2682, 2685, 5, 277, 0, 0, 2683, 2685, 3, 356, 178, 0, 2684, 2682, 1, 0, 0, 0, 2684, 2683, 1, 0, 0, 0, 2685, 361, 1, 0, 0, 0, 2686, 2691, 5, 284, 0, 0, 2687, 2691, 5, 285, 0, 0, 2688, 2691, 5, 286, 0, 0, 2689, 2691, 3, 390, 195, 0, 2690, 2686, 1, 0, 0, 0, 2690, 2687, 1, 0, 0, 0, 2690, 2688, 1, 0, 0, 0, 2690, 2689, 1, 0, 0, 0, 2691, 363, 1, 0, 0, 0, 2692, 2693, 5, 214, 0, 0, 2693, 2694, 3, 330, 165, 0, 2694, 2695, 5, 192, 0, 0, 2695, 2696, 3, 330, 165, 0, 2696, 365, 1, 0, 0, 0, 2697, 2698, 5, 74, 0, 0, 2698, 2699, 5, 265, 0, 0, 2699, 2700, 3, 280, 140, 0, 2700, 2701, 5, 266, 0, 0, 2701, 367, 1, 0, 0, 0, 2702, 2707, 3, 330, 165, 0, 2703, 2704, 5, 263, 0, 0, 2704, 2706, 3, 330, 165, 0, 2705, 2703, 1, 0, 0, 0, 2706, 2709, 1, 0, 0, 0, 2707, 2705, 1, 0, 0, 0, 2707, 2708, 1, 0, 0, 0, 2708, 369, 1, 0, 0, 0, 2709, 2707, 1, 0, 0, 0, 2710, 2711, 5, 143, 0, 0, 2711, 2715, 5, 265, 0, 0, 2712, 2713, 5, 145, 0, 0, 2713, 2714, 5, 26, 0, 0, 2714, 2716, 3, 368, 184, 0, 2715, 2712, 1, 0, 0, 0, 2715, 2716, 1, 0, 0, 0, 2716, 2727, 1, 0, 0, 0, 2717, 2718, 5, 139, 0, 0, 2718, 2719, 5, 26, 0, 0, 2719, 2724, 3, 274, 137, 0, 2720, 2721, 5, 263, 0, 0, 2721, 2723, 3, 274, 137, 0, 2722, 2720, 1, 0, 0, 0, 2723, 2726, 1, 0, 0, 0, 2724, 2722, 1, 0, 0, 0, 2724, 2725, 1, 0, 0, 0, 2725, 2728, 1, 0, 0, 0, 2726, 2724, 1, 0, 0, 0, 2727, 2717, 1, 0, 0, 0, 2727, 2728, 1, 0, 0, 0, 2728, 2730, 1, 0, 0, 0, 2729, 2731, 3, 372, 186, 0, 2730, 2729, 1, 0, 0, 0, 2730, 2731, 1, 0, 0, 0, 2731, 2732, 1, 0, 0, 0, 2732, 2733, 5, 266, 0, 0, 2733, 371, 1, 0, 0, 0, 2734, 2735, 5, 154, 0, 0, 2735, 2751, 3, 374, 187, 0, 2736, 2737, 5, 169, 0, 0, 2737, 2751, 3, 374, 187, 0, 2738, 2739, 5, 154, 0, 0, 2739, 2740, 5, 15, 0, 0, 2740, 2741, 3, 374, 187, 0, 2741, 2742, 5, 5, 0, 0, 2742, 2743, 3, 374, 187, 0, 2743, 2751, 1, 0, 0, 0, 2744, 2745, 5, 169, 0, 0, 2745, 2746, 5, 15, 0, 0, 2746, 2747, 3, 374, 187, 0, 2747, 2748, 5, 5, 0, 0, 2748, 2749, 3, 374, 187, 0, 2749, 2751, 1, 0, 0, 0, 2750, 2734, 1, 0, 0, 0, 2750, 2736, 1, 0, 0, 0, 2750, 2738, 1, 0, 0, 0, 2750, 2744, 1, 0, 0, 0, 2751, 373, 1, 0, 0, 0, 2752, 2753, 5, 199, 0, 0, 2753, 2762, 5, 149, 0, 0, 2754, 2755, 5, 199, 0, 0, 2755, 2762, 5, 77, 0, 0, 2756, 2757, 5, 39, 0, 0, 2757, 2762, 5, 168, 0, 0, 2758, 2759, 3, 330, 165, 0, 2759, 2760, 7, 29, 0, 0, 2760, 2762, 1, 0, 0, 0, 2761, 2752, 1, 0, 0, 0, 2761, 2754, 1, 0, 0, 0, 2761, 2756, 1, 0, 0, 0, 2761, 2758, 1, 0, 0, 0, 2762, 375, 1, 0, 0, 0, 2763, 2764, 3, 390, 195, 0, 2764, 2765, 5, 261, 0, 0, 2765, 2766, 3, 390, 195, 0, 2766, 2769, 1, 0, 0, 0, 2767, 2769, 3, 390, 195, 0, 2768, 2763, 1, 0, 0, 0, 2768, 2767, 1, 0, 0, 0, 2769, 377, 1, 0, 0, 0, 2770, 2775, 3, 376, 188, 0, 2771, 2772, 5, 263, 0, 0, 2772, 2774, 3, 376, 188, 0, 2773, 2771, 1, 0, 0, 0, 2774, 2777, 1, 0, 0, 0, 2775, 2773, 1, 0, 0, 0, 2775, 2776, 1, 0, 0, 0, 2776, 379, 1, 0, 0, 0, 2777, 2775, 1, 0, 0, 0, 2778, 2792, 5, 2, 0, 0, 2779, 2792, 5, 4, 0, 0, 2780, 2792, 5, 58, 0, 0, 2781, 2792, 5, 37, 0, 0, 2782, 2792, 5, 99, 0, 0, 2783, 2792, 5, 162, 0, 0, 2784, 2789, 5, 174, 0, 0, 2785, 2786, 5, 265, 0, 0, 2786, 2787, 3, 390, 195, 0, 2787, 2788, 5, 266, 0, 0, 2788, 2790, 1, 0, 0, 0, 2789, 2785, 1, 0, 0, 0, 2789, 2790, 1, 0, 0, 0, 2790, 2792, 1, 0, 0, 0, 2791, 2778, 1, 0, 0, 0, 2791, 2779, 1, 0, 0, 0, 2791, 2780, 1, 0, 0, 0, 2791, 2781, 1, 0, 0, 0, 2791, 2782, 1, 0, 0, 0, 2791, 2783, 1, 0, 0, 0, 2791, 2784, 1, 0, 0, 0, 2792, 381, 1, 0, 0, 0, 2793, 2794, 7, 30, 0, 0, 2794, 383, 1, 0, 0, 0, 2795, 2800, 3, 390, 195, 0, 2796, 2797, 5, 261, 0, 0, 2797, 2799, 3, 390, 195, 0, 2798, 2796, 1, 0, 0, 0, 2799, 2802, 1, 0, 0, 0, 2800, 2798, 1, 0, 0, 0, 2800, 2801, 1, 0, 0, 0, 2801, 385, 1, 0, 0, 0, 2802, 2800, 1, 0, 0, 0, 2803, 2809, 4, 193, 14, 0, 2804, 2805, 3, 390, 195, 0, 2805, 2806, 5, 261, 0, 0, 2806, 2807, 3, 192, 96, 0, 2807, 2810, 1, 0, 0, 0, 2808, 2810, 3, 192, 96, 0, 2809, 2804, 1, 0, 0, 0, 2809, 2808, 1, 0, 0, 0, 2810, 2820, 1, 0, 0, 0, 2811, 2816, 3, 390, 195, 0, 2812, 2813, 5, 261, 0, 0, 2813, 2815, 3, 390, 195, 0, 2814, 2812, 1, 0, 0, 0, 2815, 2818, 1, 0, 0, 0, 2816, 2814, 1, 0, 0, 0, 2816, 2817, 1, 0, 0, 0, 2817, 2820, 1, 0, 0, 0, 2818, 2816, 1, 0, 0, 0, 2819, 2803, 1, 0, 0, 0, 2819, 2811, 1, 0, 0, 0, 2820, 387, 1, 0, 0, 0, 2821, 2822, 5, 166, 0, 0, 2822, 2828, 3, 390, 195, 0, 2823, 2824, 5, 204, 0, 0, 2824, 2828, 3, 390, 195, 0, 2825, 2826, 5, 87, 0, 0, 2826, 2828, 3, 390, 195, 0, 2827, 2821, 1, 0, 0, 0, 2827, 2823, 1, 0, 0, 0, 2827, 2825, 1, 0, 0, 0, 2828, 389, 1, 0, 0, 0, 2829, 2835, 5, 280, 0, 0, 2830, 2835, 5, 274, 0, 0, 2831, 2835, 3, 396, 198, 0, 2832, 2835, 5, 283, 0, 0, 2833, 2835, 5, 281, 0, 0, 2834, 2829, 1, 0, 0, 0, 2834, 2830, 1, 0, 0, 0, 2834, 2831, 1, 0, 0, 0, 2834, 2832, 1, 0, 0, 0, 2834, 2833, 1, 0, 0, 0, 2835, 391, 1, 0, 0, 0, 2836, 2838, 5, 256, 0, 0, 2837, 2836, 1, 0, 0, 0, 2837, 2838, 1, 0, 0, 0, 2838, 2839, 1, 0, 0, 0, 2839, 2849, 5, 278, 0, 0, 2840, 2842, 5, 256, 0, 0, 2841, 2840, 1, 0, 0, 0, 2841, 2842, 1, 0, 0, 0, 2842, 2843, 1, 0, 0, 0, 2843, 2849, 5, 279, 0, 0, 2844, 2846, 5, 256, 0, 0, 2845, 2844, 1, 0, 0, 0, 2845, 2846, 1, 0, 0, 0, 2846, 2847, 1, 0, 0, 0, 2847, 2849, 5, 277, 0, 0, 2848, 2837, 1, 0, 0, 0, 2848, 2841, 1, 0, 0, 0, 2848, 2845, 1, 0, 0, 0, 2849, 393, 1, 0, 0, 0, 2850, 2851, 7, 31, 0, 0, 2851, 395, 1, 0, 0, 0, 2852, 2853, 7, 32, 0, 0, 2853, 397, 1, 0, 0, 0, 362, 401, 408, 432, 445, 449, 453, 462, 467, 471, 477, 479, 484, 488, 492, 499, 504, 510, 514, 523, 530, 534, 539, 541, 546, 549, 556, 560, 565, 569, 572, 576, 584, 588, 592, 600, 604, 613, 616, 619, 625, 632, 643, 648, 653, 658, 663, 672, 675, 678, 682, 708, 734, 743, 753, 756, 770, 788, 790, 799, 810, 819, 826, 830, 837, 843, 846, 851, 858, 872, 885, 890, 895, 901, 937, 940, 946, 949, 955, 961, 973, 975, 986, 994, 999, 1003, 1008, 1015, 1019, 1023, 1029, 1033, 1037, 1046, 1049, 1052, 1060, 1074, 1081, 1094, 1100, 1105, 1108, 1111, 1116, 1120, 1129, 1134, 1140, 1144, 1148, 1153, 1156, 1164, 1167, 1170, 1182, 1185, 1188, 1193, 1197, 1213, 1218, 1225, 1228, 1234, 1237, 1244, 1247, 1251, 1256, 1259, 1266, 1269, 1293, 1307, 1311, 1315, 1335, 1337, 1339, 1348, 1350, 1359, 1361, 1370, 1372, 1377, 1386, 1395, 1404, 1415, 1421, 1426, 1429, 1442, 1452, 1456, 1461, 1472, 1477, 1510, 1518, 1523, 1530, 1537, 1541, 1546, 1549, 1554, 1559, 1564, 1568, 1577, 1580, 1584, 1591, 1600, 1604, 1608, 1615, 1618, 1628, 1635, 1640, 1645, 1650, 1656, 1659, 1668, 1671, 1674, 1680, 1685, 1695, 1698, 1701, 1705, 1715, 1718, 1724, 1730, 1733, 1736, 1740, 1750, 1761, 1766, 1769, 1773, 1780, 1790, 1802, 1808, 1810, 1819, 1822, 1829, 1839, 1845, 1853, 1864, 1874, 1885, 1887, 1893, 1898, 1908, 1911, 1917, 1919, 1927, 1933, 1936, 1938, 1950, 1957, 1961, 1965, 1969, 1972, 1981, 1984, 1987, 1992, 1995, 2002, 2008, 2013, 2016, 2023, 2034, 2037, 2041, 2045, 2054, 2058, 2063, 2066, 2077, 2093, 2097, 2101, 2105, 2109, 2113, 2117, 2121, 2131, 2136, 2145, 2150, 2163, 2165, 2171, 2175, 2177, 2185, 2194, 2197, 2212, 2218, 2226, 2233, 2237, 2245, 2247, 2258, 2266, 2275, 2281, 2286, 2292, 2298, 2303, 2308, 2314, 2325, 2327, 2333, 2340, 2343, 2352, 2355, 2359, 2362, 2388, 2394, 2398, 2410, 2420, 2423, 2436, 2439, 2458, 2462, 2470, 2474, 2499, 2502, 2511, 2517, 2523, 2529, 2540, 2549, 2571, 2574, 2577, 2587, 2589, 2596, 2598, 2620, 2649, 2656, 2664, 2669, 2671, 2677, 2684, 2690, 2707, 2715, 2724, 2727, 2730, 2750, 2761, 2768, 2775, 2789, 2791, 2800, 2809, 2816, 2819, 2827, 2834, 2837, 2841, 2845, 2848] \ No newline at end of file +[4, 1, 289, 2831, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 1, 0, 5, 0, 392, 8, 0, 10, 0, 12, 0, 395, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 401, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 425, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 438, 8, 4, 1, 5, 1, 5, 3, 5, 442, 8, 5, 1, 5, 1, 5, 3, 5, 446, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 453, 8, 5, 10, 5, 12, 5, 456, 9, 5, 1, 5, 1, 5, 3, 5, 460, 8, 5, 1, 5, 1, 5, 3, 5, 464, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 470, 8, 5, 3, 5, 472, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 477, 8, 5, 1, 6, 1, 6, 3, 6, 481, 8, 6, 1, 6, 1, 6, 3, 6, 485, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 492, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 497, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 503, 8, 7, 1, 7, 1, 7, 3, 7, 507, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 514, 8, 7, 10, 7, 12, 7, 517, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 523, 8, 7, 1, 7, 1, 7, 3, 7, 527, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 532, 8, 7, 3, 7, 534, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 539, 8, 7, 1, 7, 1, 7, 3, 7, 543, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 550, 8, 7, 1, 7, 1, 7, 3, 7, 554, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 559, 8, 8, 1, 8, 1, 8, 3, 8, 563, 8, 8, 1, 8, 3, 8, 566, 8, 8, 1, 8, 1, 8, 3, 8, 570, 8, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 578, 8, 9, 1, 9, 1, 9, 3, 9, 582, 8, 9, 1, 9, 1, 9, 3, 9, 586, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 594, 8, 11, 1, 11, 1, 11, 3, 11, 598, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 605, 8, 11, 10, 11, 12, 11, 608, 9, 11, 3, 11, 610, 8, 11, 1, 11, 3, 11, 613, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 619, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 626, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 637, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 642, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 647, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 652, 8, 11, 1, 12, 1, 12, 1, 12, 3, 12, 657, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 664, 8, 12, 10, 12, 12, 12, 667, 9, 12, 3, 12, 669, 8, 12, 1, 12, 3, 12, 672, 8, 12, 1, 12, 1, 12, 3, 12, 676, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 702, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 727, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 736, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 746, 8, 16, 1, 16, 3, 16, 749, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 763, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 781, 8, 20, 3, 20, 783, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 790, 8, 20, 10, 20, 12, 20, 793, 9, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 803, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 812, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 819, 8, 22, 1, 22, 1, 22, 3, 22, 823, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 830, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 836, 8, 23, 1, 23, 3, 23, 839, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 844, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 851, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 865, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 878, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 883, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 888, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 894, 8, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 3, 32, 930, 8, 32, 1, 32, 3, 32, 933, 8, 32, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 939, 8, 33, 1, 33, 3, 33, 942, 8, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 948, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 954, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 966, 8, 35, 3, 35, 968, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 979, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 987, 8, 37, 1, 38, 1, 38, 1, 38, 3, 38, 992, 8, 38, 1, 38, 1, 38, 3, 38, 996, 8, 38, 1, 39, 1, 39, 1, 39, 3, 39, 1001, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 1008, 8, 40, 1, 40, 1, 40, 3, 40, 1012, 8, 40, 1, 41, 1, 41, 3, 41, 1016, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1022, 8, 41, 1, 42, 1, 42, 3, 42, 1026, 8, 42, 1, 42, 1, 42, 3, 42, 1030, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1037, 8, 42, 10, 42, 12, 42, 1040, 9, 42, 3, 42, 1042, 8, 42, 1, 42, 3, 42, 1045, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 1053, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1067, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 1074, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1087, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1093, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1098, 8, 49, 1, 49, 3, 49, 1101, 8, 49, 1, 50, 3, 50, 1104, 8, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1109, 8, 50, 1, 50, 1, 50, 3, 50, 1113, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1120, 8, 50, 10, 50, 12, 50, 1123, 9, 50, 1, 50, 1, 50, 3, 50, 1127, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 1133, 8, 51, 1, 52, 1, 52, 3, 52, 1137, 8, 52, 1, 52, 1, 52, 3, 52, 1141, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 1146, 8, 53, 1, 53, 3, 53, 1149, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 1155, 8, 53, 10, 53, 12, 53, 1158, 9, 53, 3, 53, 1160, 8, 53, 1, 53, 3, 53, 1163, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 1173, 8, 54, 10, 54, 12, 54, 1176, 9, 54, 3, 54, 1178, 8, 54, 1, 54, 3, 54, 1181, 8, 54, 1, 55, 1, 55, 1, 55, 3, 55, 1186, 8, 55, 1, 55, 1, 55, 3, 55, 1190, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1206, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 1211, 8, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1216, 8, 57, 10, 57, 12, 57, 1219, 9, 57, 3, 57, 1221, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1227, 8, 58, 1, 58, 3, 58, 1230, 8, 58, 1, 58, 1, 58, 1, 58, 5, 58, 1235, 8, 58, 10, 58, 12, 58, 1238, 9, 58, 3, 58, 1240, 8, 58, 1, 59, 1, 59, 3, 59, 1244, 8, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1249, 8, 59, 1, 59, 3, 59, 1252, 8, 59, 1, 59, 1, 59, 1, 59, 5, 59, 1257, 8, 59, 10, 59, 12, 59, 1260, 9, 59, 3, 59, 1262, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 3, 64, 1286, 8, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1300, 8, 65, 1, 65, 1, 65, 3, 65, 1304, 8, 65, 1, 66, 1, 66, 3, 66, 1308, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1328, 8, 68, 3, 68, 1330, 8, 68, 3, 68, 1332, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1341, 8, 69, 3, 69, 1343, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1352, 8, 70, 3, 70, 1354, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1363, 8, 71, 3, 71, 1365, 8, 71, 1, 72, 1, 72, 1, 72, 3, 72, 1370, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1379, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1388, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1397, 8, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1408, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1414, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1419, 8, 78, 1, 78, 3, 78, 1422, 8, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1435, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1445, 8, 80, 1, 80, 1, 80, 3, 80, 1449, 8, 80, 1, 81, 1, 81, 1, 81, 3, 81, 1454, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 1463, 8, 82, 10, 82, 12, 82, 1466, 9, 82, 1, 82, 1, 82, 3, 82, 1470, 8, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1501, 8, 93, 10, 93, 12, 93, 1504, 9, 93, 1, 94, 1, 94, 1, 94, 5, 94, 1509, 8, 94, 10, 94, 12, 94, 1512, 9, 94, 1, 95, 1, 95, 3, 95, 1516, 8, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 3, 97, 1523, 8, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 3, 99, 1530, 8, 99, 1, 100, 1, 100, 3, 100, 1534, 8, 100, 1, 101, 1, 101, 1, 101, 3, 101, 1539, 8, 101, 1, 101, 3, 101, 1542, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1547, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1552, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1557, 8, 101, 1, 101, 1, 101, 3, 101, 1561, 8, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1570, 8, 101, 1, 101, 3, 101, 1573, 8, 101, 1, 101, 1, 101, 3, 101, 1577, 8, 101, 1, 102, 1, 102, 1, 102, 5, 102, 1582, 8, 102, 10, 102, 12, 102, 1585, 9, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 3, 104, 1593, 8, 104, 1, 104, 1, 104, 3, 104, 1597, 8, 104, 5, 104, 1599, 8, 104, 10, 104, 12, 104, 1602, 9, 104, 1, 104, 1, 104, 1, 105, 1, 105, 3, 105, 1608, 8, 105, 1, 106, 3, 106, 1611, 8, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 1619, 8, 107, 10, 107, 12, 107, 1622, 9, 107, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1628, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1633, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1638, 8, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1643, 8, 108, 1, 108, 1, 108, 5, 108, 1647, 8, 108, 10, 108, 12, 108, 1650, 9, 108, 3, 108, 1652, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1661, 8, 109, 1, 109, 3, 109, 1664, 8, 109, 1, 109, 3, 109, 1667, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 1673, 8, 110, 1, 111, 1, 111, 1, 111, 3, 111, 1678, 8, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1686, 8, 113, 10, 113, 12, 113, 1689, 9, 113, 3, 113, 1691, 8, 113, 1, 113, 3, 113, 1694, 8, 113, 1, 113, 1, 113, 3, 113, 1698, 8, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 5, 115, 1706, 8, 115, 10, 115, 12, 115, 1709, 9, 115, 3, 115, 1711, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1717, 8, 116, 1, 116, 1, 116, 5, 116, 1721, 8, 116, 10, 116, 12, 116, 1724, 9, 116, 3, 116, 1726, 8, 116, 1, 117, 3, 117, 1729, 8, 117, 1, 117, 1, 117, 3, 117, 1733, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1743, 8, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 5, 120, 1750, 8, 120, 10, 120, 12, 120, 1753, 9, 120, 1, 120, 1, 120, 3, 120, 1757, 8, 120, 1, 120, 3, 120, 1760, 8, 120, 1, 121, 1, 121, 3, 121, 1764, 8, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 3, 122, 1771, 8, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 5, 122, 1779, 8, 122, 10, 122, 12, 122, 1782, 9, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1793, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1799, 8, 123, 3, 123, 1801, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1810, 8, 124, 1, 124, 3, 124, 1813, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1820, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1830, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1836, 8, 127, 1, 128, 1, 128, 1, 128, 1, 128, 5, 128, 1842, 8, 128, 10, 128, 12, 128, 1845, 9, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1853, 8, 129, 10, 129, 12, 129, 1856, 9, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 5, 130, 1863, 8, 130, 10, 130, 12, 130, 1866, 9, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1876, 8, 131, 3, 131, 1878, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1884, 8, 131, 1, 132, 1, 132, 1, 132, 3, 132, 1889, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1897, 8, 133, 10, 133, 12, 133, 1900, 9, 133, 3, 133, 1902, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1908, 8, 133, 3, 133, 1910, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1918, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1924, 8, 134, 1, 134, 5, 134, 1927, 8, 134, 10, 134, 12, 134, 1930, 9, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1939, 8, 135, 10, 135, 12, 135, 1942, 9, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1948, 8, 135, 1, 136, 1, 136, 3, 136, 1952, 8, 136, 1, 136, 1, 136, 3, 136, 1956, 8, 136, 1, 137, 1, 137, 3, 137, 1960, 8, 137, 1, 137, 3, 137, 1963, 8, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 5, 137, 1970, 8, 137, 10, 137, 12, 137, 1973, 9, 137, 3, 137, 1975, 8, 137, 1, 137, 3, 137, 1978, 8, 137, 1, 137, 1, 137, 1, 137, 3, 137, 1983, 8, 137, 1, 137, 3, 137, 1986, 8, 137, 1, 138, 1, 138, 1, 138, 5, 138, 1991, 8, 138, 10, 138, 12, 138, 1994, 9, 138, 1, 139, 1, 139, 1, 139, 3, 139, 1999, 8, 139, 1, 140, 1, 140, 1, 140, 3, 140, 2004, 8, 140, 1, 141, 3, 141, 2007, 8, 141, 1, 141, 1, 141, 1, 141, 5, 141, 2012, 8, 141, 10, 141, 12, 141, 2015, 9, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 5, 143, 2023, 8, 143, 10, 143, 12, 143, 2026, 9, 143, 3, 143, 2028, 8, 143, 1, 143, 1, 143, 3, 143, 2032, 8, 143, 1, 144, 1, 144, 3, 144, 2036, 8, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 3, 146, 2045, 8, 146, 1, 146, 1, 146, 3, 146, 2049, 8, 146, 1, 146, 1, 146, 1, 146, 3, 146, 2054, 8, 146, 1, 147, 3, 147, 2057, 8, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 3, 150, 2068, 8, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 2084, 8, 151, 5, 151, 2086, 8, 151, 10, 151, 12, 151, 2089, 9, 151, 1, 152, 3, 152, 2092, 8, 152, 1, 152, 1, 152, 3, 152, 2096, 8, 152, 1, 152, 1, 152, 3, 152, 2100, 8, 152, 1, 152, 1, 152, 3, 152, 2104, 8, 152, 1, 152, 1, 152, 3, 152, 2108, 8, 152, 1, 152, 1, 152, 3, 152, 2112, 8, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 2122, 8, 152, 1, 153, 1, 153, 1, 153, 3, 153, 2127, 8, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 5, 153, 2134, 8, 153, 10, 153, 12, 153, 2137, 9, 153, 1, 153, 1, 153, 3, 153, 2141, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2154, 8, 154, 3, 154, 2156, 8, 154, 1, 155, 1, 155, 3, 155, 2160, 8, 155, 1, 155, 1, 155, 3, 155, 2164, 8, 155, 3, 155, 2166, 8, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2172, 8, 156, 10, 156, 12, 156, 2175, 9, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 3, 157, 2183, 8, 157, 1, 158, 3, 158, 2186, 8, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 2199, 8, 160, 10, 160, 12, 160, 2202, 9, 160, 1, 160, 1, 160, 1, 160, 3, 160, 2207, 8, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 3, 162, 2215, 8, 162, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 3, 164, 2222, 8, 164, 1, 164, 1, 164, 3, 164, 2226, 8, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 5, 164, 2234, 8, 164, 10, 164, 12, 164, 2237, 9, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2247, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2255, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 5, 165, 2262, 8, 165, 10, 165, 12, 165, 2265, 9, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2270, 8, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2275, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2281, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2287, 8, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2292, 8, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2297, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2303, 8, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 5, 166, 2314, 8, 166, 10, 166, 12, 166, 2317, 9, 166, 1, 167, 1, 167, 1, 167, 3, 167, 2322, 8, 167, 1, 167, 1, 167, 1, 167, 5, 167, 2327, 8, 167, 10, 167, 12, 167, 2330, 9, 167, 3, 167, 2332, 8, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 5, 167, 2339, 8, 167, 10, 167, 12, 167, 2342, 9, 167, 3, 167, 2344, 8, 167, 1, 167, 1, 167, 3, 167, 2348, 8, 167, 1, 167, 3, 167, 2351, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2377, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2383, 8, 168, 5, 168, 2385, 8, 168, 10, 168, 12, 168, 2388, 9, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2397, 8, 168, 10, 168, 12, 168, 2400, 9, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2409, 8, 168, 1, 168, 3, 168, 2412, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2423, 8, 168, 10, 168, 12, 168, 2426, 9, 168, 3, 168, 2428, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 4, 168, 2445, 8, 168, 11, 168, 12, 168, 2446, 1, 168, 1, 168, 3, 168, 2451, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 4, 168, 2457, 8, 168, 11, 168, 12, 168, 2458, 1, 168, 1, 168, 3, 168, 2463, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2486, 8, 168, 10, 168, 12, 168, 2489, 9, 168, 3, 168, 2491, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2500, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2506, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2512, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2518, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2529, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2538, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2558, 8, 168, 10, 168, 12, 168, 2561, 9, 168, 3, 168, 2563, 8, 168, 1, 168, 3, 168, 2566, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2576, 8, 168, 10, 168, 12, 168, 2579, 9, 168, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2585, 8, 169, 3, 169, 2587, 8, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 2607, 8, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 5, 174, 2632, 8, 174, 10, 174, 12, 174, 2635, 9, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2641, 8, 174, 1, 174, 1, 174, 1, 174, 1, 174, 5, 174, 2647, 8, 174, 10, 174, 12, 174, 2650, 9, 174, 1, 174, 1, 174, 3, 174, 2654, 8, 174, 3, 174, 2656, 8, 174, 1, 174, 1, 174, 5, 174, 2660, 8, 174, 10, 174, 12, 174, 2663, 9, 174, 1, 175, 1, 175, 1, 176, 1, 176, 3, 176, 2669, 8, 176, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 2675, 8, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 5, 180, 2690, 8, 180, 10, 180, 12, 180, 2693, 9, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 2700, 8, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 5, 181, 2707, 8, 181, 10, 181, 12, 181, 2710, 9, 181, 3, 181, 2712, 8, 181, 1, 181, 3, 181, 2715, 8, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 2727, 8, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 3, 183, 2738, 8, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 3, 184, 2745, 8, 184, 1, 185, 1, 185, 1, 185, 5, 185, 2750, 8, 185, 10, 185, 12, 185, 2753, 9, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 2766, 8, 186, 3, 186, 2768, 8, 186, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 5, 188, 2775, 8, 188, 10, 188, 12, 188, 2778, 9, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 2786, 8, 189, 1, 189, 1, 189, 1, 189, 5, 189, 2791, 8, 189, 10, 189, 12, 189, 2794, 9, 189, 3, 189, 2796, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 2804, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 2811, 8, 191, 1, 192, 3, 192, 2814, 8, 192, 1, 192, 1, 192, 3, 192, 2818, 8, 192, 1, 192, 1, 192, 3, 192, 2822, 8, 192, 1, 192, 3, 192, 2825, 8, 192, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 10, 791, 1464, 1648, 1687, 1707, 1722, 1751, 1780, 1854, 2386, 6, 268, 302, 328, 332, 336, 348, 195, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 0, 34, 2, 0, 46, 46, 170, 170, 2, 0, 166, 166, 204, 204, 1, 0, 245, 248, 2, 0, 176, 176, 202, 202, 2, 0, 69, 69, 80, 80, 2, 0, 27, 27, 159, 159, 2, 0, 103, 103, 144, 144, 2, 0, 47, 47, 171, 171, 2, 0, 3, 3, 12, 12, 3, 0, 87, 87, 166, 166, 204, 204, 2, 0, 178, 178, 209, 209, 2, 0, 147, 147, 219, 223, 2, 0, 65, 65, 95, 95, 2, 0, 64, 64, 200, 200, 2, 0, 10, 10, 55, 55, 2, 0, 75, 75, 112, 112, 2, 0, 2, 2, 57, 57, 2, 0, 14, 14, 185, 185, 3, 0, 106, 106, 115, 115, 164, 164, 2, 0, 105, 105, 163, 163, 4, 0, 70, 70, 133, 133, 194, 194, 208, 208, 1, 0, 255, 256, 1, 0, 257, 259, 2, 0, 70, 70, 194, 194, 1, 0, 127, 130, 1, 0, 249, 254, 3, 0, 2, 2, 6, 6, 181, 181, 5, 0, 48, 49, 91, 92, 122, 125, 172, 173, 217, 218, 2, 0, 8, 8, 227, 244, 2, 0, 154, 154, 169, 169, 2, 0, 77, 77, 149, 149, 4, 0, 46, 46, 178, 178, 188, 188, 209, 209, 16, 0, 28, 29, 40, 40, 43, 43, 48, 48, 68, 68, 91, 91, 114, 114, 122, 122, 124, 124, 158, 158, 165, 165, 172, 172, 184, 184, 196, 196, 204, 204, 217, 217, 23, 0, 14, 14, 43, 44, 48, 49, 65, 65, 68, 68, 91, 91, 95, 95, 110, 110, 119, 119, 122, 125, 127, 130, 137, 137, 140, 140, 152, 153, 172, 173, 180, 180, 184, 185, 195, 195, 204, 204, 213, 213, 217, 217, 220, 220, 231, 231, 3150, 0, 393, 1, 0, 0, 0, 2, 398, 1, 0, 0, 0, 4, 424, 1, 0, 0, 0, 6, 426, 1, 0, 0, 0, 8, 437, 1, 0, 0, 0, 10, 439, 1, 0, 0, 0, 12, 478, 1, 0, 0, 0, 14, 500, 1, 0, 0, 0, 16, 555, 1, 0, 0, 0, 18, 574, 1, 0, 0, 0, 20, 587, 1, 0, 0, 0, 22, 591, 1, 0, 0, 0, 24, 653, 1, 0, 0, 0, 26, 701, 1, 0, 0, 0, 28, 703, 1, 0, 0, 0, 30, 711, 1, 0, 0, 0, 32, 730, 1, 0, 0, 0, 34, 750, 1, 0, 0, 0, 36, 757, 1, 0, 0, 0, 38, 766, 1, 0, 0, 0, 40, 774, 1, 0, 0, 0, 42, 796, 1, 0, 0, 0, 44, 806, 1, 0, 0, 0, 46, 824, 1, 0, 0, 0, 48, 845, 1, 0, 0, 0, 50, 866, 1, 0, 0, 0, 52, 872, 1, 0, 0, 0, 54, 889, 1, 0, 0, 0, 56, 898, 1, 0, 0, 0, 58, 905, 1, 0, 0, 0, 60, 913, 1, 0, 0, 0, 62, 920, 1, 0, 0, 0, 64, 927, 1, 0, 0, 0, 66, 936, 1, 0, 0, 0, 68, 947, 1, 0, 0, 0, 70, 949, 1, 0, 0, 0, 72, 969, 1, 0, 0, 0, 74, 986, 1, 0, 0, 0, 76, 988, 1, 0, 0, 0, 78, 997, 1, 0, 0, 0, 80, 1004, 1, 0, 0, 0, 82, 1013, 1, 0, 0, 0, 84, 1023, 1, 0, 0, 0, 86, 1046, 1, 0, 0, 0, 88, 1052, 1, 0, 0, 0, 90, 1054, 1, 0, 0, 0, 92, 1061, 1, 0, 0, 0, 94, 1073, 1, 0, 0, 0, 96, 1075, 1, 0, 0, 0, 98, 1082, 1, 0, 0, 0, 100, 1103, 1, 0, 0, 0, 102, 1132, 1, 0, 0, 0, 104, 1134, 1, 0, 0, 0, 106, 1142, 1, 0, 0, 0, 108, 1164, 1, 0, 0, 0, 110, 1182, 1, 0, 0, 0, 112, 1205, 1, 0, 0, 0, 114, 1207, 1, 0, 0, 0, 116, 1222, 1, 0, 0, 0, 118, 1241, 1, 0, 0, 0, 120, 1263, 1, 0, 0, 0, 122, 1268, 1, 0, 0, 0, 124, 1273, 1, 0, 0, 0, 126, 1278, 1, 0, 0, 0, 128, 1283, 1, 0, 0, 0, 130, 1290, 1, 0, 0, 0, 132, 1305, 1, 0, 0, 0, 134, 1311, 1, 0, 0, 0, 136, 1331, 1, 0, 0, 0, 138, 1333, 1, 0, 0, 0, 140, 1344, 1, 0, 0, 0, 142, 1355, 1, 0, 0, 0, 144, 1369, 1, 0, 0, 0, 146, 1371, 1, 0, 0, 0, 148, 1380, 1, 0, 0, 0, 150, 1389, 1, 0, 0, 0, 152, 1398, 1, 0, 0, 0, 154, 1401, 1, 0, 0, 0, 156, 1409, 1, 0, 0, 0, 158, 1425, 1, 0, 0, 0, 160, 1429, 1, 0, 0, 0, 162, 1453, 1, 0, 0, 0, 164, 1455, 1, 0, 0, 0, 166, 1471, 1, 0, 0, 0, 168, 1474, 1, 0, 0, 0, 170, 1478, 1, 0, 0, 0, 172, 1481, 1, 0, 0, 0, 174, 1485, 1, 0, 0, 0, 176, 1487, 1, 0, 0, 0, 178, 1489, 1, 0, 0, 0, 180, 1491, 1, 0, 0, 0, 182, 1493, 1, 0, 0, 0, 184, 1495, 1, 0, 0, 0, 186, 1497, 1, 0, 0, 0, 188, 1505, 1, 0, 0, 0, 190, 1515, 1, 0, 0, 0, 192, 1517, 1, 0, 0, 0, 194, 1522, 1, 0, 0, 0, 196, 1524, 1, 0, 0, 0, 198, 1529, 1, 0, 0, 0, 200, 1533, 1, 0, 0, 0, 202, 1538, 1, 0, 0, 0, 204, 1578, 1, 0, 0, 0, 206, 1586, 1, 0, 0, 0, 208, 1590, 1, 0, 0, 0, 210, 1605, 1, 0, 0, 0, 212, 1610, 1, 0, 0, 0, 214, 1614, 1, 0, 0, 0, 216, 1623, 1, 0, 0, 0, 218, 1653, 1, 0, 0, 0, 220, 1668, 1, 0, 0, 0, 222, 1674, 1, 0, 0, 0, 224, 1679, 1, 0, 0, 0, 226, 1681, 1, 0, 0, 0, 228, 1699, 1, 0, 0, 0, 230, 1702, 1, 0, 0, 0, 232, 1712, 1, 0, 0, 0, 234, 1732, 1, 0, 0, 0, 236, 1742, 1, 0, 0, 0, 238, 1744, 1, 0, 0, 0, 240, 1759, 1, 0, 0, 0, 242, 1761, 1, 0, 0, 0, 244, 1768, 1, 0, 0, 0, 246, 1800, 1, 0, 0, 0, 248, 1812, 1, 0, 0, 0, 250, 1819, 1, 0, 0, 0, 252, 1829, 1, 0, 0, 0, 254, 1831, 1, 0, 0, 0, 256, 1837, 1, 0, 0, 0, 258, 1848, 1, 0, 0, 0, 260, 1859, 1, 0, 0, 0, 262, 1867, 1, 0, 0, 0, 264, 1885, 1, 0, 0, 0, 266, 1890, 1, 0, 0, 0, 268, 1911, 1, 0, 0, 0, 270, 1947, 1, 0, 0, 0, 272, 1949, 1, 0, 0, 0, 274, 1957, 1, 0, 0, 0, 276, 1987, 1, 0, 0, 0, 278, 1995, 1, 0, 0, 0, 280, 2000, 1, 0, 0, 0, 282, 2006, 1, 0, 0, 0, 284, 2016, 1, 0, 0, 0, 286, 2031, 1, 0, 0, 0, 288, 2033, 1, 0, 0, 0, 290, 2040, 1, 0, 0, 0, 292, 2053, 1, 0, 0, 0, 294, 2056, 1, 0, 0, 0, 296, 2060, 1, 0, 0, 0, 298, 2062, 1, 0, 0, 0, 300, 2067, 1, 0, 0, 0, 302, 2071, 1, 0, 0, 0, 304, 2121, 1, 0, 0, 0, 306, 2140, 1, 0, 0, 0, 308, 2142, 1, 0, 0, 0, 310, 2157, 1, 0, 0, 0, 312, 2167, 1, 0, 0, 0, 314, 2182, 1, 0, 0, 0, 316, 2185, 1, 0, 0, 0, 318, 2189, 1, 0, 0, 0, 320, 2193, 1, 0, 0, 0, 322, 2208, 1, 0, 0, 0, 324, 2214, 1, 0, 0, 0, 326, 2216, 1, 0, 0, 0, 328, 2225, 1, 0, 0, 0, 330, 2296, 1, 0, 0, 0, 332, 2302, 1, 0, 0, 0, 334, 2318, 1, 0, 0, 0, 336, 2565, 1, 0, 0, 0, 338, 2586, 1, 0, 0, 0, 340, 2588, 1, 0, 0, 0, 342, 2590, 1, 0, 0, 0, 344, 2606, 1, 0, 0, 0, 346, 2608, 1, 0, 0, 0, 348, 2655, 1, 0, 0, 0, 350, 2664, 1, 0, 0, 0, 352, 2668, 1, 0, 0, 0, 354, 2674, 1, 0, 0, 0, 356, 2676, 1, 0, 0, 0, 358, 2681, 1, 0, 0, 0, 360, 2686, 1, 0, 0, 0, 362, 2694, 1, 0, 0, 0, 364, 2726, 1, 0, 0, 0, 366, 2737, 1, 0, 0, 0, 368, 2744, 1, 0, 0, 0, 370, 2746, 1, 0, 0, 0, 372, 2767, 1, 0, 0, 0, 374, 2769, 1, 0, 0, 0, 376, 2771, 1, 0, 0, 0, 378, 2795, 1, 0, 0, 0, 380, 2803, 1, 0, 0, 0, 382, 2810, 1, 0, 0, 0, 384, 2824, 1, 0, 0, 0, 386, 2826, 1, 0, 0, 0, 388, 2828, 1, 0, 0, 0, 390, 392, 3, 2, 1, 0, 391, 390, 1, 0, 0, 0, 392, 395, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 396, 1, 0, 0, 0, 395, 393, 1, 0, 0, 0, 396, 397, 5, 0, 0, 1, 397, 1, 1, 0, 0, 0, 398, 400, 3, 4, 2, 0, 399, 401, 5, 262, 0, 0, 400, 399, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 3, 1, 0, 0, 0, 402, 425, 3, 212, 106, 0, 403, 425, 3, 6, 3, 0, 404, 425, 3, 8, 4, 0, 405, 425, 3, 26, 13, 0, 406, 425, 3, 64, 32, 0, 407, 425, 3, 66, 33, 0, 408, 425, 3, 68, 34, 0, 409, 425, 3, 74, 37, 0, 410, 425, 3, 88, 44, 0, 411, 425, 3, 94, 47, 0, 412, 425, 3, 100, 50, 0, 413, 425, 3, 102, 51, 0, 414, 425, 3, 108, 54, 0, 415, 425, 3, 110, 55, 0, 416, 425, 3, 112, 56, 0, 417, 425, 3, 144, 72, 0, 418, 425, 3, 152, 76, 0, 419, 425, 3, 154, 77, 0, 420, 425, 3, 156, 78, 0, 421, 425, 3, 158, 79, 0, 422, 425, 3, 160, 80, 0, 423, 425, 3, 162, 81, 0, 424, 402, 1, 0, 0, 0, 424, 403, 1, 0, 0, 0, 424, 404, 1, 0, 0, 0, 424, 405, 1, 0, 0, 0, 424, 406, 1, 0, 0, 0, 424, 407, 1, 0, 0, 0, 424, 408, 1, 0, 0, 0, 424, 409, 1, 0, 0, 0, 424, 410, 1, 0, 0, 0, 424, 411, 1, 0, 0, 0, 424, 412, 1, 0, 0, 0, 424, 413, 1, 0, 0, 0, 424, 414, 1, 0, 0, 0, 424, 415, 1, 0, 0, 0, 424, 416, 1, 0, 0, 0, 424, 417, 1, 0, 0, 0, 424, 418, 1, 0, 0, 0, 424, 419, 1, 0, 0, 0, 424, 420, 1, 0, 0, 0, 424, 421, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 423, 1, 0, 0, 0, 425, 5, 1, 0, 0, 0, 426, 427, 5, 203, 0, 0, 427, 428, 3, 184, 92, 0, 428, 7, 1, 0, 0, 0, 429, 438, 3, 18, 9, 0, 430, 438, 3, 20, 10, 0, 431, 438, 3, 22, 11, 0, 432, 438, 3, 24, 12, 0, 433, 438, 3, 16, 8, 0, 434, 438, 3, 14, 7, 0, 435, 438, 3, 12, 6, 0, 436, 438, 3, 10, 5, 0, 437, 429, 1, 0, 0, 0, 437, 430, 1, 0, 0, 0, 437, 431, 1, 0, 0, 0, 437, 432, 1, 0, 0, 0, 437, 433, 1, 0, 0, 0, 437, 434, 1, 0, 0, 0, 437, 435, 1, 0, 0, 0, 437, 436, 1, 0, 0, 0, 438, 9, 1, 0, 0, 0, 439, 441, 5, 37, 0, 0, 440, 442, 5, 19, 0, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 445, 5, 188, 0, 0, 444, 446, 3, 172, 86, 0, 445, 444, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 463, 3, 174, 87, 0, 448, 449, 5, 265, 0, 0, 449, 454, 3, 222, 111, 0, 450, 451, 5, 263, 0, 0, 451, 453, 3, 222, 111, 0, 452, 450, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 459, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 457, 458, 5, 263, 0, 0, 458, 460, 3, 216, 108, 0, 459, 457, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 5, 266, 0, 0, 462, 464, 1, 0, 0, 0, 463, 448, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 471, 1, 0, 0, 0, 465, 466, 5, 17, 0, 0, 466, 469, 5, 26, 0, 0, 467, 470, 3, 312, 156, 0, 468, 470, 3, 258, 129, 0, 469, 467, 1, 0, 0, 0, 469, 468, 1, 0, 0, 0, 470, 472, 1, 0, 0, 0, 471, 465, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 476, 3, 202, 101, 0, 474, 475, 5, 9, 0, 0, 475, 477, 3, 212, 106, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 11, 1, 0, 0, 0, 478, 480, 5, 37, 0, 0, 479, 481, 5, 19, 0, 0, 480, 479, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 484, 5, 188, 0, 0, 483, 485, 3, 172, 86, 0, 484, 483, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 487, 3, 174, 87, 0, 487, 491, 5, 115, 0, 0, 488, 492, 3, 186, 93, 0, 489, 490, 5, 147, 0, 0, 490, 492, 3, 338, 169, 0, 491, 488, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 492, 496, 1, 0, 0, 0, 493, 494, 5, 17, 0, 0, 494, 495, 5, 26, 0, 0, 495, 497, 3, 258, 129, 0, 496, 493, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 499, 3, 202, 101, 0, 499, 13, 1, 0, 0, 0, 500, 502, 5, 37, 0, 0, 501, 503, 5, 19, 0, 0, 502, 501, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 506, 5, 188, 0, 0, 505, 507, 3, 172, 86, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 526, 3, 174, 87, 0, 509, 510, 5, 265, 0, 0, 510, 515, 3, 224, 112, 0, 511, 512, 5, 263, 0, 0, 512, 514, 3, 224, 112, 0, 513, 511, 1, 0, 0, 0, 514, 517, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 522, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 518, 519, 5, 263, 0, 0, 519, 520, 5, 150, 0, 0, 520, 521, 5, 110, 0, 0, 521, 523, 3, 312, 156, 0, 522, 518, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 5, 266, 0, 0, 525, 527, 1, 0, 0, 0, 526, 509, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 533, 1, 0, 0, 0, 528, 529, 5, 150, 0, 0, 529, 531, 5, 110, 0, 0, 530, 532, 3, 312, 156, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 534, 1, 0, 0, 0, 533, 528, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 538, 1, 0, 0, 0, 535, 536, 5, 145, 0, 0, 536, 537, 5, 26, 0, 0, 537, 539, 3, 240, 120, 0, 538, 535, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 541, 5, 34, 0, 0, 541, 543, 3, 338, 169, 0, 542, 540, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 545, 5, 23, 0, 0, 545, 546, 5, 9, 0, 0, 546, 549, 5, 111, 0, 0, 547, 548, 5, 25, 0, 0, 548, 550, 3, 256, 128, 0, 549, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 553, 1, 0, 0, 0, 551, 552, 5, 9, 0, 0, 552, 554, 3, 212, 106, 0, 553, 551, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 15, 1, 0, 0, 0, 555, 556, 5, 37, 0, 0, 556, 558, 5, 212, 0, 0, 557, 559, 3, 172, 86, 0, 558, 557, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 562, 3, 178, 89, 0, 561, 563, 3, 208, 104, 0, 562, 561, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 565, 1, 0, 0, 0, 564, 566, 3, 228, 114, 0, 565, 564, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 569, 1, 0, 0, 0, 567, 568, 5, 25, 0, 0, 568, 570, 3, 256, 128, 0, 569, 567, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 5, 9, 0, 0, 572, 573, 3, 212, 106, 0, 573, 17, 1, 0, 0, 0, 574, 575, 5, 37, 0, 0, 575, 577, 7, 0, 0, 0, 576, 578, 3, 172, 86, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 581, 3, 176, 88, 0, 580, 582, 3, 228, 114, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 584, 5, 24, 0, 0, 584, 586, 3, 338, 169, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 19, 1, 0, 0, 0, 587, 588, 5, 37, 0, 0, 588, 589, 5, 166, 0, 0, 589, 590, 3, 382, 191, 0, 590, 21, 1, 0, 0, 0, 591, 593, 5, 37, 0, 0, 592, 594, 5, 12, 0, 0, 593, 592, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 5, 84, 0, 0, 596, 598, 3, 172, 86, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 612, 3, 180, 90, 0, 600, 609, 5, 265, 0, 0, 601, 606, 3, 348, 174, 0, 602, 603, 5, 263, 0, 0, 603, 605, 3, 348, 174, 0, 604, 602, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 610, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 601, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 613, 5, 266, 0, 0, 612, 600, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 5, 160, 0, 0, 615, 618, 3, 348, 174, 0, 616, 617, 5, 102, 0, 0, 617, 619, 3, 348, 174, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 5, 24, 0, 0, 621, 625, 5, 274, 0, 0, 622, 623, 5, 104, 0, 0, 623, 624, 5, 249, 0, 0, 624, 626, 5, 274, 0, 0, 625, 622, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 628, 5, 206, 0, 0, 628, 629, 5, 249, 0, 0, 629, 630, 5, 274, 0, 0, 630, 631, 5, 126, 0, 0, 631, 632, 5, 249, 0, 0, 632, 636, 5, 274, 0, 0, 633, 634, 5, 18, 0, 0, 634, 635, 5, 249, 0, 0, 635, 637, 5, 274, 0, 0, 636, 633, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 641, 1, 0, 0, 0, 638, 639, 5, 20, 0, 0, 639, 640, 5, 249, 0, 0, 640, 642, 5, 274, 0, 0, 641, 638, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 646, 1, 0, 0, 0, 643, 644, 5, 187, 0, 0, 644, 645, 5, 249, 0, 0, 645, 647, 5, 274, 0, 0, 646, 643, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 651, 1, 0, 0, 0, 648, 649, 5, 76, 0, 0, 649, 650, 5, 249, 0, 0, 650, 652, 5, 274, 0, 0, 651, 648, 1, 0, 0, 0, 651, 652, 1, 0, 0, 0, 652, 23, 1, 0, 0, 0, 653, 654, 5, 37, 0, 0, 654, 656, 5, 84, 0, 0, 655, 657, 3, 172, 86, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 671, 3, 180, 90, 0, 659, 668, 5, 265, 0, 0, 660, 665, 3, 348, 174, 0, 661, 662, 5, 263, 0, 0, 662, 664, 3, 348, 174, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 669, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 660, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 672, 5, 266, 0, 0, 671, 659, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 675, 1, 0, 0, 0, 673, 674, 5, 160, 0, 0, 674, 676, 3, 348, 174, 0, 675, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 678, 5, 24, 0, 0, 678, 679, 5, 274, 0, 0, 679, 680, 5, 186, 0, 0, 680, 681, 5, 249, 0, 0, 681, 682, 3, 338, 169, 0, 682, 25, 1, 0, 0, 0, 683, 702, 3, 28, 14, 0, 684, 702, 3, 62, 31, 0, 685, 702, 3, 60, 30, 0, 686, 702, 3, 58, 29, 0, 687, 702, 3, 54, 27, 0, 688, 702, 3, 56, 28, 0, 689, 702, 3, 52, 26, 0, 690, 702, 3, 48, 24, 0, 691, 702, 3, 50, 25, 0, 692, 702, 3, 46, 23, 0, 693, 702, 3, 44, 22, 0, 694, 702, 3, 42, 21, 0, 695, 702, 3, 40, 20, 0, 696, 702, 3, 34, 17, 0, 697, 702, 3, 30, 15, 0, 698, 702, 3, 32, 16, 0, 699, 702, 3, 36, 18, 0, 700, 702, 3, 38, 19, 0, 701, 683, 1, 0, 0, 0, 701, 684, 1, 0, 0, 0, 701, 685, 1, 0, 0, 0, 701, 686, 1, 0, 0, 0, 701, 687, 1, 0, 0, 0, 701, 688, 1, 0, 0, 0, 701, 689, 1, 0, 0, 0, 701, 690, 1, 0, 0, 0, 701, 691, 1, 0, 0, 0, 701, 692, 1, 0, 0, 0, 701, 693, 1, 0, 0, 0, 701, 694, 1, 0, 0, 0, 701, 695, 1, 0, 0, 0, 701, 696, 1, 0, 0, 0, 701, 697, 1, 0, 0, 0, 701, 698, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 700, 1, 0, 0, 0, 702, 27, 1, 0, 0, 0, 703, 704, 5, 4, 0, 0, 704, 705, 5, 46, 0, 0, 705, 706, 3, 184, 92, 0, 706, 707, 5, 176, 0, 0, 707, 708, 5, 142, 0, 0, 708, 709, 7, 1, 0, 0, 709, 710, 3, 382, 191, 0, 710, 29, 1, 0, 0, 0, 711, 712, 5, 4, 0, 0, 712, 713, 5, 188, 0, 0, 713, 714, 3, 186, 93, 0, 714, 715, 5, 176, 0, 0, 715, 716, 5, 32, 0, 0, 716, 717, 5, 182, 0, 0, 717, 718, 3, 194, 97, 0, 718, 719, 5, 265, 0, 0, 719, 720, 7, 2, 0, 0, 720, 721, 5, 249, 0, 0, 721, 726, 3, 338, 169, 0, 722, 723, 5, 263, 0, 0, 723, 724, 7, 2, 0, 0, 724, 725, 5, 249, 0, 0, 725, 727, 3, 338, 169, 0, 726, 722, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 729, 5, 266, 0, 0, 729, 31, 1, 0, 0, 0, 730, 731, 5, 4, 0, 0, 731, 732, 5, 188, 0, 0, 732, 735, 3, 186, 93, 0, 733, 734, 5, 145, 0, 0, 734, 736, 3, 326, 163, 0, 735, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 748, 5, 176, 0, 0, 738, 739, 5, 30, 0, 0, 739, 740, 5, 94, 0, 0, 740, 745, 3, 338, 169, 0, 741, 742, 5, 216, 0, 0, 742, 743, 5, 151, 0, 0, 743, 744, 5, 249, 0, 0, 744, 746, 3, 384, 192, 0, 745, 741, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 749, 1, 0, 0, 0, 747, 749, 5, 197, 0, 0, 748, 738, 1, 0, 0, 0, 748, 747, 1, 0, 0, 0, 749, 33, 1, 0, 0, 0, 750, 751, 5, 4, 0, 0, 751, 752, 5, 188, 0, 0, 752, 753, 3, 186, 93, 0, 753, 754, 5, 31, 0, 0, 754, 755, 3, 194, 97, 0, 755, 756, 3, 230, 115, 0, 756, 35, 1, 0, 0, 0, 757, 758, 5, 4, 0, 0, 758, 759, 5, 188, 0, 0, 759, 760, 3, 186, 93, 0, 760, 762, 5, 58, 0, 0, 761, 763, 5, 32, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 3, 194, 97, 0, 765, 37, 1, 0, 0, 0, 766, 767, 5, 4, 0, 0, 767, 768, 5, 188, 0, 0, 768, 769, 3, 186, 93, 0, 769, 770, 5, 176, 0, 0, 770, 771, 5, 142, 0, 0, 771, 772, 7, 1, 0, 0, 772, 773, 3, 382, 191, 0, 773, 39, 1, 0, 0, 0, 774, 775, 5, 4, 0, 0, 775, 776, 5, 188, 0, 0, 776, 782, 3, 186, 93, 0, 777, 783, 5, 158, 0, 0, 778, 780, 5, 1, 0, 0, 779, 781, 3, 172, 86, 0, 780, 779, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 783, 1, 0, 0, 0, 782, 777, 1, 0, 0, 0, 782, 778, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 5, 33, 0, 0, 785, 786, 5, 265, 0, 0, 786, 791, 3, 230, 115, 0, 787, 788, 5, 263, 0, 0, 788, 790, 3, 230, 115, 0, 789, 787, 1, 0, 0, 0, 790, 793, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 794, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 795, 5, 266, 0, 0, 795, 41, 1, 0, 0, 0, 796, 797, 5, 4, 0, 0, 797, 798, 5, 188, 0, 0, 798, 799, 3, 186, 93, 0, 799, 800, 5, 1, 0, 0, 800, 802, 5, 32, 0, 0, 801, 803, 3, 172, 86, 0, 802, 801, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 805, 3, 232, 116, 0, 805, 43, 1, 0, 0, 0, 806, 807, 5, 4, 0, 0, 807, 808, 5, 188, 0, 0, 808, 809, 3, 186, 93, 0, 809, 811, 5, 4, 0, 0, 810, 812, 5, 32, 0, 0, 811, 810, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 822, 3, 194, 97, 0, 814, 818, 5, 176, 0, 0, 815, 819, 3, 236, 118, 0, 816, 817, 5, 34, 0, 0, 817, 819, 3, 338, 169, 0, 818, 815, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 819, 823, 1, 0, 0, 0, 820, 821, 5, 58, 0, 0, 821, 823, 5, 51, 0, 0, 822, 814, 1, 0, 0, 0, 822, 820, 1, 0, 0, 0, 823, 45, 1, 0, 0, 0, 824, 825, 5, 4, 0, 0, 825, 826, 5, 188, 0, 0, 826, 827, 3, 186, 93, 0, 827, 829, 5, 1, 0, 0, 828, 830, 3, 172, 86, 0, 829, 828, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 843, 1, 0, 0, 0, 831, 832, 5, 145, 0, 0, 832, 835, 3, 326, 163, 0, 833, 834, 5, 24, 0, 0, 834, 836, 3, 338, 169, 0, 835, 833, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 838, 1, 0, 0, 0, 837, 839, 3, 248, 124, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 844, 1, 0, 0, 0, 840, 841, 5, 154, 0, 0, 841, 842, 5, 145, 0, 0, 842, 844, 3, 246, 123, 0, 843, 831, 1, 0, 0, 0, 843, 840, 1, 0, 0, 0, 844, 47, 1, 0, 0, 0, 845, 846, 5, 4, 0, 0, 846, 847, 5, 188, 0, 0, 847, 850, 3, 186, 93, 0, 848, 849, 5, 145, 0, 0, 849, 851, 3, 326, 163, 0, 850, 848, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 864, 5, 176, 0, 0, 853, 854, 5, 72, 0, 0, 854, 865, 3, 238, 119, 0, 855, 856, 5, 168, 0, 0, 856, 857, 5, 79, 0, 0, 857, 865, 3, 262, 131, 0, 858, 859, 5, 24, 0, 0, 859, 865, 3, 338, 169, 0, 860, 861, 5, 25, 0, 0, 861, 865, 3, 256, 128, 0, 862, 863, 5, 175, 0, 0, 863, 865, 3, 256, 128, 0, 864, 853, 1, 0, 0, 0, 864, 855, 1, 0, 0, 0, 864, 858, 1, 0, 0, 0, 864, 860, 1, 0, 0, 0, 864, 862, 1, 0, 0, 0, 865, 49, 1, 0, 0, 0, 866, 867, 5, 4, 0, 0, 867, 868, 5, 188, 0, 0, 868, 869, 3, 186, 93, 0, 869, 870, 5, 155, 0, 0, 870, 871, 5, 146, 0, 0, 871, 51, 1, 0, 0, 0, 872, 873, 5, 4, 0, 0, 873, 874, 5, 188, 0, 0, 874, 875, 3, 186, 93, 0, 875, 877, 5, 58, 0, 0, 876, 878, 3, 170, 85, 0, 877, 876, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 887, 1, 0, 0, 0, 879, 880, 5, 145, 0, 0, 880, 882, 3, 326, 163, 0, 881, 883, 5, 22, 0, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 888, 1, 0, 0, 0, 884, 885, 5, 154, 0, 0, 885, 886, 5, 145, 0, 0, 886, 888, 3, 246, 123, 0, 887, 879, 1, 0, 0, 0, 887, 884, 1, 0, 0, 0, 888, 53, 1, 0, 0, 0, 889, 890, 5, 4, 0, 0, 890, 891, 5, 212, 0, 0, 891, 893, 3, 188, 94, 0, 892, 894, 3, 208, 104, 0, 893, 892, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 896, 5, 9, 0, 0, 896, 897, 3, 212, 106, 0, 897, 55, 1, 0, 0, 0, 898, 899, 5, 4, 0, 0, 899, 900, 5, 212, 0, 0, 900, 901, 3, 188, 94, 0, 901, 902, 5, 156, 0, 0, 902, 903, 5, 193, 0, 0, 903, 904, 3, 188, 94, 0, 904, 57, 1, 0, 0, 0, 905, 906, 5, 4, 0, 0, 906, 907, 5, 212, 0, 0, 907, 908, 3, 188, 94, 0, 908, 909, 5, 176, 0, 0, 909, 910, 5, 142, 0, 0, 910, 911, 7, 1, 0, 0, 911, 912, 3, 376, 188, 0, 912, 59, 1, 0, 0, 0, 913, 914, 5, 4, 0, 0, 914, 915, 5, 188, 0, 0, 915, 916, 3, 186, 93, 0, 916, 917, 5, 156, 0, 0, 917, 918, 5, 193, 0, 0, 918, 919, 3, 186, 93, 0, 919, 61, 1, 0, 0, 0, 920, 921, 5, 4, 0, 0, 921, 922, 5, 212, 0, 0, 922, 923, 3, 188, 94, 0, 923, 924, 7, 3, 0, 0, 924, 925, 5, 25, 0, 0, 925, 926, 3, 256, 128, 0, 926, 63, 1, 0, 0, 0, 927, 929, 5, 196, 0, 0, 928, 930, 5, 188, 0, 0, 929, 928, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 932, 1, 0, 0, 0, 931, 933, 3, 170, 85, 0, 932, 931, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 935, 3, 186, 93, 0, 935, 65, 1, 0, 0, 0, 936, 938, 5, 56, 0, 0, 937, 939, 5, 46, 0, 0, 938, 937, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 941, 1, 0, 0, 0, 940, 942, 7, 4, 0, 0, 941, 940, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 944, 3, 376, 188, 0, 944, 67, 1, 0, 0, 0, 945, 948, 3, 70, 35, 0, 946, 948, 3, 72, 36, 0, 947, 945, 1, 0, 0, 0, 947, 946, 1, 0, 0, 0, 948, 69, 1, 0, 0, 0, 949, 950, 5, 36, 0, 0, 950, 951, 5, 182, 0, 0, 951, 953, 3, 186, 93, 0, 952, 954, 3, 312, 156, 0, 953, 952, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 967, 1, 0, 0, 0, 955, 956, 5, 190, 0, 0, 956, 957, 5, 185, 0, 0, 957, 958, 5, 265, 0, 0, 958, 959, 3, 384, 192, 0, 959, 965, 5, 266, 0, 0, 960, 961, 5, 157, 0, 0, 961, 962, 5, 265, 0, 0, 962, 963, 3, 384, 192, 0, 963, 964, 5, 266, 0, 0, 964, 966, 1, 0, 0, 0, 965, 960, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 968, 1, 0, 0, 0, 967, 955, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 71, 1, 0, 0, 0, 969, 970, 5, 36, 0, 0, 970, 971, 5, 96, 0, 0, 971, 972, 5, 182, 0, 0, 972, 978, 3, 186, 93, 0, 973, 974, 5, 145, 0, 0, 974, 975, 5, 265, 0, 0, 975, 976, 3, 326, 163, 0, 976, 977, 5, 266, 0, 0, 977, 979, 1, 0, 0, 0, 978, 973, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 73, 1, 0, 0, 0, 980, 987, 3, 86, 43, 0, 981, 987, 3, 84, 42, 0, 982, 987, 3, 82, 41, 0, 983, 987, 3, 78, 39, 0, 984, 987, 3, 80, 40, 0, 985, 987, 3, 76, 38, 0, 986, 980, 1, 0, 0, 0, 986, 981, 1, 0, 0, 0, 986, 982, 1, 0, 0, 0, 986, 983, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 986, 985, 1, 0, 0, 0, 987, 75, 1, 0, 0, 0, 988, 989, 5, 58, 0, 0, 989, 991, 7, 0, 0, 0, 990, 992, 3, 170, 85, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 3, 184, 92, 0, 994, 996, 7, 5, 0, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 77, 1, 0, 0, 0, 997, 998, 5, 58, 0, 0, 998, 1000, 5, 212, 0, 0, 999, 1001, 3, 170, 85, 0, 1000, 999, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1002, 1, 0, 0, 0, 1002, 1003, 3, 188, 94, 0, 1003, 79, 1, 0, 0, 0, 1004, 1005, 5, 58, 0, 0, 1005, 1007, 5, 188, 0, 0, 1006, 1008, 3, 170, 85, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1011, 3, 186, 93, 0, 1010, 1012, 5, 22, 0, 0, 1011, 1010, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 81, 1, 0, 0, 0, 1013, 1015, 5, 58, 0, 0, 1014, 1016, 5, 96, 0, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1018, 5, 182, 0, 0, 1018, 1021, 3, 186, 93, 0, 1019, 1020, 5, 145, 0, 0, 1020, 1022, 3, 326, 163, 0, 1021, 1019, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 83, 1, 0, 0, 0, 1023, 1025, 5, 58, 0, 0, 1024, 1026, 5, 12, 0, 0, 1025, 1024, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1029, 5, 84, 0, 0, 1028, 1030, 3, 170, 85, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1044, 3, 190, 95, 0, 1032, 1041, 5, 265, 0, 0, 1033, 1038, 3, 348, 174, 0, 1034, 1035, 5, 263, 0, 0, 1035, 1037, 3, 348, 174, 0, 1036, 1034, 1, 0, 0, 0, 1037, 1040, 1, 0, 0, 0, 1038, 1036, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1042, 1, 0, 0, 0, 1040, 1038, 1, 0, 0, 0, 1041, 1033, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1045, 5, 266, 0, 0, 1044, 1032, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 85, 1, 0, 0, 0, 1046, 1047, 5, 58, 0, 0, 1047, 1048, 5, 166, 0, 0, 1048, 1049, 3, 382, 191, 0, 1049, 87, 1, 0, 0, 0, 1050, 1053, 3, 90, 45, 0, 1051, 1053, 3, 92, 46, 0, 1052, 1050, 1, 0, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 89, 1, 0, 0, 0, 1054, 1055, 5, 86, 0, 0, 1055, 1056, 5, 166, 0, 0, 1056, 1057, 3, 382, 191, 0, 1057, 1058, 5, 193, 0, 0, 1058, 1059, 5, 87, 0, 0, 1059, 1060, 3, 382, 191, 0, 1060, 91, 1, 0, 0, 0, 1061, 1062, 5, 86, 0, 0, 1062, 1063, 3, 372, 186, 0, 1063, 1064, 5, 136, 0, 0, 1064, 1066, 3, 374, 187, 0, 1065, 1067, 3, 376, 188, 0, 1066, 1065, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1068, 1, 0, 0, 0, 1068, 1069, 5, 193, 0, 0, 1069, 1070, 3, 380, 190, 0, 1070, 93, 1, 0, 0, 0, 1071, 1074, 3, 96, 48, 0, 1072, 1074, 3, 98, 49, 0, 1073, 1071, 1, 0, 0, 0, 1073, 1072, 1, 0, 0, 0, 1074, 95, 1, 0, 0, 0, 1075, 1076, 5, 161, 0, 0, 1076, 1077, 5, 166, 0, 0, 1077, 1078, 3, 382, 191, 0, 1078, 1079, 5, 82, 0, 0, 1079, 1080, 5, 87, 0, 0, 1080, 1081, 3, 382, 191, 0, 1081, 97, 1, 0, 0, 0, 1082, 1086, 5, 161, 0, 0, 1083, 1084, 5, 86, 0, 0, 1084, 1085, 5, 137, 0, 0, 1085, 1087, 5, 78, 0, 0, 1086, 1083, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1089, 3, 372, 186, 0, 1089, 1090, 5, 136, 0, 0, 1090, 1092, 3, 374, 187, 0, 1091, 1093, 3, 376, 188, 0, 1092, 1091, 1, 0, 0, 0, 1092, 1093, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1100, 5, 82, 0, 0, 1095, 1101, 3, 380, 190, 0, 1096, 1098, 5, 166, 0, 0, 1097, 1096, 1, 0, 0, 0, 1097, 1098, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1101, 3, 382, 191, 0, 1100, 1095, 1, 0, 0, 0, 1100, 1097, 1, 0, 0, 0, 1101, 99, 1, 0, 0, 0, 1102, 1104, 3, 214, 107, 0, 1103, 1102, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1106, 5, 99, 0, 0, 1106, 1108, 7, 6, 0, 0, 1107, 1109, 5, 188, 0, 0, 1108, 1107, 1, 0, 0, 0, 1108, 1109, 1, 0, 0, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1112, 3, 186, 93, 0, 1111, 1113, 3, 312, 156, 0, 1112, 1111, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1126, 1, 0, 0, 0, 1114, 1115, 5, 145, 0, 0, 1115, 1116, 5, 265, 0, 0, 1116, 1121, 3, 326, 163, 0, 1117, 1118, 5, 263, 0, 0, 1118, 1120, 3, 326, 163, 0, 1119, 1117, 1, 0, 0, 0, 1120, 1123, 1, 0, 0, 0, 1121, 1119, 1, 0, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1124, 1, 0, 0, 0, 1123, 1121, 1, 0, 0, 0, 1124, 1125, 5, 266, 0, 0, 1125, 1127, 1, 0, 0, 0, 1126, 1114, 1, 0, 0, 0, 1126, 1127, 1, 0, 0, 0, 1127, 1128, 1, 0, 0, 0, 1128, 1129, 3, 212, 106, 0, 1129, 101, 1, 0, 0, 0, 1130, 1133, 3, 104, 52, 0, 1131, 1133, 3, 106, 53, 0, 1132, 1130, 1, 0, 0, 0, 1132, 1131, 1, 0, 0, 0, 1133, 103, 1, 0, 0, 0, 1134, 1136, 5, 50, 0, 0, 1135, 1137, 5, 82, 0, 0, 1136, 1135, 1, 0, 0, 0, 1136, 1137, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1140, 3, 186, 93, 0, 1139, 1141, 3, 278, 139, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 105, 1, 0, 0, 0, 1142, 1143, 5, 50, 0, 0, 1143, 1148, 3, 186, 93, 0, 1144, 1146, 5, 9, 0, 0, 1145, 1144, 1, 0, 0, 0, 1145, 1146, 1, 0, 0, 0, 1146, 1147, 1, 0, 0, 0, 1147, 1149, 3, 382, 191, 0, 1148, 1145, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1159, 5, 82, 0, 0, 1151, 1156, 3, 302, 151, 0, 1152, 1153, 5, 263, 0, 0, 1153, 1155, 3, 302, 151, 0, 1154, 1152, 1, 0, 0, 0, 1155, 1158, 1, 0, 0, 0, 1156, 1154, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1160, 1, 0, 0, 0, 1158, 1156, 1, 0, 0, 0, 1159, 1151, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1162, 1, 0, 0, 0, 1161, 1163, 3, 278, 139, 0, 1162, 1161, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 107, 1, 0, 0, 0, 1164, 1165, 5, 54, 0, 0, 1165, 1166, 3, 186, 93, 0, 1166, 1167, 5, 176, 0, 0, 1167, 1177, 3, 204, 102, 0, 1168, 1169, 5, 82, 0, 0, 1169, 1174, 3, 302, 151, 0, 1170, 1171, 5, 263, 0, 0, 1171, 1173, 3, 302, 151, 0, 1172, 1170, 1, 0, 0, 0, 1173, 1176, 1, 0, 0, 0, 1174, 1172, 1, 0, 0, 0, 1174, 1175, 1, 0, 0, 0, 1175, 1178, 1, 0, 0, 0, 1176, 1174, 1, 0, 0, 0, 1177, 1168, 1, 0, 0, 0, 1177, 1178, 1, 0, 0, 0, 1178, 1180, 1, 0, 0, 0, 1179, 1181, 3, 278, 139, 0, 1180, 1179, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1181, 109, 1, 0, 0, 0, 1182, 1183, 5, 207, 0, 0, 1183, 1185, 5, 103, 0, 0, 1184, 1186, 5, 188, 0, 0, 1185, 1184, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1189, 3, 186, 93, 0, 1188, 1190, 3, 312, 156, 0, 1189, 1188, 1, 0, 0, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 1192, 3, 212, 106, 0, 1192, 111, 1, 0, 0, 0, 1193, 1206, 3, 132, 66, 0, 1194, 1206, 3, 134, 67, 0, 1195, 1206, 3, 136, 68, 0, 1196, 1206, 3, 130, 65, 0, 1197, 1206, 3, 128, 64, 0, 1198, 1206, 3, 126, 63, 0, 1199, 1206, 3, 124, 62, 0, 1200, 1206, 3, 122, 61, 0, 1201, 1206, 3, 120, 60, 0, 1202, 1206, 3, 118, 59, 0, 1203, 1206, 3, 116, 58, 0, 1204, 1206, 3, 114, 57, 0, 1205, 1193, 1, 0, 0, 0, 1205, 1194, 1, 0, 0, 0, 1205, 1195, 1, 0, 0, 0, 1205, 1196, 1, 0, 0, 0, 1205, 1197, 1, 0, 0, 0, 1205, 1198, 1, 0, 0, 0, 1205, 1199, 1, 0, 0, 0, 1205, 1200, 1, 0, 0, 0, 1205, 1201, 1, 0, 0, 0, 1205, 1202, 1, 0, 0, 0, 1205, 1203, 1, 0, 0, 0, 1205, 1204, 1, 0, 0, 0, 1206, 113, 1, 0, 0, 0, 1207, 1208, 5, 179, 0, 0, 1208, 1220, 7, 7, 0, 0, 1209, 1211, 5, 115, 0, 0, 1210, 1209, 1, 0, 0, 0, 1210, 1211, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1217, 3, 338, 169, 0, 1213, 1214, 5, 271, 0, 0, 1214, 1216, 3, 338, 169, 0, 1215, 1213, 1, 0, 0, 0, 1216, 1219, 1, 0, 0, 0, 1217, 1215, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1221, 1, 0, 0, 0, 1219, 1217, 1, 0, 0, 0, 1220, 1210, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 115, 1, 0, 0, 0, 1222, 1223, 5, 179, 0, 0, 1223, 1226, 5, 189, 0, 0, 1224, 1225, 5, 94, 0, 0, 1225, 1227, 3, 186, 93, 0, 1226, 1224, 1, 0, 0, 0, 1226, 1227, 1, 0, 0, 0, 1227, 1239, 1, 0, 0, 0, 1228, 1230, 5, 115, 0, 0, 1229, 1228, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1236, 3, 338, 169, 0, 1232, 1233, 5, 271, 0, 0, 1233, 1235, 3, 338, 169, 0, 1234, 1232, 1, 0, 0, 0, 1235, 1238, 1, 0, 0, 0, 1236, 1234, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1240, 1, 0, 0, 0, 1238, 1236, 1, 0, 0, 0, 1239, 1229, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 117, 1, 0, 0, 0, 1241, 1243, 5, 179, 0, 0, 1242, 1244, 7, 8, 0, 0, 1243, 1242, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1248, 5, 85, 0, 0, 1246, 1247, 5, 94, 0, 0, 1247, 1249, 3, 184, 92, 0, 1248, 1246, 1, 0, 0, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1261, 1, 0, 0, 0, 1250, 1252, 5, 115, 0, 0, 1251, 1250, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1258, 3, 338, 169, 0, 1254, 1255, 5, 271, 0, 0, 1255, 1257, 3, 338, 169, 0, 1256, 1254, 1, 0, 0, 0, 1257, 1260, 1, 0, 0, 0, 1258, 1256, 1, 0, 0, 0, 1258, 1259, 1, 0, 0, 0, 1259, 1262, 1, 0, 0, 0, 1260, 1258, 1, 0, 0, 0, 1261, 1251, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 119, 1, 0, 0, 0, 1263, 1264, 5, 179, 0, 0, 1264, 1265, 5, 37, 0, 0, 1265, 1266, 5, 188, 0, 0, 1266, 1267, 3, 186, 93, 0, 1267, 121, 1, 0, 0, 0, 1268, 1269, 5, 179, 0, 0, 1269, 1270, 5, 37, 0, 0, 1270, 1271, 5, 212, 0, 0, 1271, 1272, 3, 188, 94, 0, 1272, 123, 1, 0, 0, 0, 1273, 1274, 5, 179, 0, 0, 1274, 1275, 5, 188, 0, 0, 1275, 1276, 5, 182, 0, 0, 1276, 1277, 3, 186, 93, 0, 1277, 125, 1, 0, 0, 0, 1278, 1279, 5, 179, 0, 0, 1279, 1280, 5, 32, 0, 0, 1280, 1281, 5, 182, 0, 0, 1281, 1282, 3, 186, 93, 0, 1282, 127, 1, 0, 0, 0, 1283, 1285, 5, 179, 0, 0, 1284, 1286, 5, 154, 0, 0, 1285, 1284, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1287, 1, 0, 0, 0, 1287, 1288, 5, 146, 0, 0, 1288, 1289, 3, 186, 93, 0, 1289, 129, 1, 0, 0, 0, 1290, 1291, 5, 179, 0, 0, 1291, 1292, 5, 73, 0, 0, 1292, 1293, 5, 94, 0, 0, 1293, 1303, 3, 186, 93, 0, 1294, 1295, 5, 145, 0, 0, 1295, 1296, 5, 265, 0, 0, 1296, 1299, 3, 326, 163, 0, 1297, 1298, 5, 263, 0, 0, 1298, 1300, 3, 326, 163, 0, 1299, 1297, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1302, 5, 266, 0, 0, 1302, 1304, 1, 0, 0, 0, 1303, 1294, 1, 0, 0, 0, 1303, 1304, 1, 0, 0, 0, 1304, 131, 1, 0, 0, 0, 1305, 1307, 5, 179, 0, 0, 1306, 1308, 5, 39, 0, 0, 1307, 1306, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1310, 5, 167, 0, 0, 1310, 133, 1, 0, 0, 0, 1311, 1312, 5, 179, 0, 0, 1312, 1313, 5, 166, 0, 0, 1313, 1314, 5, 86, 0, 0, 1314, 1315, 5, 87, 0, 0, 1315, 1316, 3, 382, 191, 0, 1316, 135, 1, 0, 0, 0, 1317, 1332, 3, 138, 69, 0, 1318, 1332, 3, 140, 70, 0, 1319, 1332, 3, 142, 71, 0, 1320, 1321, 5, 179, 0, 0, 1321, 1322, 5, 86, 0, 0, 1322, 1323, 7, 9, 0, 0, 1323, 1329, 3, 382, 191, 0, 1324, 1325, 5, 136, 0, 0, 1325, 1327, 7, 10, 0, 0, 1326, 1328, 3, 376, 188, 0, 1327, 1326, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1330, 1, 0, 0, 0, 1329, 1324, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1332, 1, 0, 0, 0, 1331, 1317, 1, 0, 0, 0, 1331, 1318, 1, 0, 0, 0, 1331, 1319, 1, 0, 0, 0, 1331, 1320, 1, 0, 0, 0, 1332, 137, 1, 0, 0, 0, 1333, 1334, 5, 179, 0, 0, 1334, 1335, 5, 86, 0, 0, 1335, 1336, 7, 9, 0, 0, 1336, 1342, 3, 382, 191, 0, 1337, 1338, 5, 136, 0, 0, 1338, 1340, 5, 46, 0, 0, 1339, 1341, 3, 184, 92, 0, 1340, 1339, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1343, 1, 0, 0, 0, 1342, 1337, 1, 0, 0, 0, 1342, 1343, 1, 0, 0, 0, 1343, 139, 1, 0, 0, 0, 1344, 1345, 5, 179, 0, 0, 1345, 1346, 5, 86, 0, 0, 1346, 1347, 7, 9, 0, 0, 1347, 1353, 3, 382, 191, 0, 1348, 1349, 5, 136, 0, 0, 1349, 1351, 5, 188, 0, 0, 1350, 1352, 3, 186, 93, 0, 1351, 1350, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1354, 1, 0, 0, 0, 1353, 1348, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 141, 1, 0, 0, 0, 1355, 1356, 5, 179, 0, 0, 1356, 1357, 5, 86, 0, 0, 1357, 1358, 7, 9, 0, 0, 1358, 1364, 3, 382, 191, 0, 1359, 1360, 5, 136, 0, 0, 1360, 1362, 5, 32, 0, 0, 1361, 1363, 3, 194, 97, 0, 1362, 1361, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1365, 1, 0, 0, 0, 1364, 1359, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 143, 1, 0, 0, 0, 1366, 1370, 3, 146, 73, 0, 1367, 1370, 3, 148, 74, 0, 1368, 1370, 3, 150, 75, 0, 1369, 1366, 1, 0, 0, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1368, 1, 0, 0, 0, 1370, 145, 1, 0, 0, 0, 1371, 1372, 5, 34, 0, 0, 1372, 1373, 5, 136, 0, 0, 1373, 1374, 5, 46, 0, 0, 1374, 1375, 3, 184, 92, 0, 1375, 1378, 5, 108, 0, 0, 1376, 1379, 3, 338, 169, 0, 1377, 1379, 5, 133, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1377, 1, 0, 0, 0, 1379, 147, 1, 0, 0, 0, 1380, 1381, 5, 34, 0, 0, 1381, 1382, 5, 136, 0, 0, 1382, 1383, 5, 188, 0, 0, 1383, 1384, 3, 186, 93, 0, 1384, 1387, 5, 108, 0, 0, 1385, 1388, 3, 338, 169, 0, 1386, 1388, 5, 133, 0, 0, 1387, 1385, 1, 0, 0, 0, 1387, 1386, 1, 0, 0, 0, 1388, 149, 1, 0, 0, 0, 1389, 1390, 5, 34, 0, 0, 1390, 1391, 5, 136, 0, 0, 1391, 1392, 5, 32, 0, 0, 1392, 1393, 3, 194, 97, 0, 1393, 1396, 5, 108, 0, 0, 1394, 1397, 3, 338, 169, 0, 1395, 1397, 5, 133, 0, 0, 1396, 1394, 1, 0, 0, 0, 1396, 1395, 1, 0, 0, 0, 1397, 151, 1, 0, 0, 0, 1398, 1399, 5, 67, 0, 0, 1399, 1400, 3, 4, 2, 0, 1400, 153, 1, 0, 0, 0, 1401, 1407, 5, 176, 0, 0, 1402, 1408, 5, 2, 0, 0, 1403, 1404, 3, 382, 191, 0, 1404, 1405, 5, 249, 0, 0, 1405, 1406, 3, 326, 163, 0, 1406, 1408, 1, 0, 0, 0, 1407, 1402, 1, 0, 0, 0, 1407, 1403, 1, 0, 0, 0, 1407, 1408, 1, 0, 0, 0, 1408, 155, 1, 0, 0, 0, 1409, 1410, 5, 264, 0, 0, 1410, 1411, 5, 180, 0, 0, 1411, 1421, 5, 265, 0, 0, 1412, 1414, 3, 338, 169, 0, 1413, 1412, 1, 0, 0, 0, 1413, 1414, 1, 0, 0, 0, 1414, 1422, 1, 0, 0, 0, 1415, 1418, 3, 338, 169, 0, 1416, 1417, 5, 263, 0, 0, 1417, 1419, 3, 326, 163, 0, 1418, 1416, 1, 0, 0, 0, 1418, 1419, 1, 0, 0, 0, 1419, 1422, 1, 0, 0, 0, 1420, 1422, 3, 326, 163, 0, 1421, 1413, 1, 0, 0, 0, 1421, 1415, 1, 0, 0, 0, 1421, 1420, 1, 0, 0, 0, 1422, 1423, 1, 0, 0, 0, 1423, 1424, 5, 266, 0, 0, 1424, 157, 1, 0, 0, 0, 1425, 1426, 5, 107, 0, 0, 1426, 1427, 5, 121, 0, 0, 1427, 1428, 3, 186, 93, 0, 1428, 159, 1, 0, 0, 0, 1429, 1430, 5, 118, 0, 0, 1430, 1431, 5, 45, 0, 0, 1431, 1432, 5, 98, 0, 0, 1432, 1434, 5, 274, 0, 0, 1433, 1435, 5, 144, 0, 0, 1434, 1433, 1, 0, 0, 0, 1434, 1435, 1, 0, 0, 0, 1435, 1436, 1, 0, 0, 0, 1436, 1437, 5, 103, 0, 0, 1437, 1438, 5, 188, 0, 0, 1438, 1448, 3, 186, 93, 0, 1439, 1440, 5, 145, 0, 0, 1440, 1441, 5, 265, 0, 0, 1441, 1444, 3, 326, 163, 0, 1442, 1443, 5, 263, 0, 0, 1443, 1445, 3, 326, 163, 0, 1444, 1442, 1, 0, 0, 0, 1444, 1445, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1447, 5, 266, 0, 0, 1447, 1449, 1, 0, 0, 0, 1448, 1439, 1, 0, 0, 0, 1448, 1449, 1, 0, 0, 0, 1449, 161, 1, 0, 0, 0, 1450, 1454, 3, 164, 82, 0, 1451, 1454, 3, 166, 83, 0, 1452, 1454, 3, 168, 84, 0, 1453, 1450, 1, 0, 0, 0, 1453, 1451, 1, 0, 0, 0, 1453, 1452, 1, 0, 0, 0, 1454, 163, 1, 0, 0, 0, 1455, 1456, 5, 162, 0, 0, 1456, 1469, 3, 186, 93, 0, 1457, 1458, 5, 145, 0, 0, 1458, 1459, 5, 265, 0, 0, 1459, 1464, 3, 326, 163, 0, 1460, 1461, 5, 263, 0, 0, 1461, 1463, 3, 326, 163, 0, 1462, 1460, 1, 0, 0, 0, 1463, 1466, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1464, 1462, 1, 0, 0, 0, 1465, 1467, 1, 0, 0, 0, 1466, 1464, 1, 0, 0, 0, 1467, 1468, 5, 266, 0, 0, 1468, 1470, 1, 0, 0, 0, 1469, 1457, 1, 0, 0, 0, 1469, 1470, 1, 0, 0, 0, 1470, 165, 1, 0, 0, 0, 1471, 1472, 5, 162, 0, 0, 1472, 1473, 5, 13, 0, 0, 1473, 167, 1, 0, 0, 0, 1474, 1475, 5, 162, 0, 0, 1475, 1476, 5, 85, 0, 0, 1476, 1477, 3, 190, 95, 0, 1477, 169, 1, 0, 0, 0, 1478, 1479, 5, 93, 0, 0, 1479, 1480, 5, 66, 0, 0, 1480, 171, 1, 0, 0, 0, 1481, 1482, 5, 93, 0, 0, 1482, 1483, 5, 132, 0, 0, 1483, 1484, 5, 66, 0, 0, 1484, 173, 1, 0, 0, 0, 1485, 1486, 3, 376, 188, 0, 1486, 175, 1, 0, 0, 0, 1487, 1488, 3, 376, 188, 0, 1488, 177, 1, 0, 0, 0, 1489, 1490, 3, 376, 188, 0, 1490, 179, 1, 0, 0, 0, 1491, 1492, 3, 376, 188, 0, 1492, 181, 1, 0, 0, 0, 1493, 1494, 3, 376, 188, 0, 1494, 183, 1, 0, 0, 0, 1495, 1496, 3, 376, 188, 0, 1496, 185, 1, 0, 0, 0, 1497, 1502, 3, 382, 191, 0, 1498, 1499, 5, 261, 0, 0, 1499, 1501, 3, 382, 191, 0, 1500, 1498, 1, 0, 0, 0, 1501, 1504, 1, 0, 0, 0, 1502, 1500, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 187, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1505, 1510, 3, 382, 191, 0, 1506, 1507, 5, 261, 0, 0, 1507, 1509, 3, 382, 191, 0, 1508, 1506, 1, 0, 0, 0, 1509, 1512, 1, 0, 0, 0, 1510, 1508, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 189, 1, 0, 0, 0, 1512, 1510, 1, 0, 0, 0, 1513, 1516, 3, 386, 193, 0, 1514, 1516, 3, 376, 188, 0, 1515, 1513, 1, 0, 0, 0, 1515, 1514, 1, 0, 0, 0, 1516, 191, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 193, 1, 0, 0, 0, 1519, 1520, 4, 97, 0, 0, 1520, 1523, 3, 192, 96, 0, 1521, 1523, 3, 378, 189, 0, 1522, 1519, 1, 0, 0, 0, 1522, 1521, 1, 0, 0, 0, 1523, 195, 1, 0, 0, 0, 1524, 1525, 3, 376, 188, 0, 1525, 197, 1, 0, 0, 0, 1526, 1527, 4, 99, 1, 0, 1527, 1530, 3, 192, 96, 0, 1528, 1530, 3, 378, 189, 0, 1529, 1526, 1, 0, 0, 0, 1529, 1528, 1, 0, 0, 0, 1530, 199, 1, 0, 0, 0, 1531, 1534, 3, 186, 93, 0, 1532, 1534, 3, 188, 94, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1532, 1, 0, 0, 0, 1534, 201, 1, 0, 0, 0, 1535, 1536, 5, 21, 0, 0, 1536, 1537, 5, 26, 0, 0, 1537, 1539, 3, 312, 156, 0, 1538, 1535, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1541, 1, 0, 0, 0, 1540, 1542, 3, 228, 114, 0, 1541, 1540, 1, 0, 0, 0, 1541, 1542, 1, 0, 0, 0, 1542, 1546, 1, 0, 0, 0, 1543, 1544, 5, 168, 0, 0, 1544, 1545, 5, 79, 0, 0, 1545, 1547, 3, 262, 131, 0, 1546, 1543, 1, 0, 0, 0, 1546, 1547, 1, 0, 0, 0, 1547, 1551, 1, 0, 0, 0, 1548, 1549, 5, 216, 0, 0, 1549, 1550, 5, 175, 0, 0, 1550, 1552, 3, 256, 128, 0, 1551, 1548, 1, 0, 0, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1556, 1, 0, 0, 0, 1553, 1554, 5, 23, 0, 0, 1554, 1555, 5, 9, 0, 0, 1555, 1557, 3, 238, 119, 0, 1556, 1553, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 1560, 1, 0, 0, 0, 1558, 1559, 5, 24, 0, 0, 1559, 1561, 3, 338, 169, 0, 1560, 1558, 1, 0, 0, 0, 1560, 1561, 1, 0, 0, 0, 1561, 1572, 1, 0, 0, 0, 1562, 1563, 5, 30, 0, 0, 1563, 1564, 5, 94, 0, 0, 1564, 1569, 3, 376, 188, 0, 1565, 1566, 5, 216, 0, 0, 1566, 1567, 5, 151, 0, 0, 1567, 1568, 5, 249, 0, 0, 1568, 1570, 5, 277, 0, 0, 1569, 1565, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1573, 1, 0, 0, 0, 1571, 1573, 5, 197, 0, 0, 1572, 1562, 1, 0, 0, 0, 1572, 1571, 1, 0, 0, 0, 1572, 1573, 1, 0, 0, 0, 1573, 1576, 1, 0, 0, 0, 1574, 1575, 5, 25, 0, 0, 1575, 1577, 3, 256, 128, 0, 1576, 1574, 1, 0, 0, 0, 1576, 1577, 1, 0, 0, 0, 1577, 203, 1, 0, 0, 0, 1578, 1583, 3, 206, 103, 0, 1579, 1580, 5, 263, 0, 0, 1580, 1582, 3, 206, 103, 0, 1581, 1579, 1, 0, 0, 0, 1582, 1585, 1, 0, 0, 0, 1583, 1581, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 205, 1, 0, 0, 0, 1585, 1583, 1, 0, 0, 0, 1586, 1587, 3, 376, 188, 0, 1587, 1588, 5, 249, 0, 0, 1588, 1589, 3, 326, 163, 0, 1589, 207, 1, 0, 0, 0, 1590, 1592, 5, 265, 0, 0, 1591, 1593, 3, 210, 105, 0, 1592, 1591, 1, 0, 0, 0, 1592, 1593, 1, 0, 0, 0, 1593, 1600, 1, 0, 0, 0, 1594, 1596, 5, 263, 0, 0, 1595, 1597, 3, 210, 105, 0, 1596, 1595, 1, 0, 0, 0, 1596, 1597, 1, 0, 0, 0, 1597, 1599, 1, 0, 0, 0, 1598, 1594, 1, 0, 0, 0, 1599, 1602, 1, 0, 0, 0, 1600, 1598, 1, 0, 0, 0, 1600, 1601, 1, 0, 0, 0, 1601, 1603, 1, 0, 0, 0, 1602, 1600, 1, 0, 0, 0, 1603, 1604, 5, 266, 0, 0, 1604, 209, 1, 0, 0, 0, 1605, 1607, 3, 182, 91, 0, 1606, 1608, 3, 228, 114, 0, 1607, 1606, 1, 0, 0, 0, 1607, 1608, 1, 0, 0, 0, 1608, 211, 1, 0, 0, 0, 1609, 1611, 3, 214, 107, 0, 1610, 1609, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1613, 3, 266, 133, 0, 1613, 213, 1, 0, 0, 0, 1614, 1615, 5, 216, 0, 0, 1615, 1620, 3, 288, 144, 0, 1616, 1617, 5, 263, 0, 0, 1617, 1619, 3, 288, 144, 0, 1618, 1616, 1, 0, 0, 0, 1619, 1622, 1, 0, 0, 0, 1620, 1618, 1, 0, 0, 0, 1620, 1621, 1, 0, 0, 0, 1621, 215, 1, 0, 0, 0, 1622, 1620, 1, 0, 0, 0, 1623, 1624, 5, 150, 0, 0, 1624, 1625, 5, 110, 0, 0, 1625, 1627, 3, 312, 156, 0, 1626, 1628, 5, 53, 0, 0, 1627, 1626, 1, 0, 0, 0, 1627, 1628, 1, 0, 0, 0, 1628, 1632, 1, 0, 0, 0, 1629, 1633, 5, 225, 0, 0, 1630, 1631, 5, 263, 0, 0, 1631, 1633, 5, 225, 0, 0, 1632, 1629, 1, 0, 0, 0, 1632, 1630, 1, 0, 0, 0, 1632, 1633, 1, 0, 0, 0, 1633, 1637, 1, 0, 0, 0, 1634, 1638, 5, 226, 0, 0, 1635, 1636, 5, 263, 0, 0, 1636, 1638, 5, 226, 0, 0, 1637, 1634, 1, 0, 0, 0, 1637, 1635, 1, 0, 0, 0, 1637, 1638, 1, 0, 0, 0, 1638, 1651, 1, 0, 0, 0, 1639, 1640, 5, 263, 0, 0, 1640, 1643, 3, 218, 109, 0, 1641, 1643, 3, 218, 109, 0, 1642, 1639, 1, 0, 0, 0, 1642, 1641, 1, 0, 0, 0, 1643, 1648, 1, 0, 0, 0, 1644, 1645, 5, 263, 0, 0, 1645, 1647, 3, 218, 109, 0, 1646, 1644, 1, 0, 0, 0, 1647, 1650, 1, 0, 0, 0, 1648, 1649, 1, 0, 0, 0, 1648, 1646, 1, 0, 0, 0, 1649, 1652, 1, 0, 0, 0, 1650, 1648, 1, 0, 0, 0, 1651, 1642, 1, 0, 0, 0, 1651, 1652, 1, 0, 0, 0, 1652, 217, 1, 0, 0, 0, 1653, 1654, 5, 81, 0, 0, 1654, 1655, 5, 110, 0, 0, 1655, 1656, 3, 312, 156, 0, 1656, 1657, 5, 224, 0, 0, 1657, 1658, 3, 186, 93, 0, 1658, 1660, 3, 312, 156, 0, 1659, 1661, 5, 53, 0, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1663, 1, 0, 0, 0, 1662, 1664, 5, 225, 0, 0, 1663, 1662, 1, 0, 0, 0, 1663, 1664, 1, 0, 0, 0, 1664, 1666, 1, 0, 0, 0, 1665, 1667, 5, 226, 0, 0, 1666, 1665, 1, 0, 0, 0, 1666, 1667, 1, 0, 0, 0, 1667, 219, 1, 0, 0, 0, 1668, 1669, 3, 194, 97, 0, 1669, 1672, 3, 348, 174, 0, 1670, 1671, 5, 34, 0, 0, 1671, 1673, 3, 338, 169, 0, 1672, 1670, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 221, 1, 0, 0, 0, 1674, 1675, 3, 182, 91, 0, 1675, 1677, 3, 348, 174, 0, 1676, 1678, 3, 228, 114, 0, 1677, 1676, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 223, 1, 0, 0, 0, 1679, 1680, 3, 226, 113, 0, 1680, 225, 1, 0, 0, 0, 1681, 1682, 3, 182, 91, 0, 1682, 1690, 3, 348, 174, 0, 1683, 1687, 3, 234, 117, 0, 1684, 1686, 3, 234, 117, 0, 1685, 1684, 1, 0, 0, 0, 1686, 1689, 1, 0, 0, 0, 1687, 1688, 1, 0, 0, 0, 1687, 1685, 1, 0, 0, 0, 1688, 1691, 1, 0, 0, 0, 1689, 1687, 1, 0, 0, 0, 1690, 1683, 1, 0, 0, 0, 1690, 1691, 1, 0, 0, 0, 1691, 1693, 1, 0, 0, 0, 1692, 1694, 3, 228, 114, 0, 1693, 1692, 1, 0, 0, 0, 1693, 1694, 1, 0, 0, 0, 1694, 1697, 1, 0, 0, 0, 1695, 1696, 5, 150, 0, 0, 1696, 1698, 5, 110, 0, 0, 1697, 1695, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 227, 1, 0, 0, 0, 1699, 1700, 5, 34, 0, 0, 1700, 1701, 3, 338, 169, 0, 1701, 229, 1, 0, 0, 0, 1702, 1710, 3, 220, 110, 0, 1703, 1707, 3, 234, 117, 0, 1704, 1706, 3, 234, 117, 0, 1705, 1704, 1, 0, 0, 0, 1706, 1709, 1, 0, 0, 0, 1707, 1708, 1, 0, 0, 0, 1707, 1705, 1, 0, 0, 0, 1708, 1711, 1, 0, 0, 0, 1709, 1707, 1, 0, 0, 0, 1710, 1703, 1, 0, 0, 0, 1710, 1711, 1, 0, 0, 0, 1711, 231, 1, 0, 0, 0, 1712, 1713, 3, 182, 91, 0, 1713, 1716, 3, 348, 174, 0, 1714, 1715, 5, 34, 0, 0, 1715, 1717, 3, 338, 169, 0, 1716, 1714, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 1725, 1, 0, 0, 0, 1718, 1722, 3, 234, 117, 0, 1719, 1721, 3, 234, 117, 0, 1720, 1719, 1, 0, 0, 0, 1721, 1724, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1722, 1720, 1, 0, 0, 0, 1723, 1726, 1, 0, 0, 0, 1724, 1722, 1, 0, 0, 0, 1725, 1718, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 233, 1, 0, 0, 0, 1727, 1729, 5, 132, 0, 0, 1728, 1727, 1, 0, 0, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1733, 5, 133, 0, 0, 1731, 1733, 3, 236, 118, 0, 1732, 1728, 1, 0, 0, 0, 1732, 1731, 1, 0, 0, 0, 1733, 235, 1, 0, 0, 0, 1734, 1735, 5, 60, 0, 0, 1735, 1743, 3, 326, 163, 0, 1736, 1737, 5, 35, 0, 0, 1737, 1743, 3, 326, 163, 0, 1738, 1739, 5, 51, 0, 0, 1739, 1743, 3, 326, 163, 0, 1740, 1741, 5, 16, 0, 0, 1741, 1743, 3, 384, 192, 0, 1742, 1734, 1, 0, 0, 0, 1742, 1736, 1, 0, 0, 0, 1742, 1738, 1, 0, 0, 0, 1742, 1740, 1, 0, 0, 0, 1743, 237, 1, 0, 0, 0, 1744, 1745, 7, 11, 0, 0, 1745, 239, 1, 0, 0, 0, 1746, 1751, 3, 242, 121, 0, 1747, 1748, 5, 263, 0, 0, 1748, 1750, 3, 242, 121, 0, 1749, 1747, 1, 0, 0, 0, 1750, 1753, 1, 0, 0, 0, 1751, 1752, 1, 0, 0, 0, 1751, 1749, 1, 0, 0, 0, 1752, 1756, 1, 0, 0, 0, 1753, 1751, 1, 0, 0, 0, 1754, 1755, 5, 263, 0, 0, 1755, 1757, 3, 244, 122, 0, 1756, 1754, 1, 0, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 1760, 1, 0, 0, 0, 1758, 1760, 3, 244, 122, 0, 1759, 1746, 1, 0, 0, 0, 1759, 1758, 1, 0, 0, 0, 1760, 241, 1, 0, 0, 0, 1761, 1763, 5, 89, 0, 0, 1762, 1764, 3, 312, 156, 0, 1763, 1762, 1, 0, 0, 0, 1763, 1764, 1, 0, 0, 0, 1764, 1765, 1, 0, 0, 0, 1765, 1766, 5, 146, 0, 0, 1766, 1767, 3, 384, 192, 0, 1767, 243, 1, 0, 0, 0, 1768, 1770, 5, 154, 0, 0, 1769, 1771, 3, 312, 156, 0, 1770, 1769, 1, 0, 0, 0, 1770, 1771, 1, 0, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1773, 5, 265, 0, 0, 1773, 1774, 5, 145, 0, 0, 1774, 1780, 3, 246, 123, 0, 1775, 1776, 5, 263, 0, 0, 1776, 1777, 5, 145, 0, 0, 1777, 1779, 3, 246, 123, 0, 1778, 1775, 1, 0, 0, 0, 1779, 1782, 1, 0, 0, 0, 1780, 1781, 1, 0, 0, 0, 1780, 1778, 1, 0, 0, 0, 1781, 1783, 1, 0, 0, 0, 1782, 1780, 1, 0, 0, 0, 1783, 1784, 5, 266, 0, 0, 1784, 245, 1, 0, 0, 0, 1785, 1786, 5, 210, 0, 0, 1786, 1787, 3, 252, 126, 0, 1787, 1788, 3, 326, 163, 0, 1788, 1801, 1, 0, 0, 0, 1789, 1790, 3, 326, 163, 0, 1790, 1791, 3, 250, 125, 0, 1791, 1793, 1, 0, 0, 0, 1792, 1789, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 1794, 1, 0, 0, 0, 1794, 1798, 5, 211, 0, 0, 1795, 1796, 3, 250, 125, 0, 1796, 1797, 3, 326, 163, 0, 1797, 1799, 1, 0, 0, 0, 1798, 1795, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1801, 1, 0, 0, 0, 1800, 1785, 1, 0, 0, 0, 1800, 1792, 1, 0, 0, 0, 1801, 247, 1, 0, 0, 0, 1802, 1803, 5, 30, 0, 0, 1803, 1804, 5, 94, 0, 0, 1804, 1809, 3, 382, 191, 0, 1805, 1806, 5, 216, 0, 0, 1806, 1807, 5, 151, 0, 0, 1807, 1808, 5, 249, 0, 0, 1808, 1810, 3, 384, 192, 0, 1809, 1805, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 1813, 1, 0, 0, 0, 1811, 1813, 5, 197, 0, 0, 1812, 1802, 1, 0, 0, 0, 1812, 1811, 1, 0, 0, 0, 1813, 249, 1, 0, 0, 0, 1814, 1820, 1, 0, 0, 0, 1815, 1820, 5, 251, 0, 0, 1816, 1820, 5, 252, 0, 0, 1817, 1820, 5, 253, 0, 0, 1818, 1820, 5, 254, 0, 0, 1819, 1814, 1, 0, 0, 0, 1819, 1815, 1, 0, 0, 0, 1819, 1816, 1, 0, 0, 0, 1819, 1817, 1, 0, 0, 0, 1819, 1818, 1, 0, 0, 0, 1820, 251, 1, 0, 0, 0, 1821, 1830, 5, 249, 0, 0, 1822, 1830, 5, 250, 0, 0, 1823, 1830, 5, 115, 0, 0, 1824, 1830, 5, 164, 0, 0, 1825, 1830, 5, 163, 0, 0, 1826, 1830, 5, 15, 0, 0, 1827, 1830, 5, 94, 0, 0, 1828, 1830, 3, 250, 125, 0, 1829, 1821, 1, 0, 0, 0, 1829, 1822, 1, 0, 0, 0, 1829, 1823, 1, 0, 0, 0, 1829, 1824, 1, 0, 0, 0, 1829, 1825, 1, 0, 0, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1829, 1828, 1, 0, 0, 0, 1830, 253, 1, 0, 0, 0, 1831, 1832, 5, 115, 0, 0, 1832, 1835, 3, 376, 188, 0, 1833, 1834, 7, 12, 0, 0, 1834, 1836, 5, 153, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 255, 1, 0, 0, 0, 1837, 1838, 5, 265, 0, 0, 1838, 1843, 3, 264, 132, 0, 1839, 1840, 5, 263, 0, 0, 1840, 1842, 3, 264, 132, 0, 1841, 1839, 1, 0, 0, 0, 1842, 1845, 1, 0, 0, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1846, 1, 0, 0, 0, 1845, 1843, 1, 0, 0, 0, 1846, 1847, 5, 266, 0, 0, 1847, 257, 1, 0, 0, 0, 1848, 1849, 5, 265, 0, 0, 1849, 1854, 3, 220, 110, 0, 1850, 1851, 5, 263, 0, 0, 1851, 1853, 3, 220, 110, 0, 1852, 1850, 1, 0, 0, 0, 1853, 1856, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1854, 1852, 1, 0, 0, 0, 1855, 1857, 1, 0, 0, 0, 1856, 1854, 1, 0, 0, 0, 1857, 1858, 5, 266, 0, 0, 1858, 259, 1, 0, 0, 0, 1859, 1864, 3, 326, 163, 0, 1860, 1861, 5, 263, 0, 0, 1861, 1863, 3, 326, 163, 0, 1862, 1860, 1, 0, 0, 0, 1863, 1866, 1, 0, 0, 0, 1864, 1862, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 261, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1867, 1877, 5, 52, 0, 0, 1868, 1869, 5, 71, 0, 0, 1869, 1870, 5, 191, 0, 0, 1870, 1871, 5, 26, 0, 0, 1871, 1875, 3, 338, 169, 0, 1872, 1873, 5, 63, 0, 0, 1873, 1874, 5, 26, 0, 0, 1874, 1876, 3, 338, 169, 0, 1875, 1872, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 1878, 1, 0, 0, 0, 1877, 1868, 1, 0, 0, 0, 1877, 1878, 1, 0, 0, 0, 1878, 1883, 1, 0, 0, 0, 1879, 1880, 5, 117, 0, 0, 1880, 1881, 5, 191, 0, 0, 1881, 1882, 5, 26, 0, 0, 1882, 1884, 3, 338, 169, 0, 1883, 1879, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 263, 1, 0, 0, 0, 1885, 1888, 3, 382, 191, 0, 1886, 1887, 5, 249, 0, 0, 1887, 1889, 3, 326, 163, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 265, 1, 0, 0, 0, 1890, 1901, 3, 268, 134, 0, 1891, 1892, 5, 139, 0, 0, 1892, 1893, 5, 26, 0, 0, 1893, 1898, 3, 272, 136, 0, 1894, 1895, 5, 263, 0, 0, 1895, 1897, 3, 272, 136, 0, 1896, 1894, 1, 0, 0, 0, 1897, 1900, 1, 0, 0, 0, 1898, 1896, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1902, 1, 0, 0, 0, 1900, 1898, 1, 0, 0, 0, 1901, 1891, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1909, 1, 0, 0, 0, 1903, 1904, 5, 116, 0, 0, 1904, 1907, 3, 326, 163, 0, 1905, 1906, 5, 135, 0, 0, 1906, 1908, 5, 277, 0, 0, 1907, 1905, 1, 0, 0, 0, 1907, 1908, 1, 0, 0, 0, 1908, 1910, 1, 0, 0, 0, 1909, 1903, 1, 0, 0, 0, 1909, 1910, 1, 0, 0, 0, 1910, 267, 1, 0, 0, 0, 1911, 1912, 6, 134, -1, 0, 1912, 1913, 3, 270, 135, 0, 1913, 1928, 1, 0, 0, 0, 1914, 1915, 10, 2, 0, 0, 1915, 1917, 5, 100, 0, 0, 1916, 1918, 3, 290, 145, 0, 1917, 1916, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1927, 3, 268, 134, 3, 1920, 1921, 10, 1, 0, 0, 1921, 1923, 7, 13, 0, 0, 1922, 1924, 3, 290, 145, 0, 1923, 1922, 1, 0, 0, 0, 1923, 1924, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1927, 3, 268, 134, 2, 1926, 1914, 1, 0, 0, 0, 1926, 1920, 1, 0, 0, 0, 1927, 1930, 1, 0, 0, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1929, 1, 0, 0, 0, 1929, 269, 1, 0, 0, 0, 1930, 1928, 1, 0, 0, 0, 1931, 1948, 3, 274, 137, 0, 1932, 1933, 5, 188, 0, 0, 1933, 1948, 3, 186, 93, 0, 1934, 1935, 5, 211, 0, 0, 1935, 1940, 3, 326, 163, 0, 1936, 1937, 5, 263, 0, 0, 1937, 1939, 3, 326, 163, 0, 1938, 1936, 1, 0, 0, 0, 1939, 1942, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1940, 1941, 1, 0, 0, 0, 1941, 1948, 1, 0, 0, 0, 1942, 1940, 1, 0, 0, 0, 1943, 1944, 5, 265, 0, 0, 1944, 1945, 3, 266, 133, 0, 1945, 1946, 5, 266, 0, 0, 1946, 1948, 1, 0, 0, 0, 1947, 1931, 1, 0, 0, 0, 1947, 1932, 1, 0, 0, 0, 1947, 1934, 1, 0, 0, 0, 1947, 1943, 1, 0, 0, 0, 1948, 271, 1, 0, 0, 0, 1949, 1951, 3, 324, 162, 0, 1950, 1952, 7, 14, 0, 0, 1951, 1950, 1, 0, 0, 0, 1951, 1952, 1, 0, 0, 0, 1952, 1955, 1, 0, 0, 0, 1953, 1954, 5, 134, 0, 0, 1954, 1956, 7, 15, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 273, 1, 0, 0, 0, 1957, 1959, 5, 174, 0, 0, 1958, 1960, 3, 290, 145, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1963, 5, 183, 0, 0, 1962, 1961, 1, 0, 0, 0, 1962, 1963, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1974, 3, 276, 138, 0, 1965, 1966, 5, 82, 0, 0, 1966, 1971, 3, 302, 151, 0, 1967, 1968, 5, 263, 0, 0, 1968, 1970, 3, 302, 151, 0, 1969, 1967, 1, 0, 0, 0, 1970, 1973, 1, 0, 0, 0, 1971, 1969, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1975, 1, 0, 0, 0, 1973, 1971, 1, 0, 0, 0, 1974, 1965, 1, 0, 0, 0, 1974, 1975, 1, 0, 0, 0, 1975, 1977, 1, 0, 0, 0, 1976, 1978, 3, 278, 139, 0, 1977, 1976, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 1982, 1, 0, 0, 0, 1979, 1980, 5, 87, 0, 0, 1980, 1981, 5, 26, 0, 0, 1981, 1983, 3, 282, 141, 0, 1982, 1979, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1985, 1, 0, 0, 0, 1984, 1986, 3, 280, 140, 0, 1985, 1984, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 275, 1, 0, 0, 0, 1987, 1992, 3, 292, 146, 0, 1988, 1989, 5, 263, 0, 0, 1989, 1991, 3, 292, 146, 0, 1990, 1988, 1, 0, 0, 0, 1991, 1994, 1, 0, 0, 0, 1992, 1990, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 277, 1, 0, 0, 0, 1994, 1992, 1, 0, 0, 0, 1995, 1998, 5, 215, 0, 0, 1996, 1999, 3, 328, 164, 0, 1997, 1999, 3, 198, 99, 0, 1998, 1996, 1, 0, 0, 0, 1998, 1997, 1, 0, 0, 0, 1999, 279, 1, 0, 0, 0, 2000, 2003, 5, 90, 0, 0, 2001, 2004, 3, 328, 164, 0, 2002, 2004, 3, 198, 99, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2002, 1, 0, 0, 0, 2004, 281, 1, 0, 0, 0, 2005, 2007, 3, 290, 145, 0, 2006, 2005, 1, 0, 0, 0, 2006, 2007, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2013, 3, 284, 142, 0, 2009, 2010, 5, 263, 0, 0, 2010, 2012, 3, 284, 142, 0, 2011, 2009, 1, 0, 0, 0, 2012, 2015, 1, 0, 0, 0, 2013, 2011, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 283, 1, 0, 0, 0, 2015, 2013, 1, 0, 0, 0, 2016, 2017, 3, 286, 143, 0, 2017, 285, 1, 0, 0, 0, 2018, 2027, 5, 265, 0, 0, 2019, 2024, 3, 324, 162, 0, 2020, 2021, 5, 263, 0, 0, 2021, 2023, 3, 324, 162, 0, 2022, 2020, 1, 0, 0, 0, 2023, 2026, 1, 0, 0, 0, 2024, 2022, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 2028, 1, 0, 0, 0, 2026, 2024, 1, 0, 0, 0, 2027, 2019, 1, 0, 0, 0, 2027, 2028, 1, 0, 0, 0, 2028, 2029, 1, 0, 0, 0, 2029, 2032, 5, 266, 0, 0, 2030, 2032, 3, 324, 162, 0, 2031, 2018, 1, 0, 0, 0, 2031, 2030, 1, 0, 0, 0, 2032, 287, 1, 0, 0, 0, 2033, 2035, 3, 382, 191, 0, 2034, 2036, 3, 312, 156, 0, 2035, 2034, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2038, 5, 9, 0, 0, 2038, 2039, 3, 318, 159, 0, 2039, 289, 1, 0, 0, 0, 2040, 2041, 7, 16, 0, 0, 2041, 291, 1, 0, 0, 0, 2042, 2044, 3, 296, 148, 0, 2043, 2045, 3, 294, 147, 0, 2044, 2043, 1, 0, 0, 0, 2044, 2045, 1, 0, 0, 0, 2045, 2054, 1, 0, 0, 0, 2046, 2048, 3, 298, 149, 0, 2047, 2049, 3, 294, 147, 0, 2048, 2047, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2054, 1, 0, 0, 0, 2050, 2054, 3, 300, 150, 0, 2051, 2052, 4, 146, 4, 0, 2052, 2054, 3, 192, 96, 0, 2053, 2042, 1, 0, 0, 0, 2053, 2046, 1, 0, 0, 0, 2053, 2050, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2054, 293, 1, 0, 0, 0, 2055, 2057, 5, 9, 0, 0, 2056, 2055, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2059, 3, 382, 191, 0, 2059, 295, 1, 0, 0, 0, 2060, 2061, 3, 194, 97, 0, 2061, 297, 1, 0, 0, 0, 2062, 2063, 3, 326, 163, 0, 2063, 299, 1, 0, 0, 0, 2064, 2065, 3, 376, 188, 0, 2065, 2066, 5, 261, 0, 0, 2066, 2068, 1, 0, 0, 0, 2067, 2064, 1, 0, 0, 0, 2067, 2068, 1, 0, 0, 0, 2068, 2069, 1, 0, 0, 0, 2069, 2070, 5, 257, 0, 0, 2070, 301, 1, 0, 0, 0, 2071, 2072, 6, 151, -1, 0, 2072, 2073, 3, 308, 154, 0, 2073, 2087, 1, 0, 0, 0, 2074, 2083, 10, 2, 0, 0, 2075, 2076, 5, 38, 0, 0, 2076, 2077, 5, 109, 0, 0, 2077, 2084, 3, 308, 154, 0, 2078, 2079, 3, 304, 152, 0, 2079, 2080, 5, 109, 0, 0, 2080, 2081, 3, 302, 151, 0, 2081, 2082, 3, 306, 153, 0, 2082, 2084, 1, 0, 0, 0, 2083, 2075, 1, 0, 0, 0, 2083, 2078, 1, 0, 0, 0, 2084, 2086, 1, 0, 0, 0, 2085, 2074, 1, 0, 0, 0, 2086, 2089, 1, 0, 0, 0, 2087, 2085, 1, 0, 0, 0, 2087, 2088, 1, 0, 0, 0, 2088, 303, 1, 0, 0, 0, 2089, 2087, 1, 0, 0, 0, 2090, 2092, 5, 97, 0, 0, 2091, 2090, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2122, 1, 0, 0, 0, 2093, 2095, 5, 114, 0, 0, 2094, 2096, 5, 97, 0, 0, 2095, 2094, 1, 0, 0, 0, 2095, 2096, 1, 0, 0, 0, 2096, 2122, 1, 0, 0, 0, 2097, 2099, 5, 165, 0, 0, 2098, 2100, 5, 97, 0, 0, 2099, 2098, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2122, 1, 0, 0, 0, 2101, 2103, 5, 114, 0, 0, 2102, 2104, 5, 141, 0, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2122, 1, 0, 0, 0, 2105, 2107, 5, 165, 0, 0, 2106, 2108, 5, 141, 0, 0, 2107, 2106, 1, 0, 0, 0, 2107, 2108, 1, 0, 0, 0, 2108, 2122, 1, 0, 0, 0, 2109, 2111, 5, 83, 0, 0, 2110, 2112, 5, 141, 0, 0, 2111, 2110, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2122, 1, 0, 0, 0, 2113, 2114, 5, 114, 0, 0, 2114, 2122, 5, 177, 0, 0, 2115, 2116, 5, 165, 0, 0, 2116, 2122, 5, 177, 0, 0, 2117, 2118, 5, 114, 0, 0, 2118, 2122, 5, 7, 0, 0, 2119, 2120, 5, 165, 0, 0, 2120, 2122, 5, 7, 0, 0, 2121, 2091, 1, 0, 0, 0, 2121, 2093, 1, 0, 0, 0, 2121, 2097, 1, 0, 0, 0, 2121, 2101, 1, 0, 0, 0, 2121, 2105, 1, 0, 0, 0, 2121, 2109, 1, 0, 0, 0, 2121, 2113, 1, 0, 0, 0, 2121, 2115, 1, 0, 0, 0, 2121, 2117, 1, 0, 0, 0, 2121, 2119, 1, 0, 0, 0, 2122, 305, 1, 0, 0, 0, 2123, 2126, 5, 136, 0, 0, 2124, 2127, 3, 328, 164, 0, 2125, 2127, 3, 198, 99, 0, 2126, 2124, 1, 0, 0, 0, 2126, 2125, 1, 0, 0, 0, 2127, 2141, 1, 0, 0, 0, 2128, 2129, 5, 205, 0, 0, 2129, 2130, 5, 265, 0, 0, 2130, 2135, 3, 382, 191, 0, 2131, 2132, 5, 263, 0, 0, 2132, 2134, 3, 382, 191, 0, 2133, 2131, 1, 0, 0, 0, 2134, 2137, 1, 0, 0, 0, 2135, 2133, 1, 0, 0, 0, 2135, 2136, 1, 0, 0, 0, 2136, 2138, 1, 0, 0, 0, 2137, 2135, 1, 0, 0, 0, 2138, 2139, 5, 266, 0, 0, 2139, 2141, 1, 0, 0, 0, 2140, 2123, 1, 0, 0, 0, 2140, 2128, 1, 0, 0, 0, 2141, 307, 1, 0, 0, 0, 2142, 2155, 3, 310, 155, 0, 2143, 2144, 5, 190, 0, 0, 2144, 2145, 7, 17, 0, 0, 2145, 2146, 5, 265, 0, 0, 2146, 2147, 3, 326, 163, 0, 2147, 2153, 5, 266, 0, 0, 2148, 2149, 5, 157, 0, 0, 2149, 2150, 5, 265, 0, 0, 2150, 2151, 3, 326, 163, 0, 2151, 2152, 5, 266, 0, 0, 2152, 2154, 1, 0, 0, 0, 2153, 2148, 1, 0, 0, 0, 2153, 2154, 1, 0, 0, 0, 2154, 2156, 1, 0, 0, 0, 2155, 2143, 1, 0, 0, 0, 2155, 2156, 1, 0, 0, 0, 2156, 309, 1, 0, 0, 0, 2157, 2165, 3, 314, 157, 0, 2158, 2160, 5, 9, 0, 0, 2159, 2158, 1, 0, 0, 0, 2159, 2160, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2163, 3, 382, 191, 0, 2162, 2164, 3, 312, 156, 0, 2163, 2162, 1, 0, 0, 0, 2163, 2164, 1, 0, 0, 0, 2164, 2166, 1, 0, 0, 0, 2165, 2159, 1, 0, 0, 0, 2165, 2166, 1, 0, 0, 0, 2166, 311, 1, 0, 0, 0, 2167, 2168, 5, 265, 0, 0, 2168, 2173, 3, 194, 97, 0, 2169, 2170, 5, 263, 0, 0, 2170, 2172, 3, 194, 97, 0, 2171, 2169, 1, 0, 0, 0, 2172, 2175, 1, 0, 0, 0, 2173, 2171, 1, 0, 0, 0, 2173, 2174, 1, 0, 0, 0, 2174, 2176, 1, 0, 0, 0, 2175, 2173, 1, 0, 0, 0, 2176, 2177, 5, 266, 0, 0, 2177, 313, 1, 0, 0, 0, 2178, 2183, 3, 200, 100, 0, 2179, 2183, 3, 316, 158, 0, 2180, 2183, 3, 320, 160, 0, 2181, 2183, 3, 322, 161, 0, 2182, 2178, 1, 0, 0, 0, 2182, 2179, 1, 0, 0, 0, 2182, 2180, 1, 0, 0, 0, 2182, 2181, 1, 0, 0, 0, 2183, 315, 1, 0, 0, 0, 2184, 2186, 5, 113, 0, 0, 2185, 2184, 1, 0, 0, 0, 2185, 2186, 1, 0, 0, 0, 2186, 2187, 1, 0, 0, 0, 2187, 2188, 3, 318, 159, 0, 2188, 317, 1, 0, 0, 0, 2189, 2190, 5, 265, 0, 0, 2190, 2191, 3, 212, 106, 0, 2191, 2192, 5, 266, 0, 0, 2192, 319, 1, 0, 0, 0, 2193, 2194, 5, 201, 0, 0, 2194, 2195, 5, 265, 0, 0, 2195, 2200, 3, 326, 163, 0, 2196, 2197, 5, 263, 0, 0, 2197, 2199, 3, 326, 163, 0, 2198, 2196, 1, 0, 0, 0, 2199, 2202, 1, 0, 0, 0, 2200, 2198, 1, 0, 0, 0, 2200, 2201, 1, 0, 0, 0, 2201, 2203, 1, 0, 0, 0, 2202, 2200, 1, 0, 0, 0, 2203, 2206, 5, 266, 0, 0, 2204, 2205, 5, 216, 0, 0, 2205, 2207, 5, 140, 0, 0, 2206, 2204, 1, 0, 0, 0, 2206, 2207, 1, 0, 0, 0, 2207, 321, 1, 0, 0, 0, 2208, 2209, 5, 265, 0, 0, 2209, 2210, 3, 302, 151, 0, 2210, 2211, 5, 266, 0, 0, 2211, 323, 1, 0, 0, 0, 2212, 2215, 3, 194, 97, 0, 2213, 2215, 3, 326, 163, 0, 2214, 2212, 1, 0, 0, 0, 2214, 2213, 1, 0, 0, 0, 2215, 325, 1, 0, 0, 0, 2216, 2217, 3, 328, 164, 0, 2217, 327, 1, 0, 0, 0, 2218, 2219, 6, 164, -1, 0, 2219, 2221, 3, 332, 166, 0, 2220, 2222, 3, 330, 165, 0, 2221, 2220, 1, 0, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2226, 1, 0, 0, 0, 2223, 2224, 5, 132, 0, 0, 2224, 2226, 3, 328, 164, 3, 2225, 2218, 1, 0, 0, 0, 2225, 2223, 1, 0, 0, 0, 2226, 2235, 1, 0, 0, 0, 2227, 2228, 10, 2, 0, 0, 2228, 2229, 5, 5, 0, 0, 2229, 2234, 3, 328, 164, 3, 2230, 2231, 10, 1, 0, 0, 2231, 2232, 5, 138, 0, 0, 2232, 2234, 3, 328, 164, 2, 2233, 2227, 1, 0, 0, 0, 2233, 2230, 1, 0, 0, 0, 2234, 2237, 1, 0, 0, 0, 2235, 2233, 1, 0, 0, 0, 2235, 2236, 1, 0, 0, 0, 2236, 329, 1, 0, 0, 0, 2237, 2235, 1, 0, 0, 0, 2238, 2239, 3, 340, 170, 0, 2239, 2240, 3, 332, 166, 0, 2240, 2297, 1, 0, 0, 0, 2241, 2242, 3, 340, 170, 0, 2242, 2243, 3, 342, 171, 0, 2243, 2244, 3, 318, 159, 0, 2244, 2297, 1, 0, 0, 0, 2245, 2247, 5, 132, 0, 0, 2246, 2245, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2248, 1, 0, 0, 0, 2248, 2249, 5, 15, 0, 0, 2249, 2250, 3, 332, 166, 0, 2250, 2251, 5, 5, 0, 0, 2251, 2252, 3, 332, 166, 0, 2252, 2297, 1, 0, 0, 0, 2253, 2255, 5, 132, 0, 0, 2254, 2253, 1, 0, 0, 0, 2254, 2255, 1, 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 2257, 5, 94, 0, 0, 2257, 2258, 5, 265, 0, 0, 2258, 2263, 3, 326, 163, 0, 2259, 2260, 5, 263, 0, 0, 2260, 2262, 3, 326, 163, 0, 2261, 2259, 1, 0, 0, 0, 2262, 2265, 1, 0, 0, 0, 2263, 2261, 1, 0, 0, 0, 2263, 2264, 1, 0, 0, 0, 2264, 2266, 1, 0, 0, 0, 2265, 2263, 1, 0, 0, 0, 2266, 2267, 5, 266, 0, 0, 2267, 2297, 1, 0, 0, 0, 2268, 2270, 5, 132, 0, 0, 2269, 2268, 1, 0, 0, 0, 2269, 2270, 1, 0, 0, 0, 2270, 2271, 1, 0, 0, 0, 2271, 2272, 5, 94, 0, 0, 2272, 2297, 3, 318, 159, 0, 2273, 2275, 5, 132, 0, 0, 2274, 2273, 1, 0, 0, 0, 2274, 2275, 1, 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2277, 7, 18, 0, 0, 2277, 2280, 3, 332, 166, 0, 2278, 2279, 5, 62, 0, 0, 2279, 2281, 3, 332, 166, 0, 2280, 2278, 1, 0, 0, 0, 2280, 2281, 1, 0, 0, 0, 2281, 2297, 1, 0, 0, 0, 2282, 2283, 7, 19, 0, 0, 2283, 2297, 3, 332, 166, 0, 2284, 2286, 5, 108, 0, 0, 2285, 2287, 5, 132, 0, 0, 2286, 2285, 1, 0, 0, 0, 2286, 2287, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2297, 7, 20, 0, 0, 2289, 2291, 5, 108, 0, 0, 2290, 2292, 5, 132, 0, 0, 2291, 2290, 1, 0, 0, 0, 2291, 2292, 1, 0, 0, 0, 2292, 2293, 1, 0, 0, 0, 2293, 2294, 5, 57, 0, 0, 2294, 2295, 5, 82, 0, 0, 2295, 2297, 3, 332, 166, 0, 2296, 2238, 1, 0, 0, 0, 2296, 2241, 1, 0, 0, 0, 2296, 2246, 1, 0, 0, 0, 2296, 2254, 1, 0, 0, 0, 2296, 2269, 1, 0, 0, 0, 2296, 2274, 1, 0, 0, 0, 2296, 2282, 1, 0, 0, 0, 2296, 2284, 1, 0, 0, 0, 2296, 2289, 1, 0, 0, 0, 2297, 331, 1, 0, 0, 0, 2298, 2299, 6, 166, -1, 0, 2299, 2303, 3, 336, 168, 0, 2300, 2301, 7, 21, 0, 0, 2301, 2303, 3, 332, 166, 4, 2302, 2298, 1, 0, 0, 0, 2302, 2300, 1, 0, 0, 0, 2303, 2315, 1, 0, 0, 0, 2304, 2305, 10, 3, 0, 0, 2305, 2306, 7, 22, 0, 0, 2306, 2314, 3, 332, 166, 4, 2307, 2308, 10, 2, 0, 0, 2308, 2309, 7, 21, 0, 0, 2309, 2314, 3, 332, 166, 3, 2310, 2311, 10, 1, 0, 0, 2311, 2312, 5, 260, 0, 0, 2312, 2314, 3, 332, 166, 2, 2313, 2304, 1, 0, 0, 0, 2313, 2307, 1, 0, 0, 0, 2313, 2310, 1, 0, 0, 0, 2314, 2317, 1, 0, 0, 0, 2315, 2313, 1, 0, 0, 0, 2315, 2316, 1, 0, 0, 0, 2316, 333, 1, 0, 0, 0, 2317, 2315, 1, 0, 0, 0, 2318, 2319, 3, 190, 95, 0, 2319, 2331, 5, 265, 0, 0, 2320, 2322, 3, 290, 145, 0, 2321, 2320, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 2323, 1, 0, 0, 0, 2323, 2328, 3, 326, 163, 0, 2324, 2325, 5, 263, 0, 0, 2325, 2327, 3, 326, 163, 0, 2326, 2324, 1, 0, 0, 0, 2327, 2330, 1, 0, 0, 0, 2328, 2326, 1, 0, 0, 0, 2328, 2329, 1, 0, 0, 0, 2329, 2332, 1, 0, 0, 0, 2330, 2328, 1, 0, 0, 0, 2331, 2321, 1, 0, 0, 0, 2331, 2332, 1, 0, 0, 0, 2332, 2343, 1, 0, 0, 0, 2333, 2334, 5, 139, 0, 0, 2334, 2335, 5, 26, 0, 0, 2335, 2340, 3, 272, 136, 0, 2336, 2337, 5, 263, 0, 0, 2337, 2339, 3, 272, 136, 0, 2338, 2336, 1, 0, 0, 0, 2339, 2342, 1, 0, 0, 0, 2340, 2338, 1, 0, 0, 0, 2340, 2341, 1, 0, 0, 0, 2341, 2344, 1, 0, 0, 0, 2342, 2340, 1, 0, 0, 0, 2343, 2333, 1, 0, 0, 0, 2343, 2344, 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2347, 5, 266, 0, 0, 2346, 2348, 3, 358, 179, 0, 2347, 2346, 1, 0, 0, 0, 2347, 2348, 1, 0, 0, 0, 2348, 2350, 1, 0, 0, 0, 2349, 2351, 3, 362, 181, 0, 2350, 2349, 1, 0, 0, 0, 2350, 2351, 1, 0, 0, 0, 2351, 335, 1, 0, 0, 0, 2352, 2353, 6, 168, -1, 0, 2353, 2566, 5, 133, 0, 0, 2354, 2566, 3, 344, 172, 0, 2355, 2356, 3, 382, 191, 0, 2356, 2357, 3, 338, 169, 0, 2357, 2566, 1, 0, 0, 0, 2358, 2359, 5, 286, 0, 0, 2359, 2566, 3, 338, 169, 0, 2360, 2566, 3, 384, 192, 0, 2361, 2566, 7, 23, 0, 0, 2362, 2566, 3, 338, 169, 0, 2363, 2566, 5, 276, 0, 0, 2364, 2566, 5, 272, 0, 0, 2365, 2366, 5, 148, 0, 0, 2366, 2367, 5, 265, 0, 0, 2367, 2368, 3, 332, 166, 0, 2368, 2369, 5, 94, 0, 0, 2369, 2370, 3, 332, 166, 0, 2370, 2371, 5, 266, 0, 0, 2371, 2566, 1, 0, 0, 0, 2372, 2373, 5, 265, 0, 0, 2373, 2376, 3, 326, 163, 0, 2374, 2375, 5, 9, 0, 0, 2375, 2377, 3, 348, 174, 0, 2376, 2374, 1, 0, 0, 0, 2376, 2377, 1, 0, 0, 0, 2377, 2386, 1, 0, 0, 0, 2378, 2379, 5, 263, 0, 0, 2379, 2382, 3, 326, 163, 0, 2380, 2381, 5, 9, 0, 0, 2381, 2383, 3, 348, 174, 0, 2382, 2380, 1, 0, 0, 0, 2382, 2383, 1, 0, 0, 0, 2383, 2385, 1, 0, 0, 0, 2384, 2378, 1, 0, 0, 0, 2385, 2388, 1, 0, 0, 0, 2386, 2387, 1, 0, 0, 0, 2386, 2384, 1, 0, 0, 0, 2387, 2389, 1, 0, 0, 0, 2388, 2386, 1, 0, 0, 0, 2389, 2390, 5, 266, 0, 0, 2390, 2566, 1, 0, 0, 0, 2391, 2392, 5, 168, 0, 0, 2392, 2393, 5, 265, 0, 0, 2393, 2398, 3, 326, 163, 0, 2394, 2395, 5, 263, 0, 0, 2395, 2397, 3, 326, 163, 0, 2396, 2394, 1, 0, 0, 0, 2397, 2400, 1, 0, 0, 0, 2398, 2396, 1, 0, 0, 0, 2398, 2399, 1, 0, 0, 0, 2399, 2401, 1, 0, 0, 0, 2400, 2398, 1, 0, 0, 0, 2401, 2402, 5, 266, 0, 0, 2402, 2566, 1, 0, 0, 0, 2403, 2404, 3, 190, 95, 0, 2404, 2405, 5, 265, 0, 0, 2405, 2406, 5, 257, 0, 0, 2406, 2408, 5, 266, 0, 0, 2407, 2409, 3, 358, 179, 0, 2408, 2407, 1, 0, 0, 0, 2408, 2409, 1, 0, 0, 0, 2409, 2411, 1, 0, 0, 0, 2410, 2412, 3, 362, 181, 0, 2411, 2410, 1, 0, 0, 0, 2411, 2412, 1, 0, 0, 0, 2412, 2566, 1, 0, 0, 0, 2413, 2566, 3, 334, 167, 0, 2414, 2415, 3, 382, 191, 0, 2415, 2416, 5, 273, 0, 0, 2416, 2417, 3, 326, 163, 0, 2417, 2566, 1, 0, 0, 0, 2418, 2427, 5, 265, 0, 0, 2419, 2424, 3, 382, 191, 0, 2420, 2421, 5, 263, 0, 0, 2421, 2423, 3, 382, 191, 0, 2422, 2420, 1, 0, 0, 0, 2423, 2426, 1, 0, 0, 0, 2424, 2422, 1, 0, 0, 0, 2424, 2425, 1, 0, 0, 0, 2425, 2428, 1, 0, 0, 0, 2426, 2424, 1, 0, 0, 0, 2427, 2419, 1, 0, 0, 0, 2427, 2428, 1, 0, 0, 0, 2428, 2429, 1, 0, 0, 0, 2429, 2430, 5, 266, 0, 0, 2430, 2431, 5, 273, 0, 0, 2431, 2566, 3, 326, 163, 0, 2432, 2433, 5, 265, 0, 0, 2433, 2434, 3, 212, 106, 0, 2434, 2435, 5, 266, 0, 0, 2435, 2566, 1, 0, 0, 0, 2436, 2437, 5, 66, 0, 0, 2437, 2438, 5, 265, 0, 0, 2438, 2439, 3, 212, 106, 0, 2439, 2440, 5, 266, 0, 0, 2440, 2566, 1, 0, 0, 0, 2441, 2442, 5, 28, 0, 0, 2442, 2444, 3, 332, 166, 0, 2443, 2445, 3, 356, 178, 0, 2444, 2443, 1, 0, 0, 0, 2445, 2446, 1, 0, 0, 0, 2446, 2444, 1, 0, 0, 0, 2446, 2447, 1, 0, 0, 0, 2447, 2450, 1, 0, 0, 0, 2448, 2449, 5, 59, 0, 0, 2449, 2451, 3, 326, 163, 0, 2450, 2448, 1, 0, 0, 0, 2450, 2451, 1, 0, 0, 0, 2451, 2452, 1, 0, 0, 0, 2452, 2453, 5, 61, 0, 0, 2453, 2566, 1, 0, 0, 0, 2454, 2456, 5, 28, 0, 0, 2455, 2457, 3, 356, 178, 0, 2456, 2455, 1, 0, 0, 0, 2457, 2458, 1, 0, 0, 0, 2458, 2456, 1, 0, 0, 0, 2458, 2459, 1, 0, 0, 0, 2459, 2462, 1, 0, 0, 0, 2460, 2461, 5, 59, 0, 0, 2461, 2463, 3, 326, 163, 0, 2462, 2460, 1, 0, 0, 0, 2462, 2463, 1, 0, 0, 0, 2463, 2464, 1, 0, 0, 0, 2464, 2465, 5, 61, 0, 0, 2465, 2566, 1, 0, 0, 0, 2466, 2467, 5, 29, 0, 0, 2467, 2468, 5, 265, 0, 0, 2468, 2469, 3, 326, 163, 0, 2469, 2470, 5, 9, 0, 0, 2470, 2471, 3, 348, 174, 0, 2471, 2472, 5, 266, 0, 0, 2472, 2566, 1, 0, 0, 0, 2473, 2474, 5, 195, 0, 0, 2474, 2475, 5, 265, 0, 0, 2475, 2476, 3, 326, 163, 0, 2476, 2477, 5, 9, 0, 0, 2477, 2478, 3, 348, 174, 0, 2478, 2479, 5, 266, 0, 0, 2479, 2566, 1, 0, 0, 0, 2480, 2481, 5, 8, 0, 0, 2481, 2490, 5, 267, 0, 0, 2482, 2487, 3, 326, 163, 0, 2483, 2484, 5, 263, 0, 0, 2484, 2486, 3, 326, 163, 0, 2485, 2483, 1, 0, 0, 0, 2486, 2489, 1, 0, 0, 0, 2487, 2485, 1, 0, 0, 0, 2487, 2488, 1, 0, 0, 0, 2488, 2491, 1, 0, 0, 0, 2489, 2487, 1, 0, 0, 0, 2490, 2482, 1, 0, 0, 0, 2490, 2491, 1, 0, 0, 0, 2491, 2492, 1, 0, 0, 0, 2492, 2566, 5, 268, 0, 0, 2493, 2566, 3, 196, 98, 0, 2494, 2566, 5, 40, 0, 0, 2495, 2499, 5, 42, 0, 0, 2496, 2497, 5, 265, 0, 0, 2497, 2498, 5, 277, 0, 0, 2498, 2500, 5, 266, 0, 0, 2499, 2496, 1, 0, 0, 0, 2499, 2500, 1, 0, 0, 0, 2500, 2566, 1, 0, 0, 0, 2501, 2505, 5, 43, 0, 0, 2502, 2503, 5, 265, 0, 0, 2503, 2504, 5, 277, 0, 0, 2504, 2506, 5, 266, 0, 0, 2505, 2502, 1, 0, 0, 0, 2505, 2506, 1, 0, 0, 0, 2506, 2566, 1, 0, 0, 0, 2507, 2511, 5, 119, 0, 0, 2508, 2509, 5, 265, 0, 0, 2509, 2510, 5, 277, 0, 0, 2510, 2512, 5, 266, 0, 0, 2511, 2508, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2566, 1, 0, 0, 0, 2513, 2517, 5, 120, 0, 0, 2514, 2515, 5, 265, 0, 0, 2515, 2516, 5, 277, 0, 0, 2516, 2518, 5, 266, 0, 0, 2517, 2514, 1, 0, 0, 0, 2517, 2518, 1, 0, 0, 0, 2518, 2566, 1, 0, 0, 0, 2519, 2566, 5, 44, 0, 0, 2520, 2566, 5, 41, 0, 0, 2521, 2522, 5, 184, 0, 0, 2522, 2523, 5, 265, 0, 0, 2523, 2524, 3, 332, 166, 0, 2524, 2525, 5, 82, 0, 0, 2525, 2528, 3, 332, 166, 0, 2526, 2527, 5, 78, 0, 0, 2527, 2529, 3, 332, 166, 0, 2528, 2526, 1, 0, 0, 0, 2528, 2529, 1, 0, 0, 0, 2529, 2530, 1, 0, 0, 0, 2530, 2531, 5, 266, 0, 0, 2531, 2566, 1, 0, 0, 0, 2532, 2533, 5, 131, 0, 0, 2533, 2534, 5, 265, 0, 0, 2534, 2537, 3, 332, 166, 0, 2535, 2536, 5, 263, 0, 0, 2536, 2538, 7, 24, 0, 0, 2537, 2535, 1, 0, 0, 0, 2537, 2538, 1, 0, 0, 0, 2538, 2539, 1, 0, 0, 0, 2539, 2540, 5, 266, 0, 0, 2540, 2566, 1, 0, 0, 0, 2541, 2542, 5, 68, 0, 0, 2542, 2543, 5, 265, 0, 0, 2543, 2544, 3, 382, 191, 0, 2544, 2545, 5, 82, 0, 0, 2545, 2546, 3, 332, 166, 0, 2546, 2547, 5, 266, 0, 0, 2547, 2566, 1, 0, 0, 0, 2548, 2549, 5, 265, 0, 0, 2549, 2550, 3, 326, 163, 0, 2550, 2551, 5, 266, 0, 0, 2551, 2566, 1, 0, 0, 0, 2552, 2553, 5, 88, 0, 0, 2553, 2562, 5, 265, 0, 0, 2554, 2559, 3, 376, 188, 0, 2555, 2556, 5, 263, 0, 0, 2556, 2558, 3, 376, 188, 0, 2557, 2555, 1, 0, 0, 0, 2558, 2561, 1, 0, 0, 0, 2559, 2557, 1, 0, 0, 0, 2559, 2560, 1, 0, 0, 0, 2560, 2563, 1, 0, 0, 0, 2561, 2559, 1, 0, 0, 0, 2562, 2554, 1, 0, 0, 0, 2562, 2563, 1, 0, 0, 0, 2563, 2564, 1, 0, 0, 0, 2564, 2566, 5, 266, 0, 0, 2565, 2352, 1, 0, 0, 0, 2565, 2354, 1, 0, 0, 0, 2565, 2355, 1, 0, 0, 0, 2565, 2358, 1, 0, 0, 0, 2565, 2360, 1, 0, 0, 0, 2565, 2361, 1, 0, 0, 0, 2565, 2362, 1, 0, 0, 0, 2565, 2363, 1, 0, 0, 0, 2565, 2364, 1, 0, 0, 0, 2565, 2365, 1, 0, 0, 0, 2565, 2372, 1, 0, 0, 0, 2565, 2391, 1, 0, 0, 0, 2565, 2403, 1, 0, 0, 0, 2565, 2413, 1, 0, 0, 0, 2565, 2414, 1, 0, 0, 0, 2565, 2418, 1, 0, 0, 0, 2565, 2432, 1, 0, 0, 0, 2565, 2436, 1, 0, 0, 0, 2565, 2441, 1, 0, 0, 0, 2565, 2454, 1, 0, 0, 0, 2565, 2466, 1, 0, 0, 0, 2565, 2473, 1, 0, 0, 0, 2565, 2480, 1, 0, 0, 0, 2565, 2493, 1, 0, 0, 0, 2565, 2494, 1, 0, 0, 0, 2565, 2495, 1, 0, 0, 0, 2565, 2501, 1, 0, 0, 0, 2565, 2507, 1, 0, 0, 0, 2565, 2513, 1, 0, 0, 0, 2565, 2519, 1, 0, 0, 0, 2565, 2520, 1, 0, 0, 0, 2565, 2521, 1, 0, 0, 0, 2565, 2532, 1, 0, 0, 0, 2565, 2541, 1, 0, 0, 0, 2565, 2548, 1, 0, 0, 0, 2565, 2552, 1, 0, 0, 0, 2566, 2577, 1, 0, 0, 0, 2567, 2568, 10, 15, 0, 0, 2568, 2569, 5, 267, 0, 0, 2569, 2570, 3, 332, 166, 0, 2570, 2571, 5, 268, 0, 0, 2571, 2576, 1, 0, 0, 0, 2572, 2573, 10, 13, 0, 0, 2573, 2574, 5, 261, 0, 0, 2574, 2576, 3, 382, 191, 0, 2575, 2567, 1, 0, 0, 0, 2575, 2572, 1, 0, 0, 0, 2576, 2579, 1, 0, 0, 0, 2577, 2575, 1, 0, 0, 0, 2577, 2578, 1, 0, 0, 0, 2578, 337, 1, 0, 0, 0, 2579, 2577, 1, 0, 0, 0, 2580, 2587, 5, 274, 0, 0, 2581, 2584, 5, 275, 0, 0, 2582, 2583, 5, 198, 0, 0, 2583, 2585, 5, 274, 0, 0, 2584, 2582, 1, 0, 0, 0, 2584, 2585, 1, 0, 0, 0, 2585, 2587, 1, 0, 0, 0, 2586, 2580, 1, 0, 0, 0, 2586, 2581, 1, 0, 0, 0, 2587, 339, 1, 0, 0, 0, 2588, 2589, 7, 25, 0, 0, 2589, 341, 1, 0, 0, 0, 2590, 2591, 7, 26, 0, 0, 2591, 343, 1, 0, 0, 0, 2592, 2593, 5, 277, 0, 0, 2593, 2607, 3, 346, 173, 0, 2594, 2595, 5, 265, 0, 0, 2595, 2596, 5, 277, 0, 0, 2596, 2597, 5, 266, 0, 0, 2597, 2607, 3, 346, 173, 0, 2598, 2599, 5, 101, 0, 0, 2599, 2600, 5, 277, 0, 0, 2600, 2607, 3, 346, 173, 0, 2601, 2602, 5, 101, 0, 0, 2602, 2603, 5, 265, 0, 0, 2603, 2604, 5, 277, 0, 0, 2604, 2605, 5, 266, 0, 0, 2605, 2607, 3, 346, 173, 0, 2606, 2592, 1, 0, 0, 0, 2606, 2594, 1, 0, 0, 0, 2606, 2598, 1, 0, 0, 0, 2606, 2601, 1, 0, 0, 0, 2607, 345, 1, 0, 0, 0, 2608, 2609, 7, 27, 0, 0, 2609, 347, 1, 0, 0, 0, 2610, 2611, 6, 174, -1, 0, 2611, 2612, 5, 8, 0, 0, 2612, 2613, 5, 251, 0, 0, 2613, 2614, 3, 348, 174, 0, 2614, 2615, 5, 253, 0, 0, 2615, 2656, 1, 0, 0, 0, 2616, 2617, 5, 235, 0, 0, 2617, 2618, 5, 251, 0, 0, 2618, 2619, 3, 348, 174, 0, 2619, 2620, 5, 263, 0, 0, 2620, 2621, 3, 348, 174, 0, 2621, 2622, 5, 253, 0, 0, 2622, 2656, 1, 0, 0, 0, 2623, 2624, 5, 240, 0, 0, 2624, 2625, 5, 251, 0, 0, 2625, 2626, 3, 382, 191, 0, 2626, 2633, 3, 348, 174, 0, 2627, 2628, 5, 263, 0, 0, 2628, 2629, 3, 382, 191, 0, 2629, 2630, 3, 348, 174, 0, 2630, 2632, 1, 0, 0, 0, 2631, 2627, 1, 0, 0, 0, 2632, 2635, 1, 0, 0, 0, 2633, 2631, 1, 0, 0, 0, 2633, 2634, 1, 0, 0, 0, 2634, 2636, 1, 0, 0, 0, 2635, 2633, 1, 0, 0, 0, 2636, 2637, 5, 253, 0, 0, 2637, 2656, 1, 0, 0, 0, 2638, 2641, 3, 354, 177, 0, 2639, 2641, 3, 350, 175, 0, 2640, 2638, 1, 0, 0, 0, 2640, 2639, 1, 0, 0, 0, 2641, 2653, 1, 0, 0, 0, 2642, 2643, 5, 265, 0, 0, 2643, 2648, 3, 352, 176, 0, 2644, 2645, 5, 263, 0, 0, 2645, 2647, 3, 352, 176, 0, 2646, 2644, 1, 0, 0, 0, 2647, 2650, 1, 0, 0, 0, 2648, 2646, 1, 0, 0, 0, 2648, 2649, 1, 0, 0, 0, 2649, 2651, 1, 0, 0, 0, 2650, 2648, 1, 0, 0, 0, 2651, 2652, 5, 266, 0, 0, 2652, 2654, 1, 0, 0, 0, 2653, 2642, 1, 0, 0, 0, 2653, 2654, 1, 0, 0, 0, 2654, 2656, 1, 0, 0, 0, 2655, 2610, 1, 0, 0, 0, 2655, 2616, 1, 0, 0, 0, 2655, 2623, 1, 0, 0, 0, 2655, 2640, 1, 0, 0, 0, 2656, 2661, 1, 0, 0, 0, 2657, 2658, 10, 5, 0, 0, 2658, 2660, 5, 8, 0, 0, 2659, 2657, 1, 0, 0, 0, 2660, 2663, 1, 0, 0, 0, 2661, 2659, 1, 0, 0, 0, 2661, 2662, 1, 0, 0, 0, 2662, 349, 1, 0, 0, 0, 2663, 2661, 1, 0, 0, 0, 2664, 2665, 7, 28, 0, 0, 2665, 351, 1, 0, 0, 0, 2666, 2669, 5, 277, 0, 0, 2667, 2669, 3, 348, 174, 0, 2668, 2666, 1, 0, 0, 0, 2668, 2667, 1, 0, 0, 0, 2669, 353, 1, 0, 0, 0, 2670, 2675, 5, 284, 0, 0, 2671, 2675, 5, 285, 0, 0, 2672, 2675, 5, 286, 0, 0, 2673, 2675, 3, 382, 191, 0, 2674, 2670, 1, 0, 0, 0, 2674, 2671, 1, 0, 0, 0, 2674, 2672, 1, 0, 0, 0, 2674, 2673, 1, 0, 0, 0, 2675, 355, 1, 0, 0, 0, 2676, 2677, 5, 214, 0, 0, 2677, 2678, 3, 326, 163, 0, 2678, 2679, 5, 192, 0, 0, 2679, 2680, 3, 326, 163, 0, 2680, 357, 1, 0, 0, 0, 2681, 2682, 5, 74, 0, 0, 2682, 2683, 5, 265, 0, 0, 2683, 2684, 3, 278, 139, 0, 2684, 2685, 5, 266, 0, 0, 2685, 359, 1, 0, 0, 0, 2686, 2691, 3, 326, 163, 0, 2687, 2688, 5, 263, 0, 0, 2688, 2690, 3, 326, 163, 0, 2689, 2687, 1, 0, 0, 0, 2690, 2693, 1, 0, 0, 0, 2691, 2689, 1, 0, 0, 0, 2691, 2692, 1, 0, 0, 0, 2692, 361, 1, 0, 0, 0, 2693, 2691, 1, 0, 0, 0, 2694, 2695, 5, 143, 0, 0, 2695, 2699, 5, 265, 0, 0, 2696, 2697, 5, 145, 0, 0, 2697, 2698, 5, 26, 0, 0, 2698, 2700, 3, 360, 180, 0, 2699, 2696, 1, 0, 0, 0, 2699, 2700, 1, 0, 0, 0, 2700, 2711, 1, 0, 0, 0, 2701, 2702, 5, 139, 0, 0, 2702, 2703, 5, 26, 0, 0, 2703, 2708, 3, 272, 136, 0, 2704, 2705, 5, 263, 0, 0, 2705, 2707, 3, 272, 136, 0, 2706, 2704, 1, 0, 0, 0, 2707, 2710, 1, 0, 0, 0, 2708, 2706, 1, 0, 0, 0, 2708, 2709, 1, 0, 0, 0, 2709, 2712, 1, 0, 0, 0, 2710, 2708, 1, 0, 0, 0, 2711, 2701, 1, 0, 0, 0, 2711, 2712, 1, 0, 0, 0, 2712, 2714, 1, 0, 0, 0, 2713, 2715, 3, 364, 182, 0, 2714, 2713, 1, 0, 0, 0, 2714, 2715, 1, 0, 0, 0, 2715, 2716, 1, 0, 0, 0, 2716, 2717, 5, 266, 0, 0, 2717, 363, 1, 0, 0, 0, 2718, 2719, 7, 29, 0, 0, 2719, 2727, 3, 366, 183, 0, 2720, 2721, 7, 29, 0, 0, 2721, 2722, 5, 15, 0, 0, 2722, 2723, 3, 366, 183, 0, 2723, 2724, 5, 5, 0, 0, 2724, 2725, 3, 366, 183, 0, 2725, 2727, 1, 0, 0, 0, 2726, 2718, 1, 0, 0, 0, 2726, 2720, 1, 0, 0, 0, 2727, 365, 1, 0, 0, 0, 2728, 2729, 5, 199, 0, 0, 2729, 2738, 5, 149, 0, 0, 2730, 2731, 5, 199, 0, 0, 2731, 2738, 5, 77, 0, 0, 2732, 2733, 5, 39, 0, 0, 2733, 2738, 5, 168, 0, 0, 2734, 2735, 3, 326, 163, 0, 2735, 2736, 7, 30, 0, 0, 2736, 2738, 1, 0, 0, 0, 2737, 2728, 1, 0, 0, 0, 2737, 2730, 1, 0, 0, 0, 2737, 2732, 1, 0, 0, 0, 2737, 2734, 1, 0, 0, 0, 2738, 367, 1, 0, 0, 0, 2739, 2740, 3, 382, 191, 0, 2740, 2741, 5, 261, 0, 0, 2741, 2742, 3, 382, 191, 0, 2742, 2745, 1, 0, 0, 0, 2743, 2745, 3, 382, 191, 0, 2744, 2739, 1, 0, 0, 0, 2744, 2743, 1, 0, 0, 0, 2745, 369, 1, 0, 0, 0, 2746, 2751, 3, 368, 184, 0, 2747, 2748, 5, 263, 0, 0, 2748, 2750, 3, 368, 184, 0, 2749, 2747, 1, 0, 0, 0, 2750, 2753, 1, 0, 0, 0, 2751, 2749, 1, 0, 0, 0, 2751, 2752, 1, 0, 0, 0, 2752, 371, 1, 0, 0, 0, 2753, 2751, 1, 0, 0, 0, 2754, 2768, 5, 2, 0, 0, 2755, 2768, 5, 4, 0, 0, 2756, 2768, 5, 58, 0, 0, 2757, 2768, 5, 37, 0, 0, 2758, 2768, 5, 99, 0, 0, 2759, 2768, 5, 162, 0, 0, 2760, 2765, 5, 174, 0, 0, 2761, 2762, 5, 265, 0, 0, 2762, 2763, 3, 382, 191, 0, 2763, 2764, 5, 266, 0, 0, 2764, 2766, 1, 0, 0, 0, 2765, 2761, 1, 0, 0, 0, 2765, 2766, 1, 0, 0, 0, 2766, 2768, 1, 0, 0, 0, 2767, 2754, 1, 0, 0, 0, 2767, 2755, 1, 0, 0, 0, 2767, 2756, 1, 0, 0, 0, 2767, 2757, 1, 0, 0, 0, 2767, 2758, 1, 0, 0, 0, 2767, 2759, 1, 0, 0, 0, 2767, 2760, 1, 0, 0, 0, 2768, 373, 1, 0, 0, 0, 2769, 2770, 7, 31, 0, 0, 2770, 375, 1, 0, 0, 0, 2771, 2776, 3, 382, 191, 0, 2772, 2773, 5, 261, 0, 0, 2773, 2775, 3, 382, 191, 0, 2774, 2772, 1, 0, 0, 0, 2775, 2778, 1, 0, 0, 0, 2776, 2774, 1, 0, 0, 0, 2776, 2777, 1, 0, 0, 0, 2777, 377, 1, 0, 0, 0, 2778, 2776, 1, 0, 0, 0, 2779, 2785, 4, 189, 14, 0, 2780, 2781, 3, 382, 191, 0, 2781, 2782, 5, 261, 0, 0, 2782, 2783, 3, 192, 96, 0, 2783, 2786, 1, 0, 0, 0, 2784, 2786, 3, 192, 96, 0, 2785, 2780, 1, 0, 0, 0, 2785, 2784, 1, 0, 0, 0, 2786, 2796, 1, 0, 0, 0, 2787, 2792, 3, 382, 191, 0, 2788, 2789, 5, 261, 0, 0, 2789, 2791, 3, 382, 191, 0, 2790, 2788, 1, 0, 0, 0, 2791, 2794, 1, 0, 0, 0, 2792, 2790, 1, 0, 0, 0, 2792, 2793, 1, 0, 0, 0, 2793, 2796, 1, 0, 0, 0, 2794, 2792, 1, 0, 0, 0, 2795, 2779, 1, 0, 0, 0, 2795, 2787, 1, 0, 0, 0, 2796, 379, 1, 0, 0, 0, 2797, 2798, 5, 166, 0, 0, 2798, 2804, 3, 382, 191, 0, 2799, 2800, 5, 204, 0, 0, 2800, 2804, 3, 382, 191, 0, 2801, 2802, 5, 87, 0, 0, 2802, 2804, 3, 382, 191, 0, 2803, 2797, 1, 0, 0, 0, 2803, 2799, 1, 0, 0, 0, 2803, 2801, 1, 0, 0, 0, 2804, 381, 1, 0, 0, 0, 2805, 2811, 5, 280, 0, 0, 2806, 2811, 5, 274, 0, 0, 2807, 2811, 3, 388, 194, 0, 2808, 2811, 5, 283, 0, 0, 2809, 2811, 5, 281, 0, 0, 2810, 2805, 1, 0, 0, 0, 2810, 2806, 1, 0, 0, 0, 2810, 2807, 1, 0, 0, 0, 2810, 2808, 1, 0, 0, 0, 2810, 2809, 1, 0, 0, 0, 2811, 383, 1, 0, 0, 0, 2812, 2814, 5, 256, 0, 0, 2813, 2812, 1, 0, 0, 0, 2813, 2814, 1, 0, 0, 0, 2814, 2815, 1, 0, 0, 0, 2815, 2825, 5, 278, 0, 0, 2816, 2818, 5, 256, 0, 0, 2817, 2816, 1, 0, 0, 0, 2817, 2818, 1, 0, 0, 0, 2818, 2819, 1, 0, 0, 0, 2819, 2825, 5, 279, 0, 0, 2820, 2822, 5, 256, 0, 0, 2821, 2820, 1, 0, 0, 0, 2821, 2822, 1, 0, 0, 0, 2822, 2823, 1, 0, 0, 0, 2823, 2825, 5, 277, 0, 0, 2824, 2813, 1, 0, 0, 0, 2824, 2817, 1, 0, 0, 0, 2824, 2821, 1, 0, 0, 0, 2825, 385, 1, 0, 0, 0, 2826, 2827, 7, 32, 0, 0, 2827, 387, 1, 0, 0, 0, 2828, 2829, 7, 33, 0, 0, 2829, 389, 1, 0, 0, 0, 362, 393, 400, 424, 437, 441, 445, 454, 459, 463, 469, 471, 476, 480, 484, 491, 496, 502, 506, 515, 522, 526, 531, 533, 538, 542, 549, 553, 558, 562, 565, 569, 577, 581, 585, 593, 597, 606, 609, 612, 618, 625, 636, 641, 646, 651, 656, 665, 668, 671, 675, 701, 726, 735, 745, 748, 762, 780, 782, 791, 802, 811, 818, 822, 829, 835, 838, 843, 850, 864, 877, 882, 887, 893, 929, 932, 938, 941, 947, 953, 965, 967, 978, 986, 991, 995, 1000, 1007, 1011, 1015, 1021, 1025, 1029, 1038, 1041, 1044, 1052, 1066, 1073, 1086, 1092, 1097, 1100, 1103, 1108, 1112, 1121, 1126, 1132, 1136, 1140, 1145, 1148, 1156, 1159, 1162, 1174, 1177, 1180, 1185, 1189, 1205, 1210, 1217, 1220, 1226, 1229, 1236, 1239, 1243, 1248, 1251, 1258, 1261, 1285, 1299, 1303, 1307, 1327, 1329, 1331, 1340, 1342, 1351, 1353, 1362, 1364, 1369, 1378, 1387, 1396, 1407, 1413, 1418, 1421, 1434, 1444, 1448, 1453, 1464, 1469, 1502, 1510, 1515, 1522, 1529, 1533, 1538, 1541, 1546, 1551, 1556, 1560, 1569, 1572, 1576, 1583, 1592, 1596, 1600, 1607, 1610, 1620, 1627, 1632, 1637, 1642, 1648, 1651, 1660, 1663, 1666, 1672, 1677, 1687, 1690, 1693, 1697, 1707, 1710, 1716, 1722, 1725, 1728, 1732, 1742, 1751, 1756, 1759, 1763, 1770, 1780, 1792, 1798, 1800, 1809, 1812, 1819, 1829, 1835, 1843, 1854, 1864, 1875, 1877, 1883, 1888, 1898, 1901, 1907, 1909, 1917, 1923, 1926, 1928, 1940, 1947, 1951, 1955, 1959, 1962, 1971, 1974, 1977, 1982, 1985, 1992, 1998, 2003, 2006, 2013, 2024, 2027, 2031, 2035, 2044, 2048, 2053, 2056, 2067, 2083, 2087, 2091, 2095, 2099, 2103, 2107, 2111, 2121, 2126, 2135, 2140, 2153, 2155, 2159, 2163, 2165, 2173, 2182, 2185, 2200, 2206, 2214, 2221, 2225, 2233, 2235, 2246, 2254, 2263, 2269, 2274, 2280, 2286, 2291, 2296, 2302, 2313, 2315, 2321, 2328, 2331, 2340, 2343, 2347, 2350, 2376, 2382, 2386, 2398, 2408, 2411, 2424, 2427, 2446, 2450, 2458, 2462, 2487, 2490, 2499, 2505, 2511, 2517, 2528, 2537, 2559, 2562, 2565, 2575, 2577, 2584, 2586, 2606, 2633, 2640, 2648, 2653, 2655, 2661, 2668, 2674, 2691, 2699, 2708, 2711, 2714, 2726, 2737, 2744, 2751, 2765, 2767, 2776, 2785, 2792, 2795, 2803, 2810, 2813, 2817, 2821, 2824] \ No newline at end of file diff --git a/src/lib/impala/ImpalaSqlParser.ts b/src/lib/impala/ImpalaSqlParser.ts index bafe9f17..13780c91 100644 --- a/src/lib/impala/ImpalaSqlParser.ts +++ b/src/lib/impala/ImpalaSqlParser.ts @@ -425,86 +425,82 @@ export class ImpalaSqlParser extends SQLParserBase { public static readonly RULE_createColumnSpecWithKudu = 116; public static readonly RULE_kuduAttributes = 117; public static readonly RULE_kuduStorageAttr = 118; - public static readonly RULE_statsKey = 119; - public static readonly RULE_fileFormat = 120; - public static readonly RULE_kuduPartitionClause = 121; - public static readonly RULE_hashClause = 122; - public static readonly RULE_rangeClause = 123; - public static readonly RULE_kuduPartitionSpec = 124; - public static readonly RULE_cacheSpec = 125; - public static readonly RULE_rangeOperator = 126; - public static readonly RULE_partitionCol = 127; - public static readonly RULE_likeClause = 128; - public static readonly RULE_properties = 129; - public static readonly RULE_partitionedBy = 130; - public static readonly RULE_sortedBy = 131; - public static readonly RULE_rowFormat = 132; - public static readonly RULE_property = 133; - public static readonly RULE_queryNoWith = 134; - public static readonly RULE_queryTerm = 135; - public static readonly RULE_queryPrimary = 136; - public static readonly RULE_sortItem = 137; - public static readonly RULE_querySpecification = 138; - public static readonly RULE_selectList = 139; - public static readonly RULE_whereClause = 140; - public static readonly RULE_havingClause = 141; - public static readonly RULE_groupBy = 142; - public static readonly RULE_groupingElement = 143; - public static readonly RULE_groupingSet = 144; - public static readonly RULE_namedQuery = 145; - public static readonly RULE_setQuantifier = 146; - public static readonly RULE_selectItem = 147; - public static readonly RULE_columnAlias = 148; - public static readonly RULE_selectLiteralColumnName = 149; - public static readonly RULE_selectExpressionColumnName = 150; - public static readonly RULE_tableAllColumns = 151; - public static readonly RULE_relation = 152; - public static readonly RULE_joinType = 153; - public static readonly RULE_joinCriteria = 154; - public static readonly RULE_sampledRelation = 155; - public static readonly RULE_sampleType = 156; - public static readonly RULE_aliasedRelation = 157; - public static readonly RULE_columnAliases = 158; - public static readonly RULE_relationPrimary = 159; - public static readonly RULE_atomSubQueryTableSource = 160; - public static readonly RULE_subQueryRelation = 161; - public static readonly RULE_unnest = 162; - public static readonly RULE_parenthesizedRelation = 163; - public static readonly RULE_columnItem = 164; - public static readonly RULE_expression = 165; - public static readonly RULE_booleanExpression = 166; - public static readonly RULE_predicate = 167; - public static readonly RULE_valueExpression = 168; - public static readonly RULE_functionCallExpression = 169; - public static readonly RULE_primaryExpression = 170; - public static readonly RULE_stringLiteral = 171; - public static readonly RULE_comparisonOperator = 172; - public static readonly RULE_comparisonQuantifier = 173; - public static readonly RULE_booleanValue = 174; - public static readonly RULE_interval = 175; - public static readonly RULE_intervalField = 176; - public static readonly RULE_normalForm = 177; - public static readonly RULE_type = 178; - public static readonly RULE_dataType = 179; - public static readonly RULE_typeParameter = 180; - public static readonly RULE_baseType = 181; - public static readonly RULE_whenClause = 182; - public static readonly RULE_filter = 183; - public static readonly RULE_partitionByClause = 184; - public static readonly RULE_over = 185; - public static readonly RULE_windowFrame = 186; - public static readonly RULE_frameBound = 187; - public static readonly RULE_pathElement = 188; - public static readonly RULE_pathSpecification = 189; - public static readonly RULE_privilege = 190; - public static readonly RULE_objectType = 191; - public static readonly RULE_qualifiedName = 192; - public static readonly RULE_qualifiedNameAllowEmpty = 193; - public static readonly RULE_principal = 194; - public static readonly RULE_identifier = 195; - public static readonly RULE_number = 196; - public static readonly RULE_reservedKeywordsUsedAsFuncName = 197; - public static readonly RULE_nonReserved = 198; + public static readonly RULE_fileFormat = 119; + public static readonly RULE_kuduPartitionClause = 120; + public static readonly RULE_hashClause = 121; + public static readonly RULE_rangeClause = 122; + public static readonly RULE_kuduPartitionSpec = 123; + public static readonly RULE_cacheSpec = 124; + public static readonly RULE_rangeOperator = 125; + public static readonly RULE_partitionCol = 126; + public static readonly RULE_likeClause = 127; + public static readonly RULE_properties = 128; + public static readonly RULE_partitionedBy = 129; + public static readonly RULE_sortedBy = 130; + public static readonly RULE_rowFormat = 131; + public static readonly RULE_property = 132; + public static readonly RULE_queryNoWith = 133; + public static readonly RULE_queryTerm = 134; + public static readonly RULE_queryPrimary = 135; + public static readonly RULE_sortItem = 136; + public static readonly RULE_querySpecification = 137; + public static readonly RULE_selectList = 138; + public static readonly RULE_whereClause = 139; + public static readonly RULE_havingClause = 140; + public static readonly RULE_groupBy = 141; + public static readonly RULE_groupingElement = 142; + public static readonly RULE_groupingSet = 143; + public static readonly RULE_namedQuery = 144; + public static readonly RULE_setQuantifier = 145; + public static readonly RULE_selectItem = 146; + public static readonly RULE_columnAlias = 147; + public static readonly RULE_selectLiteralColumnName = 148; + public static readonly RULE_selectExpressionColumnName = 149; + public static readonly RULE_tableAllColumns = 150; + public static readonly RULE_relation = 151; + public static readonly RULE_joinType = 152; + public static readonly RULE_joinCriteria = 153; + public static readonly RULE_sampledRelation = 154; + public static readonly RULE_aliasedRelation = 155; + public static readonly RULE_columnAliases = 156; + public static readonly RULE_relationPrimary = 157; + public static readonly RULE_atomSubQueryTableSource = 158; + public static readonly RULE_subQueryRelation = 159; + public static readonly RULE_unnest = 160; + public static readonly RULE_parenthesizedRelation = 161; + public static readonly RULE_columnItem = 162; + public static readonly RULE_expression = 163; + public static readonly RULE_booleanExpression = 164; + public static readonly RULE_predicate = 165; + public static readonly RULE_valueExpression = 166; + public static readonly RULE_functionCallExpression = 167; + public static readonly RULE_primaryExpression = 168; + public static readonly RULE_stringLiteral = 169; + public static readonly RULE_comparisonOperator = 170; + public static readonly RULE_comparisonQuantifier = 171; + public static readonly RULE_interval = 172; + public static readonly RULE_intervalField = 173; + public static readonly RULE_type = 174; + public static readonly RULE_dataType = 175; + public static readonly RULE_typeParameter = 176; + public static readonly RULE_baseType = 177; + public static readonly RULE_whenClause = 178; + public static readonly RULE_filter = 179; + public static readonly RULE_partitionByClause = 180; + public static readonly RULE_over = 181; + public static readonly RULE_windowFrame = 182; + public static readonly RULE_frameBound = 183; + public static readonly RULE_pathElement = 184; + public static readonly RULE_pathSpecification = 185; + public static readonly RULE_privilege = 186; + public static readonly RULE_objectType = 187; + public static readonly RULE_qualifiedName = 188; + public static readonly RULE_qualifiedNameAllowEmpty = 189; + public static readonly RULE_principal = 190; + public static readonly RULE_identifier = 191; + public static readonly RULE_number = 192; + public static readonly RULE_reservedKeywordsUsedAsFuncName = 193; + public static readonly RULE_nonReserved = 194; public static readonly literalNames = [ null, "'ADD'", "'ALL'", "'ANALYTIC'", "'ALTER'", "'AND'", "'ANY'", @@ -645,7 +641,7 @@ export class ImpalaSqlParser extends SQLParserBase { "viewColumns", "viewColumnItem", "queryStatement", "with", "constraintSpecification", "foreignKeySpecification", "columnSpec", "columnDefinition", "kuduTableElement", "kuduColumnDefinition", "commentClause", "columnSpecWithKudu", "createColumnSpecWithKudu", - "kuduAttributes", "kuduStorageAttr", "statsKey", "fileFormat", "kuduPartitionClause", + "kuduAttributes", "kuduStorageAttr", "fileFormat", "kuduPartitionClause", "hashClause", "rangeClause", "kuduPartitionSpec", "cacheSpec", "rangeOperator", "partitionCol", "likeClause", "properties", "partitionedBy", "sortedBy", "rowFormat", "property", "queryNoWith", "queryTerm", "queryPrimary", @@ -653,17 +649,16 @@ export class ImpalaSqlParser extends SQLParserBase { "groupBy", "groupingElement", "groupingSet", "namedQuery", "setQuantifier", "selectItem", "columnAlias", "selectLiteralColumnName", "selectExpressionColumnName", "tableAllColumns", "relation", "joinType", "joinCriteria", "sampledRelation", - "sampleType", "aliasedRelation", "columnAliases", "relationPrimary", - "atomSubQueryTableSource", "subQueryRelation", "unnest", "parenthesizedRelation", - "columnItem", "expression", "booleanExpression", "predicate", "valueExpression", + "aliasedRelation", "columnAliases", "relationPrimary", "atomSubQueryTableSource", + "subQueryRelation", "unnest", "parenthesizedRelation", "columnItem", + "expression", "booleanExpression", "predicate", "valueExpression", "functionCallExpression", "primaryExpression", "stringLiteral", - "comparisonOperator", "comparisonQuantifier", "booleanValue", "interval", - "intervalField", "normalForm", "type", "dataType", "typeParameter", - "baseType", "whenClause", "filter", "partitionByClause", "over", - "windowFrame", "frameBound", "pathElement", "pathSpecification", - "privilege", "objectType", "qualifiedName", "qualifiedNameAllowEmpty", - "principal", "identifier", "number", "reservedKeywordsUsedAsFuncName", - "nonReserved", + "comparisonOperator", "comparisonQuantifier", "interval", "intervalField", + "type", "dataType", "typeParameter", "baseType", "whenClause", "filter", + "partitionByClause", "over", "windowFrame", "frameBound", "pathElement", + "pathSpecification", "privilege", "objectType", "qualifiedName", + "qualifiedNameAllowEmpty", "principal", "identifier", "number", + "reservedKeywordsUsedAsFuncName", "nonReserved", ]; public get grammarFileName(): string { return "ImpalaSqlParser.g4"; } @@ -687,21 +682,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 401; + this.state = 393; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4 || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 22085645) !== 0) || _la === 67 || _la === 86 || ((((_la - 99)) & ~0x1F) === 0 && ((1 << (_la - 99)) & 524545) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 134520835) !== 0) || ((((_la - 196)) & ~0x1F) === 0 && ((1 << (_la - 196)) & 1083521) !== 0) || _la === 264 || _la === 265) { { { - this.state = 398; + this.state = 390; this.singleStatement(); } } - this.state = 403; + this.state = 395; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 404; + this.state = 396; this.match(ImpalaSqlParser.EOF); } } @@ -726,14 +721,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 406; + this.state = 398; this.sqlStatement(); - this.state = 408; + this.state = 400; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 262) { { - this.state = 407; + this.state = 399; this.match(ImpalaSqlParser.SEMICOLON); } } @@ -758,160 +753,160 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new SqlStatementContext(this.context, this.state); this.enterRule(localContext, 4, ImpalaSqlParser.RULE_sqlStatement); try { - this.state = 432; + this.state = 424; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 2, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 410; + this.state = 402; this.queryStatement(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 411; + this.state = 403; this.useStatement(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 412; + this.state = 404; this.createStatement(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 413; + this.state = 405; this.alterStatement(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 414; + this.state = 406; this.truncateTableStatement(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 415; + this.state = 407; this.describeStatement(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 416; + this.state = 408; this.computeStatement(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 417; + this.state = 409; this.dropStatement(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 418; + this.state = 410; this.grantStatement(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 419; + this.state = 411; this.revokeStatement(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 420; + this.state = 412; this.insertStatement(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 421; + this.state = 413; this.deleteStatement(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 422; + this.state = 414; this.updateStatement(); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 423; + this.state = 415; this.upsertStatement(); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 424; + this.state = 416; this.showStatement(); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 425; + this.state = 417; this.addCommentStatement(); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 426; + this.state = 418; this.explainStatement(); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 427; + this.state = 419; this.setStatement(); } break; case 19: this.enterOuterAlt(localContext, 19); { - this.state = 428; + this.state = 420; this.shutdownStatement(); } break; case 20: this.enterOuterAlt(localContext, 20); { - this.state = 429; + this.state = 421; this.invalidateMetaStatement(); } break; case 21: this.enterOuterAlt(localContext, 21); { - this.state = 430; + this.state = 422; this.loadDataStatement(); } break; case 22: this.enterOuterAlt(localContext, 22); { - this.state = 431; + this.state = 423; this.refreshStatement(); } break; @@ -937,9 +932,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 434; + this.state = 426; this.match(ImpalaSqlParser.KW_USE); - this.state = 435; + this.state = 427; this.databaseNamePath(); } } @@ -961,62 +956,62 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new CreateStatementContext(this.context, this.state); this.enterRule(localContext, 8, ImpalaSqlParser.RULE_createStatement); try { - this.state = 445; + this.state = 437; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 437; + this.state = 429; this.createSchema(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 438; + this.state = 430; this.createRole(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 439; + this.state = 431; this.createAggregateFunction(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 440; + this.state = 432; this.createFunction(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 441; + this.state = 433; this.createView(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 442; + this.state = 434; this.createKuduTableAsSelect(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 443; + this.state = 435; this.createTableLike(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 444; + this.state = 436; this.createTableSelect(); } break; @@ -1044,97 +1039,97 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 447; + this.state = 439; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 449; + this.state = 441; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19) { { - this.state = 448; + this.state = 440; this.match(ImpalaSqlParser.KW_EXTERNAL); } } - this.state = 451; + this.state = 443; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 453; + this.state = 445; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 452; + this.state = 444; this.ifNotExists(); } } - this.state = 455; + this.state = 447; this.tableNameCreate(); - this.state = 471; + this.state = 463; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 8, this.context) ) { case 1: { - this.state = 456; + this.state = 448; this.match(ImpalaSqlParser.LPAREN); - this.state = 457; + this.state = 449; this.columnDefinition(); - this.state = 462; + this.state = 454; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 458; + this.state = 450; this.match(ImpalaSqlParser.COMMA); - this.state = 459; + this.state = 451; this.columnDefinition(); } } } - this.state = 464; + this.state = 456; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, this.context); } - this.state = 467; + this.state = 459; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 465; + this.state = 457; this.match(ImpalaSqlParser.COMMA); - this.state = 466; + this.state = 458; this.constraintSpecification(); } } - this.state = 469; + this.state = 461; this.match(ImpalaSqlParser.RPAREN); } break; } - this.state = 479; + this.state = 471; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 473; + this.state = 465; this.match(ImpalaSqlParser.KW_PARTITIONED); - this.state = 474; + this.state = 466; this.match(ImpalaSqlParser.KW_BY); - this.state = 477; + this.state = 469; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) { case 1: { - this.state = 475; + this.state = 467; this.columnAliases(); } break; case 2: { - this.state = 476; + this.state = 468; this.partitionedBy(); } break; @@ -1142,16 +1137,16 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 481; + this.state = 473; this.createCommonItem(); - this.state = 484; + this.state = 476; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 482; + this.state = 474; this.match(ImpalaSqlParser.KW_AS); - this.state = 483; + this.state = 475; this.queryStatement(); } } @@ -1179,35 +1174,35 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 486; + this.state = 478; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 488; + this.state = 480; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19) { { - this.state = 487; + this.state = 479; this.match(ImpalaSqlParser.KW_EXTERNAL); } } - this.state = 490; + this.state = 482; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 492; + this.state = 484; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 491; + this.state = 483; this.ifNotExists(); } } - this.state = 494; + this.state = 486; this.tableNameCreate(); - this.state = 495; + this.state = 487; this.match(ImpalaSqlParser.KW_LIKE); - this.state = 499; + this.state = 491; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_BERNOULLI: @@ -1249,36 +1244,36 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DIGIT_IDENTIFIER: case ImpalaSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 496; + this.state = 488; this.tableNamePath(); } break; case ImpalaSqlParser.KW_PARQUET: { - this.state = 497; + this.state = 489; this.match(ImpalaSqlParser.KW_PARQUET); - this.state = 498; + this.state = 490; localContext._parquet = this.stringLiteral(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 504; + this.state = 496; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 501; + this.state = 493; this.match(ImpalaSqlParser.KW_PARTITIONED); - this.state = 502; + this.state = 494; this.match(ImpalaSqlParser.KW_BY); - this.state = 503; + this.state = 495; this.partitionedBy(); } } - this.state = 506; + this.state = 498; this.createCommonItem(); } } @@ -1304,95 +1299,95 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 508; + this.state = 500; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 510; + this.state = 502; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19) { { - this.state = 509; + this.state = 501; this.match(ImpalaSqlParser.KW_EXTERNAL); } } - this.state = 512; + this.state = 504; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 514; + this.state = 506; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 513; + this.state = 505; this.ifNotExists(); } } - this.state = 516; + this.state = 508; this.tableNameCreate(); - this.state = 534; + this.state = 526; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 517; + this.state = 509; this.match(ImpalaSqlParser.LPAREN); - this.state = 518; + this.state = 510; this.kuduTableElement(); - this.state = 523; + this.state = 515; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 18, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 519; + this.state = 511; this.match(ImpalaSqlParser.COMMA); - this.state = 520; + this.state = 512; this.kuduTableElement(); } } } - this.state = 525; + this.state = 517; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 18, this.context); } - this.state = 530; + this.state = 522; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 526; + this.state = 518; this.match(ImpalaSqlParser.COMMA); - this.state = 527; + this.state = 519; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 528; + this.state = 520; this.match(ImpalaSqlParser.KW_KEY); - this.state = 529; + this.state = 521; this.columnAliases(); } } - this.state = 532; + this.state = 524; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 541; + this.state = 533; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 150) { { - this.state = 536; + this.state = 528; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 537; + this.state = 529; this.match(ImpalaSqlParser.KW_KEY); - this.state = 539; + this.state = 531; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 538; + this.state = 530; this.columnAliases(); } } @@ -1400,56 +1395,58 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 546; + this.state = 538; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 543; + this.state = 535; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 544; + this.state = 536; this.match(ImpalaSqlParser.KW_BY); - this.state = 545; + this.state = 537; this.kuduPartitionClause(); } } - this.state = 549; + this.state = 542; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 548; - this.commentClause(); + this.state = 540; + this.match(ImpalaSqlParser.KW_COMMENT); + this.state = 541; + localContext._comment = this.stringLiteral(); } } - this.state = 551; + this.state = 544; this.match(ImpalaSqlParser.KW_STORED); - this.state = 552; + this.state = 545; this.match(ImpalaSqlParser.KW_AS); - this.state = 553; + this.state = 546; this.match(ImpalaSqlParser.KW_KUDU); - this.state = 556; + this.state = 549; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 25) { { - this.state = 554; + this.state = 547; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 555; + this.state = 548; localContext._tblProp = this.properties(); } } - this.state = 560; + this.state = 553; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 558; + this.state = 551; this.match(ImpalaSqlParser.KW_AS); - this.state = 559; + this.state = 552; this.queryStatement(); } } @@ -1477,57 +1474,57 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 562; + this.state = 555; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 563; + this.state = 556; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 565; + this.state = 558; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 564; + this.state = 557; this.ifNotExists(); } } - this.state = 567; + this.state = 560; this.viewNameCreate(); - this.state = 569; + this.state = 562; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 568; + this.state = 561; this.viewColumns(); } } - this.state = 572; + this.state = 565; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 571; + this.state = 564; this.commentClause(); } } - this.state = 576; + this.state = 569; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 25) { { - this.state = 574; + this.state = 567; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 575; + this.state = 568; localContext._tblProp = this.properties(); } } - this.state = 578; + this.state = 571; this.match(ImpalaSqlParser.KW_AS); - this.state = 579; + this.state = 572; this.queryStatement(); } } @@ -1552,9 +1549,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 581; + this.state = 574; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 582; + this.state = 575; _la = this.tokenStream.LA(1); if(!(_la === 46 || _la === 170)) { this.errorHandler.recoverInline(this); @@ -1563,36 +1560,36 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 584; + this.state = 577; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 583; + this.state = 576; this.ifNotExists(); } } - this.state = 586; + this.state = 579; this.databaseNameCreate(); - this.state = 588; + this.state = 581; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 32, this.context) ) { case 1: { - this.state = 587; + this.state = 580; this.commentClause(); } break; } - this.state = 592; + this.state = 585; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 24) { { - this.state = 590; + this.state = 583; this.match(ImpalaSqlParser.KW_LOCATION); - this.state = 591; + this.state = 584; localContext._location = this.stringLiteral(); } } @@ -1619,11 +1616,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 594; + this.state = 587; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 595; + this.state = 588; this.match(ImpalaSqlParser.KW_ROLE); - this.state = 596; + this.state = 589; localContext._name = this.identifier(); } } @@ -1648,168 +1645,168 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 598; + this.state = 591; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 600; + this.state = 593; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 12) { { - this.state = 599; + this.state = 592; this.match(ImpalaSqlParser.KW_AGGREGATE); } } - this.state = 602; + this.state = 595; this.match(ImpalaSqlParser.KW_FUNCTION); - this.state = 604; + this.state = 597; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 603; + this.state = 596; this.ifNotExists(); } } - this.state = 606; + this.state = 599; this.functionNameCreate(); - this.state = 619; + this.state = 612; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 607; + this.state = 600; this.match(ImpalaSqlParser.LPAREN); - this.state = 616; + this.state = 609; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 8 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 4286652929) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & 511) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 7873) !== 0)) { { - this.state = 608; + this.state = 601; this.type_(0); - this.state = 613; + this.state = 606; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 609; + this.state = 602; this.match(ImpalaSqlParser.COMMA); - this.state = 610; + this.state = 603; this.type_(0); } } - this.state = 615; + this.state = 608; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 618; + this.state = 611; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 621; + this.state = 614; this.match(ImpalaSqlParser.KW_RETURNS); - this.state = 622; + this.state = 615; localContext._returnType = this.type_(0); - this.state = 625; + this.state = 618; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 102) { { - this.state = 623; + this.state = 616; this.match(ImpalaSqlParser.KW_INTERMEDIATE); - this.state = 624; + this.state = 617; this.type_(0); } } - this.state = 627; + this.state = 620; this.match(ImpalaSqlParser.KW_LOCATION); - this.state = 628; + this.state = 621; this.match(ImpalaSqlParser.STRING); - this.state = 632; + this.state = 625; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 104) { { - this.state = 629; + this.state = 622; this.match(ImpalaSqlParser.KW_INIT_FN); - this.state = 630; + this.state = 623; this.match(ImpalaSqlParser.EQ); - this.state = 631; + this.state = 624; this.match(ImpalaSqlParser.STRING); } } - this.state = 634; + this.state = 627; this.match(ImpalaSqlParser.KW_UPDATE_FN); - this.state = 635; + this.state = 628; this.match(ImpalaSqlParser.EQ); - this.state = 636; + this.state = 629; this.match(ImpalaSqlParser.STRING); - this.state = 637; + this.state = 630; this.match(ImpalaSqlParser.KW_MERGE_FN); - this.state = 638; + this.state = 631; this.match(ImpalaSqlParser.EQ); - this.state = 639; + this.state = 632; this.match(ImpalaSqlParser.STRING); - this.state = 643; + this.state = 636; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 18) { { - this.state = 640; + this.state = 633; this.match(ImpalaSqlParser.KW_PREPARE_FN); - this.state = 641; + this.state = 634; this.match(ImpalaSqlParser.EQ); - this.state = 642; + this.state = 635; this.match(ImpalaSqlParser.STRING); } } - this.state = 648; + this.state = 641; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 645; + this.state = 638; this.match(ImpalaSqlParser.KW_CLOSEFN); - this.state = 646; + this.state = 639; this.match(ImpalaSqlParser.EQ); - this.state = 647; + this.state = 640; this.match(ImpalaSqlParser.STRING); } } - this.state = 653; + this.state = 646; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 187) { { - this.state = 650; + this.state = 643; this.match(ImpalaSqlParser.KW_SERIALIZE_FN); - this.state = 651; + this.state = 644; this.match(ImpalaSqlParser.EQ); - this.state = 652; + this.state = 645; this.match(ImpalaSqlParser.STRING); } } - this.state = 658; + this.state = 651; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 76) { { - this.state = 655; + this.state = 648; this.match(ImpalaSqlParser.KW_FINALIZE_FN); - this.state = 656; + this.state = 649; this.match(ImpalaSqlParser.EQ); - this.state = 657; + this.state = 650; this.match(ImpalaSqlParser.STRING); } } @@ -1837,81 +1834,81 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 660; + this.state = 653; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 661; + this.state = 654; this.match(ImpalaSqlParser.KW_FUNCTION); - this.state = 663; + this.state = 656; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 662; + this.state = 655; this.ifNotExists(); } } - this.state = 665; + this.state = 658; this.functionNameCreate(); - this.state = 678; + this.state = 671; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 666; + this.state = 659; this.match(ImpalaSqlParser.LPAREN); - this.state = 675; + this.state = 668; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 8 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 4286652929) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & 511) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 7873) !== 0)) { { - this.state = 667; + this.state = 660; this.type_(0); - this.state = 672; + this.state = 665; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 668; + this.state = 661; this.match(ImpalaSqlParser.COMMA); - this.state = 669; + this.state = 662; this.type_(0); } } - this.state = 674; + this.state = 667; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 677; + this.state = 670; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 682; + this.state = 675; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 160) { { - this.state = 680; + this.state = 673; this.match(ImpalaSqlParser.KW_RETURNS); - this.state = 681; + this.state = 674; localContext._returnType = this.type_(0); } } - this.state = 684; + this.state = 677; this.match(ImpalaSqlParser.KW_LOCATION); - this.state = 685; + this.state = 678; this.match(ImpalaSqlParser.STRING); - this.state = 686; + this.state = 679; this.match(ImpalaSqlParser.KW_SYMBOL); - this.state = 687; + this.state = 680; this.match(ImpalaSqlParser.EQ); - this.state = 688; + this.state = 681; localContext._symbol_ = this.stringLiteral(); } } @@ -1933,132 +1930,132 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new AlterStatementContext(this.context, this.state); this.enterRule(localContext, 26, ImpalaSqlParser.RULE_alterStatement); try { - this.state = 708; + this.state = 701; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 50, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 690; + this.state = 683; this.alterDatabase(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 691; + this.state = 684; this.alterUnSetOrSetViewTblProperties(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 692; + this.state = 685; this.renameTable(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 693; + this.state = 686; this.alterViewOwner(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 694; + this.state = 687; this.alterView(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 695; + this.state = 688; this.renameView(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 696; + this.state = 689; this.dropPartitionByRangeOrValue(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 697; + this.state = 690; this.alterFormat(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 698; + this.state = 691; this.recoverPartitions(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 699; + this.state = 692; this.addPartitionByRangeOrValue(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 700; + this.state = 693; this.alterTableNonKuduOrKuduOnly(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 701; + this.state = 694; this.addSingleColumn(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 702; + this.state = 695; this.replaceOrAddColumns(); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 703; + this.state = 696; this.changeColumnDefine(); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 704; + this.state = 697; this.alterStatsKey(); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 705; + this.state = 698; this.alterPartitionCache(); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 706; + this.state = 699; this.alterDropSingleColumn(); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 707; + this.state = 700; this.alterTableOwner(); } break; @@ -2085,17 +2082,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 710; + this.state = 703; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 711; + this.state = 704; this.match(ImpalaSqlParser.KW_DATABASE); - this.state = 712; + this.state = 705; this.databaseNamePath(); - this.state = 713; + this.state = 706; this.match(ImpalaSqlParser.KW_SET); - this.state = 714; + this.state = 707; this.match(ImpalaSqlParser.KW_OWNER); - this.state = 715; + this.state = 708; _la = this.tokenStream.LA(1); if(!(_la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -2104,7 +2101,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 716; + this.state = 709; this.identifier(); } } @@ -2129,45 +2126,59 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 718; + this.state = 711; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 719; + this.state = 712; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 720; + this.state = 713; this.tableNamePath(); - this.state = 721; + this.state = 714; this.match(ImpalaSqlParser.KW_SET); - this.state = 722; + this.state = 715; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 723; + this.state = 716; this.match(ImpalaSqlParser.KW_STATS); - this.state = 724; + this.state = 717; this.columnNamePath(); - this.state = 725; + this.state = 718; this.match(ImpalaSqlParser.LPAREN); - this.state = 726; - this.statsKey(); - this.state = 727; + this.state = 719; + _la = this.tokenStream.LA(1); + if(!(((((_la - 245)) & ~0x1F) === 0 && ((1 << (_la - 245)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 720; this.match(ImpalaSqlParser.EQ); - this.state = 728; + this.state = 721; this.stringLiteral(); - this.state = 734; + this.state = 726; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 729; + this.state = 722; this.match(ImpalaSqlParser.COMMA); - this.state = 730; - this.statsKey(); - this.state = 731; + this.state = 723; + _la = this.tokenStream.LA(1); + if(!(((((_la - 245)) & ~0x1F) === 0 && ((1 << (_la - 245)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 724; this.match(ImpalaSqlParser.EQ); - this.state = 732; + this.state = 725; this.stringLiteral(); } } - this.state = 736; + this.state = 728; this.match(ImpalaSqlParser.RPAREN); } } @@ -2192,50 +2203,50 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 738; + this.state = 730; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 739; + this.state = 731; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 740; + this.state = 732; this.tableNamePath(); - this.state = 743; + this.state = 735; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 741; + this.state = 733; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 742; + this.state = 734; this.expression(); } } - this.state = 745; + this.state = 737; this.match(ImpalaSqlParser.KW_SET); - this.state = 756; + this.state = 748; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CACHED: { { - this.state = 746; + this.state = 738; this.match(ImpalaSqlParser.KW_CACHED); - this.state = 747; + this.state = 739; this.match(ImpalaSqlParser.KW_IN); - this.state = 748; + this.state = 740; this.stringLiteral(); - this.state = 753; + this.state = 745; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 53, this.context) ) { case 1: { - this.state = 749; + this.state = 741; this.match(ImpalaSqlParser.KW_WITH); - this.state = 750; + this.state = 742; this.match(ImpalaSqlParser.KW_REPLICATION); - this.state = 751; + this.state = 743; this.match(ImpalaSqlParser.EQ); - this.state = 752; + this.state = 744; this.number_(); } break; @@ -2245,7 +2256,7 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_UNCACHED: { - this.state = 755; + this.state = 747; this.match(ImpalaSqlParser.KW_UNCACHED); } break; @@ -2274,17 +2285,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 758; + this.state = 750; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 759; + this.state = 751; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 760; + this.state = 752; this.tableNamePath(); - this.state = 761; + this.state = 753; this.match(ImpalaSqlParser.KW_CHANGE); - this.state = 762; + this.state = 754; this.columnNamePath(); - this.state = 763; + this.state = 755; this.columnSpecWithKudu(); } } @@ -2308,25 +2319,25 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 765; + this.state = 757; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 766; + this.state = 758; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 767; + this.state = 759; this.tableNamePath(); - this.state = 768; + this.state = 760; this.match(ImpalaSqlParser.KW_DROP); - this.state = 770; + this.state = 762; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 55, this.context) ) { case 1: { - this.state = 769; + this.state = 761; this.match(ImpalaSqlParser.KW_COLUMN); } break; } - this.state = 772; + this.state = 764; this.columnNamePath(); } } @@ -2351,17 +2362,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 774; + this.state = 766; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 775; + this.state = 767; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 776; + this.state = 768; this.tableNamePath(); - this.state = 777; + this.state = 769; this.match(ImpalaSqlParser.KW_SET); - this.state = 778; + this.state = 770; this.match(ImpalaSqlParser.KW_OWNER); - this.state = 779; + this.state = 771; _la = this.tokenStream.LA(1); if(!(_la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -2370,7 +2381,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 780; + this.state = 772; this.identifier(); } } @@ -2396,31 +2407,31 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 782; + this.state = 774; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 783; + this.state = 775; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 784; + this.state = 776; this.tableNamePath(); - this.state = 790; + this.state = 782; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_REPLACE: { - this.state = 785; + this.state = 777; this.match(ImpalaSqlParser.KW_REPLACE); } break; case ImpalaSqlParser.KW_ADD: { - this.state = 786; + this.state = 778; this.match(ImpalaSqlParser.KW_ADD); - this.state = 788; + this.state = 780; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 787; + this.state = 779; this.ifNotExists(); } } @@ -2430,31 +2441,31 @@ export class ImpalaSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 792; + this.state = 784; this.match(ImpalaSqlParser.KW_COLUMNS); - this.state = 793; + this.state = 785; this.match(ImpalaSqlParser.LPAREN); - this.state = 794; + this.state = 786; this.columnSpecWithKudu(); - this.state = 799; + this.state = 791; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 58, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 795; + this.state = 787; this.match(ImpalaSqlParser.COMMA); - this.state = 796; + this.state = 788; this.columnSpecWithKudu(); } } } - this.state = 801; + this.state = 793; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 58, this.context); } - this.state = 802; + this.state = 794; this.match(ImpalaSqlParser.RPAREN); } } @@ -2479,27 +2490,27 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 804; + this.state = 796; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 805; + this.state = 797; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 806; + this.state = 798; this.tableNamePath(); - this.state = 807; + this.state = 799; this.match(ImpalaSqlParser.KW_ADD); - this.state = 808; + this.state = 800; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 810; + this.state = 802; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 809; + this.state = 801; this.ifNotExists(); } } - this.state = 812; + this.state = 804; this.createColumnSpecWithKudu(); } } @@ -2523,34 +2534,34 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 814; + this.state = 806; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 815; + this.state = 807; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 816; + this.state = 808; this.tableNamePath(); - this.state = 817; + this.state = 809; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 819; + this.state = 811; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 60, this.context) ) { case 1: { - this.state = 818; + this.state = 810; this.match(ImpalaSqlParser.KW_COLUMN); } break; } - this.state = 821; + this.state = 813; this.columnNamePath(); - this.state = 830; + this.state = 822; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_SET: { - this.state = 822; + this.state = 814; this.match(ImpalaSqlParser.KW_SET); - this.state = 826; + this.state = 818; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_BLOCK_SIZE: @@ -2558,15 +2569,15 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_DEFAULT: case ImpalaSqlParser.KW_ENCODING: { - this.state = 823; + this.state = 815; this.kuduStorageAttr(); } break; case ImpalaSqlParser.KW_COMMENT: { - this.state = 824; + this.state = 816; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 825; + this.state = 817; this.stringLiteral(); } break; @@ -2577,9 +2588,9 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_DROP: { - this.state = 828; + this.state = 820; this.match(ImpalaSqlParser.KW_DROP); - this.state = 829; + this.state = 821; this.match(ImpalaSqlParser.KW_DEFAULT); } break; @@ -2609,51 +2620,51 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 832; + this.state = 824; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 833; + this.state = 825; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 834; + this.state = 826; this.tableNamePath(); - this.state = 835; + this.state = 827; this.match(ImpalaSqlParser.KW_ADD); - this.state = 837; + this.state = 829; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 836; + this.state = 828; this.ifNotExists(); } } - this.state = 851; + this.state = 843; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_PARTITION: { - this.state = 839; + this.state = 831; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 840; + this.state = 832; this.expression(); - this.state = 843; + this.state = 835; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 24) { { - this.state = 841; + this.state = 833; this.match(ImpalaSqlParser.KW_LOCATION); - this.state = 842; + this.state = 834; this.stringLiteral(); } } - this.state = 846; + this.state = 838; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 30 || _la === 197) { { - this.state = 845; + this.state = 837; this.cacheSpec(); } } @@ -2662,11 +2673,11 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_RANGE: { - this.state = 848; + this.state = 840; this.match(ImpalaSqlParser.KW_RANGE); - this.state = 849; + this.state = 841; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 850; + this.state = 842; this.kuduPartitionSpec(); } break; @@ -2696,35 +2707,35 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 853; + this.state = 845; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 854; + this.state = 846; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 855; + this.state = 847; this.tableNamePath(); - this.state = 858; + this.state = 850; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 856; + this.state = 848; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 857; + this.state = 849; this.expression(); } } - this.state = 860; + this.state = 852; this.match(ImpalaSqlParser.KW_SET); - this.state = 872; + this.state = 864; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_FILEFORMAT: { { - this.state = 861; + this.state = 853; this.match(ImpalaSqlParser.KW_FILEFORMAT); - this.state = 862; + this.state = 854; this.fileFormat(); } } @@ -2732,11 +2743,11 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_ROW: { { - this.state = 863; + this.state = 855; this.match(ImpalaSqlParser.KW_ROW); - this.state = 864; + this.state = 856; this.match(ImpalaSqlParser.KW_FORMAT); - this.state = 865; + this.state = 857; this.rowFormat(); } } @@ -2744,9 +2755,9 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_LOCATION: { { - this.state = 866; + this.state = 858; this.match(ImpalaSqlParser.KW_LOCATION); - this.state = 867; + this.state = 859; this.stringLiteral(); } } @@ -2754,9 +2765,9 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_TBLPROPERTIES: { { - this.state = 868; + this.state = 860; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 869; + this.state = 861; localContext._tblProp = this.properties(); } } @@ -2764,9 +2775,9 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_SERDEPROPERTIES: { { - this.state = 870; + this.state = 862; this.match(ImpalaSqlParser.KW_SERDEPROPERTIES); - this.state = 871; + this.state = 863; localContext._tblProp = this.properties(); } } @@ -2796,15 +2807,15 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 874; + this.state = 866; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 875; + this.state = 867; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 876; + this.state = 868; this.tableNamePath(); - this.state = 877; + this.state = 869; this.match(ImpalaSqlParser.KW_RECOVER); - this.state = 878; + this.state = 870; this.match(ImpalaSqlParser.KW_PARTITIONS); } } @@ -2829,39 +2840,39 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 880; + this.state = 872; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 881; + this.state = 873; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 882; + this.state = 874; this.tableNamePath(); - this.state = 883; + this.state = 875; this.match(ImpalaSqlParser.KW_DROP); - this.state = 885; + this.state = 877; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 884; + this.state = 876; this.ifExists(); } } - this.state = 895; + this.state = 887; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_PARTITION: { - this.state = 887; + this.state = 879; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 888; + this.state = 880; this.expression(); - this.state = 890; + this.state = 882; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 22) { { - this.state = 889; + this.state = 881; this.match(ImpalaSqlParser.KW_PURGE); } } @@ -2870,11 +2881,11 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_RANGE: { - this.state = 892; + this.state = 884; this.match(ImpalaSqlParser.KW_RANGE); - this.state = 893; + this.state = 885; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 894; + this.state = 886; this.kuduPartitionSpec(); } break; @@ -2904,25 +2915,25 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 897; + this.state = 889; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 898; + this.state = 890; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 899; + this.state = 891; this.viewNamePath(); - this.state = 901; + this.state = 893; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 900; + this.state = 892; this.viewColumns(); } } - this.state = 903; + this.state = 895; this.match(ImpalaSqlParser.KW_AS); - this.state = 904; + this.state = 896; this.queryStatement(); } } @@ -2946,17 +2957,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 906; + this.state = 898; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 907; + this.state = 899; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 908; + this.state = 900; this.viewNamePath(); - this.state = 909; + this.state = 901; this.match(ImpalaSqlParser.KW_RENAME); - this.state = 910; + this.state = 902; this.match(ImpalaSqlParser.KW_TO); - this.state = 911; + this.state = 903; this.viewNamePath(); } } @@ -2981,17 +2992,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 913; + this.state = 905; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 914; + this.state = 906; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 915; + this.state = 907; this.viewNamePath(); - this.state = 916; + this.state = 908; this.match(ImpalaSqlParser.KW_SET); - this.state = 917; + this.state = 909; this.match(ImpalaSqlParser.KW_OWNER); - this.state = 918; + this.state = 910; _la = this.tokenStream.LA(1); if(!(_la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -3000,7 +3011,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 919; + this.state = 911; this.qualifiedName(); } } @@ -3024,17 +3035,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 921; + this.state = 913; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 922; + this.state = 914; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 923; + this.state = 915; this.tableNamePath(); - this.state = 924; + this.state = 916; this.match(ImpalaSqlParser.KW_RENAME); - this.state = 925; + this.state = 917; this.match(ImpalaSqlParser.KW_TO); - this.state = 926; + this.state = 918; this.tableNamePath(); } } @@ -3059,13 +3070,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 928; + this.state = 920; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 929; + this.state = 921; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 930; + this.state = 922; this.viewNamePath(); - this.state = 931; + this.state = 923; _la = this.tokenStream.LA(1); if(!(_la === 176 || _la === 202)) { this.errorHandler.recoverInline(this); @@ -3074,9 +3085,9 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 932; + this.state = 924; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 933; + this.state = 925; localContext._tblProp = this.properties(); } } @@ -3101,29 +3112,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 935; + this.state = 927; this.match(ImpalaSqlParser.KW_TRUNCATE); - this.state = 937; + this.state = 929; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 936; + this.state = 928; this.match(ImpalaSqlParser.KW_TABLE); } } - this.state = 940; + this.state = 932; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 939; + this.state = 931; this.ifExists(); } } - this.state = 942; + this.state = 934; this.tableNamePath(); } } @@ -3148,24 +3159,24 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 944; + this.state = 936; this.match(ImpalaSqlParser.KW_DESCRIBE); - this.state = 946; + this.state = 938; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 46) { { - this.state = 945; + this.state = 937; this.match(ImpalaSqlParser.KW_DATABASE); } } - this.state = 949; + this.state = 941; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 69 || _la === 80) { { - this.state = 948; + this.state = 940; _la = this.tokenStream.LA(1); if(!(_la === 69 || _la === 80)) { this.errorHandler.recoverInline(this); @@ -3177,7 +3188,7 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 951; + this.state = 943; this.qualifiedName(); } } @@ -3199,20 +3210,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ComputeStatementContext(this.context, this.state); this.enterRule(localContext, 68, ImpalaSqlParser.RULE_computeStatement); try { - this.state = 955; + this.state = 947; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 77, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 953; + this.state = 945; this.computeStats(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 954; + this.state = 946; this.computeIncrementalStats(); } break; @@ -3239,49 +3250,49 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 957; + this.state = 949; this.match(ImpalaSqlParser.KW_COMPUTE); - this.state = 958; + this.state = 950; this.match(ImpalaSqlParser.KW_STATS); - this.state = 959; + this.state = 951; this.tableNamePath(); - this.state = 961; + this.state = 953; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 78, this.context) ) { case 1: { - this.state = 960; + this.state = 952; this.columnAliases(); } break; } - this.state = 975; + this.state = 967; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 190) { { - this.state = 963; + this.state = 955; this.match(ImpalaSqlParser.KW_TABLESAMPLE); - this.state = 964; + this.state = 956; this.match(ImpalaSqlParser.KW_SYSTEM); - this.state = 965; + this.state = 957; this.match(ImpalaSqlParser.LPAREN); - this.state = 966; + this.state = 958; this.number_(); - this.state = 967; + this.state = 959; this.match(ImpalaSqlParser.RPAREN); - this.state = 973; + this.state = 965; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 157) { { - this.state = 968; + this.state = 960; this.match(ImpalaSqlParser.KW_REPEATABLE); - this.state = 969; + this.state = 961; this.match(ImpalaSqlParser.LPAREN); - this.state = 970; + this.state = 962; this.number_(); - this.state = 971; + this.state = 963; this.match(ImpalaSqlParser.RPAREN); } } @@ -3312,26 +3323,26 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 977; + this.state = 969; this.match(ImpalaSqlParser.KW_COMPUTE); - this.state = 978; + this.state = 970; this.match(ImpalaSqlParser.KW_INCREMENTAL); - this.state = 979; + this.state = 971; this.match(ImpalaSqlParser.KW_STATS); - this.state = 980; + this.state = 972; this.tableNamePath(); - this.state = 986; + this.state = 978; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 981; + this.state = 973; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 982; + this.state = 974; this.match(ImpalaSqlParser.LPAREN); - this.state = 983; + this.state = 975; this.expression(); - this.state = 984; + this.state = 976; this.match(ImpalaSqlParser.RPAREN); } } @@ -3356,48 +3367,48 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new DropStatementContext(this.context, this.state); this.enterRule(localContext, 74, ImpalaSqlParser.RULE_dropStatement); try { - this.state = 994; + this.state = 986; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 82, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 988; + this.state = 980; this.dropRole(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 989; + this.state = 981; this.dropFunction(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 990; + this.state = 982; this.dropIncrementalStats(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 991; + this.state = 983; this.dropView(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 992; + this.state = 984; this.dropTable(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 993; + this.state = 985; this.dropSchema(); } break; @@ -3424,9 +3435,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 996; + this.state = 988; this.match(ImpalaSqlParser.KW_DROP); - this.state = 997; + this.state = 989; _la = this.tokenStream.LA(1); if(!(_la === 46 || _la === 170)) { this.errorHandler.recoverInline(this); @@ -3435,24 +3446,24 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 999; + this.state = 991; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 998; + this.state = 990; this.ifExists(); } } - this.state = 1001; + this.state = 993; this.databaseNamePath(); - this.state = 1003; + this.state = 995; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 27 || _la === 159) { { - this.state = 1002; + this.state = 994; _la = this.tokenStream.LA(1); if(!(_la === 27 || _la === 159)) { this.errorHandler.recoverInline(this); @@ -3487,21 +3498,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1005; + this.state = 997; this.match(ImpalaSqlParser.KW_DROP); - this.state = 1006; + this.state = 998; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 1008; + this.state = 1000; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 1007; + this.state = 999; this.ifExists(); } } - this.state = 1010; + this.state = 1002; this.viewNamePath(); } } @@ -3526,28 +3537,28 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1012; + this.state = 1004; this.match(ImpalaSqlParser.KW_DROP); - this.state = 1013; + this.state = 1005; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1015; + this.state = 1007; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 1014; + this.state = 1006; this.ifExists(); } } - this.state = 1017; + this.state = 1009; this.tableNamePath(); - this.state = 1019; + this.state = 1011; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 22) { { - this.state = 1018; + this.state = 1010; this.match(ImpalaSqlParser.KW_PURGE); } } @@ -3575,30 +3586,30 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1021; + this.state = 1013; this.match(ImpalaSqlParser.KW_DROP); - this.state = 1023; + this.state = 1015; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 96) { { - this.state = 1022; + this.state = 1014; this.match(ImpalaSqlParser.KW_INCREMENTAL); } } - this.state = 1025; + this.state = 1017; this.match(ImpalaSqlParser.KW_STATS); - this.state = 1026; + this.state = 1018; this.tableNamePath(); - this.state = 1029; + this.state = 1021; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1027; + this.state = 1019; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1028; + this.state = 1020; this.expression(); } } @@ -3626,66 +3637,66 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1031; + this.state = 1023; this.match(ImpalaSqlParser.KW_DROP); - this.state = 1033; + this.state = 1025; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 12) { { - this.state = 1032; + this.state = 1024; this.match(ImpalaSqlParser.KW_AGGREGATE); } } - this.state = 1035; + this.state = 1027; this.match(ImpalaSqlParser.KW_FUNCTION); - this.state = 1037; + this.state = 1029; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 1036; + this.state = 1028; this.ifExists(); } } - this.state = 1039; + this.state = 1031; this.functionNamePath(); - this.state = 1052; + this.state = 1044; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 94, this.context) ) { case 1: { - this.state = 1040; + this.state = 1032; this.match(ImpalaSqlParser.LPAREN); - this.state = 1049; + this.state = 1041; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 8 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 4286652929) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & 511) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 7873) !== 0)) { { - this.state = 1041; + this.state = 1033; this.type_(0); - this.state = 1046; + this.state = 1038; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1042; + this.state = 1034; this.match(ImpalaSqlParser.COMMA); - this.state = 1043; + this.state = 1035; this.type_(0); } } - this.state = 1048; + this.state = 1040; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 1051; + this.state = 1043; this.match(ImpalaSqlParser.RPAREN); } break; @@ -3712,11 +3723,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1054; + this.state = 1046; this.match(ImpalaSqlParser.KW_DROP); - this.state = 1055; + this.state = 1047; this.match(ImpalaSqlParser.KW_ROLE); - this.state = 1056; + this.state = 1048; localContext._name = this.identifier(); } } @@ -3738,20 +3749,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new GrantStatementContext(this.context, this.state); this.enterRule(localContext, 88, ImpalaSqlParser.RULE_grantStatement); try { - this.state = 1060; + this.state = 1052; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 95, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1058; + this.state = 1050; this.grantRole(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1059; + this.state = 1051; this.grant(); } break; @@ -3777,17 +3788,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1062; + this.state = 1054; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1063; + this.state = 1055; this.match(ImpalaSqlParser.KW_ROLE); - this.state = 1064; + this.state = 1056; this.identifier(); - this.state = 1065; + this.state = 1057; this.match(ImpalaSqlParser.KW_TO); - this.state = 1066; + this.state = 1058; this.match(ImpalaSqlParser.KW_GROUP); - this.state = 1067; + this.state = 1059; this.identifier(); } } @@ -3812,27 +3823,27 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1069; + this.state = 1061; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1070; + this.state = 1062; this.privilege(); - this.state = 1071; + this.state = 1063; this.match(ImpalaSqlParser.KW_ON); - this.state = 1072; + this.state = 1064; this.objectType(); - this.state = 1074; + this.state = 1066; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1073; + this.state = 1065; this.qualifiedName(); } } - this.state = 1076; + this.state = 1068; this.match(ImpalaSqlParser.KW_TO); - this.state = 1077; + this.state = 1069; localContext._grantee = this.principal(); } } @@ -3854,20 +3865,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new RevokeStatementContext(this.context, this.state); this.enterRule(localContext, 94, ImpalaSqlParser.RULE_revokeStatement); try { - this.state = 1081; + this.state = 1073; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 97, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1079; + this.state = 1071; this.revokeRole(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1080; + this.state = 1072; this.revoke(); } break; @@ -3893,17 +3904,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1083; + this.state = 1075; this.match(ImpalaSqlParser.KW_REVOKE); - this.state = 1084; + this.state = 1076; this.match(ImpalaSqlParser.KW_ROLE); - this.state = 1085; + this.state = 1077; this.identifier(); - this.state = 1086; + this.state = 1078; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1087; + this.state = 1079; this.match(ImpalaSqlParser.KW_GROUP); - this.state = 1088; + this.state = 1080; this.identifier(); } } @@ -3928,62 +3939,62 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1090; + this.state = 1082; this.match(ImpalaSqlParser.KW_REVOKE); - this.state = 1094; + this.state = 1086; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 86) { { - this.state = 1091; + this.state = 1083; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1092; + this.state = 1084; this.match(ImpalaSqlParser.KW_OPTION); - this.state = 1093; + this.state = 1085; this.match(ImpalaSqlParser.KW_FOR); } } - this.state = 1096; + this.state = 1088; this.privilege(); - this.state = 1097; + this.state = 1089; this.match(ImpalaSqlParser.KW_ON); - this.state = 1098; + this.state = 1090; this.objectType(); - this.state = 1100; + this.state = 1092; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1099; + this.state = 1091; this.qualifiedName(); } } - this.state = 1102; + this.state = 1094; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1108; + this.state = 1100; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 101, this.context) ) { case 1: { - this.state = 1103; + this.state = 1095; localContext._grantee = this.principal(); } break; case 2: { - this.state = 1105; + this.state = 1097; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 166) { { - this.state = 1104; + this.state = 1096; this.match(ImpalaSqlParser.KW_ROLE); } } - this.state = 1107; + this.state = 1099; this.identifier(); } break; @@ -4011,19 +4022,19 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1111; + this.state = 1103; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 216) { { - this.state = 1110; + this.state = 1102; this.with_(); } } - this.state = 1113; + this.state = 1105; this.match(ImpalaSqlParser.KW_INSERT); - this.state = 1114; + this.state = 1106; _la = this.tokenStream.LA(1); if(!(_la === 103 || _la === 144)) { this.errorHandler.recoverInline(this); @@ -4032,61 +4043,61 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1116; + this.state = 1108; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 1115; + this.state = 1107; this.match(ImpalaSqlParser.KW_TABLE); } } - this.state = 1118; + this.state = 1110; this.tableNamePath(); - this.state = 1120; + this.state = 1112; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 104, this.context) ) { case 1: { - this.state = 1119; + this.state = 1111; this.columnAliases(); } break; } - this.state = 1134; + this.state = 1126; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1122; + this.state = 1114; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1123; + this.state = 1115; this.match(ImpalaSqlParser.LPAREN); - this.state = 1124; + this.state = 1116; this.expression(); - this.state = 1129; + this.state = 1121; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1125; + this.state = 1117; this.match(ImpalaSqlParser.COMMA); - this.state = 1126; + this.state = 1118; this.expression(); } } - this.state = 1131; + this.state = 1123; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1132; + this.state = 1124; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 1136; + this.state = 1128; this.queryStatement(); } } @@ -4108,20 +4119,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new DeleteStatementContext(this.context, this.state); this.enterRule(localContext, 102, ImpalaSqlParser.RULE_deleteStatement); try { - this.state = 1140; + this.state = 1132; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 107, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1138; + this.state = 1130; this.delete_(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1139; + this.state = 1131; this.deleteTableRef(); } break; @@ -4148,26 +4159,26 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1142; + this.state = 1134; this.match(ImpalaSqlParser.KW_DELETE); - this.state = 1144; + this.state = 1136; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 82) { { - this.state = 1143; + this.state = 1135; this.match(ImpalaSqlParser.KW_FROM); } } - this.state = 1146; + this.state = 1138; this.tableNamePath(); - this.state = 1148; + this.state = 1140; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1147; + this.state = 1139; this.whereClause(); } } @@ -4195,64 +4206,64 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1150; + this.state = 1142; this.match(ImpalaSqlParser.KW_DELETE); - this.state = 1151; + this.state = 1143; this.tableNamePath(); - this.state = 1156; + this.state = 1148; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1153; + this.state = 1145; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 1152; + this.state = 1144; this.match(ImpalaSqlParser.KW_AS); } } - this.state = 1155; + this.state = 1147; this.identifier(); } } - this.state = 1158; + this.state = 1150; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1167; + this.state = 1159; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { case 1: { - this.state = 1159; + this.state = 1151; this.relation(0); - this.state = 1164; + this.state = 1156; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1160; + this.state = 1152; this.match(ImpalaSqlParser.COMMA); - this.state = 1161; + this.state = 1153; this.relation(0); } } - this.state = 1166; + this.state = 1158; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } break; } - this.state = 1170; + this.state = 1162; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1169; + this.state = 1161; this.whereClause(); } } @@ -4280,48 +4291,48 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1172; + this.state = 1164; this.match(ImpalaSqlParser.KW_UPDATE); - this.state = 1173; + this.state = 1165; this.tableNamePath(); - this.state = 1174; + this.state = 1166; this.match(ImpalaSqlParser.KW_SET); - this.state = 1175; + this.state = 1167; this.assignmentList(); - this.state = 1185; + this.state = 1177; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 82) { { - this.state = 1176; + this.state = 1168; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1177; + this.state = 1169; this.relation(0); - this.state = 1182; + this.state = 1174; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1178; + this.state = 1170; this.match(ImpalaSqlParser.COMMA); - this.state = 1179; + this.state = 1171; this.relation(0); } } - this.state = 1184; + this.state = 1176; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 1188; + this.state = 1180; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1187; + this.state = 1179; this.whereClause(); } } @@ -4349,33 +4360,33 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1190; + this.state = 1182; this.match(ImpalaSqlParser.KW_UPSERT); - this.state = 1191; + this.state = 1183; this.match(ImpalaSqlParser.KW_INTO); - this.state = 1193; + this.state = 1185; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 1192; + this.state = 1184; this.match(ImpalaSqlParser.KW_TABLE); } } - this.state = 1195; + this.state = 1187; this.tableNamePath(); - this.state = 1197; + this.state = 1189; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 119, this.context) ) { case 1: { - this.state = 1196; + this.state = 1188; this.columnAliases(); } break; } - this.state = 1199; + this.state = 1191; this.queryStatement(); } } @@ -4397,90 +4408,90 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ShowStatementContext(this.context, this.state); this.enterRule(localContext, 112, ImpalaSqlParser.RULE_showStatement); try { - this.state = 1213; + this.state = 1205; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 120, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1201; + this.state = 1193; this.showRoles(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1202; + this.state = 1194; this.showRoleGrant(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1203; + this.state = 1195; this.showGrants(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1204; + this.state = 1196; this.showFiles(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1205; + this.state = 1197; this.showPartitions(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1206; + this.state = 1198; this.showColumnStats(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 1207; + this.state = 1199; this.showTableStats(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 1208; + this.state = 1200; this.showCreateView(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 1209; + this.state = 1201; this.showCreateTable(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 1210; + this.state = 1202; this.showFunctions(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 1211; + this.state = 1203; this.showTables(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 1212; + this.state = 1204; this.showSchemas(); } break; @@ -4507,9 +4518,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1215; + this.state = 1207; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1216; + this.state = 1208; _la = this.tokenStream.LA(1); if(!(_la === 47 || _la === 171)) { this.errorHandler.recoverInline(this); @@ -4518,36 +4529,36 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1228; + this.state = 1220; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115 || _la === 274 || _la === 275) { { - this.state = 1218; + this.state = 1210; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115) { { - this.state = 1217; + this.state = 1209; this.match(ImpalaSqlParser.KW_LIKE); } } - this.state = 1220; + this.state = 1212; localContext._pattern = this.stringLiteral(); - this.state = 1225; + this.state = 1217; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 271) { { { - this.state = 1221; + this.state = 1213; this.match(ImpalaSqlParser.BITWISEOR); - this.state = 1222; + this.state = 1214; this.stringLiteral(); } } - this.state = 1227; + this.state = 1219; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4577,52 +4588,52 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1230; + this.state = 1222; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1231; + this.state = 1223; this.match(ImpalaSqlParser.KW_TABLES); - this.state = 1234; + this.state = 1226; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 94) { { - this.state = 1232; + this.state = 1224; this.match(ImpalaSqlParser.KW_IN); - this.state = 1233; + this.state = 1225; this.tableNamePath(); } } - this.state = 1247; + this.state = 1239; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115 || _la === 274 || _la === 275) { { - this.state = 1237; + this.state = 1229; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115) { { - this.state = 1236; + this.state = 1228; this.match(ImpalaSqlParser.KW_LIKE); } } - this.state = 1239; + this.state = 1231; localContext._pattern = this.stringLiteral(); - this.state = 1244; + this.state = 1236; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 271) { { { - this.state = 1240; + this.state = 1232; this.match(ImpalaSqlParser.BITWISEOR); - this.state = 1241; + this.state = 1233; this.stringLiteral(); } } - this.state = 1246; + this.state = 1238; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4652,14 +4663,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1249; + this.state = 1241; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1251; + this.state = 1243; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 3 || _la === 12) { { - this.state = 1250; + this.state = 1242; _la = this.tokenStream.LA(1); if(!(_la === 3 || _la === 12)) { this.errorHandler.recoverInline(this); @@ -4671,50 +4682,50 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 1253; + this.state = 1245; this.match(ImpalaSqlParser.KW_FUNCTIONS); - this.state = 1256; + this.state = 1248; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 94) { { - this.state = 1254; + this.state = 1246; this.match(ImpalaSqlParser.KW_IN); - this.state = 1255; + this.state = 1247; this.databaseNamePath(); } } - this.state = 1269; + this.state = 1261; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115 || _la === 274 || _la === 275) { { - this.state = 1259; + this.state = 1251; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115) { { - this.state = 1258; + this.state = 1250; this.match(ImpalaSqlParser.KW_LIKE); } } - this.state = 1261; + this.state = 1253; localContext._pattern = this.stringLiteral(); - this.state = 1266; + this.state = 1258; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 271) { { { - this.state = 1262; + this.state = 1254; this.match(ImpalaSqlParser.BITWISEOR); - this.state = 1263; + this.state = 1255; this.stringLiteral(); } } - this.state = 1268; + this.state = 1260; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4743,13 +4754,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1271; + this.state = 1263; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1272; + this.state = 1264; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 1273; + this.state = 1265; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1274; + this.state = 1266; this.tableNamePath(); } } @@ -4773,13 +4784,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1276; + this.state = 1268; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1277; + this.state = 1269; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 1278; + this.state = 1270; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 1279; + this.state = 1271; this.viewNamePath(); } } @@ -4803,13 +4814,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1281; + this.state = 1273; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1282; + this.state = 1274; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1283; + this.state = 1275; this.match(ImpalaSqlParser.KW_STATS); - this.state = 1284; + this.state = 1276; this.tableNamePath(); } } @@ -4833,13 +4844,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1286; + this.state = 1278; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1287; + this.state = 1279; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 1288; + this.state = 1280; this.match(ImpalaSqlParser.KW_STATS); - this.state = 1289; + this.state = 1281; this.tableNamePath(); } } @@ -4864,21 +4875,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1291; + this.state = 1283; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1293; + this.state = 1285; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 154) { { - this.state = 1292; + this.state = 1284; this.match(ImpalaSqlParser.KW_RANGE); } } - this.state = 1295; + this.state = 1287; this.match(ImpalaSqlParser.KW_PARTITIONS); - this.state = 1296; + this.state = 1288; this.tableNamePath(); } } @@ -4903,38 +4914,38 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1298; + this.state = 1290; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1299; + this.state = 1291; this.match(ImpalaSqlParser.KW_FILES); - this.state = 1300; + this.state = 1292; this.match(ImpalaSqlParser.KW_IN); - this.state = 1301; + this.state = 1293; this.tableNamePath(); - this.state = 1311; + this.state = 1303; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1302; + this.state = 1294; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1303; + this.state = 1295; this.match(ImpalaSqlParser.LPAREN); - this.state = 1304; + this.state = 1296; this.expression(); - this.state = 1307; + this.state = 1299; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1305; + this.state = 1297; this.match(ImpalaSqlParser.COMMA); - this.state = 1306; + this.state = 1298; this.expression(); } } - this.state = 1309; + this.state = 1301; this.match(ImpalaSqlParser.RPAREN); } } @@ -4962,19 +4973,19 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1313; + this.state = 1305; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1315; + this.state = 1307; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 39) { { - this.state = 1314; + this.state = 1306; this.match(ImpalaSqlParser.KW_CURRENT); } } - this.state = 1317; + this.state = 1309; this.match(ImpalaSqlParser.KW_ROLES); } } @@ -4998,15 +5009,15 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1319; + this.state = 1311; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1320; + this.state = 1312; this.match(ImpalaSqlParser.KW_ROLE); - this.state = 1321; + this.state = 1313; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1322; + this.state = 1314; this.match(ImpalaSqlParser.KW_GROUP); - this.state = 1323; + this.state = 1315; this.identifier(); } } @@ -5029,38 +5040,38 @@ export class ImpalaSqlParser extends SQLParserBase { this.enterRule(localContext, 136, ImpalaSqlParser.RULE_showGrants); let _la: number; try { - this.state = 1339; + this.state = 1331; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 139, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1325; + this.state = 1317; this.showDatabaseGrant(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1326; + this.state = 1318; this.showTableGrant(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1327; + this.state = 1319; this.showColumnGrant(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1328; + this.state = 1320; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1329; + this.state = 1321; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1330; + this.state = 1322; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5069,16 +5080,16 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1331; + this.state = 1323; this.identifier(); - this.state = 1337; + this.state = 1329; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1332; + this.state = 1324; this.match(ImpalaSqlParser.KW_ON); - this.state = 1333; + this.state = 1325; _la = this.tokenStream.LA(1); if(!(_la === 178 || _la === 209)) { this.errorHandler.recoverInline(this); @@ -5087,12 +5098,12 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1335; + this.state = 1327; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1334; + this.state = 1326; this.qualifiedName(); } } @@ -5125,11 +5136,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1341; + this.state = 1333; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1342; + this.state = 1334; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1343; + this.state = 1335; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5138,23 +5149,23 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1344; + this.state = 1336; this.identifier(); - this.state = 1350; + this.state = 1342; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1345; + this.state = 1337; this.match(ImpalaSqlParser.KW_ON); - this.state = 1346; + this.state = 1338; this.match(ImpalaSqlParser.KW_DATABASE); - this.state = 1348; + this.state = 1340; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1347; + this.state = 1339; this.databaseNamePath(); } } @@ -5185,11 +5196,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1352; + this.state = 1344; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1353; + this.state = 1345; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1354; + this.state = 1346; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5198,23 +5209,23 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1355; + this.state = 1347; this.identifier(); - this.state = 1361; + this.state = 1353; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1356; + this.state = 1348; this.match(ImpalaSqlParser.KW_ON); - this.state = 1357; + this.state = 1349; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1359; + this.state = 1351; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1358; + this.state = 1350; this.tableNamePath(); } } @@ -5245,11 +5256,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1363; + this.state = 1355; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1364; + this.state = 1356; this.match(ImpalaSqlParser.KW_GRANT); - this.state = 1365; + this.state = 1357; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5258,23 +5269,23 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1366; + this.state = 1358; this.identifier(); - this.state = 1372; + this.state = 1364; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1367; + this.state = 1359; this.match(ImpalaSqlParser.KW_ON); - this.state = 1368; + this.state = 1360; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 1370; + this.state = 1362; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 144, this.context) ) { case 1: { - this.state = 1369; + this.state = 1361; this.columnNamePath(); } break; @@ -5302,27 +5313,27 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new AddCommentStatementContext(this.context, this.state); this.enterRule(localContext, 144, ImpalaSqlParser.RULE_addCommentStatement); try { - this.state = 1377; + this.state = 1369; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1374; + this.state = 1366; this.addDatabaseComments(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1375; + this.state = 1367; this.addTableComments(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1376; + this.state = 1368; this.addColumnComments(); } break; @@ -5348,29 +5359,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1379; + this.state = 1371; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1380; + this.state = 1372; this.match(ImpalaSqlParser.KW_ON); - this.state = 1381; + this.state = 1373; this.match(ImpalaSqlParser.KW_DATABASE); - this.state = 1382; + this.state = 1374; this.databaseNamePath(); - this.state = 1383; + this.state = 1375; this.match(ImpalaSqlParser.KW_IS); - this.state = 1386; + this.state = 1378; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: case ImpalaSqlParser.UNICODE_STRING: { - this.state = 1384; + this.state = 1376; this.stringLiteral(); } break; case ImpalaSqlParser.KW_NULL: { - this.state = 1385; + this.state = 1377; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -5399,29 +5410,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1388; + this.state = 1380; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1389; + this.state = 1381; this.match(ImpalaSqlParser.KW_ON); - this.state = 1390; + this.state = 1382; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1391; + this.state = 1383; this.tableNamePath(); - this.state = 1392; + this.state = 1384; this.match(ImpalaSqlParser.KW_IS); - this.state = 1395; + this.state = 1387; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: case ImpalaSqlParser.UNICODE_STRING: { - this.state = 1393; + this.state = 1385; this.stringLiteral(); } break; case ImpalaSqlParser.KW_NULL: { - this.state = 1394; + this.state = 1386; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -5450,29 +5461,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1397; + this.state = 1389; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1398; + this.state = 1390; this.match(ImpalaSqlParser.KW_ON); - this.state = 1399; + this.state = 1391; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 1400; + this.state = 1392; this.columnNamePath(); - this.state = 1401; + this.state = 1393; this.match(ImpalaSqlParser.KW_IS); - this.state = 1404; + this.state = 1396; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: case ImpalaSqlParser.UNICODE_STRING: { - this.state = 1402; + this.state = 1394; this.stringLiteral(); } break; case ImpalaSqlParser.KW_NULL: { - this.state = 1403; + this.state = 1395; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -5501,9 +5512,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1406; + this.state = 1398; this.match(ImpalaSqlParser.KW_EXPLAIN); - this.state = 1407; + this.state = 1399; this.sqlStatement(); } } @@ -5527,14 +5538,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1409; + this.state = 1401; this.match(ImpalaSqlParser.KW_SET); - this.state = 1415; + this.state = 1407; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ALL: { - this.state = 1410; + this.state = 1402; this.match(ImpalaSqlParser.KW_ALL); } break; @@ -5577,11 +5588,11 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DIGIT_IDENTIFIER: case ImpalaSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 1411; + this.state = 1403; this.identifier(); - this.state = 1412; + this.state = 1404; this.match(ImpalaSqlParser.EQ); - this.state = 1413; + this.state = 1405; this.expression(); } break; @@ -5640,23 +5651,23 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1417; + this.state = 1409; this.match(ImpalaSqlParser.COLON); - this.state = 1418; + this.state = 1410; this.match(ImpalaSqlParser.KW_SHUTDOWN); - this.state = 1419; + this.state = 1411; this.match(ImpalaSqlParser.LPAREN); - this.state = 1429; + this.state = 1421; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 153, this.context) ) { case 1: { - this.state = 1421; + this.state = 1413; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 274 || _la === 275) { { - this.state = 1420; + this.state = 1412; this.stringLiteral(); } } @@ -5665,16 +5676,16 @@ export class ImpalaSqlParser extends SQLParserBase { break; case 2: { - this.state = 1423; + this.state = 1415; this.stringLiteral(); - this.state = 1426; + this.state = 1418; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1424; + this.state = 1416; this.match(ImpalaSqlParser.COMMA); - this.state = 1425; + this.state = 1417; this.expression(); } } @@ -5683,12 +5694,12 @@ export class ImpalaSqlParser extends SQLParserBase { break; case 3: { - this.state = 1428; + this.state = 1420; this.expression(); } break; } - this.state = 1431; + this.state = 1423; this.match(ImpalaSqlParser.RPAREN); } } @@ -5712,11 +5723,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1433; + this.state = 1425; this.match(ImpalaSqlParser.KW_INVALIDATE); - this.state = 1434; + this.state = 1426; this.match(ImpalaSqlParser.KW_METADATA); - this.state = 1435; + this.state = 1427; this.tableNamePath(); } } @@ -5741,54 +5752,54 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1437; + this.state = 1429; this.match(ImpalaSqlParser.KW_LOAD); - this.state = 1438; + this.state = 1430; this.match(ImpalaSqlParser.KW_DATA); - this.state = 1439; + this.state = 1431; this.match(ImpalaSqlParser.KW_INPATH); - this.state = 1440; + this.state = 1432; this.match(ImpalaSqlParser.STRING); - this.state = 1442; + this.state = 1434; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 144) { { - this.state = 1441; + this.state = 1433; this.match(ImpalaSqlParser.KW_OVERWRITE); } } - this.state = 1444; + this.state = 1436; this.match(ImpalaSqlParser.KW_INTO); - this.state = 1445; + this.state = 1437; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1446; + this.state = 1438; this.tableNamePath(); - this.state = 1456; + this.state = 1448; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1447; + this.state = 1439; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1448; + this.state = 1440; this.match(ImpalaSqlParser.LPAREN); - this.state = 1449; + this.state = 1441; this.expression(); - this.state = 1452; + this.state = 1444; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1450; + this.state = 1442; this.match(ImpalaSqlParser.COMMA); - this.state = 1451; + this.state = 1443; this.expression(); } } - this.state = 1454; + this.state = 1446; this.match(ImpalaSqlParser.RPAREN); } } @@ -5813,27 +5824,27 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new RefreshStatementContext(this.context, this.state); this.enterRule(localContext, 162, ImpalaSqlParser.RULE_refreshStatement); try { - this.state = 1461; + this.state = 1453; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 157, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1458; + this.state = 1450; this.refreshMeta(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1459; + this.state = 1451; this.refreshAuth(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1460; + this.state = 1452; this.refreshFunction(); } break; @@ -5861,40 +5872,40 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1463; + this.state = 1455; this.match(ImpalaSqlParser.KW_REFRESH); - this.state = 1464; + this.state = 1456; this.tableNamePath(); - this.state = 1477; + this.state = 1469; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1465; + this.state = 1457; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1466; + this.state = 1458; this.match(ImpalaSqlParser.LPAREN); - this.state = 1467; + this.state = 1459; this.expression(); - this.state = 1472; + this.state = 1464; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 158, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1468; + this.state = 1460; this.match(ImpalaSqlParser.COMMA); - this.state = 1469; + this.state = 1461; this.expression(); } } } - this.state = 1474; + this.state = 1466; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 158, this.context); } - this.state = 1475; + this.state = 1467; this.match(ImpalaSqlParser.RPAREN); } } @@ -5921,9 +5932,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1479; + this.state = 1471; this.match(ImpalaSqlParser.KW_REFRESH); - this.state = 1480; + this.state = 1472; this.match(ImpalaSqlParser.KW_AUTHORIZATION); } } @@ -5947,11 +5958,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1482; + this.state = 1474; this.match(ImpalaSqlParser.KW_REFRESH); - this.state = 1483; + this.state = 1475; this.match(ImpalaSqlParser.KW_FUNCTIONS); - this.state = 1484; + this.state = 1476; this.functionNamePath(); } } @@ -5975,9 +5986,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1486; + this.state = 1478; this.match(ImpalaSqlParser.KW_IF); - this.state = 1487; + this.state = 1479; this.match(ImpalaSqlParser.KW_EXISTS); } } @@ -6001,11 +6012,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1489; + this.state = 1481; this.match(ImpalaSqlParser.KW_IF); - this.state = 1490; + this.state = 1482; this.match(ImpalaSqlParser.KW_NOT); - this.state = 1491; + this.state = 1483; this.match(ImpalaSqlParser.KW_EXISTS); } } @@ -6029,7 +6040,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1493; + this.state = 1485; this.qualifiedName(); } } @@ -6053,7 +6064,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1495; + this.state = 1487; this.qualifiedName(); } } @@ -6077,7 +6088,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1497; + this.state = 1489; this.qualifiedName(); } } @@ -6101,7 +6112,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1499; + this.state = 1491; this.qualifiedName(); } } @@ -6125,7 +6136,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1501; + this.state = 1493; this.qualifiedName(); } } @@ -6149,7 +6160,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1503; + this.state = 1495; this.qualifiedName(); } } @@ -6174,23 +6185,23 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1505; + this.state = 1497; this.identifier(); - this.state = 1510; + this.state = 1502; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 160, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1506; + this.state = 1498; this.match(ImpalaSqlParser.DOT); - this.state = 1507; + this.state = 1499; this.identifier(); } } } - this.state = 1512; + this.state = 1504; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 160, this.context); } @@ -6217,23 +6228,23 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1513; + this.state = 1505; this.identifier(); - this.state = 1518; + this.state = 1510; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 161, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1514; + this.state = 1506; this.match(ImpalaSqlParser.DOT); - this.state = 1515; + this.state = 1507; this.identifier(); } } } - this.state = 1520; + this.state = 1512; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 161, this.context); } @@ -6257,20 +6268,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new FunctionNamePathContext(this.context, this.state); this.enterRule(localContext, 190, ImpalaSqlParser.RULE_functionNamePath); try { - this.state = 1523; + this.state = 1515; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 162, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1521; + this.state = 1513; this.reservedKeywordsUsedAsFuncName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1522; + this.state = 1514; this.qualifiedName(); } break; @@ -6317,24 +6328,24 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ColumnNamePathContext(this.context, this.state); this.enterRule(localContext, 194, ImpalaSqlParser.RULE_columnNamePath); try { - this.state = 1530; + this.state = 1522; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 163, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1527; + this.state = 1519; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } - this.state = 1528; + this.state = 1520; this.emptyColumn(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1529; + this.state = 1521; this.qualifiedNameAllowEmpty(); } break; @@ -6360,7 +6371,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1532; + this.state = 1524; this.qualifiedName(); } } @@ -6382,24 +6393,24 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ColumnNameAllowEmptyContext(this.context, this.state); this.enterRule(localContext, 198, ImpalaSqlParser.RULE_columnNameAllowEmpty); try { - this.state = 1537; + this.state = 1529; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 164, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1534; + this.state = 1526; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } - this.state = 1535; + this.state = 1527; this.emptyColumn(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1536; + this.state = 1528; this.qualifiedNameAllowEmpty(); } break; @@ -6423,20 +6434,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new TableOrViewPathContext(this.context, this.state); this.enterRule(localContext, 200, ImpalaSqlParser.RULE_tableOrViewPath); try { - this.state = 1541; + this.state = 1533; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 165, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1539; + this.state = 1531; this.tableNamePath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1540; + this.state = 1532; this.viewNamePath(); } break; @@ -6463,107 +6474,107 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1546; + this.state = 1538; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 21) { { - this.state = 1543; + this.state = 1535; this.match(ImpalaSqlParser.KW_SORT); - this.state = 1544; + this.state = 1536; this.match(ImpalaSqlParser.KW_BY); - this.state = 1545; + this.state = 1537; this.columnAliases(); } } - this.state = 1549; + this.state = 1541; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 167, this.context) ) { case 1: { - this.state = 1548; + this.state = 1540; this.commentClause(); } break; } - this.state = 1554; + this.state = 1546; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 168) { { - this.state = 1551; + this.state = 1543; this.match(ImpalaSqlParser.KW_ROW); - this.state = 1552; + this.state = 1544; this.match(ImpalaSqlParser.KW_FORMAT); - this.state = 1553; + this.state = 1545; this.rowFormat(); } } - this.state = 1559; + this.state = 1551; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 169, this.context) ) { case 1: { - this.state = 1556; + this.state = 1548; this.match(ImpalaSqlParser.KW_WITH); - this.state = 1557; + this.state = 1549; this.match(ImpalaSqlParser.KW_SERDEPROPERTIES); - this.state = 1558; + this.state = 1550; localContext._serdProp = this.properties(); } break; } - this.state = 1564; + this.state = 1556; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 23) { { - this.state = 1561; + this.state = 1553; this.match(ImpalaSqlParser.KW_STORED); - this.state = 1562; + this.state = 1554; this.match(ImpalaSqlParser.KW_AS); - this.state = 1563; + this.state = 1555; this.fileFormat(); } } - this.state = 1568; + this.state = 1560; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 24) { { - this.state = 1566; + this.state = 1558; this.match(ImpalaSqlParser.KW_LOCATION); - this.state = 1567; + this.state = 1559; localContext._location = this.stringLiteral(); } } - this.state = 1580; + this.state = 1572; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CACHED: { - this.state = 1570; + this.state = 1562; this.match(ImpalaSqlParser.KW_CACHED); - this.state = 1571; + this.state = 1563; this.match(ImpalaSqlParser.KW_IN); - this.state = 1572; + this.state = 1564; localContext._cacheName = this.qualifiedName(); - this.state = 1577; + this.state = 1569; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 172, this.context) ) { case 1: { - this.state = 1573; + this.state = 1565; this.match(ImpalaSqlParser.KW_WITH); - this.state = 1574; + this.state = 1566; this.match(ImpalaSqlParser.KW_REPLICATION); - this.state = 1575; + this.state = 1567; this.match(ImpalaSqlParser.EQ); - this.state = 1576; + this.state = 1568; this.match(ImpalaSqlParser.INTEGER_VALUE); } break; @@ -6572,7 +6583,7 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_UNCACHED: { - this.state = 1579; + this.state = 1571; this.match(ImpalaSqlParser.KW_UNCACHED); } break; @@ -6610,14 +6621,14 @@ export class ImpalaSqlParser extends SQLParserBase { default: break; } - this.state = 1584; + this.state = 1576; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 25) { { - this.state = 1582; + this.state = 1574; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 1583; + this.state = 1575; localContext._tblProp = this.properties(); } } @@ -6645,21 +6656,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1586; + this.state = 1578; this.assignmentItem(); - this.state = 1591; + this.state = 1583; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1587; + this.state = 1579; this.match(ImpalaSqlParser.COMMA); - this.state = 1588; + this.state = 1580; this.assignmentItem(); } } - this.state = 1593; + this.state = 1585; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -6685,11 +6696,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1594; + this.state = 1586; this.qualifiedName(); - this.state = 1595; + this.state = 1587; this.match(ImpalaSqlParser.EQ); - this.state = 1596; + this.state = 1588; this.expression(); } } @@ -6714,43 +6725,43 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1598; + this.state = 1590; this.match(ImpalaSqlParser.LPAREN); - this.state = 1600; + this.state = 1592; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1599; + this.state = 1591; this.viewColumnItem(); } } - this.state = 1608; + this.state = 1600; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1602; + this.state = 1594; this.match(ImpalaSqlParser.COMMA); - this.state = 1604; + this.state = 1596; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1603; + this.state = 1595; this.viewColumnItem(); } } } } - this.state = 1610; + this.state = 1602; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1611; + this.state = 1603; this.match(ImpalaSqlParser.RPAREN); } } @@ -6775,14 +6786,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1613; + this.state = 1605; this.columnNamePathCreate(); - this.state = 1615; + this.state = 1607; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 1614; + this.state = 1606; this.commentClause(); } } @@ -6810,17 +6821,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1618; + this.state = 1610; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 216) { { - this.state = 1617; + this.state = 1609; this.with_(); } } - this.state = 1620; + this.state = 1612; this.queryNoWith(); } } @@ -6845,23 +6856,23 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1622; + this.state = 1614; this.match(ImpalaSqlParser.KW_WITH); - this.state = 1623; + this.state = 1615; this.namedQuery(); - this.state = 1628; + this.state = 1620; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1624; + this.state = 1616; this.match(ImpalaSqlParser.COMMA); - this.state = 1625; + this.state = 1617; this.namedQuery(); } } - this.state = 1630; + this.state = 1622; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -6889,98 +6900,98 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1631; + this.state = 1623; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 1632; + this.state = 1624; this.match(ImpalaSqlParser.KW_KEY); - this.state = 1633; + this.state = 1625; this.columnAliases(); - this.state = 1635; + this.state = 1627; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 53) { { - this.state = 1634; + this.state = 1626; this.match(ImpalaSqlParser.KW_DISABLE); } } - this.state = 1640; + this.state = 1632; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 183, this.context) ) { case 1: { - this.state = 1637; + this.state = 1629; this.match(ImpalaSqlParser.KW_NOVALIDATE); } break; case 2: { - this.state = 1638; + this.state = 1630; this.match(ImpalaSqlParser.COMMA); - this.state = 1639; + this.state = 1631; this.match(ImpalaSqlParser.KW_NOVALIDATE); } break; } - this.state = 1645; + this.state = 1637; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 184, this.context) ) { case 1: { - this.state = 1642; + this.state = 1634; this.match(ImpalaSqlParser.KW_RELY); } break; case 2: { - this.state = 1643; + this.state = 1635; this.match(ImpalaSqlParser.COMMA); - this.state = 1644; + this.state = 1636; this.match(ImpalaSqlParser.KW_RELY); } break; } - this.state = 1659; + this.state = 1651; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 81 || _la === 263) { { - this.state = 1650; + this.state = 1642; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.COMMA: { - this.state = 1647; + this.state = 1639; this.match(ImpalaSqlParser.COMMA); - this.state = 1648; + this.state = 1640; this.foreignKeySpecification(); } break; case ImpalaSqlParser.KW_FOREIGN: { - this.state = 1649; + this.state = 1641; this.foreignKeySpecification(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 1656; + this.state = 1648; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 186, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1652; + this.state = 1644; this.match(ImpalaSqlParser.COMMA); - this.state = 1653; + this.state = 1645; this.foreignKeySpecification(); } } } - this.state = 1658; + this.state = 1650; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 186, this.context); } @@ -7010,44 +7021,44 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1661; + this.state = 1653; this.match(ImpalaSqlParser.KW_FOREIGN); - this.state = 1662; + this.state = 1654; this.match(ImpalaSqlParser.KW_KEY); - this.state = 1663; + this.state = 1655; this.columnAliases(); - this.state = 1664; + this.state = 1656; this.match(ImpalaSqlParser.KW_REFERENCES); - this.state = 1665; + this.state = 1657; this.tableNamePath(); - this.state = 1666; + this.state = 1658; this.columnAliases(); - this.state = 1668; + this.state = 1660; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 53) { { - this.state = 1667; + this.state = 1659; this.match(ImpalaSqlParser.KW_DISABLE); } } - this.state = 1671; + this.state = 1663; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 225) { { - this.state = 1670; + this.state = 1662; this.match(ImpalaSqlParser.KW_NOVALIDATE); } } - this.state = 1674; + this.state = 1666; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 226) { { - this.state = 1673; + this.state = 1665; this.match(ImpalaSqlParser.KW_RELY); } } @@ -7074,18 +7085,18 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1676; + this.state = 1668; this.columnNamePath(); - this.state = 1677; + this.state = 1669; this.type_(0); - this.state = 1680; + this.state = 1672; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 191, this.context) ) { case 1: { - this.state = 1678; + this.state = 1670; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1679; + this.state = 1671; this.stringLiteral(); } break; @@ -7113,16 +7124,16 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1682; + this.state = 1674; this.columnNamePathCreate(); - this.state = 1683; + this.state = 1675; localContext._colType = this.type_(0); - this.state = 1685; + this.state = 1677; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 1684; + this.state = 1676; this.commentClause(); } } @@ -7149,7 +7160,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1687; + this.state = 1679; this.kuduColumnDefinition(); } } @@ -7175,54 +7186,54 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1689; + this.state = 1681; this.columnNamePathCreate(); - this.state = 1690; + this.state = 1682; localContext._colType = this.type_(0); - this.state = 1698; + this.state = 1690; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 16 || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 33619969) !== 0) || _la === 132 || _la === 133) { { - this.state = 1691; + this.state = 1683; this.kuduAttributes(); - this.state = 1695; + this.state = 1687; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 193, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1692; + this.state = 1684; this.kuduAttributes(); } } } - this.state = 1697; + this.state = 1689; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 193, this.context); } } } - this.state = 1701; + this.state = 1693; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 1700; + this.state = 1692; this.commentClause(); } } - this.state = 1705; + this.state = 1697; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 150) { { - this.state = 1703; + this.state = 1695; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 1704; + this.state = 1696; this.match(ImpalaSqlParser.KW_KEY); } } @@ -7249,9 +7260,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1707; + this.state = 1699; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1708; + this.state = 1700; localContext._comment = this.stringLiteral(); } } @@ -7277,28 +7288,28 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1710; + this.state = 1702; this.columnSpec(); - this.state = 1718; + this.state = 1710; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 16 || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 33619969) !== 0) || _la === 132 || _la === 133) { { - this.state = 1711; + this.state = 1703; this.kuduAttributes(); - this.state = 1715; + this.state = 1707; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 197, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1712; + this.state = 1704; this.kuduAttributes(); } } } - this.state = 1717; + this.state = 1709; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 197, this.context); } @@ -7329,42 +7340,42 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1720; + this.state = 1712; this.columnNamePathCreate(); - this.state = 1721; + this.state = 1713; this.type_(0); - this.state = 1724; + this.state = 1716; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 199, this.context) ) { case 1: { - this.state = 1722; + this.state = 1714; this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1723; + this.state = 1715; this.stringLiteral(); } break; } - this.state = 1733; + this.state = 1725; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 16 || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 33619969) !== 0) || _la === 132 || _la === 133) { { - this.state = 1726; + this.state = 1718; this.kuduAttributes(); - this.state = 1730; + this.state = 1722; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 200, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1727; + this.state = 1719; this.kuduAttributes(); } } } - this.state = 1732; + this.state = 1724; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 200, this.context); } @@ -7394,23 +7405,23 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1740; + this.state = 1732; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_NOT: case ImpalaSqlParser.KW_NULL: { - this.state = 1736; + this.state = 1728; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 1735; + this.state = 1727; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 1738; + this.state = 1730; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -7419,7 +7430,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_DEFAULT: case ImpalaSqlParser.KW_ENCODING: { - this.state = 1739; + this.state = 1731; this.kuduStorageAttr(); } break; @@ -7446,42 +7457,42 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new KuduStorageAttrContext(this.context, this.state); this.enterRule(localContext, 236, ImpalaSqlParser.RULE_kuduStorageAttr); try { - this.state = 1750; + this.state = 1742; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ENCODING: this.enterOuterAlt(localContext, 1); { - this.state = 1742; + this.state = 1734; this.match(ImpalaSqlParser.KW_ENCODING); - this.state = 1743; + this.state = 1735; this.expression(); } break; case ImpalaSqlParser.KW_COMPRESSION: this.enterOuterAlt(localContext, 2); { - this.state = 1744; + this.state = 1736; this.match(ImpalaSqlParser.KW_COMPRESSION); - this.state = 1745; + this.state = 1737; this.expression(); } break; case ImpalaSqlParser.KW_DEFAULT: this.enterOuterAlt(localContext, 3); { - this.state = 1746; + this.state = 1738; this.match(ImpalaSqlParser.KW_DEFAULT); - this.state = 1747; + this.state = 1739; this.expression(); } break; case ImpalaSqlParser.KW_BLOCK_SIZE: this.enterOuterAlt(localContext, 4); { - this.state = 1748; + this.state = 1740; this.match(ImpalaSqlParser.KW_BLOCK_SIZE); - this.state = 1749; + this.state = 1741; this.number_(); } break; @@ -7503,46 +7514,14 @@ export class ImpalaSqlParser extends SQLParserBase { } return localContext; } - public statsKey(): StatsKeyContext { - let localContext = new StatsKeyContext(this.context, this.state); - this.enterRule(localContext, 238, ImpalaSqlParser.RULE_statsKey); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1752; - _la = this.tokenStream.LA(1); - if(!(((((_la - 245)) & ~0x1F) === 0 && ((1 << (_la - 245)) & 15) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public fileFormat(): FileFormatContext { let localContext = new FileFormatContext(this.context, this.state); - this.enterRule(localContext, 240, ImpalaSqlParser.RULE_fileFormat); + this.enterRule(localContext, 238, ImpalaSqlParser.RULE_fileFormat); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1754; + this.state = 1744; _la = this.tokenStream.LA(1); if(!(_la === 147 || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 31) !== 0))) { this.errorHandler.recoverInline(this); @@ -7569,45 +7548,45 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduPartitionClause(): KuduPartitionClauseContext { let localContext = new KuduPartitionClauseContext(this.context, this.state); - this.enterRule(localContext, 242, ImpalaSqlParser.RULE_kuduPartitionClause); + this.enterRule(localContext, 240, ImpalaSqlParser.RULE_kuduPartitionClause); let _la: number; try { let alternative: number; - this.state = 1769; + this.state = 1759; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_HASH: this.enterOuterAlt(localContext, 1); { { - this.state = 1756; + this.state = 1746; this.hashClause(); - this.state = 1761; + this.state = 1751; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 205, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1757; + this.state = 1747; this.match(ImpalaSqlParser.COMMA); - this.state = 1758; + this.state = 1748; this.hashClause(); } } } - this.state = 1763; + this.state = 1753; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 205, this.context); } - this.state = 1766; + this.state = 1756; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1764; + this.state = 1754; this.match(ImpalaSqlParser.COMMA); - this.state = 1765; + this.state = 1755; this.rangeClause(); } } @@ -7618,7 +7597,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_RANGE: this.enterOuterAlt(localContext, 2); { - this.state = 1768; + this.state = 1758; this.rangeClause(); } break; @@ -7642,26 +7621,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public hashClause(): HashClauseContext { let localContext = new HashClauseContext(this.context, this.state); - this.enterRule(localContext, 244, ImpalaSqlParser.RULE_hashClause); + this.enterRule(localContext, 242, ImpalaSqlParser.RULE_hashClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1771; + this.state = 1761; this.match(ImpalaSqlParser.KW_HASH); - this.state = 1773; + this.state = 1763; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 1772; + this.state = 1762; this.columnAliases(); } } - this.state = 1775; + this.state = 1765; this.match(ImpalaSqlParser.KW_PARTITIONS); - this.state = 1776; + this.state = 1766; this.number_(); } } @@ -7681,52 +7660,52 @@ export class ImpalaSqlParser extends SQLParserBase { } public rangeClause(): RangeClauseContext { let localContext = new RangeClauseContext(this.context, this.state); - this.enterRule(localContext, 246, ImpalaSqlParser.RULE_rangeClause); + this.enterRule(localContext, 244, ImpalaSqlParser.RULE_rangeClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1778; + this.state = 1768; this.match(ImpalaSqlParser.KW_RANGE); - this.state = 1780; + this.state = 1770; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 209, this.context) ) { case 1: { - this.state = 1779; + this.state = 1769; this.columnAliases(); } break; } - this.state = 1782; + this.state = 1772; this.match(ImpalaSqlParser.LPAREN); { - this.state = 1783; + this.state = 1773; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1784; + this.state = 1774; this.kuduPartitionSpec(); - this.state = 1790; + this.state = 1780; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 210, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1785; + this.state = 1775; this.match(ImpalaSqlParser.COMMA); - this.state = 1786; + this.state = 1776; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 1787; + this.state = 1777; this.kuduPartitionSpec(); } } } - this.state = 1792; + this.state = 1782; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 210, this.context); } } - this.state = 1793; + this.state = 1783; this.match(ImpalaSqlParser.RPAREN); } } @@ -7746,20 +7725,20 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduPartitionSpec(): KuduPartitionSpecContext { let localContext = new KuduPartitionSpecContext(this.context, this.state); - this.enterRule(localContext, 248, ImpalaSqlParser.RULE_kuduPartitionSpec); + this.enterRule(localContext, 246, ImpalaSqlParser.RULE_kuduPartitionSpec); let _la: number; try { - this.state = 1810; + this.state = 1800; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 1795; + this.state = 1785; this.match(ImpalaSqlParser.KW_VALUE); - this.state = 1796; + this.state = 1786; this.partitionCol(); - this.state = 1797; + this.state = 1787; this.expression(); } break; @@ -7835,28 +7814,28 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 2); { - this.state = 1802; + this.state = 1792; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805323008) !== 0) || ((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & 1442841375) !== 0) || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 2218795145) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 269631421) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 271654979) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 537926659) !== 0) || ((((_la - 217)) & ~0x1F) === 0 && ((1 << (_la - 217)) & 16393) !== 0) || ((((_la - 255)) & ~0x1F) === 0 && ((1 << (_la - 255)) & 2549744643) !== 0)) { { - this.state = 1799; + this.state = 1789; this.expression(); - this.state = 1800; + this.state = 1790; this.rangeOperator(); } } - this.state = 1804; + this.state = 1794; this.match(ImpalaSqlParser.KW_VALUES); - this.state = 1808; + this.state = 1798; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 212, this.context) ) { case 1: { - this.state = 1805; + this.state = 1795; this.rangeOperator(); - this.state = 1806; + this.state = 1796; this.expression(); } break; @@ -7883,32 +7862,32 @@ export class ImpalaSqlParser extends SQLParserBase { } public cacheSpec(): CacheSpecContext { let localContext = new CacheSpecContext(this.context, this.state); - this.enterRule(localContext, 250, ImpalaSqlParser.RULE_cacheSpec); + this.enterRule(localContext, 248, ImpalaSqlParser.RULE_cacheSpec); try { - this.state = 1822; + this.state = 1812; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CACHED: this.enterOuterAlt(localContext, 1); { - this.state = 1812; + this.state = 1802; this.match(ImpalaSqlParser.KW_CACHED); - this.state = 1813; + this.state = 1803; this.match(ImpalaSqlParser.KW_IN); - this.state = 1814; + this.state = 1804; this.identifier(); - this.state = 1819; + this.state = 1809; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 214, this.context) ) { case 1: { - this.state = 1815; + this.state = 1805; this.match(ImpalaSqlParser.KW_WITH); - this.state = 1816; + this.state = 1806; this.match(ImpalaSqlParser.KW_REPLICATION); - this.state = 1817; + this.state = 1807; this.match(ImpalaSqlParser.EQ); - this.state = 1818; + this.state = 1808; this.number_(); } break; @@ -7918,7 +7897,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_UNCACHED: this.enterOuterAlt(localContext, 2); { - this.state = 1821; + this.state = 1811; this.match(ImpalaSqlParser.KW_UNCACHED); } break; @@ -7942,9 +7921,9 @@ export class ImpalaSqlParser extends SQLParserBase { } public rangeOperator(): RangeOperatorContext { let localContext = new RangeOperatorContext(this.context, this.state); - this.enterRule(localContext, 252, ImpalaSqlParser.RULE_rangeOperator); + this.enterRule(localContext, 250, ImpalaSqlParser.RULE_rangeOperator); try { - this.state = 1829; + this.state = 1819; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ARRAY: @@ -8025,28 +8004,28 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.LT: this.enterOuterAlt(localContext, 2); { - this.state = 1825; + this.state = 1815; this.match(ImpalaSqlParser.LT); } break; case ImpalaSqlParser.LTE: this.enterOuterAlt(localContext, 3); { - this.state = 1826; + this.state = 1816; this.match(ImpalaSqlParser.LTE); } break; case ImpalaSqlParser.GT: this.enterOuterAlt(localContext, 4); { - this.state = 1827; + this.state = 1817; this.match(ImpalaSqlParser.GT); } break; case ImpalaSqlParser.GTE: this.enterOuterAlt(localContext, 5); { - this.state = 1828; + this.state = 1818; this.match(ImpalaSqlParser.GTE); } break; @@ -8070,57 +8049,57 @@ export class ImpalaSqlParser extends SQLParserBase { } public partitionCol(): PartitionColContext { let localContext = new PartitionColContext(this.context, this.state); - this.enterRule(localContext, 254, ImpalaSqlParser.RULE_partitionCol); + this.enterRule(localContext, 252, ImpalaSqlParser.RULE_partitionCol); try { - this.state = 1839; + this.state = 1829; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.EQ: this.enterOuterAlt(localContext, 1); { - this.state = 1831; + this.state = 1821; this.match(ImpalaSqlParser.EQ); } break; case ImpalaSqlParser.NEQ: this.enterOuterAlt(localContext, 2); { - this.state = 1832; + this.state = 1822; this.match(ImpalaSqlParser.NEQ); } break; case ImpalaSqlParser.KW_LIKE: this.enterOuterAlt(localContext, 3); { - this.state = 1833; + this.state = 1823; this.match(ImpalaSqlParser.KW_LIKE); } break; case ImpalaSqlParser.KW_RLIKE: this.enterOuterAlt(localContext, 4); { - this.state = 1834; + this.state = 1824; this.match(ImpalaSqlParser.KW_RLIKE); } break; case ImpalaSqlParser.KW_REGEXP: this.enterOuterAlt(localContext, 5); { - this.state = 1835; + this.state = 1825; this.match(ImpalaSqlParser.KW_REGEXP); } break; case ImpalaSqlParser.KW_BETWEEN: this.enterOuterAlt(localContext, 6); { - this.state = 1836; + this.state = 1826; this.match(ImpalaSqlParser.KW_BETWEEN); } break; case ImpalaSqlParser.KW_IN: this.enterOuterAlt(localContext, 7); { - this.state = 1837; + this.state = 1827; this.match(ImpalaSqlParser.KW_IN); } break; @@ -8199,7 +8178,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 8); { - this.state = 1838; + this.state = 1828; this.rangeOperator(); } break; @@ -8223,21 +8202,21 @@ export class ImpalaSqlParser extends SQLParserBase { } public likeClause(): LikeClauseContext { let localContext = new LikeClauseContext(this.context, this.state); - this.enterRule(localContext, 256, ImpalaSqlParser.RULE_likeClause); + this.enterRule(localContext, 254, ImpalaSqlParser.RULE_likeClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1841; + this.state = 1831; this.match(ImpalaSqlParser.KW_LIKE); - this.state = 1842; + this.state = 1832; this.qualifiedName(); - this.state = 1845; + this.state = 1835; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 65 || _la === 95) { { - this.state = 1843; + this.state = 1833; localContext._optionType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 65 || _la === 95)) { @@ -8247,7 +8226,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1844; + this.state = 1834; this.match(ImpalaSqlParser.KW_PROPERTIES); } } @@ -8270,32 +8249,32 @@ export class ImpalaSqlParser extends SQLParserBase { } public properties(): PropertiesContext { let localContext = new PropertiesContext(this.context, this.state); - this.enterRule(localContext, 258, ImpalaSqlParser.RULE_properties); + this.enterRule(localContext, 256, ImpalaSqlParser.RULE_properties); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1847; + this.state = 1837; this.match(ImpalaSqlParser.LPAREN); - this.state = 1848; + this.state = 1838; this.property(); - this.state = 1853; + this.state = 1843; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1849; + this.state = 1839; this.match(ImpalaSqlParser.COMMA); - this.state = 1850; + this.state = 1840; this.property(); } } - this.state = 1855; + this.state = 1845; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1856; + this.state = 1846; this.match(ImpalaSqlParser.RPAREN); } } @@ -8315,34 +8294,34 @@ export class ImpalaSqlParser extends SQLParserBase { } public partitionedBy(): PartitionedByContext { let localContext = new PartitionedByContext(this.context, this.state); - this.enterRule(localContext, 260, ImpalaSqlParser.RULE_partitionedBy); + this.enterRule(localContext, 258, ImpalaSqlParser.RULE_partitionedBy); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1858; + this.state = 1848; this.match(ImpalaSqlParser.LPAREN); - this.state = 1859; + this.state = 1849; this.columnSpec(); - this.state = 1864; + this.state = 1854; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 220, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1860; + this.state = 1850; this.match(ImpalaSqlParser.COMMA); - this.state = 1861; + this.state = 1851; this.columnSpec(); } } } - this.state = 1866; + this.state = 1856; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 220, this.context); } - this.state = 1867; + this.state = 1857; this.match(ImpalaSqlParser.RPAREN); } } @@ -8362,26 +8341,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public sortedBy(): SortedByContext { let localContext = new SortedByContext(this.context, this.state); - this.enterRule(localContext, 262, ImpalaSqlParser.RULE_sortedBy); + this.enterRule(localContext, 260, ImpalaSqlParser.RULE_sortedBy); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1869; + this.state = 1859; this.expression(); - this.state = 1874; + this.state = 1864; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1870; + this.state = 1860; this.match(ImpalaSqlParser.COMMA); - this.state = 1871; + this.state = 1861; this.expression(); } } - this.state = 1876; + this.state = 1866; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -8403,36 +8382,36 @@ export class ImpalaSqlParser extends SQLParserBase { } public rowFormat(): RowFormatContext { let localContext = new RowFormatContext(this.context, this.state); - this.enterRule(localContext, 264, ImpalaSqlParser.RULE_rowFormat); + this.enterRule(localContext, 262, ImpalaSqlParser.RULE_rowFormat); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1877; + this.state = 1867; this.match(ImpalaSqlParser.KW_DELIMITED); - this.state = 1887; + this.state = 1877; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 71) { { - this.state = 1878; + this.state = 1868; this.match(ImpalaSqlParser.KW_FIELDS); - this.state = 1879; + this.state = 1869; this.match(ImpalaSqlParser.KW_TERMINATED); - this.state = 1880; + this.state = 1870; this.match(ImpalaSqlParser.KW_BY); - this.state = 1881; + this.state = 1871; this.stringLiteral(); - this.state = 1885; + this.state = 1875; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 63) { { - this.state = 1882; + this.state = 1872; this.match(ImpalaSqlParser.KW_ESCAPED); - this.state = 1883; + this.state = 1873; this.match(ImpalaSqlParser.KW_BY); - this.state = 1884; + this.state = 1874; this.stringLiteral(); } } @@ -8440,18 +8419,18 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 1893; + this.state = 1883; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 117) { { - this.state = 1889; + this.state = 1879; this.match(ImpalaSqlParser.KW_LINES); - this.state = 1890; + this.state = 1880; this.match(ImpalaSqlParser.KW_TERMINATED); - this.state = 1891; + this.state = 1881; this.match(ImpalaSqlParser.KW_BY); - this.state = 1892; + this.state = 1882; this.stringLiteral(); } } @@ -8474,21 +8453,21 @@ export class ImpalaSqlParser extends SQLParserBase { } public property(): PropertyContext { let localContext = new PropertyContext(this.context, this.state); - this.enterRule(localContext, 266, ImpalaSqlParser.RULE_property); + this.enterRule(localContext, 264, ImpalaSqlParser.RULE_property); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1895; + this.state = 1885; this.identifier(); - this.state = 1898; + this.state = 1888; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 249) { { - this.state = 1896; + this.state = 1886; this.match(ImpalaSqlParser.EQ); - this.state = 1897; + this.state = 1887; this.expression(); } } @@ -8511,60 +8490,60 @@ export class ImpalaSqlParser extends SQLParserBase { } public queryNoWith(): QueryNoWithContext { let localContext = new QueryNoWithContext(this.context, this.state); - this.enterRule(localContext, 268, ImpalaSqlParser.RULE_queryNoWith); + this.enterRule(localContext, 266, ImpalaSqlParser.RULE_queryNoWith); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1900; + this.state = 1890; this.queryTerm(0); - this.state = 1911; + this.state = 1901; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 139) { { - this.state = 1901; + this.state = 1891; this.match(ImpalaSqlParser.KW_ORDER); - this.state = 1902; + this.state = 1892; this.match(ImpalaSqlParser.KW_BY); - this.state = 1903; + this.state = 1893; this.sortItem(); - this.state = 1908; + this.state = 1898; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1904; + this.state = 1894; this.match(ImpalaSqlParser.COMMA); - this.state = 1905; + this.state = 1895; this.sortItem(); } } - this.state = 1910; + this.state = 1900; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 1919; + this.state = 1909; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 116) { { - this.state = 1913; + this.state = 1903; this.match(ImpalaSqlParser.KW_LIMIT); - this.state = 1914; + this.state = 1904; localContext._rows = this.expression(); - this.state = 1917; + this.state = 1907; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 135) { { - this.state = 1915; + this.state = 1905; this.match(ImpalaSqlParser.KW_OFFSET); - this.state = 1916; + this.state = 1906; localContext._offset = this.match(ImpalaSqlParser.INTEGER_VALUE); } } @@ -8600,8 +8579,8 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new QueryTermContext(this.context, parentState); let previousContext = localContext; - let _startState = 270; - this.enterRecursionRule(localContext, 270, ImpalaSqlParser.RULE_queryTerm, _p); + let _startState = 268; + this.enterRecursionRule(localContext, 268, ImpalaSqlParser.RULE_queryTerm, _p); let _la: number; try { let alternative: number; @@ -8612,11 +8591,11 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 1922; + this.state = 1912; this.queryPrimary(); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1938; + this.state = 1928; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 233, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -8626,7 +8605,7 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 1936; + this.state = 1926; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 232, this.context) ) { case 1: @@ -8634,23 +8613,23 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SetOperationContext(new QueryTermContext(parentContext, parentState)); (localContext as SetOperationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_queryTerm); - this.state = 1924; + this.state = 1914; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 1925; + this.state = 1915; (localContext as SetOperationContext)._operator = this.match(ImpalaSqlParser.KW_INTERSECT); - this.state = 1927; + this.state = 1917; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2 || _la === 57) { { - this.state = 1926; + this.state = 1916; this.setQuantifier(); } } - this.state = 1929; + this.state = 1919; (localContext as SetOperationContext)._right = this.queryTerm(3); } break; @@ -8659,11 +8638,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SetOperationContext(new QueryTermContext(parentContext, parentState)); (localContext as SetOperationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_queryTerm); - this.state = 1930; + this.state = 1920; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 1931; + this.state = 1921; (localContext as SetOperationContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 64 || _la === 200)) { @@ -8673,24 +8652,24 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1933; + this.state = 1923; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2 || _la === 57) { { - this.state = 1932; + this.state = 1922; this.setQuantifier(); } } - this.state = 1935; + this.state = 1925; (localContext as SetOperationContext)._right = this.queryTerm(2); } break; } } } - this.state = 1940; + this.state = 1930; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 233, this.context); } @@ -8712,17 +8691,17 @@ export class ImpalaSqlParser extends SQLParserBase { } public queryPrimary(): QueryPrimaryContext { let localContext = new QueryPrimaryContext(this.context, this.state); - this.enterRule(localContext, 272, ImpalaSqlParser.RULE_queryPrimary); + this.enterRule(localContext, 270, ImpalaSqlParser.RULE_queryPrimary); try { let alternative: number; - this.state = 1957; + this.state = 1947; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_SELECT: localContext = new QueryPrimaryDefaultContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 1941; + this.state = 1931; this.querySpecification(); } break; @@ -8730,9 +8709,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new TableContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 1942; + this.state = 1932; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1943; + this.state = 1933; this.tableNamePath(); } break; @@ -8740,25 +8719,25 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new InlineTableContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 1944; + this.state = 1934; this.match(ImpalaSqlParser.KW_VALUES); - this.state = 1945; + this.state = 1935; this.expression(); - this.state = 1950; + this.state = 1940; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 234, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1946; + this.state = 1936; this.match(ImpalaSqlParser.COMMA); - this.state = 1947; + this.state = 1937; this.expression(); } } } - this.state = 1952; + this.state = 1942; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 234, this.context); } @@ -8768,11 +8747,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubqueryContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 1953; + this.state = 1943; this.match(ImpalaSqlParser.LPAREN); - this.state = 1954; + this.state = 1944; this.queryNoWith(); - this.state = 1955; + this.state = 1945; this.match(ImpalaSqlParser.RPAREN); } break; @@ -8796,19 +8775,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public sortItem(): SortItemContext { let localContext = new SortItemContext(this.context, this.state); - this.enterRule(localContext, 274, ImpalaSqlParser.RULE_sortItem); + this.enterRule(localContext, 272, ImpalaSqlParser.RULE_sortItem); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1959; + this.state = 1949; this.columnItem(); - this.state = 1961; + this.state = 1951; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 55) { { - this.state = 1960; + this.state = 1950; localContext._ordering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 10 || _la === 55)) { @@ -8821,14 +8800,14 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 1965; + this.state = 1955; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 134) { { - this.state = 1963; + this.state = 1953; this.match(ImpalaSqlParser.KW_NULLS); - this.state = 1964; + this.state = 1954; localContext._nullOrdering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 75 || _la === 112)) { @@ -8859,95 +8838,95 @@ export class ImpalaSqlParser extends SQLParserBase { } public querySpecification(): QuerySpecificationContext { let localContext = new QuerySpecificationContext(this.context, this.state); - this.enterRule(localContext, 276, ImpalaSqlParser.RULE_querySpecification); + this.enterRule(localContext, 274, ImpalaSqlParser.RULE_querySpecification); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1967; + this.state = 1957; this.match(ImpalaSqlParser.KW_SELECT); - this.state = 1969; + this.state = 1959; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 238, this.context) ) { case 1: { - this.state = 1968; + this.state = 1958; this.setQuantifier(); } break; } - this.state = 1972; + this.state = 1962; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 239, this.context) ) { case 1: { - this.state = 1971; + this.state = 1961; this.match(ImpalaSqlParser.KW_STRAIGHT_JOIN); } break; } - this.state = 1974; + this.state = 1964; this.selectList(); - this.state = 1984; + this.state = 1974; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) { case 1: { - this.state = 1975; + this.state = 1965; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1976; + this.state = 1966; this.relation(0); - this.state = 1981; + this.state = 1971; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 240, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1977; + this.state = 1967; this.match(ImpalaSqlParser.COMMA); - this.state = 1978; + this.state = 1968; this.relation(0); } } } - this.state = 1983; + this.state = 1973; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 240, this.context); } } break; } - this.state = 1987; + this.state = 1977; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 242, this.context) ) { case 1: { - this.state = 1986; + this.state = 1976; this.whereClause(); } break; } - this.state = 1992; + this.state = 1982; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 243, this.context) ) { case 1: { - this.state = 1989; + this.state = 1979; this.match(ImpalaSqlParser.KW_GROUP); - this.state = 1990; + this.state = 1980; this.match(ImpalaSqlParser.KW_BY); - this.state = 1991; + this.state = 1981; this.groupBy(); } break; } - this.state = 1995; + this.state = 1985; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 244, this.context) ) { case 1: { - this.state = 1994; + this.state = 1984; this.havingClause(); } break; @@ -8970,28 +8949,28 @@ export class ImpalaSqlParser extends SQLParserBase { } public selectList(): SelectListContext { let localContext = new SelectListContext(this.context, this.state); - this.enterRule(localContext, 278, ImpalaSqlParser.RULE_selectList); + this.enterRule(localContext, 276, ImpalaSqlParser.RULE_selectList); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1997; + this.state = 1987; this.selectItem(); - this.state = 2002; + this.state = 1992; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 245, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1998; + this.state = 1988; this.match(ImpalaSqlParser.COMMA); - this.state = 1999; + this.state = 1989; this.selectItem(); } } } - this.state = 2004; + this.state = 1994; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 245, this.context); } @@ -9013,24 +8992,24 @@ export class ImpalaSqlParser extends SQLParserBase { } public whereClause(): WhereClauseContext { let localContext = new WhereClauseContext(this.context, this.state); - this.enterRule(localContext, 280, ImpalaSqlParser.RULE_whereClause); + this.enterRule(localContext, 278, ImpalaSqlParser.RULE_whereClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2005; + this.state = 1995; this.match(ImpalaSqlParser.KW_WHERE); - this.state = 2008; + this.state = 1998; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 246, this.context) ) { case 1: { - this.state = 2006; + this.state = 1996; localContext._where = this.booleanExpression(0); } break; case 2: { - this.state = 2007; + this.state = 1997; this.columnNameAllowEmpty(); } break; @@ -9053,24 +9032,24 @@ export class ImpalaSqlParser extends SQLParserBase { } public havingClause(): HavingClauseContext { let localContext = new HavingClauseContext(this.context, this.state); - this.enterRule(localContext, 282, ImpalaSqlParser.RULE_havingClause); + this.enterRule(localContext, 280, ImpalaSqlParser.RULE_havingClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2010; + this.state = 2000; this.match(ImpalaSqlParser.KW_HAVING); - this.state = 2013; + this.state = 2003; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 247, this.context) ) { case 1: { - this.state = 2011; + this.state = 2001; localContext._having = this.booleanExpression(0); } break; case 2: { - this.state = 2012; + this.state = 2002; this.columnNameAllowEmpty(); } break; @@ -9093,38 +9072,38 @@ export class ImpalaSqlParser extends SQLParserBase { } public groupBy(): GroupByContext { let localContext = new GroupByContext(this.context, this.state); - this.enterRule(localContext, 284, ImpalaSqlParser.RULE_groupBy); + this.enterRule(localContext, 282, ImpalaSqlParser.RULE_groupBy); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2016; + this.state = 2006; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) { case 1: { - this.state = 2015; + this.state = 2005; this.setQuantifier(); } break; } - this.state = 2018; + this.state = 2008; this.groupingElement(); - this.state = 2023; + this.state = 2013; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 249, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2019; + this.state = 2009; this.match(ImpalaSqlParser.COMMA); - this.state = 2020; + this.state = 2010; this.groupingElement(); } } } - this.state = 2025; + this.state = 2015; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 249, this.context); } @@ -9146,12 +9125,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public groupingElement(): GroupingElementContext { let localContext = new GroupingElementContext(this.context, this.state); - this.enterRule(localContext, 286, ImpalaSqlParser.RULE_groupingElement); + this.enterRule(localContext, 284, ImpalaSqlParser.RULE_groupingElement); try { localContext = new SingleGroupingSetContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2026; + this.state = 2016; this.groupingSet(); } } @@ -9171,51 +9150,51 @@ export class ImpalaSqlParser extends SQLParserBase { } public groupingSet(): GroupingSetContext { let localContext = new GroupingSetContext(this.context, this.state); - this.enterRule(localContext, 288, ImpalaSqlParser.RULE_groupingSet); + this.enterRule(localContext, 286, ImpalaSqlParser.RULE_groupingSet); let _la: number; try { - this.state = 2041; + this.state = 2031; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2028; + this.state = 2018; this.match(ImpalaSqlParser.LPAREN); - this.state = 2037; + this.state = 2027; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) { case 1: { - this.state = 2029; + this.state = 2019; this.columnItem(); - this.state = 2034; + this.state = 2024; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2030; + this.state = 2020; this.match(ImpalaSqlParser.COMMA); - this.state = 2031; + this.state = 2021; this.columnItem(); } } - this.state = 2036; + this.state = 2026; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } break; } - this.state = 2039; + this.state = 2029; this.match(ImpalaSqlParser.RPAREN); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2040; + this.state = 2030; this.columnItem(); } break; @@ -9237,26 +9216,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public namedQuery(): NamedQueryContext { let localContext = new NamedQueryContext(this.context, this.state); - this.enterRule(localContext, 290, ImpalaSqlParser.RULE_namedQuery); + this.enterRule(localContext, 288, ImpalaSqlParser.RULE_namedQuery); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2043; + this.state = 2033; localContext._name = this.identifier(); - this.state = 2045; + this.state = 2035; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 2044; + this.state = 2034; this.columnAliases(); } } - this.state = 2047; + this.state = 2037; this.match(ImpalaSqlParser.KW_AS); - this.state = 2048; + this.state = 2038; this.subQueryRelation(); } } @@ -9276,12 +9255,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public setQuantifier(): SetQuantifierContext { let localContext = new SetQuantifierContext(this.context, this.state); - this.enterRule(localContext, 292, ImpalaSqlParser.RULE_setQuantifier); + this.enterRule(localContext, 290, ImpalaSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2050; + this.state = 2040; _la = this.tokenStream.LA(1); if(!(_la === 2 || _la === 57)) { this.errorHandler.recoverInline(this); @@ -9308,22 +9287,22 @@ export class ImpalaSqlParser extends SQLParserBase { } public selectItem(): SelectItemContext { let localContext = new SelectItemContext(this.context, this.state); - this.enterRule(localContext, 294, ImpalaSqlParser.RULE_selectItem); + this.enterRule(localContext, 292, ImpalaSqlParser.RULE_selectItem); try { - this.state = 2063; + this.state = 2053; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 256, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2052; + this.state = 2042; this.selectLiteralColumnName(); - this.state = 2054; + this.state = 2044; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 254, this.context) ) { case 1: { - this.state = 2053; + this.state = 2043; this.columnAlias(); } break; @@ -9333,14 +9312,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2056; + this.state = 2046; this.selectExpressionColumnName(); - this.state = 2058; + this.state = 2048; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 255, this.context) ) { case 1: { - this.state = 2057; + this.state = 2047; this.columnAlias(); } break; @@ -9350,18 +9329,18 @@ export class ImpalaSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2060; + this.state = 2050; this.tableAllColumns(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2061; + this.state = 2051; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } - this.state = 2062; + this.state = 2052; this.emptyColumn(); } break; @@ -9383,22 +9362,22 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnAlias(): ColumnAliasContext { let localContext = new ColumnAliasContext(this.context, this.state); - this.enterRule(localContext, 296, ImpalaSqlParser.RULE_columnAlias); + this.enterRule(localContext, 294, ImpalaSqlParser.RULE_columnAlias); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2066; + this.state = 2056; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2065; + this.state = 2055; this.match(ImpalaSqlParser.KW_AS); } } - this.state = 2068; + this.state = 2058; localContext._alias = this.identifier(); } } @@ -9418,11 +9397,11 @@ export class ImpalaSqlParser extends SQLParserBase { } public selectLiteralColumnName(): SelectLiteralColumnNameContext { let localContext = new SelectLiteralColumnNameContext(this.context, this.state); - this.enterRule(localContext, 298, ImpalaSqlParser.RULE_selectLiteralColumnName); + this.enterRule(localContext, 296, ImpalaSqlParser.RULE_selectLiteralColumnName); try { this.enterOuterAlt(localContext, 1); { - this.state = 2070; + this.state = 2060; this.columnNamePath(); } } @@ -9442,11 +9421,11 @@ export class ImpalaSqlParser extends SQLParserBase { } public selectExpressionColumnName(): SelectExpressionColumnNameContext { let localContext = new SelectExpressionColumnNameContext(this.context, this.state); - this.enterRule(localContext, 300, ImpalaSqlParser.RULE_selectExpressionColumnName); + this.enterRule(localContext, 298, ImpalaSqlParser.RULE_selectExpressionColumnName); try { this.enterOuterAlt(localContext, 1); { - this.state = 2072; + this.state = 2062; this.expression(); } } @@ -9466,24 +9445,24 @@ export class ImpalaSqlParser extends SQLParserBase { } public tableAllColumns(): TableAllColumnsContext { let localContext = new TableAllColumnsContext(this.context, this.state); - this.enterRule(localContext, 302, ImpalaSqlParser.RULE_tableAllColumns); + this.enterRule(localContext, 300, ImpalaSqlParser.RULE_tableAllColumns); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2077; + this.state = 2067; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 2074; + this.state = 2064; this.qualifiedName(); - this.state = 2075; + this.state = 2065; this.match(ImpalaSqlParser.DOT); } } - this.state = 2079; + this.state = 2069; this.match(ImpalaSqlParser.ASTERISK); } } @@ -9513,8 +9492,8 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new RelationContext(this.context, parentState); let previousContext = localContext; - let _startState = 304; - this.enterRecursionRule(localContext, 304, ImpalaSqlParser.RULE_relation, _p); + let _startState = 302; + this.enterRecursionRule(localContext, 302, ImpalaSqlParser.RULE_relation, _p); try { let alternative: number; this.enterOuterAlt(localContext, 1); @@ -9524,11 +9503,11 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 2082; + this.state = 2072; this.sampledRelation(); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2097; + this.state = 2087; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 260, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -9542,20 +9521,20 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new JoinRelationContext(new RelationContext(parentContext, parentState)); (localContext as JoinRelationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_relation); - this.state = 2084; + this.state = 2074; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2093; + this.state = 2083; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CROSS: { - this.state = 2085; + this.state = 2075; this.match(ImpalaSqlParser.KW_CROSS); - this.state = 2086; + this.state = 2076; this.match(ImpalaSqlParser.KW_JOIN); - this.state = 2087; + this.state = 2077; (localContext as JoinRelationContext)._right = this.sampledRelation(); } break; @@ -9565,13 +9544,13 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_LEFT: case ImpalaSqlParser.KW_RIGHT: { - this.state = 2088; + this.state = 2078; this.joinType(); - this.state = 2089; + this.state = 2079; this.match(ImpalaSqlParser.KW_JOIN); - this.state = 2090; + this.state = 2080; (localContext as JoinRelationContext)._rightRelation = this.relation(0); - this.state = 2091; + this.state = 2081; this.joinCriteria(); } break; @@ -9581,7 +9560,7 @@ export class ImpalaSqlParser extends SQLParserBase { } } } - this.state = 2099; + this.state = 2089; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 260, this.context); } @@ -9603,21 +9582,21 @@ export class ImpalaSqlParser extends SQLParserBase { } public joinType(): JoinTypeContext { let localContext = new JoinTypeContext(this.context, this.state); - this.enterRule(localContext, 306, ImpalaSqlParser.RULE_joinType); + this.enterRule(localContext, 304, ImpalaSqlParser.RULE_joinType); let _la: number; try { - this.state = 2131; + this.state = 2121; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 267, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2101; + this.state = 2091; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 2100; + this.state = 2090; this.match(ImpalaSqlParser.KW_INNER); } } @@ -9627,14 +9606,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2103; + this.state = 2093; this.match(ImpalaSqlParser.KW_LEFT); - this.state = 2105; + this.state = 2095; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 2104; + this.state = 2094; this.match(ImpalaSqlParser.KW_INNER); } } @@ -9644,14 +9623,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2107; + this.state = 2097; this.match(ImpalaSqlParser.KW_RIGHT); - this.state = 2109; + this.state = 2099; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 2108; + this.state = 2098; this.match(ImpalaSqlParser.KW_INNER); } } @@ -9661,14 +9640,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2111; + this.state = 2101; this.match(ImpalaSqlParser.KW_LEFT); - this.state = 2113; + this.state = 2103; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 141) { { - this.state = 2112; + this.state = 2102; this.match(ImpalaSqlParser.KW_OUTER); } } @@ -9678,14 +9657,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 5: this.enterOuterAlt(localContext, 5); { - this.state = 2115; + this.state = 2105; this.match(ImpalaSqlParser.KW_RIGHT); - this.state = 2117; + this.state = 2107; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 141) { { - this.state = 2116; + this.state = 2106; this.match(ImpalaSqlParser.KW_OUTER); } } @@ -9695,14 +9674,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 6: this.enterOuterAlt(localContext, 6); { - this.state = 2119; + this.state = 2109; this.match(ImpalaSqlParser.KW_FULL); - this.state = 2121; + this.state = 2111; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 141) { { - this.state = 2120; + this.state = 2110; this.match(ImpalaSqlParser.KW_OUTER); } } @@ -9712,36 +9691,36 @@ export class ImpalaSqlParser extends SQLParserBase { case 7: this.enterOuterAlt(localContext, 7); { - this.state = 2123; + this.state = 2113; this.match(ImpalaSqlParser.KW_LEFT); - this.state = 2124; + this.state = 2114; this.match(ImpalaSqlParser.KW_SEMI); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 2125; + this.state = 2115; this.match(ImpalaSqlParser.KW_RIGHT); - this.state = 2126; + this.state = 2116; this.match(ImpalaSqlParser.KW_SEMI); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 2127; + this.state = 2117; this.match(ImpalaSqlParser.KW_LEFT); - this.state = 2128; + this.state = 2118; this.match(ImpalaSqlParser.KW_ANTI); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 2129; + this.state = 2119; this.match(ImpalaSqlParser.KW_RIGHT); - this.state = 2130; + this.state = 2120; this.match(ImpalaSqlParser.KW_ANTI); } break; @@ -9763,29 +9742,29 @@ export class ImpalaSqlParser extends SQLParserBase { } public joinCriteria(): JoinCriteriaContext { let localContext = new JoinCriteriaContext(this.context, this.state); - this.enterRule(localContext, 308, ImpalaSqlParser.RULE_joinCriteria); + this.enterRule(localContext, 306, ImpalaSqlParser.RULE_joinCriteria); let _la: number; try { - this.state = 2150; + this.state = 2140; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ON: this.enterOuterAlt(localContext, 1); { - this.state = 2133; + this.state = 2123; this.match(ImpalaSqlParser.KW_ON); - this.state = 2136; + this.state = 2126; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 268, this.context) ) { case 1: { - this.state = 2134; + this.state = 2124; this.booleanExpression(0); } break; case 2: { - this.state = 2135; + this.state = 2125; this.columnNameAllowEmpty(); } break; @@ -9795,29 +9774,29 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_USING: this.enterOuterAlt(localContext, 2); { - this.state = 2138; + this.state = 2128; this.match(ImpalaSqlParser.KW_USING); - this.state = 2139; + this.state = 2129; this.match(ImpalaSqlParser.LPAREN); - this.state = 2140; + this.state = 2130; this.identifier(); - this.state = 2145; + this.state = 2135; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2141; + this.state = 2131; this.match(ImpalaSqlParser.COMMA); - this.state = 2142; + this.state = 2132; this.identifier(); } } - this.state = 2147; + this.state = 2137; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2148; + this.state = 2138; this.match(ImpalaSqlParser.RPAREN); } break; @@ -9841,39 +9820,47 @@ export class ImpalaSqlParser extends SQLParserBase { } public sampledRelation(): SampledRelationContext { let localContext = new SampledRelationContext(this.context, this.state); - this.enterRule(localContext, 310, ImpalaSqlParser.RULE_sampledRelation); + this.enterRule(localContext, 308, ImpalaSqlParser.RULE_sampledRelation); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2152; + this.state = 2142; this.aliasedRelation(); - this.state = 2165; + this.state = 2155; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 272, this.context) ) { case 1: { - this.state = 2153; + this.state = 2143; this.match(ImpalaSqlParser.KW_TABLESAMPLE); - this.state = 2154; - this.sampleType(); - this.state = 2155; + this.state = 2144; + _la = this.tokenStream.LA(1); + if(!(_la === 14 || _la === 185)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 2145; this.match(ImpalaSqlParser.LPAREN); - this.state = 2156; + this.state = 2146; localContext._percentage = this.expression(); - this.state = 2157; + this.state = 2147; this.match(ImpalaSqlParser.RPAREN); - this.state = 2163; + this.state = 2153; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 271, this.context) ) { case 1: { - this.state = 2158; + this.state = 2148; this.match(ImpalaSqlParser.KW_REPEATABLE); - this.state = 2159; + this.state = 2149; this.match(ImpalaSqlParser.LPAREN); - this.state = 2160; + this.state = 2150; localContext._seed = this.expression(); - this.state = 2161; + this.state = 2151; this.match(ImpalaSqlParser.RPAREN); } break; @@ -9897,70 +9884,38 @@ export class ImpalaSqlParser extends SQLParserBase { } return localContext; } - public sampleType(): SampleTypeContext { - let localContext = new SampleTypeContext(this.context, this.state); - this.enterRule(localContext, 312, ImpalaSqlParser.RULE_sampleType); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2167; - _la = this.tokenStream.LA(1); - if(!(_la === 14 || _la === 185)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public aliasedRelation(): AliasedRelationContext { let localContext = new AliasedRelationContext(this.context, this.state); - this.enterRule(localContext, 314, ImpalaSqlParser.RULE_aliasedRelation); + this.enterRule(localContext, 310, ImpalaSqlParser.RULE_aliasedRelation); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2169; + this.state = 2157; this.relationPrimary(); - this.state = 2177; + this.state = 2165; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 275, this.context) ) { case 1: { - this.state = 2171; + this.state = 2159; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2170; + this.state = 2158; this.match(ImpalaSqlParser.KW_AS); } } - this.state = 2173; + this.state = 2161; localContext._alias = this.identifier(); - this.state = 2175; + this.state = 2163; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 274, this.context) ) { case 1: { - this.state = 2174; + this.state = 2162; this.columnAliases(); } break; @@ -9986,32 +9941,32 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnAliases(): ColumnAliasesContext { let localContext = new ColumnAliasesContext(this.context, this.state); - this.enterRule(localContext, 316, ImpalaSqlParser.RULE_columnAliases); + this.enterRule(localContext, 312, ImpalaSqlParser.RULE_columnAliases); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2179; + this.state = 2167; this.match(ImpalaSqlParser.LPAREN); - this.state = 2180; + this.state = 2168; this.columnNamePath(); - this.state = 2185; + this.state = 2173; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2181; + this.state = 2169; this.match(ImpalaSqlParser.COMMA); - this.state = 2182; + this.state = 2170; this.columnNamePath(); } } - this.state = 2187; + this.state = 2175; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2188; + this.state = 2176; this.match(ImpalaSqlParser.RPAREN); } } @@ -10031,36 +9986,36 @@ export class ImpalaSqlParser extends SQLParserBase { } public relationPrimary(): RelationPrimaryContext { let localContext = new RelationPrimaryContext(this.context, this.state); - this.enterRule(localContext, 318, ImpalaSqlParser.RULE_relationPrimary); + this.enterRule(localContext, 314, ImpalaSqlParser.RULE_relationPrimary); try { - this.state = 2194; + this.state = 2182; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 277, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2190; + this.state = 2178; this.tableOrViewPath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2191; + this.state = 2179; this.atomSubQueryTableSource(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2192; + this.state = 2180; this.unnest(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2193; + this.state = 2181; this.parenthesizedRelation(); } break; @@ -10082,22 +10037,22 @@ export class ImpalaSqlParser extends SQLParserBase { } public atomSubQueryTableSource(): AtomSubQueryTableSourceContext { let localContext = new AtomSubQueryTableSourceContext(this.context, this.state); - this.enterRule(localContext, 320, ImpalaSqlParser.RULE_atomSubQueryTableSource); + this.enterRule(localContext, 316, ImpalaSqlParser.RULE_atomSubQueryTableSource); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2197; + this.state = 2185; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 113) { { - this.state = 2196; + this.state = 2184; this.match(ImpalaSqlParser.KW_LATERAL); } } - this.state = 2199; + this.state = 2187; this.subQueryRelation(); } } @@ -10117,15 +10072,15 @@ export class ImpalaSqlParser extends SQLParserBase { } public subQueryRelation(): SubQueryRelationContext { let localContext = new SubQueryRelationContext(this.context, this.state); - this.enterRule(localContext, 322, ImpalaSqlParser.RULE_subQueryRelation); + this.enterRule(localContext, 318, ImpalaSqlParser.RULE_subQueryRelation); try { this.enterOuterAlt(localContext, 1); { - this.state = 2201; + this.state = 2189; this.match(ImpalaSqlParser.LPAREN); - this.state = 2202; + this.state = 2190; this.queryStatement(); - this.state = 2203; + this.state = 2191; this.match(ImpalaSqlParser.RPAREN); } } @@ -10145,43 +10100,43 @@ export class ImpalaSqlParser extends SQLParserBase { } public unnest(): UnnestContext { let localContext = new UnnestContext(this.context, this.state); - this.enterRule(localContext, 324, ImpalaSqlParser.RULE_unnest); + this.enterRule(localContext, 320, ImpalaSqlParser.RULE_unnest); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2205; + this.state = 2193; this.match(ImpalaSqlParser.KW_UNNEST); - this.state = 2206; + this.state = 2194; this.match(ImpalaSqlParser.LPAREN); - this.state = 2207; + this.state = 2195; this.expression(); - this.state = 2212; + this.state = 2200; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2208; + this.state = 2196; this.match(ImpalaSqlParser.COMMA); - this.state = 2209; + this.state = 2197; this.expression(); } } - this.state = 2214; + this.state = 2202; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2215; + this.state = 2203; this.match(ImpalaSqlParser.RPAREN); - this.state = 2218; + this.state = 2206; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 280, this.context) ) { case 1: { - this.state = 2216; + this.state = 2204; this.match(ImpalaSqlParser.KW_WITH); - this.state = 2217; + this.state = 2205; this.match(ImpalaSqlParser.KW_ORDINALITY); } break; @@ -10204,15 +10159,15 @@ export class ImpalaSqlParser extends SQLParserBase { } public parenthesizedRelation(): ParenthesizedRelationContext { let localContext = new ParenthesizedRelationContext(this.context, this.state); - this.enterRule(localContext, 326, ImpalaSqlParser.RULE_parenthesizedRelation); + this.enterRule(localContext, 322, ImpalaSqlParser.RULE_parenthesizedRelation); try { this.enterOuterAlt(localContext, 1); { - this.state = 2220; + this.state = 2208; this.match(ImpalaSqlParser.LPAREN); - this.state = 2221; + this.state = 2209; this.relation(0); - this.state = 2222; + this.state = 2210; this.match(ImpalaSqlParser.RPAREN); } } @@ -10232,22 +10187,22 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnItem(): ColumnItemContext { let localContext = new ColumnItemContext(this.context, this.state); - this.enterRule(localContext, 328, ImpalaSqlParser.RULE_columnItem); + this.enterRule(localContext, 324, ImpalaSqlParser.RULE_columnItem); try { - this.state = 2226; + this.state = 2214; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 281, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2224; + this.state = 2212; this.columnNamePath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2225; + this.state = 2213; this.expression(); } break; @@ -10269,11 +10224,11 @@ export class ImpalaSqlParser extends SQLParserBase { } public expression(): ExpressionContext { let localContext = new ExpressionContext(this.context, this.state); - this.enterRule(localContext, 330, ImpalaSqlParser.RULE_expression); + this.enterRule(localContext, 326, ImpalaSqlParser.RULE_expression); try { this.enterOuterAlt(localContext, 1); { - this.state = 2228; + this.state = 2216; this.booleanExpression(0); } } @@ -10303,13 +10258,13 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new BooleanExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 332; - this.enterRecursionRule(localContext, 332, ImpalaSqlParser.RULE_booleanExpression, _p); + let _startState = 328; + this.enterRecursionRule(localContext, 328, ImpalaSqlParser.RULE_booleanExpression, _p); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2237; + this.state = 2225; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ARRAY: @@ -10385,14 +10340,14 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 2231; + this.state = 2219; (localContext as PredicatedContext)._valueExpression = this.valueExpression(0); - this.state = 2233; + this.state = 2221; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 282, this.context) ) { case 1: { - this.state = 2232; + this.state = 2220; this.predicate((localContext as PredicatedContext)._valueExpression); } break; @@ -10404,9 +10359,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LogicalNotContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2235; + this.state = 2223; this.match(ImpalaSqlParser.KW_NOT); - this.state = 2236; + this.state = 2224; this.booleanExpression(3); } break; @@ -10414,7 +10369,7 @@ export class ImpalaSqlParser extends SQLParserBase { throw new antlr.NoViableAltException(this); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2247; + this.state = 2235; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 285, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -10424,7 +10379,7 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2245; + this.state = 2233; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 284, this.context) ) { case 1: @@ -10432,13 +10387,13 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LogicalBinaryContext(new BooleanExpressionContext(parentContext, parentState)); (localContext as LogicalBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_booleanExpression); - this.state = 2239; + this.state = 2227; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2240; + this.state = 2228; (localContext as LogicalBinaryContext)._operator = this.match(ImpalaSqlParser.KW_AND); - this.state = 2241; + this.state = 2229; (localContext as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -10447,20 +10402,20 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LogicalBinaryContext(new BooleanExpressionContext(parentContext, parentState)); (localContext as LogicalBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_booleanExpression); - this.state = 2242; + this.state = 2230; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 2243; + this.state = 2231; (localContext as LogicalBinaryContext)._operator = this.match(ImpalaSqlParser.KW_OR); - this.state = 2244; + this.state = 2232; (localContext as LogicalBinaryContext)._right = this.booleanExpression(2); } break; } } } - this.state = 2249; + this.state = 2237; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 285, this.context); } @@ -10482,19 +10437,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public predicate(value: antlr.ParserRuleContext): PredicateContext { let localContext = new PredicateContext(this.context, this.state, value); - this.enterRule(localContext, 334, ImpalaSqlParser.RULE_predicate); + this.enterRule(localContext, 330, ImpalaSqlParser.RULE_predicate); let _la: number; try { - this.state = 2308; + this.state = 2296; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 294, this.context) ) { case 1: localContext = new ComparisonContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2250; + this.state = 2238; this.comparisonOperator(); - this.state = 2251; + this.state = 2239; (localContext as ComparisonContext)._right = this.valueExpression(0); } break; @@ -10502,11 +10457,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new QuantifiedComparisonContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2253; + this.state = 2241; this.comparisonOperator(); - this.state = 2254; + this.state = 2242; this.comparisonQuantifier(); - this.state = 2255; + this.state = 2243; this.subQueryRelation(); } break; @@ -10514,23 +10469,23 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BetweenContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2258; + this.state = 2246; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2257; + this.state = 2245; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2260; + this.state = 2248; this.match(ImpalaSqlParser.KW_BETWEEN); - this.state = 2261; + this.state = 2249; (localContext as BetweenContext)._lower = this.valueExpression(0); - this.state = 2262; + this.state = 2250; this.match(ImpalaSqlParser.KW_AND); - this.state = 2263; + this.state = 2251; (localContext as BetweenContext)._upper = this.valueExpression(0); } break; @@ -10538,39 +10493,39 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new InListContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 2266; + this.state = 2254; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2265; + this.state = 2253; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2268; + this.state = 2256; this.match(ImpalaSqlParser.KW_IN); - this.state = 2269; + this.state = 2257; this.match(ImpalaSqlParser.LPAREN); - this.state = 2270; + this.state = 2258; this.expression(); - this.state = 2275; + this.state = 2263; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2271; + this.state = 2259; this.match(ImpalaSqlParser.COMMA); - this.state = 2272; + this.state = 2260; this.expression(); } } - this.state = 2277; + this.state = 2265; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2278; + this.state = 2266; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10578,19 +10533,19 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new InSubqueryContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 2281; + this.state = 2269; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2280; + this.state = 2268; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2283; + this.state = 2271; this.match(ImpalaSqlParser.KW_IN); - this.state = 2284; + this.state = 2272; this.subQueryRelation(); } break; @@ -10598,17 +10553,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LikeContext(localContext); this.enterOuterAlt(localContext, 6); { - this.state = 2286; + this.state = 2274; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2285; + this.state = 2273; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2288; + this.state = 2276; _la = this.tokenStream.LA(1); if(!(_la === 106 || _la === 115 || _la === 164)) { this.errorHandler.recoverInline(this); @@ -10617,16 +10572,16 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2289; + this.state = 2277; (localContext as LikeContext)._pattern = this.valueExpression(0); - this.state = 2292; + this.state = 2280; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 291, this.context) ) { case 1: { - this.state = 2290; + this.state = 2278; this.match(ImpalaSqlParser.KW_ESCAPE); - this.state = 2291; + this.state = 2279; (localContext as LikeContext)._escape = this.valueExpression(0); } break; @@ -10637,7 +10592,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new REGEXPContext(localContext); this.enterOuterAlt(localContext, 7); { - this.state = 2294; + this.state = 2282; _la = this.tokenStream.LA(1); if(!(_la === 105 || _la === 163)) { this.errorHandler.recoverInline(this); @@ -10646,7 +10601,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2295; + this.state = 2283; (localContext as REGEXPContext)._pattern = this.valueExpression(0); } break; @@ -10654,19 +10609,19 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new NullOrUnKnownOrBooleanPredicateContext(localContext); this.enterOuterAlt(localContext, 8); { - this.state = 2296; + this.state = 2284; this.match(ImpalaSqlParser.KW_IS); - this.state = 2298; + this.state = 2286; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2297; + this.state = 2285; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2300; + this.state = 2288; _la = this.tokenStream.LA(1); if(!(_la === 70 || _la === 133 || _la === 194 || _la === 208)) { this.errorHandler.recoverInline(this); @@ -10681,23 +10636,23 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DistinctFromContext(localContext); this.enterOuterAlt(localContext, 9); { - this.state = 2301; + this.state = 2289; this.match(ImpalaSqlParser.KW_IS); - this.state = 2303; + this.state = 2291; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2302; + this.state = 2290; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2305; + this.state = 2293; this.match(ImpalaSqlParser.KW_DISTINCT); - this.state = 2306; + this.state = 2294; this.match(ImpalaSqlParser.KW_FROM); - this.state = 2307; + this.state = 2295; (localContext as DistinctFromContext)._right = this.valueExpression(0); } break; @@ -10729,14 +10684,14 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new ValueExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 336; - this.enterRecursionRule(localContext, 336, ImpalaSqlParser.RULE_valueExpression, _p); + let _startState = 332; + this.enterRecursionRule(localContext, 332, ImpalaSqlParser.RULE_valueExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2314; + this.state = 2302; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 295, this.context) ) { case 1: @@ -10745,7 +10700,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 2311; + this.state = 2299; this.primaryExpression(0); } break; @@ -10754,7 +10709,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArithmeticUnaryContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2312; + this.state = 2300; (localContext as ArithmeticUnaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 255 || _la === 256)) { @@ -10764,13 +10719,13 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2313; + this.state = 2301; this.valueExpression(4); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2327; + this.state = 2315; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 297, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -10780,7 +10735,7 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2325; + this.state = 2313; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 296, this.context) ) { case 1: @@ -10788,11 +10743,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_valueExpression); - this.state = 2316; + this.state = 2304; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 2317; + this.state = 2305; (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & 7) !== 0))) { @@ -10802,7 +10757,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2318; + this.state = 2306; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -10811,11 +10766,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_valueExpression); - this.state = 2319; + this.state = 2307; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2320; + this.state = 2308; (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 255 || _la === 256)) { @@ -10825,7 +10780,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2321; + this.state = 2309; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(3); } break; @@ -10834,20 +10789,20 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ConcatenationContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ConcatenationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_valueExpression); - this.state = 2322; + this.state = 2310; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 2323; + this.state = 2311; this.match(ImpalaSqlParser.CONCAT); - this.state = 2324; + this.state = 2312; (localContext as ConcatenationContext)._right = this.valueExpression(2); } break; } } } - this.state = 2329; + this.state = 2317; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 297, this.context); } @@ -10869,99 +10824,99 @@ export class ImpalaSqlParser extends SQLParserBase { } public functionCallExpression(): FunctionCallExpressionContext { let localContext = new FunctionCallExpressionContext(this.context, this.state); - this.enterRule(localContext, 338, ImpalaSqlParser.RULE_functionCallExpression); + this.enterRule(localContext, 334, ImpalaSqlParser.RULE_functionCallExpression); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2330; + this.state = 2318; this.functionNamePath(); - this.state = 2331; + this.state = 2319; this.match(ImpalaSqlParser.LPAREN); - this.state = 2343; + this.state = 2331; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805323012) !== 0) || ((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & 1442972447) !== 0) || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 2218795145) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 269631421) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 271654979) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 537926659) !== 0) || ((((_la - 217)) & ~0x1F) === 0 && ((1 << (_la - 217)) & 16393) !== 0) || ((((_la - 255)) & ~0x1F) === 0 && ((1 << (_la - 255)) & 2549744643) !== 0)) { { - this.state = 2333; + this.state = 2321; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2 || _la === 57) { { - this.state = 2332; + this.state = 2320; this.setQuantifier(); } } - this.state = 2335; + this.state = 2323; this.expression(); - this.state = 2340; + this.state = 2328; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2336; + this.state = 2324; this.match(ImpalaSqlParser.COMMA); - this.state = 2337; + this.state = 2325; this.expression(); } } - this.state = 2342; + this.state = 2330; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2355; + this.state = 2343; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 139) { { - this.state = 2345; + this.state = 2333; this.match(ImpalaSqlParser.KW_ORDER); - this.state = 2346; + this.state = 2334; this.match(ImpalaSqlParser.KW_BY); - this.state = 2347; + this.state = 2335; this.sortItem(); - this.state = 2352; + this.state = 2340; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2348; + this.state = 2336; this.match(ImpalaSqlParser.COMMA); - this.state = 2349; + this.state = 2337; this.sortItem(); } } - this.state = 2354; + this.state = 2342; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2357; + this.state = 2345; this.match(ImpalaSqlParser.RPAREN); - this.state = 2359; + this.state = 2347; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 303, this.context) ) { case 1: { - this.state = 2358; + this.state = 2346; this.filter(); } break; } - this.state = 2362; + this.state = 2350; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 304, this.context) ) { case 1: { - this.state = 2361; + this.state = 2349; this.over(); } break; @@ -10994,14 +10949,14 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new PrimaryExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 340; - this.enterRecursionRule(localContext, 340, ImpalaSqlParser.RULE_primaryExpression, _p); + let _startState = 336; + this.enterRecursionRule(localContext, 336, ImpalaSqlParser.RULE_primaryExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2577; + this.state = 2565; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 327, this.context) ) { case 1: @@ -11010,7 +10965,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 2365; + this.state = 2353; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -11019,7 +10974,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new IntervalLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2366; + this.state = 2354; this.interval(); } break; @@ -11028,9 +10983,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new TypeConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2367; + this.state = 2355; this.identifier(); - this.state = 2368; + this.state = 2356; this.stringLiteral(); } break; @@ -11039,9 +10994,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new TypeConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2370; + this.state = 2358; this.match(ImpalaSqlParser.DOUBLE_PRECISION); - this.state = 2371; + this.state = 2359; this.stringLiteral(); } break; @@ -11050,7 +11005,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new NumericLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2372; + this.state = 2360; this.number_(); } break; @@ -11059,8 +11014,15 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BooleanLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2373; - this.booleanValue(); + this.state = 2361; + _la = this.tokenStream.LA(1); + if(!(_la === 70 || _la === 194)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } } break; case 7: @@ -11068,7 +11030,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new StringLiteralValuesContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2374; + this.state = 2362; this.stringLiteral(); } break; @@ -11077,7 +11039,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BinaryLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2375; + this.state = 2363; this.match(ImpalaSqlParser.BINARY_LITERAL); } break; @@ -11086,7 +11048,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ParameterContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2376; + this.state = 2364; this.match(ImpalaSqlParser.QUESTION); } break; @@ -11095,17 +11057,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new PositionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2377; + this.state = 2365; this.match(ImpalaSqlParser.KW_POSITION); - this.state = 2378; + this.state = 2366; this.match(ImpalaSqlParser.LPAREN); - this.state = 2379; + this.state = 2367; this.valueExpression(0); - this.state = 2380; + this.state = 2368; this.match(ImpalaSqlParser.KW_IN); - this.state = 2381; + this.state = 2369; this.valueExpression(0); - this.state = 2382; + this.state = 2370; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11114,41 +11076,41 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new RowConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2384; + this.state = 2372; this.match(ImpalaSqlParser.LPAREN); - this.state = 2385; + this.state = 2373; this.expression(); - this.state = 2388; + this.state = 2376; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2386; + this.state = 2374; this.match(ImpalaSqlParser.KW_AS); - this.state = 2387; + this.state = 2375; this.type_(0); } } - this.state = 2398; + this.state = 2386; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 307, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 2390; + this.state = 2378; this.match(ImpalaSqlParser.COMMA); - this.state = 2391; + this.state = 2379; this.expression(); - this.state = 2394; + this.state = 2382; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2392; + this.state = 2380; this.match(ImpalaSqlParser.KW_AS); - this.state = 2393; + this.state = 2381; this.type_(0); } } @@ -11156,11 +11118,11 @@ export class ImpalaSqlParser extends SQLParserBase { } } } - this.state = 2400; + this.state = 2388; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 307, this.context); } - this.state = 2401; + this.state = 2389; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11169,29 +11131,29 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new RowConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2403; + this.state = 2391; this.match(ImpalaSqlParser.KW_ROW); - this.state = 2404; + this.state = 2392; this.match(ImpalaSqlParser.LPAREN); - this.state = 2405; + this.state = 2393; this.expression(); - this.state = 2410; + this.state = 2398; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2406; + this.state = 2394; this.match(ImpalaSqlParser.COMMA); - this.state = 2407; + this.state = 2395; this.expression(); } } - this.state = 2412; + this.state = 2400; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2413; + this.state = 2401; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11200,30 +11162,30 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new FunctionCallContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2415; + this.state = 2403; this.functionNamePath(); - this.state = 2416; + this.state = 2404; this.match(ImpalaSqlParser.LPAREN); - this.state = 2417; + this.state = 2405; this.match(ImpalaSqlParser.ASTERISK); - this.state = 2418; + this.state = 2406; this.match(ImpalaSqlParser.RPAREN); - this.state = 2420; + this.state = 2408; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 309, this.context) ) { case 1: { - this.state = 2419; + this.state = 2407; this.filter(); } break; } - this.state = 2423; + this.state = 2411; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 310, this.context) ) { case 1: { - this.state = 2422; + this.state = 2410; this.over(); } break; @@ -11235,7 +11197,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new FunctionCallContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2425; + this.state = 2413; this.functionCallExpression(); } break; @@ -11244,11 +11206,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LambdaContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2426; + this.state = 2414; this.identifier(); - this.state = 2427; + this.state = 2415; this.match(ImpalaSqlParser.RIGHT_ARROW); - this.state = 2428; + this.state = 2416; this.expression(); } break; @@ -11257,39 +11219,39 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LambdaContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2430; + this.state = 2418; this.match(ImpalaSqlParser.LPAREN); - this.state = 2439; + this.state = 2427; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 2431; + this.state = 2419; this.identifier(); - this.state = 2436; + this.state = 2424; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2432; + this.state = 2420; this.match(ImpalaSqlParser.COMMA); - this.state = 2433; + this.state = 2421; this.identifier(); } } - this.state = 2438; + this.state = 2426; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2441; + this.state = 2429; this.match(ImpalaSqlParser.RPAREN); - this.state = 2442; + this.state = 2430; this.match(ImpalaSqlParser.RIGHT_ARROW); - this.state = 2443; + this.state = 2431; this.expression(); } break; @@ -11298,11 +11260,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubqueryExpressionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2444; + this.state = 2432; this.match(ImpalaSqlParser.LPAREN); - this.state = 2445; + this.state = 2433; this.queryStatement(); - this.state = 2446; + this.state = 2434; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11311,13 +11273,13 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ExistsContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2448; + this.state = 2436; this.match(ImpalaSqlParser.KW_EXISTS); - this.state = 2449; + this.state = 2437; this.match(ImpalaSqlParser.LPAREN); - this.state = 2450; + this.state = 2438; this.queryStatement(); - this.state = 2451; + this.state = 2439; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11326,37 +11288,37 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SimpleCaseContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2453; + this.state = 2441; this.match(ImpalaSqlParser.KW_CASE); - this.state = 2454; + this.state = 2442; this.valueExpression(0); - this.state = 2456; + this.state = 2444; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 2455; + this.state = 2443; this.whenClause(); } } - this.state = 2458; + this.state = 2446; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 214); - this.state = 2462; + this.state = 2450; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 2460; + this.state = 2448; this.match(ImpalaSqlParser.KW_ELSE); - this.state = 2461; + this.state = 2449; (localContext as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 2464; + this.state = 2452; this.match(ImpalaSqlParser.KW_END); } break; @@ -11365,35 +11327,35 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SearchedCaseContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2466; + this.state = 2454; this.match(ImpalaSqlParser.KW_CASE); - this.state = 2468; + this.state = 2456; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 2467; + this.state = 2455; this.whenClause(); } } - this.state = 2470; + this.state = 2458; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 214); - this.state = 2474; + this.state = 2462; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 2472; + this.state = 2460; this.match(ImpalaSqlParser.KW_ELSE); - this.state = 2473; + this.state = 2461; (localContext as SearchedCaseContext)._elseExpression = this.expression(); } } - this.state = 2476; + this.state = 2464; this.match(ImpalaSqlParser.KW_END); } break; @@ -11402,17 +11364,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CastContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2478; + this.state = 2466; this.match(ImpalaSqlParser.KW_CAST); - this.state = 2479; + this.state = 2467; this.match(ImpalaSqlParser.LPAREN); - this.state = 2480; + this.state = 2468; this.expression(); - this.state = 2481; + this.state = 2469; this.match(ImpalaSqlParser.KW_AS); - this.state = 2482; + this.state = 2470; this.type_(0); - this.state = 2483; + this.state = 2471; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11421,17 +11383,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CastContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2485; + this.state = 2473; this.match(ImpalaSqlParser.KW_TRY_CAST); - this.state = 2486; + this.state = 2474; this.match(ImpalaSqlParser.LPAREN); - this.state = 2487; + this.state = 2475; this.expression(); - this.state = 2488; + this.state = 2476; this.match(ImpalaSqlParser.KW_AS); - this.state = 2489; + this.state = 2477; this.type_(0); - this.state = 2490; + this.state = 2478; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11440,37 +11402,37 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArrayConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2492; + this.state = 2480; this.match(ImpalaSqlParser.KW_ARRAY); - this.state = 2493; + this.state = 2481; this.match(ImpalaSqlParser.LSQUARE); - this.state = 2502; + this.state = 2490; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805323008) !== 0) || ((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & 1442841375) !== 0) || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 2218795145) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 269631421) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 271654979) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 537926659) !== 0) || ((((_la - 217)) & ~0x1F) === 0 && ((1 << (_la - 217)) & 16393) !== 0) || ((((_la - 255)) & ~0x1F) === 0 && ((1 << (_la - 255)) & 2549744643) !== 0)) { { - this.state = 2494; + this.state = 2482; this.expression(); - this.state = 2499; + this.state = 2487; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2495; + this.state = 2483; this.match(ImpalaSqlParser.COMMA); - this.state = 2496; + this.state = 2484; this.expression(); } } - this.state = 2501; + this.state = 2489; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2504; + this.state = 2492; this.match(ImpalaSqlParser.RSQUARE); } break; @@ -11479,7 +11441,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ColumnReferenceContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2505; + this.state = 2493; this.columnName(); } break; @@ -11488,7 +11450,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2506; + this.state = 2494; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_DATE); } break; @@ -11497,18 +11459,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2507; + this.state = 2495; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_TIME); - this.state = 2511; + this.state = 2499; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 319, this.context) ) { case 1: { - this.state = 2508; + this.state = 2496; this.match(ImpalaSqlParser.LPAREN); - this.state = 2509; + this.state = 2497; (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2510; + this.state = 2498; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11520,18 +11482,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2513; + this.state = 2501; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_TIMESTAMP); - this.state = 2517; + this.state = 2505; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 320, this.context) ) { case 1: { - this.state = 2514; + this.state = 2502; this.match(ImpalaSqlParser.LPAREN); - this.state = 2515; + this.state = 2503; (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2516; + this.state = 2504; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11543,18 +11505,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2519; + this.state = 2507; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_LOCALTIME); - this.state = 2523; + this.state = 2511; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 321, this.context) ) { case 1: { - this.state = 2520; + this.state = 2508; this.match(ImpalaSqlParser.LPAREN); - this.state = 2521; + this.state = 2509; (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2522; + this.state = 2510; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11566,18 +11528,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2525; + this.state = 2513; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_LOCALTIMESTAMP); - this.state = 2529; + this.state = 2517; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 322, this.context) ) { case 1: { - this.state = 2526; + this.state = 2514; this.match(ImpalaSqlParser.LPAREN); - this.state = 2527; + this.state = 2515; (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2528; + this.state = 2516; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11589,7 +11551,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CurrentUserContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2531; + this.state = 2519; (localContext as CurrentUserContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_USER); } break; @@ -11598,7 +11560,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CurrentPathContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2532; + this.state = 2520; (localContext as CurrentPathContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_PATH); } break; @@ -11607,29 +11569,29 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubstringContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2533; + this.state = 2521; this.match(ImpalaSqlParser.KW_SUBSTRING); - this.state = 2534; + this.state = 2522; this.match(ImpalaSqlParser.LPAREN); - this.state = 2535; + this.state = 2523; this.valueExpression(0); - this.state = 2536; + this.state = 2524; this.match(ImpalaSqlParser.KW_FROM); - this.state = 2537; + this.state = 2525; this.valueExpression(0); - this.state = 2540; + this.state = 2528; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 78) { { - this.state = 2538; + this.state = 2526; this.match(ImpalaSqlParser.KW_FOR); - this.state = 2539; + this.state = 2527; this.valueExpression(0); } } - this.state = 2542; + this.state = 2530; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11638,25 +11600,32 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new NormalizeContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2544; + this.state = 2532; this.match(ImpalaSqlParser.KW_NORMALIZE); - this.state = 2545; + this.state = 2533; this.match(ImpalaSqlParser.LPAREN); - this.state = 2546; + this.state = 2534; this.valueExpression(0); - this.state = 2549; + this.state = 2537; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 2547; + this.state = 2535; this.match(ImpalaSqlParser.COMMA); - this.state = 2548; - this.normalForm(); + this.state = 2536; + _la = this.tokenStream.LA(1); + if(!(((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } } } - this.state = 2551; + this.state = 2539; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11665,17 +11634,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ExtractContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2553; + this.state = 2541; this.match(ImpalaSqlParser.KW_EXTRACT); - this.state = 2554; + this.state = 2542; this.match(ImpalaSqlParser.LPAREN); - this.state = 2555; + this.state = 2543; this.identifier(); - this.state = 2556; + this.state = 2544; this.match(ImpalaSqlParser.KW_FROM); - this.state = 2557; + this.state = 2545; this.valueExpression(0); - this.state = 2558; + this.state = 2546; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11684,11 +11653,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ParenthesizedExpressionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2560; + this.state = 2548; this.match(ImpalaSqlParser.LPAREN); - this.state = 2561; + this.state = 2549; this.expression(); - this.state = 2562; + this.state = 2550; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11697,43 +11666,43 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new GroupingOperationContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2564; + this.state = 2552; this.match(ImpalaSqlParser.KW_GROUPING); - this.state = 2565; + this.state = 2553; this.match(ImpalaSqlParser.LPAREN); - this.state = 2574; + this.state = 2562; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 2566; + this.state = 2554; this.qualifiedName(); - this.state = 2571; + this.state = 2559; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2567; + this.state = 2555; this.match(ImpalaSqlParser.COMMA); - this.state = 2568; + this.state = 2556; this.qualifiedName(); } } - this.state = 2573; + this.state = 2561; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2576; + this.state = 2564; this.match(ImpalaSqlParser.RPAREN); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2589; + this.state = 2577; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 329, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -11743,7 +11712,7 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2587; + this.state = 2575; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 328, this.context) ) { case 1: @@ -11751,15 +11720,15 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubscriptContext(new PrimaryExpressionContext(parentContext, parentState)); (localContext as SubscriptContext)._value = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_primaryExpression); - this.state = 2579; + this.state = 2567; if (!(this.precpred(this.context, 15))) { throw this.createFailedPredicateException("this.precpred(this.context, 15)"); } - this.state = 2580; + this.state = 2568; this.match(ImpalaSqlParser.LSQUARE); - this.state = 2581; + this.state = 2569; (localContext as SubscriptContext)._index = this.valueExpression(0); - this.state = 2582; + this.state = 2570; this.match(ImpalaSqlParser.RSQUARE); } break; @@ -11768,20 +11737,20 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DereferenceContext(new PrimaryExpressionContext(parentContext, parentState)); (localContext as DereferenceContext)._base = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_primaryExpression); - this.state = 2584; + this.state = 2572; if (!(this.precpred(this.context, 13))) { throw this.createFailedPredicateException("this.precpred(this.context, 13)"); } - this.state = 2585; + this.state = 2573; this.match(ImpalaSqlParser.DOT); - this.state = 2586; + this.state = 2574; (localContext as DereferenceContext)._fieldName = this.identifier(); } break; } } } - this.state = 2591; + this.state = 2579; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 329, this.context); } @@ -11803,16 +11772,16 @@ export class ImpalaSqlParser extends SQLParserBase { } public stringLiteral(): StringLiteralContext { let localContext = new StringLiteralContext(this.context, this.state); - this.enterRule(localContext, 342, ImpalaSqlParser.RULE_stringLiteral); + this.enterRule(localContext, 338, ImpalaSqlParser.RULE_stringLiteral); try { - this.state = 2598; + this.state = 2586; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: localContext = new BasicStringLiteralContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2592; + this.state = 2580; this.match(ImpalaSqlParser.STRING); } break; @@ -11820,16 +11789,16 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnicodeStringLiteralContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2593; + this.state = 2581; this.match(ImpalaSqlParser.UNICODE_STRING); - this.state = 2596; + this.state = 2584; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 330, this.context) ) { case 1: { - this.state = 2594; + this.state = 2582; this.match(ImpalaSqlParser.KW_UESCAPE); - this.state = 2595; + this.state = 2583; this.match(ImpalaSqlParser.STRING); } break; @@ -11856,12 +11825,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public comparisonOperator(): ComparisonOperatorContext { let localContext = new ComparisonOperatorContext(this.context, this.state); - this.enterRule(localContext, 344, ImpalaSqlParser.RULE_comparisonOperator); + this.enterRule(localContext, 340, ImpalaSqlParser.RULE_comparisonOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2600; + this.state = 2588; _la = this.tokenStream.LA(1); if(!(((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 63) !== 0))) { this.errorHandler.recoverInline(this); @@ -11888,12 +11857,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public comparisonQuantifier(): ComparisonQuantifierContext { let localContext = new ComparisonQuantifierContext(this.context, this.state); - this.enterRule(localContext, 346, ImpalaSqlParser.RULE_comparisonQuantifier); + this.enterRule(localContext, 342, ImpalaSqlParser.RULE_comparisonQuantifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2602; + this.state = 2590; _la = this.tokenStream.LA(1); if(!(_la === 2 || _la === 6 || _la === 181)) { this.errorHandler.recoverInline(this); @@ -11918,90 +11887,58 @@ export class ImpalaSqlParser extends SQLParserBase { } return localContext; } - public booleanValue(): BooleanValueContext { - let localContext = new BooleanValueContext(this.context, this.state); - this.enterRule(localContext, 348, ImpalaSqlParser.RULE_booleanValue); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2604; - _la = this.tokenStream.LA(1); - if(!(_la === 70 || _la === 194)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public interval(): IntervalContext { let localContext = new IntervalContext(this.context, this.state); - this.enterRule(localContext, 350, ImpalaSqlParser.RULE_interval); + this.enterRule(localContext, 344, ImpalaSqlParser.RULE_interval); try { - this.state = 2620; + this.state = 2606; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 332, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2606; + this.state = 2592; this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2607; + this.state = 2593; this.intervalField(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2608; + this.state = 2594; this.match(ImpalaSqlParser.LPAREN); - this.state = 2609; + this.state = 2595; this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2610; + this.state = 2596; this.match(ImpalaSqlParser.RPAREN); - this.state = 2611; + this.state = 2597; this.intervalField(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2612; + this.state = 2598; this.match(ImpalaSqlParser.KW_INTERVAL); - this.state = 2613; + this.state = 2599; this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2614; + this.state = 2600; this.intervalField(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2615; + this.state = 2601; this.match(ImpalaSqlParser.KW_INTERVAL); - this.state = 2616; + this.state = 2602; this.match(ImpalaSqlParser.LPAREN); - this.state = 2617; + this.state = 2603; this.match(ImpalaSqlParser.INTEGER_VALUE); - this.state = 2618; + this.state = 2604; this.match(ImpalaSqlParser.RPAREN); - this.state = 2619; + this.state = 2605; this.intervalField(); } break; @@ -12023,12 +11960,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public intervalField(): IntervalFieldContext { let localContext = new IntervalFieldContext(this.context, this.state); - this.enterRule(localContext, 352, ImpalaSqlParser.RULE_intervalField); + this.enterRule(localContext, 346, ImpalaSqlParser.RULE_intervalField); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2622; + this.state = 2608; _la = this.tokenStream.LA(1); if(!(_la === 48 || _la === 49 || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2147483651) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 7) !== 0) || _la === 172 || _la === 173 || _la === 217 || _la === 218)) { this.errorHandler.recoverInline(this); @@ -12053,38 +11990,6 @@ export class ImpalaSqlParser extends SQLParserBase { } return localContext; } - public normalForm(): NormalFormContext { - let localContext = new NormalFormContext(this.context, this.state); - this.enterRule(localContext, 354, ImpalaSqlParser.RULE_normalForm); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2624; - _la = this.tokenStream.LA(1); - if(!(((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 15) !== 0))) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public type_(): TypeContext; public type_(_p: number): TypeContext; @@ -12097,120 +12002,120 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new TypeContext(this.context, parentState); let previousContext = localContext; - let _startState = 356; - this.enterRecursionRule(localContext, 356, ImpalaSqlParser.RULE_type, _p); + let _startState = 348; + this.enterRecursionRule(localContext, 348, ImpalaSqlParser.RULE_type, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2671; + this.state = 2655; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 337, this.context) ) { case 1: { - this.state = 2627; + this.state = 2611; this.match(ImpalaSqlParser.KW_ARRAY); - this.state = 2628; + this.state = 2612; this.match(ImpalaSqlParser.LT); - this.state = 2629; + this.state = 2613; this.type_(0); - this.state = 2630; + this.state = 2614; this.match(ImpalaSqlParser.GT); } break; case 2: { - this.state = 2632; + this.state = 2616; this.match(ImpalaSqlParser.KW_MAP); - this.state = 2633; + this.state = 2617; this.match(ImpalaSqlParser.LT); - this.state = 2634; + this.state = 2618; this.type_(0); - this.state = 2635; + this.state = 2619; this.match(ImpalaSqlParser.COMMA); - this.state = 2636; + this.state = 2620; this.type_(0); - this.state = 2637; + this.state = 2621; this.match(ImpalaSqlParser.GT); } break; case 3: { - this.state = 2639; + this.state = 2623; this.match(ImpalaSqlParser.KW_STRUCT); - this.state = 2640; + this.state = 2624; this.match(ImpalaSqlParser.LT); - this.state = 2641; + this.state = 2625; this.identifier(); - this.state = 2642; + this.state = 2626; this.type_(0); - this.state = 2649; + this.state = 2633; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2643; + this.state = 2627; this.match(ImpalaSqlParser.COMMA); - this.state = 2644; + this.state = 2628; this.identifier(); - this.state = 2645; + this.state = 2629; this.type_(0); } } - this.state = 2651; + this.state = 2635; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2652; + this.state = 2636; this.match(ImpalaSqlParser.GT); } break; case 4: { - this.state = 2656; + this.state = 2640; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 334, this.context) ) { case 1: { - this.state = 2654; + this.state = 2638; this.baseType(); } break; case 2: { - this.state = 2655; + this.state = 2639; this.dataType(); } break; } - this.state = 2669; + this.state = 2653; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 336, this.context) ) { case 1: { - this.state = 2658; + this.state = 2642; this.match(ImpalaSqlParser.LPAREN); - this.state = 2659; + this.state = 2643; this.typeParameter(); - this.state = 2664; + this.state = 2648; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2660; + this.state = 2644; this.match(ImpalaSqlParser.COMMA); - this.state = 2661; + this.state = 2645; this.typeParameter(); } } - this.state = 2666; + this.state = 2650; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2667; + this.state = 2651; this.match(ImpalaSqlParser.RPAREN); } break; @@ -12219,7 +12124,7 @@ export class ImpalaSqlParser extends SQLParserBase { break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2677; + this.state = 2661; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 338, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -12232,16 +12137,16 @@ export class ImpalaSqlParser extends SQLParserBase { { localContext = new TypeContext(parentContext, parentState); this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_type); - this.state = 2673; + this.state = 2657; if (!(this.precpred(this.context, 5))) { throw this.createFailedPredicateException("this.precpred(this.context, 5)"); } - this.state = 2674; + this.state = 2658; this.match(ImpalaSqlParser.KW_ARRAY); } } } - this.state = 2679; + this.state = 2663; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 338, this.context); } @@ -12263,12 +12168,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public dataType(): DataTypeContext { let localContext = new DataTypeContext(this.context, this.state); - this.enterRule(localContext, 358, ImpalaSqlParser.RULE_dataType); + this.enterRule(localContext, 350, ImpalaSqlParser.RULE_dataType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2680; + this.state = 2664; _la = this.tokenStream.LA(1); if(!(_la === 8 || ((((_la - 227)) & ~0x1F) === 0 && ((1 << (_la - 227)) & 262143) !== 0))) { this.errorHandler.recoverInline(this); @@ -12295,15 +12200,15 @@ export class ImpalaSqlParser extends SQLParserBase { } public typeParameter(): TypeParameterContext { let localContext = new TypeParameterContext(this.context, this.state); - this.enterRule(localContext, 360, ImpalaSqlParser.RULE_typeParameter); + this.enterRule(localContext, 352, ImpalaSqlParser.RULE_typeParameter); try { - this.state = 2684; + this.state = 2668; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.INTEGER_VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 2682; + this.state = 2666; this.match(ImpalaSqlParser.INTEGER_VALUE); } break; @@ -12368,7 +12273,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 2); { - this.state = 2683; + this.state = 2667; this.type_(0); } break; @@ -12392,29 +12297,29 @@ export class ImpalaSqlParser extends SQLParserBase { } public baseType(): BaseTypeContext { let localContext = new BaseTypeContext(this.context, this.state); - this.enterRule(localContext, 362, ImpalaSqlParser.RULE_baseType); + this.enterRule(localContext, 354, ImpalaSqlParser.RULE_baseType); try { - this.state = 2690; + this.state = 2674; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.TIME_WITH_TIME_ZONE: this.enterOuterAlt(localContext, 1); { - this.state = 2686; + this.state = 2670; this.match(ImpalaSqlParser.TIME_WITH_TIME_ZONE); } break; case ImpalaSqlParser.TIMESTAMP_WITH_TIME_ZONE: this.enterOuterAlt(localContext, 2); { - this.state = 2687; + this.state = 2671; this.match(ImpalaSqlParser.TIMESTAMP_WITH_TIME_ZONE); } break; case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 3); { - this.state = 2688; + this.state = 2672; this.match(ImpalaSqlParser.DOUBLE_PRECISION); } break; @@ -12458,7 +12363,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.BACKQUOTED_IDENTIFIER: this.enterOuterAlt(localContext, 4); { - this.state = 2689; + this.state = 2673; this.identifier(); } break; @@ -12482,17 +12387,17 @@ export class ImpalaSqlParser extends SQLParserBase { } public whenClause(): WhenClauseContext { let localContext = new WhenClauseContext(this.context, this.state); - this.enterRule(localContext, 364, ImpalaSqlParser.RULE_whenClause); + this.enterRule(localContext, 356, ImpalaSqlParser.RULE_whenClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2692; + this.state = 2676; this.match(ImpalaSqlParser.KW_WHEN); - this.state = 2693; + this.state = 2677; localContext._condition = this.expression(); - this.state = 2694; + this.state = 2678; this.match(ImpalaSqlParser.KW_THEN); - this.state = 2695; + this.state = 2679; localContext._result = this.expression(); } } @@ -12512,17 +12417,17 @@ export class ImpalaSqlParser extends SQLParserBase { } public filter(): FilterContext { let localContext = new FilterContext(this.context, this.state); - this.enterRule(localContext, 366, ImpalaSqlParser.RULE_filter); + this.enterRule(localContext, 358, ImpalaSqlParser.RULE_filter); try { this.enterOuterAlt(localContext, 1); { - this.state = 2697; + this.state = 2681; this.match(ImpalaSqlParser.KW_FILTER); - this.state = 2698; + this.state = 2682; this.match(ImpalaSqlParser.LPAREN); - this.state = 2699; + this.state = 2683; this.whereClause(); - this.state = 2700; + this.state = 2684; this.match(ImpalaSqlParser.RPAREN); } } @@ -12542,28 +12447,28 @@ export class ImpalaSqlParser extends SQLParserBase { } public partitionByClause(): PartitionByClauseContext { let localContext = new PartitionByClauseContext(this.context, this.state); - this.enterRule(localContext, 368, ImpalaSqlParser.RULE_partitionByClause); + this.enterRule(localContext, 360, ImpalaSqlParser.RULE_partitionByClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2702; + this.state = 2686; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); - this.state = 2707; + this.state = 2691; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2703; + this.state = 2687; this.match(ImpalaSqlParser.COMMA); - this.state = 2704; + this.state = 2688; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); } } - this.state = 2709; + this.state = 2693; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -12585,70 +12490,70 @@ export class ImpalaSqlParser extends SQLParserBase { } public over(): OverContext { let localContext = new OverContext(this.context, this.state); - this.enterRule(localContext, 370, ImpalaSqlParser.RULE_over); + this.enterRule(localContext, 362, ImpalaSqlParser.RULE_over); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2710; + this.state = 2694; this.match(ImpalaSqlParser.KW_OVER); - this.state = 2711; + this.state = 2695; this.match(ImpalaSqlParser.LPAREN); - this.state = 2715; + this.state = 2699; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 2712; + this.state = 2696; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 2713; + this.state = 2697; this.match(ImpalaSqlParser.KW_BY); - this.state = 2714; + this.state = 2698; this.partitionByClause(); } } - this.state = 2727; + this.state = 2711; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 139) { { - this.state = 2717; + this.state = 2701; this.match(ImpalaSqlParser.KW_ORDER); - this.state = 2718; + this.state = 2702; this.match(ImpalaSqlParser.KW_BY); - this.state = 2719; + this.state = 2703; this.sortItem(); - this.state = 2724; + this.state = 2708; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2720; + this.state = 2704; this.match(ImpalaSqlParser.COMMA); - this.state = 2721; + this.state = 2705; this.sortItem(); } } - this.state = 2726; + this.state = 2710; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2730; + this.state = 2714; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 154 || _la === 169) { { - this.state = 2729; + this.state = 2713; this.windowFrame(); } } - this.state = 2732; + this.state = 2716; this.match(ImpalaSqlParser.RPAREN); } } @@ -12668,56 +12573,49 @@ export class ImpalaSqlParser extends SQLParserBase { } public windowFrame(): WindowFrameContext { let localContext = new WindowFrameContext(this.context, this.state); - this.enterRule(localContext, 372, ImpalaSqlParser.RULE_windowFrame); + this.enterRule(localContext, 364, ImpalaSqlParser.RULE_windowFrame); + let _la: number; try { - this.state = 2750; + this.state = 2726; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 346, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2734; - localContext._frameType = this.match(ImpalaSqlParser.KW_RANGE); - this.state = 2735; + this.state = 2718; + localContext._frameType = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 154 || _la === 169)) { + localContext._frameType = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 2719; localContext._start_ = this.frameBound(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2736; - localContext._frameType = this.match(ImpalaSqlParser.KW_ROWS); - this.state = 2737; - localContext._start_ = this.frameBound(); + this.state = 2720; + localContext._frameType = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 154 || _la === 169)) { + localContext._frameType = this.errorHandler.recoverInline(this); } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 2738; - localContext._frameType = this.match(ImpalaSqlParser.KW_RANGE); - this.state = 2739; - this.match(ImpalaSqlParser.KW_BETWEEN); - this.state = 2740; - localContext._start_ = this.frameBound(); - this.state = 2741; - this.match(ImpalaSqlParser.KW_AND); - this.state = 2742; - localContext._end = this.frameBound(); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 2744; - localContext._frameType = this.match(ImpalaSqlParser.KW_ROWS); - this.state = 2745; + this.state = 2721; this.match(ImpalaSqlParser.KW_BETWEEN); - this.state = 2746; + this.state = 2722; localContext._start_ = this.frameBound(); - this.state = 2747; + this.state = 2723; this.match(ImpalaSqlParser.KW_AND); - this.state = 2748; + this.state = 2724; localContext._end = this.frameBound(); } break; @@ -12739,19 +12637,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public frameBound(): FrameBoundContext { let localContext = new FrameBoundContext(this.context, this.state); - this.enterRule(localContext, 374, ImpalaSqlParser.RULE_frameBound); + this.enterRule(localContext, 366, ImpalaSqlParser.RULE_frameBound); let _la: number; try { - this.state = 2761; + this.state = 2737; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 347, this.context) ) { case 1: localContext = new UnboundedFrameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2752; + this.state = 2728; this.match(ImpalaSqlParser.KW_UNBOUNDED); - this.state = 2753; + this.state = 2729; (localContext as UnboundedFrameContext)._boundType = this.match(ImpalaSqlParser.KW_PRECEDING); } break; @@ -12759,9 +12657,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnboundedFrameContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2754; + this.state = 2730; this.match(ImpalaSqlParser.KW_UNBOUNDED); - this.state = 2755; + this.state = 2731; (localContext as UnboundedFrameContext)._boundType = this.match(ImpalaSqlParser.KW_FOLLOWING); } break; @@ -12769,9 +12667,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CurrentRowBoundContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2756; + this.state = 2732; this.match(ImpalaSqlParser.KW_CURRENT); - this.state = 2757; + this.state = 2733; this.match(ImpalaSqlParser.KW_ROW); } break; @@ -12779,9 +12677,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BoundedFrameContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 2758; + this.state = 2734; this.expression(); - this.state = 2759; + this.state = 2735; (localContext as BoundedFrameContext)._boundType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 77 || _la === 149)) { @@ -12811,20 +12709,20 @@ export class ImpalaSqlParser extends SQLParserBase { } public pathElement(): PathElementContext { let localContext = new PathElementContext(this.context, this.state); - this.enterRule(localContext, 376, ImpalaSqlParser.RULE_pathElement); + this.enterRule(localContext, 368, ImpalaSqlParser.RULE_pathElement); try { - this.state = 2768; + this.state = 2744; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 348, this.context) ) { case 1: localContext = new QualifiedArgumentContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2763; + this.state = 2739; this.identifier(); - this.state = 2764; + this.state = 2740; this.match(ImpalaSqlParser.DOT); - this.state = 2765; + this.state = 2741; this.identifier(); } break; @@ -12832,7 +12730,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnqualifiedArgumentContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2767; + this.state = 2743; this.identifier(); } break; @@ -12854,26 +12752,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public pathSpecification(): PathSpecificationContext { let localContext = new PathSpecificationContext(this.context, this.state); - this.enterRule(localContext, 378, ImpalaSqlParser.RULE_pathSpecification); + this.enterRule(localContext, 370, ImpalaSqlParser.RULE_pathSpecification); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2770; + this.state = 2746; this.pathElement(); - this.state = 2775; + this.state = 2751; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2771; + this.state = 2747; this.match(ImpalaSqlParser.COMMA); - this.state = 2772; + this.state = 2748; this.pathElement(); } } - this.state = 2777; + this.state = 2753; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -12895,69 +12793,69 @@ export class ImpalaSqlParser extends SQLParserBase { } public privilege(): PrivilegeContext { let localContext = new PrivilegeContext(this.context, this.state); - this.enterRule(localContext, 380, ImpalaSqlParser.RULE_privilege); + this.enterRule(localContext, 372, ImpalaSqlParser.RULE_privilege); let _la: number; try { - this.state = 2791; + this.state = 2767; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ALL: this.enterOuterAlt(localContext, 1); { - this.state = 2778; + this.state = 2754; this.match(ImpalaSqlParser.KW_ALL); } break; case ImpalaSqlParser.KW_ALTER: this.enterOuterAlt(localContext, 2); { - this.state = 2779; + this.state = 2755; this.match(ImpalaSqlParser.KW_ALTER); } break; case ImpalaSqlParser.KW_DROP: this.enterOuterAlt(localContext, 3); { - this.state = 2780; + this.state = 2756; this.match(ImpalaSqlParser.KW_DROP); } break; case ImpalaSqlParser.KW_CREATE: this.enterOuterAlt(localContext, 4); { - this.state = 2781; + this.state = 2757; this.match(ImpalaSqlParser.KW_CREATE); } break; case ImpalaSqlParser.KW_INSERT: this.enterOuterAlt(localContext, 5); { - this.state = 2782; + this.state = 2758; this.match(ImpalaSqlParser.KW_INSERT); } break; case ImpalaSqlParser.KW_REFRESH: this.enterOuterAlt(localContext, 6); { - this.state = 2783; + this.state = 2759; this.match(ImpalaSqlParser.KW_REFRESH); } break; case ImpalaSqlParser.KW_SELECT: this.enterOuterAlt(localContext, 7); { - this.state = 2784; + this.state = 2760; this.match(ImpalaSqlParser.KW_SELECT); - this.state = 2789; + this.state = 2765; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 2785; + this.state = 2761; this.match(ImpalaSqlParser.LPAREN); - this.state = 2786; + this.state = 2762; localContext._name = this.identifier(); - this.state = 2787; + this.state = 2763; this.match(ImpalaSqlParser.RPAREN); } } @@ -12984,12 +12882,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public objectType(): ObjectTypeContext { let localContext = new ObjectTypeContext(this.context, this.state); - this.enterRule(localContext, 382, ImpalaSqlParser.RULE_objectType); + this.enterRule(localContext, 374, ImpalaSqlParser.RULE_objectType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2793; + this.state = 2769; _la = this.tokenStream.LA(1); if(!(_la === 46 || ((((_la - 178)) & ~0x1F) === 0 && ((1 << (_la - 178)) & 2147484673) !== 0))) { this.errorHandler.recoverInline(this); @@ -13016,28 +12914,28 @@ export class ImpalaSqlParser extends SQLParserBase { } public qualifiedName(): QualifiedNameContext { let localContext = new QualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 384, ImpalaSqlParser.RULE_qualifiedName); + this.enterRule(localContext, 376, ImpalaSqlParser.RULE_qualifiedName); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2795; + this.state = 2771; this.identifier(); - this.state = 2800; + this.state = 2776; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 352, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2796; + this.state = 2772; this.match(ImpalaSqlParser.DOT); - this.state = 2797; + this.state = 2773; this.identifier(); } } } - this.state = 2802; + this.state = 2778; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 352, this.context); } @@ -13059,35 +12957,35 @@ export class ImpalaSqlParser extends SQLParserBase { } public qualifiedNameAllowEmpty(): QualifiedNameAllowEmptyContext { let localContext = new QualifiedNameAllowEmptyContext(this.context, this.state); - this.enterRule(localContext, 386, ImpalaSqlParser.RULE_qualifiedNameAllowEmpty); + this.enterRule(localContext, 378, ImpalaSqlParser.RULE_qualifiedNameAllowEmpty); try { let alternative: number; - this.state = 2819; + this.state = 2795; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 355, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2803; + this.state = 2779; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } - this.state = 2809; + this.state = 2785; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 353, this.context) ) { case 1: { - this.state = 2804; + this.state = 2780; this.identifier(); - this.state = 2805; + this.state = 2781; this.match(ImpalaSqlParser.DOT); - this.state = 2806; + this.state = 2782; this.emptyColumn(); } break; case 2: { - this.state = 2808; + this.state = 2784; this.emptyColumn(); } break; @@ -13097,23 +12995,23 @@ export class ImpalaSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2811; + this.state = 2787; this.identifier(); - this.state = 2816; + this.state = 2792; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 354, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2812; + this.state = 2788; this.match(ImpalaSqlParser.DOT); - this.state = 2813; + this.state = 2789; this.identifier(); } } } - this.state = 2818; + this.state = 2794; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 354, this.context); } @@ -13137,18 +13035,18 @@ export class ImpalaSqlParser extends SQLParserBase { } public principal(): PrincipalContext { let localContext = new PrincipalContext(this.context, this.state); - this.enterRule(localContext, 388, ImpalaSqlParser.RULE_principal); + this.enterRule(localContext, 380, ImpalaSqlParser.RULE_principal); try { - this.state = 2827; + this.state = 2803; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ROLE: localContext = new RolePrincipalContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2821; + this.state = 2797; this.match(ImpalaSqlParser.KW_ROLE); - this.state = 2822; + this.state = 2798; this.identifier(); } break; @@ -13156,9 +13054,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UserPrincipalContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2823; + this.state = 2799; this.match(ImpalaSqlParser.KW_USER); - this.state = 2824; + this.state = 2800; this.identifier(); } break; @@ -13166,9 +13064,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new GroupPrincipalContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2825; + this.state = 2801; this.match(ImpalaSqlParser.KW_GROUP); - this.state = 2826; + this.state = 2802; this.identifier(); } break; @@ -13192,16 +13090,16 @@ export class ImpalaSqlParser extends SQLParserBase { } public identifier(): IdentifierContext { let localContext = new IdentifierContext(this.context, this.state); - this.enterRule(localContext, 390, ImpalaSqlParser.RULE_identifier); + this.enterRule(localContext, 382, ImpalaSqlParser.RULE_identifier); try { - this.state = 2834; + this.state = 2810; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.IDENTIFIER: localContext = new UnquotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2829; + this.state = 2805; this.match(ImpalaSqlParser.IDENTIFIER); } break; @@ -13209,7 +13107,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new QuotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2830; + this.state = 2806; this.match(ImpalaSqlParser.STRING); } break; @@ -13250,7 +13148,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnquotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2831; + this.state = 2807; this.nonReserved(); } break; @@ -13258,7 +13156,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BackQuotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 2832; + this.state = 2808; this.match(ImpalaSqlParser.BACKQUOTED_IDENTIFIER); } break; @@ -13266,7 +13164,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DigitIdentifierContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 2833; + this.state = 2809; this.match(ImpalaSqlParser.DIGIT_IDENTIFIER); } break; @@ -13290,27 +13188,27 @@ export class ImpalaSqlParser extends SQLParserBase { } public number_(): NumberContext { let localContext = new NumberContext(this.context, this.state); - this.enterRule(localContext, 392, ImpalaSqlParser.RULE_number); + this.enterRule(localContext, 384, ImpalaSqlParser.RULE_number); let _la: number; try { - this.state = 2848; + this.state = 2824; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 361, this.context) ) { case 1: localContext = new DecimalLiteralContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2837; + this.state = 2813; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 256) { { - this.state = 2836; + this.state = 2812; this.match(ImpalaSqlParser.MINUS); } } - this.state = 2839; + this.state = 2815; this.match(ImpalaSqlParser.DECIMAL_VALUE); } break; @@ -13318,17 +13216,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DoubleLiteralContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2841; + this.state = 2817; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 256) { { - this.state = 2840; + this.state = 2816; this.match(ImpalaSqlParser.MINUS); } } - this.state = 2843; + this.state = 2819; this.match(ImpalaSqlParser.DOUBLE_VALUE); } break; @@ -13336,17 +13234,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new IntegerLiteralContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2845; + this.state = 2821; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 256) { { - this.state = 2844; + this.state = 2820; this.match(ImpalaSqlParser.MINUS); } } - this.state = 2847; + this.state = 2823; this.match(ImpalaSqlParser.INTEGER_VALUE); } break; @@ -13368,12 +13266,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public reservedKeywordsUsedAsFuncName(): ReservedKeywordsUsedAsFuncNameContext { let localContext = new ReservedKeywordsUsedAsFuncNameContext(this.context, this.state); - this.enterRule(localContext, 394, ImpalaSqlParser.RULE_reservedKeywordsUsedAsFuncName); + this.enterRule(localContext, 386, ImpalaSqlParser.RULE_reservedKeywordsUsedAsFuncName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2850; + this.state = 2826; _la = this.tokenStream.LA(1); if(!(((((_la - 28)) & ~0x1F) === 0 && ((1 << (_la - 28)) & 1085443) !== 0) || _la === 68 || _la === 91 || ((((_la - 114)) & ~0x1F) === 0 && ((1 << (_la - 114)) & 1281) !== 0) || ((((_la - 158)) & ~0x1F) === 0 && ((1 << (_la - 158)) & 67125377) !== 0) || ((((_la - 196)) & ~0x1F) === 0 && ((1 << (_la - 196)) & 2097409) !== 0))) { this.errorHandler.recoverInline(this); @@ -13400,12 +13298,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public nonReserved(): NonReservedContext { let localContext = new NonReservedContext(this.context, this.state); - this.enterRule(localContext, 396, ImpalaSqlParser.RULE_nonReserved); + this.enterRule(localContext, 388, ImpalaSqlParser.RULE_nonReserved); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2852; + this.state = 2828; _la = this.tokenStream.LA(1); if(!(_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0))) { this.errorHandler.recoverInline(this); @@ -13437,21 +13335,21 @@ export class ImpalaSqlParser extends SQLParserBase { return this.columnNamePath_sempred(localContext as ColumnNamePathContext, predIndex); case 99: return this.columnNameAllowEmpty_sempred(localContext as ColumnNameAllowEmptyContext, predIndex); - case 135: + case 134: return this.queryTerm_sempred(localContext as QueryTermContext, predIndex); - case 147: + case 146: return this.selectItem_sempred(localContext as SelectItemContext, predIndex); - case 152: + case 151: return this.relation_sempred(localContext as RelationContext, predIndex); - case 166: + case 164: return this.booleanExpression_sempred(localContext as BooleanExpressionContext, predIndex); - case 168: + case 166: return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); - case 170: + case 168: return this.primaryExpression_sempred(localContext as PrimaryExpressionContext, predIndex); - case 178: + case 174: return this.type_sempred(localContext as TypeContext, predIndex); - case 193: + case 189: return this.qualifiedNameAllowEmpty_sempred(localContext as QualifiedNameAllowEmptyContext, predIndex); } return true; @@ -13538,7 +13436,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public static readonly _serializedATN: number[] = [ - 4,1,289,2855,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,289,2831,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -13570,1196 +13468,1187 @@ export class ImpalaSqlParser extends SQLParserBase { 7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180, 2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186, 7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191,7,191, - 2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196,2,197, - 7,197,2,198,7,198,1,0,5,0,400,8,0,10,0,12,0,403,9,0,1,0,1,0,1,1, - 1,1,3,1,409,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, - 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,433,8,2,1,3,1,3,1,3, - 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,446,8,4,1,5,1,5,3,5,450,8,5, - 1,5,1,5,3,5,454,8,5,1,5,1,5,1,5,1,5,1,5,5,5,461,8,5,10,5,12,5,464, - 9,5,1,5,1,5,3,5,468,8,5,1,5,1,5,3,5,472,8,5,1,5,1,5,1,5,1,5,3,5, - 478,8,5,3,5,480,8,5,1,5,1,5,1,5,3,5,485,8,5,1,6,1,6,3,6,489,8,6, - 1,6,1,6,3,6,493,8,6,1,6,1,6,1,6,1,6,1,6,3,6,500,8,6,1,6,1,6,1,6, - 3,6,505,8,6,1,6,1,6,1,7,1,7,3,7,511,8,7,1,7,1,7,3,7,515,8,7,1,7, - 1,7,1,7,1,7,1,7,5,7,522,8,7,10,7,12,7,525,9,7,1,7,1,7,1,7,1,7,3, - 7,531,8,7,1,7,1,7,3,7,535,8,7,1,7,1,7,1,7,3,7,540,8,7,3,7,542,8, - 7,1,7,1,7,1,7,3,7,547,8,7,1,7,3,7,550,8,7,1,7,1,7,1,7,1,7,1,7,3, - 7,557,8,7,1,7,1,7,3,7,561,8,7,1,8,1,8,1,8,3,8,566,8,8,1,8,1,8,3, - 8,570,8,8,1,8,3,8,573,8,8,1,8,1,8,3,8,577,8,8,1,8,1,8,1,8,1,9,1, - 9,1,9,3,9,585,8,9,1,9,1,9,3,9,589,8,9,1,9,1,9,3,9,593,8,9,1,10,1, - 10,1,10,1,10,1,11,1,11,3,11,601,8,11,1,11,1,11,3,11,605,8,11,1,11, - 1,11,1,11,1,11,1,11,5,11,612,8,11,10,11,12,11,615,9,11,3,11,617, - 8,11,1,11,3,11,620,8,11,1,11,1,11,1,11,1,11,3,11,626,8,11,1,11,1, - 11,1,11,1,11,1,11,3,11,633,8,11,1,11,1,11,1,11,1,11,1,11,1,11,1, - 11,1,11,1,11,3,11,644,8,11,1,11,1,11,1,11,3,11,649,8,11,1,11,1,11, - 1,11,3,11,654,8,11,1,11,1,11,1,11,3,11,659,8,11,1,12,1,12,1,12,3, - 12,664,8,12,1,12,1,12,1,12,1,12,1,12,5,12,671,8,12,10,12,12,12,674, - 9,12,3,12,676,8,12,1,12,3,12,679,8,12,1,12,1,12,3,12,683,8,12,1, - 12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1, - 13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,709,8, - 13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1, - 15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,735, - 8,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,3,16,744,8,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,3,16,754,8,16,1,16,3,16,757,8,16,1, - 17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,3,18,771, - 8,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20, - 1,20,1,20,1,20,1,20,3,20,789,8,20,3,20,791,8,20,1,20,1,20,1,20,1, - 20,1,20,5,20,798,8,20,10,20,12,20,801,9,20,1,20,1,20,1,21,1,21,1, - 21,1,21,1,21,1,21,3,21,811,8,21,1,21,1,21,1,22,1,22,1,22,1,22,1, - 22,3,22,820,8,22,1,22,1,22,1,22,1,22,1,22,3,22,827,8,22,1,22,1,22, - 3,22,831,8,22,1,23,1,23,1,23,1,23,1,23,3,23,838,8,23,1,23,1,23,1, - 23,1,23,3,23,844,8,23,1,23,3,23,847,8,23,1,23,1,23,1,23,3,23,852, - 8,23,1,24,1,24,1,24,1,24,1,24,3,24,859,8,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,873,8,24,1,25,1,25, - 1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,3,26,886,8,26,1,26, - 1,26,1,26,3,26,891,8,26,1,26,1,26,1,26,3,26,896,8,26,1,27,1,27,1, - 27,1,27,3,27,902,8,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1, - 30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,3, - 32,938,8,32,1,32,3,32,941,8,32,1,32,1,32,1,33,1,33,3,33,947,8,33, - 1,33,3,33,950,8,33,1,33,1,33,1,34,1,34,3,34,956,8,34,1,35,1,35,1, - 35,1,35,3,35,962,8,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1, - 35,1,35,3,35,974,8,35,3,35,976,8,35,1,36,1,36,1,36,1,36,1,36,1,36, - 1,36,1,36,1,36,3,36,987,8,36,1,37,1,37,1,37,1,37,1,37,1,37,3,37, - 995,8,37,1,38,1,38,1,38,3,38,1000,8,38,1,38,1,38,3,38,1004,8,38, - 1,39,1,39,1,39,3,39,1009,8,39,1,39,1,39,1,40,1,40,1,40,3,40,1016, - 8,40,1,40,1,40,3,40,1020,8,40,1,41,1,41,3,41,1024,8,41,1,41,1,41, - 1,41,1,41,3,41,1030,8,41,1,42,1,42,3,42,1034,8,42,1,42,1,42,3,42, - 1038,8,42,1,42,1,42,1,42,1,42,1,42,5,42,1045,8,42,10,42,12,42,1048, - 9,42,3,42,1050,8,42,1,42,3,42,1053,8,42,1,43,1,43,1,43,1,43,1,44, - 1,44,3,44,1061,8,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46, - 1,46,1,46,1,46,3,46,1075,8,46,1,46,1,46,1,46,1,47,1,47,3,47,1082, - 8,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,3,49, - 1095,8,49,1,49,1,49,1,49,1,49,3,49,1101,8,49,1,49,1,49,1,49,3,49, - 1106,8,49,1,49,3,49,1109,8,49,1,50,3,50,1112,8,50,1,50,1,50,1,50, - 3,50,1117,8,50,1,50,1,50,3,50,1121,8,50,1,50,1,50,1,50,1,50,1,50, - 5,50,1128,8,50,10,50,12,50,1131,9,50,1,50,1,50,3,50,1135,8,50,1, - 50,1,50,1,51,1,51,3,51,1141,8,51,1,52,1,52,3,52,1145,8,52,1,52,1, - 52,3,52,1149,8,52,1,53,1,53,1,53,3,53,1154,8,53,1,53,3,53,1157,8, - 53,1,53,1,53,1,53,1,53,5,53,1163,8,53,10,53,12,53,1166,9,53,3,53, - 1168,8,53,1,53,3,53,1171,8,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54, - 1,54,5,54,1181,8,54,10,54,12,54,1184,9,54,3,54,1186,8,54,1,54,3, - 54,1189,8,54,1,55,1,55,1,55,3,55,1194,8,55,1,55,1,55,3,55,1198,8, - 55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1, - 56,1,56,3,56,1214,8,56,1,57,1,57,1,57,3,57,1219,8,57,1,57,1,57,1, - 57,5,57,1224,8,57,10,57,12,57,1227,9,57,3,57,1229,8,57,1,58,1,58, - 1,58,1,58,3,58,1235,8,58,1,58,3,58,1238,8,58,1,58,1,58,1,58,5,58, - 1243,8,58,10,58,12,58,1246,9,58,3,58,1248,8,58,1,59,1,59,3,59,1252, - 8,59,1,59,1,59,1,59,3,59,1257,8,59,1,59,3,59,1260,8,59,1,59,1,59, - 1,59,5,59,1265,8,59,10,59,12,59,1268,9,59,3,59,1270,8,59,1,60,1, - 60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1, - 62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,3,64,1294,8,64,1,64,1,64,1, - 64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65,1308,8,65,1, - 65,1,65,3,65,1312,8,65,1,66,1,66,3,66,1316,8,66,1,66,1,66,1,67,1, - 67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1, - 68,1,68,3,68,1336,8,68,3,68,1338,8,68,3,68,1340,8,68,1,69,1,69,1, - 69,1,69,1,69,1,69,1,69,3,69,1349,8,69,3,69,1351,8,69,1,70,1,70,1, - 70,1,70,1,70,1,70,1,70,3,70,1360,8,70,3,70,1362,8,70,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,3,71,1371,8,71,3,71,1373,8,71,1,72,1,72,1, - 72,3,72,1378,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,1387,8, - 73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,1396,8,74,1,75,1,75,1, - 75,1,75,1,75,1,75,1,75,3,75,1405,8,75,1,76,1,76,1,76,1,77,1,77,1, - 77,1,77,1,77,1,77,3,77,1416,8,77,1,78,1,78,1,78,1,78,3,78,1422,8, - 78,1,78,1,78,1,78,3,78,1427,8,78,1,78,3,78,1430,8,78,1,78,1,78,1, - 79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,3,80,1443,8,80,1,80,1, - 80,1,80,1,80,1,80,1,80,1,80,1,80,3,80,1453,8,80,1,80,1,80,3,80,1457, - 8,80,1,81,1,81,1,81,3,81,1462,8,81,1,82,1,82,1,82,1,82,1,82,1,82, - 1,82,5,82,1471,8,82,10,82,12,82,1474,9,82,1,82,1,82,3,82,1478,8, - 82,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,86,1,86,1, - 86,1,86,1,87,1,87,1,88,1,88,1,89,1,89,1,90,1,90,1,91,1,91,1,92,1, - 92,1,93,1,93,1,93,5,93,1509,8,93,10,93,12,93,1512,9,93,1,94,1,94, - 1,94,5,94,1517,8,94,10,94,12,94,1520,9,94,1,95,1,95,3,95,1524,8, - 95,1,96,1,96,1,97,1,97,1,97,3,97,1531,8,97,1,98,1,98,1,99,1,99,1, - 99,3,99,1538,8,99,1,100,1,100,3,100,1542,8,100,1,101,1,101,1,101, - 3,101,1547,8,101,1,101,3,101,1550,8,101,1,101,1,101,1,101,3,101, - 1555,8,101,1,101,1,101,1,101,3,101,1560,8,101,1,101,1,101,1,101, - 3,101,1565,8,101,1,101,1,101,3,101,1569,8,101,1,101,1,101,1,101, - 1,101,1,101,1,101,1,101,3,101,1578,8,101,1,101,3,101,1581,8,101, - 1,101,1,101,3,101,1585,8,101,1,102,1,102,1,102,5,102,1590,8,102, - 10,102,12,102,1593,9,102,1,103,1,103,1,103,1,103,1,104,1,104,3,104, - 1601,8,104,1,104,1,104,3,104,1605,8,104,5,104,1607,8,104,10,104, - 12,104,1610,9,104,1,104,1,104,1,105,1,105,3,105,1616,8,105,1,106, - 3,106,1619,8,106,1,106,1,106,1,107,1,107,1,107,1,107,5,107,1627, - 8,107,10,107,12,107,1630,9,107,1,108,1,108,1,108,1,108,3,108,1636, - 8,108,1,108,1,108,1,108,3,108,1641,8,108,1,108,1,108,1,108,3,108, - 1646,8,108,1,108,1,108,1,108,3,108,1651,8,108,1,108,1,108,5,108, - 1655,8,108,10,108,12,108,1658,9,108,3,108,1660,8,108,1,109,1,109, - 1,109,1,109,1,109,1,109,1,109,3,109,1669,8,109,1,109,3,109,1672, - 8,109,1,109,3,109,1675,8,109,1,110,1,110,1,110,1,110,3,110,1681, - 8,110,1,111,1,111,1,111,3,111,1686,8,111,1,112,1,112,1,113,1,113, - 1,113,1,113,5,113,1694,8,113,10,113,12,113,1697,9,113,3,113,1699, - 8,113,1,113,3,113,1702,8,113,1,113,1,113,3,113,1706,8,113,1,114, - 1,114,1,114,1,115,1,115,1,115,5,115,1714,8,115,10,115,12,115,1717, - 9,115,3,115,1719,8,115,1,116,1,116,1,116,1,116,3,116,1725,8,116, - 1,116,1,116,5,116,1729,8,116,10,116,12,116,1732,9,116,3,116,1734, - 8,116,1,117,3,117,1737,8,117,1,117,1,117,3,117,1741,8,117,1,118, - 1,118,1,118,1,118,1,118,1,118,1,118,1,118,3,118,1751,8,118,1,119, - 1,119,1,120,1,120,1,121,1,121,1,121,5,121,1760,8,121,10,121,12,121, - 1763,9,121,1,121,1,121,3,121,1767,8,121,1,121,3,121,1770,8,121,1, - 122,1,122,3,122,1774,8,122,1,122,1,122,1,122,1,123,1,123,3,123,1781, - 8,123,1,123,1,123,1,123,1,123,1,123,1,123,5,123,1789,8,123,10,123, - 12,123,1792,9,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124, - 1,124,3,124,1803,8,124,1,124,1,124,1,124,1,124,3,124,1809,8,124, - 3,124,1811,8,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,3,125, - 1820,8,125,1,125,3,125,1823,8,125,1,126,1,126,1,126,1,126,1,126, - 3,126,1830,8,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, - 3,127,1840,8,127,1,128,1,128,1,128,1,128,3,128,1846,8,128,1,129, - 1,129,1,129,1,129,5,129,1852,8,129,10,129,12,129,1855,9,129,1,129, - 1,129,1,130,1,130,1,130,1,130,5,130,1863,8,130,10,130,12,130,1866, - 9,130,1,130,1,130,1,131,1,131,1,131,5,131,1873,8,131,10,131,12,131, - 1876,9,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,3,132, - 1886,8,132,3,132,1888,8,132,1,132,1,132,1,132,1,132,3,132,1894,8, - 132,1,133,1,133,1,133,3,133,1899,8,133,1,134,1,134,1,134,1,134,1, - 134,1,134,5,134,1907,8,134,10,134,12,134,1910,9,134,3,134,1912,8, - 134,1,134,1,134,1,134,1,134,3,134,1918,8,134,3,134,1920,8,134,1, - 135,1,135,1,135,1,135,1,135,1,135,3,135,1928,8,135,1,135,1,135,1, - 135,1,135,3,135,1934,8,135,1,135,5,135,1937,8,135,10,135,12,135, - 1940,9,135,1,136,1,136,1,136,1,136,1,136,1,136,1,136,5,136,1949, - 8,136,10,136,12,136,1952,9,136,1,136,1,136,1,136,1,136,3,136,1958, - 8,136,1,137,1,137,3,137,1962,8,137,1,137,1,137,3,137,1966,8,137, - 1,138,1,138,3,138,1970,8,138,1,138,3,138,1973,8,138,1,138,1,138, - 1,138,1,138,1,138,5,138,1980,8,138,10,138,12,138,1983,9,138,3,138, - 1985,8,138,1,138,3,138,1988,8,138,1,138,1,138,1,138,3,138,1993,8, - 138,1,138,3,138,1996,8,138,1,139,1,139,1,139,5,139,2001,8,139,10, - 139,12,139,2004,9,139,1,140,1,140,1,140,3,140,2009,8,140,1,141,1, - 141,1,141,3,141,2014,8,141,1,142,3,142,2017,8,142,1,142,1,142,1, - 142,5,142,2022,8,142,10,142,12,142,2025,9,142,1,143,1,143,1,144, - 1,144,1,144,1,144,5,144,2033,8,144,10,144,12,144,2036,9,144,3,144, - 2038,8,144,1,144,1,144,3,144,2042,8,144,1,145,1,145,3,145,2046,8, - 145,1,145,1,145,1,145,1,146,1,146,1,147,1,147,3,147,2055,8,147,1, - 147,1,147,3,147,2059,8,147,1,147,1,147,1,147,3,147,2064,8,147,1, - 148,3,148,2067,8,148,1,148,1,148,1,149,1,149,1,150,1,150,1,151,1, - 151,1,151,3,151,2078,8,151,1,151,1,151,1,152,1,152,1,152,1,152,1, - 152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,3,152,2094,8,152,5, - 152,2096,8,152,10,152,12,152,2099,9,152,1,153,3,153,2102,8,153,1, - 153,1,153,3,153,2106,8,153,1,153,1,153,3,153,2110,8,153,1,153,1, - 153,3,153,2114,8,153,1,153,1,153,3,153,2118,8,153,1,153,1,153,3, - 153,2122,8,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,3, - 153,2132,8,153,1,154,1,154,1,154,3,154,2137,8,154,1,154,1,154,1, - 154,1,154,1,154,5,154,2144,8,154,10,154,12,154,2147,9,154,1,154, - 1,154,3,154,2151,8,154,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,3,155,2164,8,155,3,155,2166,8,155,1,156, - 1,156,1,157,1,157,3,157,2172,8,157,1,157,1,157,3,157,2176,8,157, - 3,157,2178,8,157,1,158,1,158,1,158,1,158,5,158,2184,8,158,10,158, - 12,158,2187,9,158,1,158,1,158,1,159,1,159,1,159,1,159,3,159,2195, - 8,159,1,160,3,160,2198,8,160,1,160,1,160,1,161,1,161,1,161,1,161, - 1,162,1,162,1,162,1,162,1,162,5,162,2211,8,162,10,162,12,162,2214, - 9,162,1,162,1,162,1,162,3,162,2219,8,162,1,163,1,163,1,163,1,163, - 1,164,1,164,3,164,2227,8,164,1,165,1,165,1,166,1,166,1,166,3,166, - 2234,8,166,1,166,1,166,3,166,2238,8,166,1,166,1,166,1,166,1,166, - 1,166,1,166,5,166,2246,8,166,10,166,12,166,2249,9,166,1,167,1,167, - 1,167,1,167,1,167,1,167,1,167,1,167,3,167,2259,8,167,1,167,1,167, - 1,167,1,167,1,167,1,167,3,167,2267,8,167,1,167,1,167,1,167,1,167, - 1,167,5,167,2274,8,167,10,167,12,167,2277,9,167,1,167,1,167,1,167, - 3,167,2282,8,167,1,167,1,167,1,167,3,167,2287,8,167,1,167,1,167, - 1,167,1,167,3,167,2293,8,167,1,167,1,167,1,167,1,167,3,167,2299, - 8,167,1,167,1,167,1,167,3,167,2304,8,167,1,167,1,167,1,167,3,167, - 2309,8,167,1,168,1,168,1,168,1,168,3,168,2315,8,168,1,168,1,168, - 1,168,1,168,1,168,1,168,1,168,1,168,1,168,5,168,2326,8,168,10,168, - 12,168,2329,9,168,1,169,1,169,1,169,3,169,2334,8,169,1,169,1,169, - 1,169,5,169,2339,8,169,10,169,12,169,2342,9,169,3,169,2344,8,169, - 1,169,1,169,1,169,1,169,1,169,5,169,2351,8,169,10,169,12,169,2354, - 9,169,3,169,2356,8,169,1,169,1,169,3,169,2360,8,169,1,169,3,169, - 2363,8,169,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,3,170,2389,8,170,1,170,1,170,1,170,1,170, - 3,170,2395,8,170,5,170,2397,8,170,10,170,12,170,2400,9,170,1,170, - 1,170,1,170,1,170,1,170,1,170,1,170,5,170,2409,8,170,10,170,12,170, - 2412,9,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,3,170,2421, - 8,170,1,170,3,170,2424,8,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,5,170,2435,8,170,10,170,12,170,2438,9,170,3,170, - 2440,8,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,1,170,1,170,4,170,2457,8,170,11,170,12,170, - 2458,1,170,1,170,3,170,2463,8,170,1,170,1,170,1,170,1,170,4,170, - 2469,8,170,11,170,12,170,2470,1,170,1,170,3,170,2475,8,170,1,170, - 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,5,170,2498, - 8,170,10,170,12,170,2501,9,170,3,170,2503,8,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,3,170,2512,8,170,1,170,1,170,1,170,1,170, - 3,170,2518,8,170,1,170,1,170,1,170,1,170,3,170,2524,8,170,1,170, - 1,170,1,170,1,170,3,170,2530,8,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,3,170,2541,8,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,3,170,2550,8,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,5,170,2570,8,170,10,170,12,170,2573,9,170,3,170,2575, - 8,170,1,170,3,170,2578,8,170,1,170,1,170,1,170,1,170,1,170,1,170, - 1,170,1,170,5,170,2588,8,170,10,170,12,170,2591,9,170,1,171,1,171, - 1,171,1,171,3,171,2597,8,171,3,171,2599,8,171,1,172,1,172,1,173, - 1,173,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175, - 1,175,1,175,1,175,1,175,1,175,1,175,3,175,2621,8,175,1,176,1,176, - 1,177,1,177,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178, - 1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178, - 1,178,5,178,2648,8,178,10,178,12,178,2651,9,178,1,178,1,178,1,178, - 1,178,3,178,2657,8,178,1,178,1,178,1,178,1,178,5,178,2663,8,178, - 10,178,12,178,2666,9,178,1,178,1,178,3,178,2670,8,178,3,178,2672, - 8,178,1,178,1,178,5,178,2676,8,178,10,178,12,178,2679,9,178,1,179, - 1,179,1,180,1,180,3,180,2685,8,180,1,181,1,181,1,181,1,181,3,181, - 2691,8,181,1,182,1,182,1,182,1,182,1,182,1,183,1,183,1,183,1,183, - 1,183,1,184,1,184,1,184,5,184,2706,8,184,10,184,12,184,2709,9,184, - 1,185,1,185,1,185,1,185,1,185,3,185,2716,8,185,1,185,1,185,1,185, - 1,185,1,185,5,185,2723,8,185,10,185,12,185,2726,9,185,3,185,2728, - 8,185,1,185,3,185,2731,8,185,1,185,1,185,1,186,1,186,1,186,1,186, + 2,192,7,192,2,193,7,193,2,194,7,194,1,0,5,0,392,8,0,10,0,12,0,395, + 9,0,1,0,1,0,1,1,1,1,3,1,401,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,425, + 8,2,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,438,8,4,1,5, + 1,5,3,5,442,8,5,1,5,1,5,3,5,446,8,5,1,5,1,5,1,5,1,5,1,5,5,5,453, + 8,5,10,5,12,5,456,9,5,1,5,1,5,3,5,460,8,5,1,5,1,5,3,5,464,8,5,1, + 5,1,5,1,5,1,5,3,5,470,8,5,3,5,472,8,5,1,5,1,5,1,5,3,5,477,8,5,1, + 6,1,6,3,6,481,8,6,1,6,1,6,3,6,485,8,6,1,6,1,6,1,6,1,6,1,6,3,6,492, + 8,6,1,6,1,6,1,6,3,6,497,8,6,1,6,1,6,1,7,1,7,3,7,503,8,7,1,7,1,7, + 3,7,507,8,7,1,7,1,7,1,7,1,7,1,7,5,7,514,8,7,10,7,12,7,517,9,7,1, + 7,1,7,1,7,1,7,3,7,523,8,7,1,7,1,7,3,7,527,8,7,1,7,1,7,1,7,3,7,532, + 8,7,3,7,534,8,7,1,7,1,7,1,7,3,7,539,8,7,1,7,1,7,3,7,543,8,7,1,7, + 1,7,1,7,1,7,1,7,3,7,550,8,7,1,7,1,7,3,7,554,8,7,1,8,1,8,1,8,3,8, + 559,8,8,1,8,1,8,3,8,563,8,8,1,8,3,8,566,8,8,1,8,1,8,3,8,570,8,8, + 1,8,1,8,1,8,1,9,1,9,1,9,3,9,578,8,9,1,9,1,9,3,9,582,8,9,1,9,1,9, + 3,9,586,8,9,1,10,1,10,1,10,1,10,1,11,1,11,3,11,594,8,11,1,11,1,11, + 3,11,598,8,11,1,11,1,11,1,11,1,11,1,11,5,11,605,8,11,10,11,12,11, + 608,9,11,3,11,610,8,11,1,11,3,11,613,8,11,1,11,1,11,1,11,1,11,3, + 11,619,8,11,1,11,1,11,1,11,1,11,1,11,3,11,626,8,11,1,11,1,11,1,11, + 1,11,1,11,1,11,1,11,1,11,1,11,3,11,637,8,11,1,11,1,11,1,11,3,11, + 642,8,11,1,11,1,11,1,11,3,11,647,8,11,1,11,1,11,1,11,3,11,652,8, + 11,1,12,1,12,1,12,3,12,657,8,12,1,12,1,12,1,12,1,12,1,12,5,12,664, + 8,12,10,12,12,12,667,9,12,3,12,669,8,12,1,12,3,12,672,8,12,1,12, + 1,12,3,12,676,8,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,13,1,13,3,13,702,8,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14, + 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, + 1,15,1,15,3,15,727,8,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,3,16, + 736,8,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,746,8,16,1, + 16,3,16,749,8,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1, + 18,1,18,1,18,3,18,763,8,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,3,20,781,8,20,3,20,783, + 8,20,1,20,1,20,1,20,1,20,1,20,5,20,790,8,20,10,20,12,20,793,9,20, + 1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,3,21,803,8,21,1,21,1,21, + 1,22,1,22,1,22,1,22,1,22,3,22,812,8,22,1,22,1,22,1,22,1,22,1,22, + 3,22,819,8,22,1,22,1,22,3,22,823,8,22,1,23,1,23,1,23,1,23,1,23,3, + 23,830,8,23,1,23,1,23,1,23,1,23,3,23,836,8,23,1,23,3,23,839,8,23, + 1,23,1,23,1,23,3,23,844,8,23,1,24,1,24,1,24,1,24,1,24,3,24,851,8, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3, + 24,865,8,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1, + 26,3,26,878,8,26,1,26,1,26,1,26,3,26,883,8,26,1,26,1,26,1,26,3,26, + 888,8,26,1,27,1,27,1,27,1,27,3,27,894,8,27,1,27,1,27,1,27,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1, + 29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1, + 31,1,31,1,32,1,32,3,32,930,8,32,1,32,3,32,933,8,32,1,32,1,32,1,33, + 1,33,3,33,939,8,33,1,33,3,33,942,8,33,1,33,1,33,1,34,1,34,3,34,948, + 8,34,1,35,1,35,1,35,1,35,3,35,954,8,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,3,35,966,8,35,3,35,968,8,35,1,36,1,36,1, + 36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,979,8,36,1,37,1,37,1,37,1, + 37,1,37,1,37,3,37,987,8,37,1,38,1,38,1,38,3,38,992,8,38,1,38,1,38, + 3,38,996,8,38,1,39,1,39,1,39,3,39,1001,8,39,1,39,1,39,1,40,1,40, + 1,40,3,40,1008,8,40,1,40,1,40,3,40,1012,8,40,1,41,1,41,3,41,1016, + 8,41,1,41,1,41,1,41,1,41,3,41,1022,8,41,1,42,1,42,3,42,1026,8,42, + 1,42,1,42,3,42,1030,8,42,1,42,1,42,1,42,1,42,1,42,5,42,1037,8,42, + 10,42,12,42,1040,9,42,3,42,1042,8,42,1,42,3,42,1045,8,42,1,43,1, + 43,1,43,1,43,1,44,1,44,3,44,1053,8,44,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,46,1,46,1,46,1,46,1,46,3,46,1067,8,46,1,46,1,46,1,46,1, + 47,1,47,3,47,1074,8,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1, + 49,1,49,1,49,3,49,1087,8,49,1,49,1,49,1,49,1,49,3,49,1093,8,49,1, + 49,1,49,1,49,3,49,1098,8,49,1,49,3,49,1101,8,49,1,50,3,50,1104,8, + 50,1,50,1,50,1,50,3,50,1109,8,50,1,50,1,50,3,50,1113,8,50,1,50,1, + 50,1,50,1,50,1,50,5,50,1120,8,50,10,50,12,50,1123,9,50,1,50,1,50, + 3,50,1127,8,50,1,50,1,50,1,51,1,51,3,51,1133,8,51,1,52,1,52,3,52, + 1137,8,52,1,52,1,52,3,52,1141,8,52,1,53,1,53,1,53,3,53,1146,8,53, + 1,53,3,53,1149,8,53,1,53,1,53,1,53,1,53,5,53,1155,8,53,10,53,12, + 53,1158,9,53,3,53,1160,8,53,1,53,3,53,1163,8,53,1,54,1,54,1,54,1, + 54,1,54,1,54,1,54,1,54,5,54,1173,8,54,10,54,12,54,1176,9,54,3,54, + 1178,8,54,1,54,3,54,1181,8,54,1,55,1,55,1,55,3,55,1186,8,55,1,55, + 1,55,3,55,1190,8,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56, + 1,56,1,56,1,56,1,56,1,56,3,56,1206,8,56,1,57,1,57,1,57,3,57,1211, + 8,57,1,57,1,57,1,57,5,57,1216,8,57,10,57,12,57,1219,9,57,3,57,1221, + 8,57,1,58,1,58,1,58,1,58,3,58,1227,8,58,1,58,3,58,1230,8,58,1,58, + 1,58,1,58,5,58,1235,8,58,10,58,12,58,1238,9,58,3,58,1240,8,58,1, + 59,1,59,3,59,1244,8,59,1,59,1,59,1,59,3,59,1249,8,59,1,59,3,59,1252, + 8,59,1,59,1,59,1,59,5,59,1257,8,59,10,59,12,59,1260,9,59,3,59,1262, + 8,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62, + 1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,3,64,1286,8,64, + 1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65, + 1300,8,65,1,65,1,65,3,65,1304,8,65,1,66,1,66,3,66,1308,8,66,1,66, + 1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68, + 1,68,1,68,1,68,1,68,3,68,1328,8,68,3,68,1330,8,68,3,68,1332,8,68, + 1,69,1,69,1,69,1,69,1,69,1,69,1,69,3,69,1341,8,69,3,69,1343,8,69, + 1,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,1352,8,70,3,70,1354,8,70, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1363,8,71,3,71,1365,8,71, + 1,72,1,72,1,72,3,72,1370,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73, + 3,73,1379,8,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,1388,8,74, + 1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75,1397,8,75,1,76,1,76,1,76, + 1,77,1,77,1,77,1,77,1,77,1,77,3,77,1408,8,77,1,78,1,78,1,78,1,78, + 3,78,1414,8,78,1,78,1,78,1,78,3,78,1419,8,78,1,78,3,78,1422,8,78, + 1,78,1,78,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,3,80,1435, + 8,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,3,80,1445,8,80,1,80, + 1,80,3,80,1449,8,80,1,81,1,81,1,81,3,81,1454,8,81,1,82,1,82,1,82, + 1,82,1,82,1,82,1,82,5,82,1463,8,82,10,82,12,82,1466,9,82,1,82,1, + 82,3,82,1470,8,82,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,85,1,85,1, + 85,1,86,1,86,1,86,1,86,1,87,1,87,1,88,1,88,1,89,1,89,1,90,1,90,1, + 91,1,91,1,92,1,92,1,93,1,93,1,93,5,93,1501,8,93,10,93,12,93,1504, + 9,93,1,94,1,94,1,94,5,94,1509,8,94,10,94,12,94,1512,9,94,1,95,1, + 95,3,95,1516,8,95,1,96,1,96,1,97,1,97,1,97,3,97,1523,8,97,1,98,1, + 98,1,99,1,99,1,99,3,99,1530,8,99,1,100,1,100,3,100,1534,8,100,1, + 101,1,101,1,101,3,101,1539,8,101,1,101,3,101,1542,8,101,1,101,1, + 101,1,101,3,101,1547,8,101,1,101,1,101,1,101,3,101,1552,8,101,1, + 101,1,101,1,101,3,101,1557,8,101,1,101,1,101,3,101,1561,8,101,1, + 101,1,101,1,101,1,101,1,101,1,101,1,101,3,101,1570,8,101,1,101,3, + 101,1573,8,101,1,101,1,101,3,101,1577,8,101,1,102,1,102,1,102,5, + 102,1582,8,102,10,102,12,102,1585,9,102,1,103,1,103,1,103,1,103, + 1,104,1,104,3,104,1593,8,104,1,104,1,104,3,104,1597,8,104,5,104, + 1599,8,104,10,104,12,104,1602,9,104,1,104,1,104,1,105,1,105,3,105, + 1608,8,105,1,106,3,106,1611,8,106,1,106,1,106,1,107,1,107,1,107, + 1,107,5,107,1619,8,107,10,107,12,107,1622,9,107,1,108,1,108,1,108, + 1,108,3,108,1628,8,108,1,108,1,108,1,108,3,108,1633,8,108,1,108, + 1,108,1,108,3,108,1638,8,108,1,108,1,108,1,108,3,108,1643,8,108, + 1,108,1,108,5,108,1647,8,108,10,108,12,108,1650,9,108,3,108,1652, + 8,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,3,109,1661,8,109, + 1,109,3,109,1664,8,109,1,109,3,109,1667,8,109,1,110,1,110,1,110, + 1,110,3,110,1673,8,110,1,111,1,111,1,111,3,111,1678,8,111,1,112, + 1,112,1,113,1,113,1,113,1,113,5,113,1686,8,113,10,113,12,113,1689, + 9,113,3,113,1691,8,113,1,113,3,113,1694,8,113,1,113,1,113,3,113, + 1698,8,113,1,114,1,114,1,114,1,115,1,115,1,115,5,115,1706,8,115, + 10,115,12,115,1709,9,115,3,115,1711,8,115,1,116,1,116,1,116,1,116, + 3,116,1717,8,116,1,116,1,116,5,116,1721,8,116,10,116,12,116,1724, + 9,116,3,116,1726,8,116,1,117,3,117,1729,8,117,1,117,1,117,3,117, + 1733,8,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,3,118, + 1743,8,118,1,119,1,119,1,120,1,120,1,120,5,120,1750,8,120,10,120, + 12,120,1753,9,120,1,120,1,120,3,120,1757,8,120,1,120,3,120,1760, + 8,120,1,121,1,121,3,121,1764,8,121,1,121,1,121,1,121,1,122,1,122, + 3,122,1771,8,122,1,122,1,122,1,122,1,122,1,122,1,122,5,122,1779, + 8,122,10,122,12,122,1782,9,122,1,122,1,122,1,123,1,123,1,123,1,123, + 1,123,1,123,1,123,3,123,1793,8,123,1,123,1,123,1,123,1,123,3,123, + 1799,8,123,3,123,1801,8,123,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,3,124,1810,8,124,1,124,3,124,1813,8,124,1,125,1,125,1,125, + 1,125,1,125,3,125,1820,8,125,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,3,126,1830,8,126,1,127,1,127,1,127,1,127,3,127,1836, + 8,127,1,128,1,128,1,128,1,128,5,128,1842,8,128,10,128,12,128,1845, + 9,128,1,128,1,128,1,129,1,129,1,129,1,129,5,129,1853,8,129,10,129, + 12,129,1856,9,129,1,129,1,129,1,130,1,130,1,130,5,130,1863,8,130, + 10,130,12,130,1866,9,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131, + 1,131,3,131,1876,8,131,3,131,1878,8,131,1,131,1,131,1,131,1,131, + 3,131,1884,8,131,1,132,1,132,1,132,3,132,1889,8,132,1,133,1,133, + 1,133,1,133,1,133,1,133,5,133,1897,8,133,10,133,12,133,1900,9,133, + 3,133,1902,8,133,1,133,1,133,1,133,1,133,3,133,1908,8,133,3,133, + 1910,8,133,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1918,8,134, + 1,134,1,134,1,134,1,134,3,134,1924,8,134,1,134,5,134,1927,8,134, + 10,134,12,134,1930,9,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 5,135,1939,8,135,10,135,12,135,1942,9,135,1,135,1,135,1,135,1,135, + 3,135,1948,8,135,1,136,1,136,3,136,1952,8,136,1,136,1,136,3,136, + 1956,8,136,1,137,1,137,3,137,1960,8,137,1,137,3,137,1963,8,137,1, + 137,1,137,1,137,1,137,1,137,5,137,1970,8,137,10,137,12,137,1973, + 9,137,3,137,1975,8,137,1,137,3,137,1978,8,137,1,137,1,137,1,137, + 3,137,1983,8,137,1,137,3,137,1986,8,137,1,138,1,138,1,138,5,138, + 1991,8,138,10,138,12,138,1994,9,138,1,139,1,139,1,139,3,139,1999, + 8,139,1,140,1,140,1,140,3,140,2004,8,140,1,141,3,141,2007,8,141, + 1,141,1,141,1,141,5,141,2012,8,141,10,141,12,141,2015,9,141,1,142, + 1,142,1,143,1,143,1,143,1,143,5,143,2023,8,143,10,143,12,143,2026, + 9,143,3,143,2028,8,143,1,143,1,143,3,143,2032,8,143,1,144,1,144, + 3,144,2036,8,144,1,144,1,144,1,144,1,145,1,145,1,146,1,146,3,146, + 2045,8,146,1,146,1,146,3,146,2049,8,146,1,146,1,146,1,146,3,146, + 2054,8,146,1,147,3,147,2057,8,147,1,147,1,147,1,148,1,148,1,149, + 1,149,1,150,1,150,1,150,3,150,2068,8,150,1,150,1,150,1,151,1,151, + 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,3,151, + 2084,8,151,5,151,2086,8,151,10,151,12,151,2089,9,151,1,152,3,152, + 2092,8,152,1,152,1,152,3,152,2096,8,152,1,152,1,152,3,152,2100,8, + 152,1,152,1,152,3,152,2104,8,152,1,152,1,152,3,152,2108,8,152,1, + 152,1,152,3,152,2112,8,152,1,152,1,152,1,152,1,152,1,152,1,152,1, + 152,1,152,3,152,2122,8,152,1,153,1,153,1,153,3,153,2127,8,153,1, + 153,1,153,1,153,1,153,1,153,5,153,2134,8,153,10,153,12,153,2137, + 9,153,1,153,1,153,3,153,2141,8,153,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,3,154,2154,8,154,3,154,2156, + 8,154,1,155,1,155,3,155,2160,8,155,1,155,1,155,3,155,2164,8,155, + 3,155,2166,8,155,1,156,1,156,1,156,1,156,5,156,2172,8,156,10,156, + 12,156,2175,9,156,1,156,1,156,1,157,1,157,1,157,1,157,3,157,2183, + 8,157,1,158,3,158,2186,8,158,1,158,1,158,1,159,1,159,1,159,1,159, + 1,160,1,160,1,160,1,160,1,160,5,160,2199,8,160,10,160,12,160,2202, + 9,160,1,160,1,160,1,160,3,160,2207,8,160,1,161,1,161,1,161,1,161, + 1,162,1,162,3,162,2215,8,162,1,163,1,163,1,164,1,164,1,164,3,164, + 2222,8,164,1,164,1,164,3,164,2226,8,164,1,164,1,164,1,164,1,164, + 1,164,1,164,5,164,2234,8,164,10,164,12,164,2237,9,164,1,165,1,165, + 1,165,1,165,1,165,1,165,1,165,1,165,3,165,2247,8,165,1,165,1,165, + 1,165,1,165,1,165,1,165,3,165,2255,8,165,1,165,1,165,1,165,1,165, + 1,165,5,165,2262,8,165,10,165,12,165,2265,9,165,1,165,1,165,1,165, + 3,165,2270,8,165,1,165,1,165,1,165,3,165,2275,8,165,1,165,1,165, + 1,165,1,165,3,165,2281,8,165,1,165,1,165,1,165,1,165,3,165,2287, + 8,165,1,165,1,165,1,165,3,165,2292,8,165,1,165,1,165,1,165,3,165, + 2297,8,165,1,166,1,166,1,166,1,166,3,166,2303,8,166,1,166,1,166, + 1,166,1,166,1,166,1,166,1,166,1,166,1,166,5,166,2314,8,166,10,166, + 12,166,2317,9,166,1,167,1,167,1,167,3,167,2322,8,167,1,167,1,167, + 1,167,5,167,2327,8,167,10,167,12,167,2330,9,167,3,167,2332,8,167, + 1,167,1,167,1,167,1,167,1,167,5,167,2339,8,167,10,167,12,167,2342, + 9,167,3,167,2344,8,167,1,167,1,167,3,167,2348,8,167,1,167,3,167, + 2351,8,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,3,168,2377,8,168,1,168,1,168,1,168,1,168, + 3,168,2383,8,168,5,168,2385,8,168,10,168,12,168,2388,9,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,5,168,2397,8,168,10,168,12,168, + 2400,9,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,3,168,2409, + 8,168,1,168,3,168,2412,8,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,5,168,2423,8,168,10,168,12,168,2426,9,168,3,168, + 2428,8,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,4,168,2445,8,168,11,168,12,168, + 2446,1,168,1,168,3,168,2451,8,168,1,168,1,168,1,168,1,168,4,168, + 2457,8,168,11,168,12,168,2458,1,168,1,168,3,168,2463,8,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,5,168,2486, + 8,168,10,168,12,168,2489,9,168,3,168,2491,8,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,3,168,2500,8,168,1,168,1,168,1,168,1,168, + 3,168,2506,8,168,1,168,1,168,1,168,1,168,3,168,2512,8,168,1,168, + 1,168,1,168,1,168,3,168,2518,8,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,3,168,2529,8,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,3,168,2538,8,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,5,168,2558,8,168,10,168,12,168,2561,9,168,3,168,2563, + 8,168,1,168,3,168,2566,8,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,168,5,168,2576,8,168,10,168,12,168,2579,9,168,1,169,1,169, + 1,169,1,169,3,169,2585,8,169,3,169,2587,8,169,1,170,1,170,1,171, + 1,171,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172, + 1,172,1,172,1,172,1,172,3,172,2607,8,172,1,173,1,173,1,174,1,174, + 1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174, + 1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,5,174,2632,8,174, + 10,174,12,174,2635,9,174,1,174,1,174,1,174,1,174,3,174,2641,8,174, + 1,174,1,174,1,174,1,174,5,174,2647,8,174,10,174,12,174,2650,9,174, + 1,174,1,174,3,174,2654,8,174,3,174,2656,8,174,1,174,1,174,5,174, + 2660,8,174,10,174,12,174,2663,9,174,1,175,1,175,1,176,1,176,3,176, + 2669,8,176,1,177,1,177,1,177,1,177,3,177,2675,8,177,1,178,1,178, + 1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,180,1,180,1,180, + 5,180,2690,8,180,10,180,12,180,2693,9,180,1,181,1,181,1,181,1,181, + 1,181,3,181,2700,8,181,1,181,1,181,1,181,1,181,1,181,5,181,2707, + 8,181,10,181,12,181,2710,9,181,3,181,2712,8,181,1,181,3,181,2715, + 8,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182, + 3,182,2727,8,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183, + 1,183,3,183,2738,8,183,1,184,1,184,1,184,1,184,1,184,3,184,2745, + 8,184,1,185,1,185,1,185,5,185,2750,8,185,10,185,12,185,2753,9,185, 1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186, - 1,186,3,186,2751,8,186,1,187,1,187,1,187,1,187,1,187,1,187,1,187, - 1,187,1,187,3,187,2762,8,187,1,188,1,188,1,188,1,188,1,188,3,188, - 2769,8,188,1,189,1,189,1,189,5,189,2774,8,189,10,189,12,189,2777, - 9,189,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190, - 1,190,3,190,2790,8,190,3,190,2792,8,190,1,191,1,191,1,192,1,192, - 1,192,5,192,2799,8,192,10,192,12,192,2802,9,192,1,193,1,193,1,193, - 1,193,1,193,1,193,3,193,2810,8,193,1,193,1,193,1,193,5,193,2815, - 8,193,10,193,12,193,2818,9,193,3,193,2820,8,193,1,194,1,194,1,194, - 1,194,1,194,1,194,3,194,2828,8,194,1,195,1,195,1,195,1,195,1,195, - 3,195,2835,8,195,1,196,3,196,2838,8,196,1,196,1,196,3,196,2842,8, - 196,1,196,1,196,3,196,2846,8,196,1,196,3,196,2849,8,196,1,197,1, - 197,1,198,1,198,1,198,10,799,1472,1656,1695,1715,1730,1761,1790, - 1864,2398,6,270,304,332,336,340,356,199,0,2,4,6,8,10,12,14,16,18, - 20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62, - 64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104, - 106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136, - 138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168, - 170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200, - 202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232, - 234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264, - 266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296, - 298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328, - 330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360, - 362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392, - 394,396,0,33,2,0,46,46,170,170,2,0,166,166,204,204,2,0,176,176,202, - 202,2,0,69,69,80,80,2,0,27,27,159,159,2,0,103,103,144,144,2,0,47, - 47,171,171,2,0,3,3,12,12,3,0,87,87,166,166,204,204,2,0,178,178,209, - 209,1,0,245,248,2,0,147,147,219,223,2,0,65,65,95,95,2,0,64,64,200, - 200,2,0,10,10,55,55,2,0,75,75,112,112,2,0,2,2,57,57,2,0,14,14,185, - 185,3,0,106,106,115,115,164,164,2,0,105,105,163,163,4,0,70,70,133, - 133,194,194,208,208,1,0,255,256,1,0,257,259,1,0,249,254,3,0,2,2, - 6,6,181,181,2,0,70,70,194,194,5,0,48,49,91,92,122,125,172,173,217, - 218,1,0,127,130,2,0,8,8,227,244,2,0,77,77,149,149,4,0,46,46,178, + 3,186,2766,8,186,3,186,2768,8,186,1,187,1,187,1,188,1,188,1,188, + 5,188,2775,8,188,10,188,12,188,2778,9,188,1,189,1,189,1,189,1,189, + 1,189,1,189,3,189,2786,8,189,1,189,1,189,1,189,5,189,2791,8,189, + 10,189,12,189,2794,9,189,3,189,2796,8,189,1,190,1,190,1,190,1,190, + 1,190,1,190,3,190,2804,8,190,1,191,1,191,1,191,1,191,1,191,3,191, + 2811,8,191,1,192,3,192,2814,8,192,1,192,1,192,3,192,2818,8,192,1, + 192,1,192,3,192,2822,8,192,1,192,3,192,2825,8,192,1,193,1,193,1, + 194,1,194,1,194,10,791,1464,1648,1687,1707,1722,1751,1780,1854,2386, + 6,268,302,328,332,336,348,195,0,2,4,6,8,10,12,14,16,18,20,22,24, + 26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68, + 70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108, + 110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140, + 142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172, + 174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204, + 206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236, + 238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268, + 270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300, + 302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332, + 334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364, + 366,368,370,372,374,376,378,380,382,384,386,388,0,34,2,0,46,46,170, + 170,2,0,166,166,204,204,1,0,245,248,2,0,176,176,202,202,2,0,69,69, + 80,80,2,0,27,27,159,159,2,0,103,103,144,144,2,0,47,47,171,171,2, + 0,3,3,12,12,3,0,87,87,166,166,204,204,2,0,178,178,209,209,2,0,147, + 147,219,223,2,0,65,65,95,95,2,0,64,64,200,200,2,0,10,10,55,55,2, + 0,75,75,112,112,2,0,2,2,57,57,2,0,14,14,185,185,3,0,106,106,115, + 115,164,164,2,0,105,105,163,163,4,0,70,70,133,133,194,194,208,208, + 1,0,255,256,1,0,257,259,2,0,70,70,194,194,1,0,127,130,1,0,249,254, + 3,0,2,2,6,6,181,181,5,0,48,49,91,92,122,125,172,173,217,218,2,0, + 8,8,227,244,2,0,154,154,169,169,2,0,77,77,149,149,4,0,46,46,178, 178,188,188,209,209,16,0,28,29,40,40,43,43,48,48,68,68,91,91,114, 114,122,122,124,124,158,158,165,165,172,172,184,184,196,196,204, 204,217,217,23,0,14,14,43,44,48,49,65,65,68,68,91,91,95,95,110,110, 119,119,122,125,127,130,137,137,140,140,152,153,172,173,180,180, - 184,185,195,195,204,204,213,213,217,217,220,220,231,231,3172,0,401, - 1,0,0,0,2,406,1,0,0,0,4,432,1,0,0,0,6,434,1,0,0,0,8,445,1,0,0,0, - 10,447,1,0,0,0,12,486,1,0,0,0,14,508,1,0,0,0,16,562,1,0,0,0,18,581, - 1,0,0,0,20,594,1,0,0,0,22,598,1,0,0,0,24,660,1,0,0,0,26,708,1,0, - 0,0,28,710,1,0,0,0,30,718,1,0,0,0,32,738,1,0,0,0,34,758,1,0,0,0, - 36,765,1,0,0,0,38,774,1,0,0,0,40,782,1,0,0,0,42,804,1,0,0,0,44,814, - 1,0,0,0,46,832,1,0,0,0,48,853,1,0,0,0,50,874,1,0,0,0,52,880,1,0, - 0,0,54,897,1,0,0,0,56,906,1,0,0,0,58,913,1,0,0,0,60,921,1,0,0,0, - 62,928,1,0,0,0,64,935,1,0,0,0,66,944,1,0,0,0,68,955,1,0,0,0,70,957, - 1,0,0,0,72,977,1,0,0,0,74,994,1,0,0,0,76,996,1,0,0,0,78,1005,1,0, - 0,0,80,1012,1,0,0,0,82,1021,1,0,0,0,84,1031,1,0,0,0,86,1054,1,0, - 0,0,88,1060,1,0,0,0,90,1062,1,0,0,0,92,1069,1,0,0,0,94,1081,1,0, - 0,0,96,1083,1,0,0,0,98,1090,1,0,0,0,100,1111,1,0,0,0,102,1140,1, - 0,0,0,104,1142,1,0,0,0,106,1150,1,0,0,0,108,1172,1,0,0,0,110,1190, - 1,0,0,0,112,1213,1,0,0,0,114,1215,1,0,0,0,116,1230,1,0,0,0,118,1249, - 1,0,0,0,120,1271,1,0,0,0,122,1276,1,0,0,0,124,1281,1,0,0,0,126,1286, - 1,0,0,0,128,1291,1,0,0,0,130,1298,1,0,0,0,132,1313,1,0,0,0,134,1319, - 1,0,0,0,136,1339,1,0,0,0,138,1341,1,0,0,0,140,1352,1,0,0,0,142,1363, - 1,0,0,0,144,1377,1,0,0,0,146,1379,1,0,0,0,148,1388,1,0,0,0,150,1397, - 1,0,0,0,152,1406,1,0,0,0,154,1409,1,0,0,0,156,1417,1,0,0,0,158,1433, - 1,0,0,0,160,1437,1,0,0,0,162,1461,1,0,0,0,164,1463,1,0,0,0,166,1479, - 1,0,0,0,168,1482,1,0,0,0,170,1486,1,0,0,0,172,1489,1,0,0,0,174,1493, - 1,0,0,0,176,1495,1,0,0,0,178,1497,1,0,0,0,180,1499,1,0,0,0,182,1501, - 1,0,0,0,184,1503,1,0,0,0,186,1505,1,0,0,0,188,1513,1,0,0,0,190,1523, - 1,0,0,0,192,1525,1,0,0,0,194,1530,1,0,0,0,196,1532,1,0,0,0,198,1537, - 1,0,0,0,200,1541,1,0,0,0,202,1546,1,0,0,0,204,1586,1,0,0,0,206,1594, - 1,0,0,0,208,1598,1,0,0,0,210,1613,1,0,0,0,212,1618,1,0,0,0,214,1622, - 1,0,0,0,216,1631,1,0,0,0,218,1661,1,0,0,0,220,1676,1,0,0,0,222,1682, - 1,0,0,0,224,1687,1,0,0,0,226,1689,1,0,0,0,228,1707,1,0,0,0,230,1710, - 1,0,0,0,232,1720,1,0,0,0,234,1740,1,0,0,0,236,1750,1,0,0,0,238,1752, - 1,0,0,0,240,1754,1,0,0,0,242,1769,1,0,0,0,244,1771,1,0,0,0,246,1778, - 1,0,0,0,248,1810,1,0,0,0,250,1822,1,0,0,0,252,1829,1,0,0,0,254,1839, - 1,0,0,0,256,1841,1,0,0,0,258,1847,1,0,0,0,260,1858,1,0,0,0,262,1869, - 1,0,0,0,264,1877,1,0,0,0,266,1895,1,0,0,0,268,1900,1,0,0,0,270,1921, - 1,0,0,0,272,1957,1,0,0,0,274,1959,1,0,0,0,276,1967,1,0,0,0,278,1997, - 1,0,0,0,280,2005,1,0,0,0,282,2010,1,0,0,0,284,2016,1,0,0,0,286,2026, - 1,0,0,0,288,2041,1,0,0,0,290,2043,1,0,0,0,292,2050,1,0,0,0,294,2063, - 1,0,0,0,296,2066,1,0,0,0,298,2070,1,0,0,0,300,2072,1,0,0,0,302,2077, - 1,0,0,0,304,2081,1,0,0,0,306,2131,1,0,0,0,308,2150,1,0,0,0,310,2152, - 1,0,0,0,312,2167,1,0,0,0,314,2169,1,0,0,0,316,2179,1,0,0,0,318,2194, - 1,0,0,0,320,2197,1,0,0,0,322,2201,1,0,0,0,324,2205,1,0,0,0,326,2220, - 1,0,0,0,328,2226,1,0,0,0,330,2228,1,0,0,0,332,2237,1,0,0,0,334,2308, - 1,0,0,0,336,2314,1,0,0,0,338,2330,1,0,0,0,340,2577,1,0,0,0,342,2598, - 1,0,0,0,344,2600,1,0,0,0,346,2602,1,0,0,0,348,2604,1,0,0,0,350,2620, - 1,0,0,0,352,2622,1,0,0,0,354,2624,1,0,0,0,356,2671,1,0,0,0,358,2680, - 1,0,0,0,360,2684,1,0,0,0,362,2690,1,0,0,0,364,2692,1,0,0,0,366,2697, - 1,0,0,0,368,2702,1,0,0,0,370,2710,1,0,0,0,372,2750,1,0,0,0,374,2761, - 1,0,0,0,376,2768,1,0,0,0,378,2770,1,0,0,0,380,2791,1,0,0,0,382,2793, - 1,0,0,0,384,2795,1,0,0,0,386,2819,1,0,0,0,388,2827,1,0,0,0,390,2834, - 1,0,0,0,392,2848,1,0,0,0,394,2850,1,0,0,0,396,2852,1,0,0,0,398,400, - 3,2,1,0,399,398,1,0,0,0,400,403,1,0,0,0,401,399,1,0,0,0,401,402, - 1,0,0,0,402,404,1,0,0,0,403,401,1,0,0,0,404,405,5,0,0,1,405,1,1, - 0,0,0,406,408,3,4,2,0,407,409,5,262,0,0,408,407,1,0,0,0,408,409, - 1,0,0,0,409,3,1,0,0,0,410,433,3,212,106,0,411,433,3,6,3,0,412,433, - 3,8,4,0,413,433,3,26,13,0,414,433,3,64,32,0,415,433,3,66,33,0,416, - 433,3,68,34,0,417,433,3,74,37,0,418,433,3,88,44,0,419,433,3,94,47, - 0,420,433,3,100,50,0,421,433,3,102,51,0,422,433,3,108,54,0,423,433, - 3,110,55,0,424,433,3,112,56,0,425,433,3,144,72,0,426,433,3,152,76, - 0,427,433,3,154,77,0,428,433,3,156,78,0,429,433,3,158,79,0,430,433, - 3,160,80,0,431,433,3,162,81,0,432,410,1,0,0,0,432,411,1,0,0,0,432, - 412,1,0,0,0,432,413,1,0,0,0,432,414,1,0,0,0,432,415,1,0,0,0,432, - 416,1,0,0,0,432,417,1,0,0,0,432,418,1,0,0,0,432,419,1,0,0,0,432, - 420,1,0,0,0,432,421,1,0,0,0,432,422,1,0,0,0,432,423,1,0,0,0,432, - 424,1,0,0,0,432,425,1,0,0,0,432,426,1,0,0,0,432,427,1,0,0,0,432, - 428,1,0,0,0,432,429,1,0,0,0,432,430,1,0,0,0,432,431,1,0,0,0,433, - 5,1,0,0,0,434,435,5,203,0,0,435,436,3,184,92,0,436,7,1,0,0,0,437, - 446,3,18,9,0,438,446,3,20,10,0,439,446,3,22,11,0,440,446,3,24,12, - 0,441,446,3,16,8,0,442,446,3,14,7,0,443,446,3,12,6,0,444,446,3,10, - 5,0,445,437,1,0,0,0,445,438,1,0,0,0,445,439,1,0,0,0,445,440,1,0, - 0,0,445,441,1,0,0,0,445,442,1,0,0,0,445,443,1,0,0,0,445,444,1,0, - 0,0,446,9,1,0,0,0,447,449,5,37,0,0,448,450,5,19,0,0,449,448,1,0, - 0,0,449,450,1,0,0,0,450,451,1,0,0,0,451,453,5,188,0,0,452,454,3, - 172,86,0,453,452,1,0,0,0,453,454,1,0,0,0,454,455,1,0,0,0,455,471, - 3,174,87,0,456,457,5,265,0,0,457,462,3,222,111,0,458,459,5,263,0, - 0,459,461,3,222,111,0,460,458,1,0,0,0,461,464,1,0,0,0,462,460,1, - 0,0,0,462,463,1,0,0,0,463,467,1,0,0,0,464,462,1,0,0,0,465,466,5, - 263,0,0,466,468,3,216,108,0,467,465,1,0,0,0,467,468,1,0,0,0,468, - 469,1,0,0,0,469,470,5,266,0,0,470,472,1,0,0,0,471,456,1,0,0,0,471, - 472,1,0,0,0,472,479,1,0,0,0,473,474,5,17,0,0,474,477,5,26,0,0,475, - 478,3,316,158,0,476,478,3,260,130,0,477,475,1,0,0,0,477,476,1,0, - 0,0,478,480,1,0,0,0,479,473,1,0,0,0,479,480,1,0,0,0,480,481,1,0, - 0,0,481,484,3,202,101,0,482,483,5,9,0,0,483,485,3,212,106,0,484, - 482,1,0,0,0,484,485,1,0,0,0,485,11,1,0,0,0,486,488,5,37,0,0,487, - 489,5,19,0,0,488,487,1,0,0,0,488,489,1,0,0,0,489,490,1,0,0,0,490, - 492,5,188,0,0,491,493,3,172,86,0,492,491,1,0,0,0,492,493,1,0,0,0, - 493,494,1,0,0,0,494,495,3,174,87,0,495,499,5,115,0,0,496,500,3,186, - 93,0,497,498,5,147,0,0,498,500,3,342,171,0,499,496,1,0,0,0,499,497, - 1,0,0,0,500,504,1,0,0,0,501,502,5,17,0,0,502,503,5,26,0,0,503,505, - 3,260,130,0,504,501,1,0,0,0,504,505,1,0,0,0,505,506,1,0,0,0,506, - 507,3,202,101,0,507,13,1,0,0,0,508,510,5,37,0,0,509,511,5,19,0,0, - 510,509,1,0,0,0,510,511,1,0,0,0,511,512,1,0,0,0,512,514,5,188,0, - 0,513,515,3,172,86,0,514,513,1,0,0,0,514,515,1,0,0,0,515,516,1,0, - 0,0,516,534,3,174,87,0,517,518,5,265,0,0,518,523,3,224,112,0,519, - 520,5,263,0,0,520,522,3,224,112,0,521,519,1,0,0,0,522,525,1,0,0, - 0,523,521,1,0,0,0,523,524,1,0,0,0,524,530,1,0,0,0,525,523,1,0,0, - 0,526,527,5,263,0,0,527,528,5,150,0,0,528,529,5,110,0,0,529,531, - 3,316,158,0,530,526,1,0,0,0,530,531,1,0,0,0,531,532,1,0,0,0,532, - 533,5,266,0,0,533,535,1,0,0,0,534,517,1,0,0,0,534,535,1,0,0,0,535, - 541,1,0,0,0,536,537,5,150,0,0,537,539,5,110,0,0,538,540,3,316,158, - 0,539,538,1,0,0,0,539,540,1,0,0,0,540,542,1,0,0,0,541,536,1,0,0, - 0,541,542,1,0,0,0,542,546,1,0,0,0,543,544,5,145,0,0,544,545,5,26, - 0,0,545,547,3,242,121,0,546,543,1,0,0,0,546,547,1,0,0,0,547,549, - 1,0,0,0,548,550,3,228,114,0,549,548,1,0,0,0,549,550,1,0,0,0,550, - 551,1,0,0,0,551,552,5,23,0,0,552,553,5,9,0,0,553,556,5,111,0,0,554, - 555,5,25,0,0,555,557,3,258,129,0,556,554,1,0,0,0,556,557,1,0,0,0, - 557,560,1,0,0,0,558,559,5,9,0,0,559,561,3,212,106,0,560,558,1,0, - 0,0,560,561,1,0,0,0,561,15,1,0,0,0,562,563,5,37,0,0,563,565,5,212, - 0,0,564,566,3,172,86,0,565,564,1,0,0,0,565,566,1,0,0,0,566,567,1, - 0,0,0,567,569,3,178,89,0,568,570,3,208,104,0,569,568,1,0,0,0,569, - 570,1,0,0,0,570,572,1,0,0,0,571,573,3,228,114,0,572,571,1,0,0,0, - 572,573,1,0,0,0,573,576,1,0,0,0,574,575,5,25,0,0,575,577,3,258,129, - 0,576,574,1,0,0,0,576,577,1,0,0,0,577,578,1,0,0,0,578,579,5,9,0, - 0,579,580,3,212,106,0,580,17,1,0,0,0,581,582,5,37,0,0,582,584,7, - 0,0,0,583,585,3,172,86,0,584,583,1,0,0,0,584,585,1,0,0,0,585,586, - 1,0,0,0,586,588,3,176,88,0,587,589,3,228,114,0,588,587,1,0,0,0,588, - 589,1,0,0,0,589,592,1,0,0,0,590,591,5,24,0,0,591,593,3,342,171,0, - 592,590,1,0,0,0,592,593,1,0,0,0,593,19,1,0,0,0,594,595,5,37,0,0, - 595,596,5,166,0,0,596,597,3,390,195,0,597,21,1,0,0,0,598,600,5,37, - 0,0,599,601,5,12,0,0,600,599,1,0,0,0,600,601,1,0,0,0,601,602,1,0, - 0,0,602,604,5,84,0,0,603,605,3,172,86,0,604,603,1,0,0,0,604,605, - 1,0,0,0,605,606,1,0,0,0,606,619,3,180,90,0,607,616,5,265,0,0,608, - 613,3,356,178,0,609,610,5,263,0,0,610,612,3,356,178,0,611,609,1, - 0,0,0,612,615,1,0,0,0,613,611,1,0,0,0,613,614,1,0,0,0,614,617,1, - 0,0,0,615,613,1,0,0,0,616,608,1,0,0,0,616,617,1,0,0,0,617,618,1, - 0,0,0,618,620,5,266,0,0,619,607,1,0,0,0,619,620,1,0,0,0,620,621, - 1,0,0,0,621,622,5,160,0,0,622,625,3,356,178,0,623,624,5,102,0,0, - 624,626,3,356,178,0,625,623,1,0,0,0,625,626,1,0,0,0,626,627,1,0, - 0,0,627,628,5,24,0,0,628,632,5,274,0,0,629,630,5,104,0,0,630,631, - 5,249,0,0,631,633,5,274,0,0,632,629,1,0,0,0,632,633,1,0,0,0,633, - 634,1,0,0,0,634,635,5,206,0,0,635,636,5,249,0,0,636,637,5,274,0, - 0,637,638,5,126,0,0,638,639,5,249,0,0,639,643,5,274,0,0,640,641, - 5,18,0,0,641,642,5,249,0,0,642,644,5,274,0,0,643,640,1,0,0,0,643, - 644,1,0,0,0,644,648,1,0,0,0,645,646,5,20,0,0,646,647,5,249,0,0,647, - 649,5,274,0,0,648,645,1,0,0,0,648,649,1,0,0,0,649,653,1,0,0,0,650, - 651,5,187,0,0,651,652,5,249,0,0,652,654,5,274,0,0,653,650,1,0,0, - 0,653,654,1,0,0,0,654,658,1,0,0,0,655,656,5,76,0,0,656,657,5,249, - 0,0,657,659,5,274,0,0,658,655,1,0,0,0,658,659,1,0,0,0,659,23,1,0, - 0,0,660,661,5,37,0,0,661,663,5,84,0,0,662,664,3,172,86,0,663,662, - 1,0,0,0,663,664,1,0,0,0,664,665,1,0,0,0,665,678,3,180,90,0,666,675, - 5,265,0,0,667,672,3,356,178,0,668,669,5,263,0,0,669,671,3,356,178, - 0,670,668,1,0,0,0,671,674,1,0,0,0,672,670,1,0,0,0,672,673,1,0,0, - 0,673,676,1,0,0,0,674,672,1,0,0,0,675,667,1,0,0,0,675,676,1,0,0, - 0,676,677,1,0,0,0,677,679,5,266,0,0,678,666,1,0,0,0,678,679,1,0, - 0,0,679,682,1,0,0,0,680,681,5,160,0,0,681,683,3,356,178,0,682,680, - 1,0,0,0,682,683,1,0,0,0,683,684,1,0,0,0,684,685,5,24,0,0,685,686, - 5,274,0,0,686,687,5,186,0,0,687,688,5,249,0,0,688,689,3,342,171, - 0,689,25,1,0,0,0,690,709,3,28,14,0,691,709,3,62,31,0,692,709,3,60, - 30,0,693,709,3,58,29,0,694,709,3,54,27,0,695,709,3,56,28,0,696,709, - 3,52,26,0,697,709,3,48,24,0,698,709,3,50,25,0,699,709,3,46,23,0, - 700,709,3,44,22,0,701,709,3,42,21,0,702,709,3,40,20,0,703,709,3, - 34,17,0,704,709,3,30,15,0,705,709,3,32,16,0,706,709,3,36,18,0,707, - 709,3,38,19,0,708,690,1,0,0,0,708,691,1,0,0,0,708,692,1,0,0,0,708, - 693,1,0,0,0,708,694,1,0,0,0,708,695,1,0,0,0,708,696,1,0,0,0,708, - 697,1,0,0,0,708,698,1,0,0,0,708,699,1,0,0,0,708,700,1,0,0,0,708, - 701,1,0,0,0,708,702,1,0,0,0,708,703,1,0,0,0,708,704,1,0,0,0,708, - 705,1,0,0,0,708,706,1,0,0,0,708,707,1,0,0,0,709,27,1,0,0,0,710,711, - 5,4,0,0,711,712,5,46,0,0,712,713,3,184,92,0,713,714,5,176,0,0,714, - 715,5,142,0,0,715,716,7,1,0,0,716,717,3,390,195,0,717,29,1,0,0,0, - 718,719,5,4,0,0,719,720,5,188,0,0,720,721,3,186,93,0,721,722,5,176, - 0,0,722,723,5,32,0,0,723,724,5,182,0,0,724,725,3,194,97,0,725,726, - 5,265,0,0,726,727,3,238,119,0,727,728,5,249,0,0,728,734,3,342,171, - 0,729,730,5,263,0,0,730,731,3,238,119,0,731,732,5,249,0,0,732,733, - 3,342,171,0,733,735,1,0,0,0,734,729,1,0,0,0,734,735,1,0,0,0,735, - 736,1,0,0,0,736,737,5,266,0,0,737,31,1,0,0,0,738,739,5,4,0,0,739, - 740,5,188,0,0,740,743,3,186,93,0,741,742,5,145,0,0,742,744,3,330, - 165,0,743,741,1,0,0,0,743,744,1,0,0,0,744,745,1,0,0,0,745,756,5, - 176,0,0,746,747,5,30,0,0,747,748,5,94,0,0,748,753,3,342,171,0,749, - 750,5,216,0,0,750,751,5,151,0,0,751,752,5,249,0,0,752,754,3,392, - 196,0,753,749,1,0,0,0,753,754,1,0,0,0,754,757,1,0,0,0,755,757,5, - 197,0,0,756,746,1,0,0,0,756,755,1,0,0,0,757,33,1,0,0,0,758,759,5, - 4,0,0,759,760,5,188,0,0,760,761,3,186,93,0,761,762,5,31,0,0,762, - 763,3,194,97,0,763,764,3,230,115,0,764,35,1,0,0,0,765,766,5,4,0, - 0,766,767,5,188,0,0,767,768,3,186,93,0,768,770,5,58,0,0,769,771, - 5,32,0,0,770,769,1,0,0,0,770,771,1,0,0,0,771,772,1,0,0,0,772,773, - 3,194,97,0,773,37,1,0,0,0,774,775,5,4,0,0,775,776,5,188,0,0,776, - 777,3,186,93,0,777,778,5,176,0,0,778,779,5,142,0,0,779,780,7,1,0, - 0,780,781,3,390,195,0,781,39,1,0,0,0,782,783,5,4,0,0,783,784,5,188, - 0,0,784,790,3,186,93,0,785,791,5,158,0,0,786,788,5,1,0,0,787,789, - 3,172,86,0,788,787,1,0,0,0,788,789,1,0,0,0,789,791,1,0,0,0,790,785, - 1,0,0,0,790,786,1,0,0,0,791,792,1,0,0,0,792,793,5,33,0,0,793,794, - 5,265,0,0,794,799,3,230,115,0,795,796,5,263,0,0,796,798,3,230,115, - 0,797,795,1,0,0,0,798,801,1,0,0,0,799,800,1,0,0,0,799,797,1,0,0, - 0,800,802,1,0,0,0,801,799,1,0,0,0,802,803,5,266,0,0,803,41,1,0,0, - 0,804,805,5,4,0,0,805,806,5,188,0,0,806,807,3,186,93,0,807,808,5, - 1,0,0,808,810,5,32,0,0,809,811,3,172,86,0,810,809,1,0,0,0,810,811, - 1,0,0,0,811,812,1,0,0,0,812,813,3,232,116,0,813,43,1,0,0,0,814,815, - 5,4,0,0,815,816,5,188,0,0,816,817,3,186,93,0,817,819,5,4,0,0,818, - 820,5,32,0,0,819,818,1,0,0,0,819,820,1,0,0,0,820,821,1,0,0,0,821, - 830,3,194,97,0,822,826,5,176,0,0,823,827,3,236,118,0,824,825,5,34, - 0,0,825,827,3,342,171,0,826,823,1,0,0,0,826,824,1,0,0,0,827,831, - 1,0,0,0,828,829,5,58,0,0,829,831,5,51,0,0,830,822,1,0,0,0,830,828, - 1,0,0,0,831,45,1,0,0,0,832,833,5,4,0,0,833,834,5,188,0,0,834,835, - 3,186,93,0,835,837,5,1,0,0,836,838,3,172,86,0,837,836,1,0,0,0,837, - 838,1,0,0,0,838,851,1,0,0,0,839,840,5,145,0,0,840,843,3,330,165, - 0,841,842,5,24,0,0,842,844,3,342,171,0,843,841,1,0,0,0,843,844,1, - 0,0,0,844,846,1,0,0,0,845,847,3,250,125,0,846,845,1,0,0,0,846,847, - 1,0,0,0,847,852,1,0,0,0,848,849,5,154,0,0,849,850,5,145,0,0,850, - 852,3,248,124,0,851,839,1,0,0,0,851,848,1,0,0,0,852,47,1,0,0,0,853, - 854,5,4,0,0,854,855,5,188,0,0,855,858,3,186,93,0,856,857,5,145,0, - 0,857,859,3,330,165,0,858,856,1,0,0,0,858,859,1,0,0,0,859,860,1, - 0,0,0,860,872,5,176,0,0,861,862,5,72,0,0,862,873,3,240,120,0,863, - 864,5,168,0,0,864,865,5,79,0,0,865,873,3,264,132,0,866,867,5,24, - 0,0,867,873,3,342,171,0,868,869,5,25,0,0,869,873,3,258,129,0,870, - 871,5,175,0,0,871,873,3,258,129,0,872,861,1,0,0,0,872,863,1,0,0, - 0,872,866,1,0,0,0,872,868,1,0,0,0,872,870,1,0,0,0,873,49,1,0,0,0, - 874,875,5,4,0,0,875,876,5,188,0,0,876,877,3,186,93,0,877,878,5,155, - 0,0,878,879,5,146,0,0,879,51,1,0,0,0,880,881,5,4,0,0,881,882,5,188, - 0,0,882,883,3,186,93,0,883,885,5,58,0,0,884,886,3,170,85,0,885,884, - 1,0,0,0,885,886,1,0,0,0,886,895,1,0,0,0,887,888,5,145,0,0,888,890, - 3,330,165,0,889,891,5,22,0,0,890,889,1,0,0,0,890,891,1,0,0,0,891, - 896,1,0,0,0,892,893,5,154,0,0,893,894,5,145,0,0,894,896,3,248,124, - 0,895,887,1,0,0,0,895,892,1,0,0,0,896,53,1,0,0,0,897,898,5,4,0,0, - 898,899,5,212,0,0,899,901,3,188,94,0,900,902,3,208,104,0,901,900, - 1,0,0,0,901,902,1,0,0,0,902,903,1,0,0,0,903,904,5,9,0,0,904,905, - 3,212,106,0,905,55,1,0,0,0,906,907,5,4,0,0,907,908,5,212,0,0,908, - 909,3,188,94,0,909,910,5,156,0,0,910,911,5,193,0,0,911,912,3,188, - 94,0,912,57,1,0,0,0,913,914,5,4,0,0,914,915,5,212,0,0,915,916,3, - 188,94,0,916,917,5,176,0,0,917,918,5,142,0,0,918,919,7,1,0,0,919, - 920,3,384,192,0,920,59,1,0,0,0,921,922,5,4,0,0,922,923,5,188,0,0, - 923,924,3,186,93,0,924,925,5,156,0,0,925,926,5,193,0,0,926,927,3, - 186,93,0,927,61,1,0,0,0,928,929,5,4,0,0,929,930,5,212,0,0,930,931, - 3,188,94,0,931,932,7,2,0,0,932,933,5,25,0,0,933,934,3,258,129,0, - 934,63,1,0,0,0,935,937,5,196,0,0,936,938,5,188,0,0,937,936,1,0,0, - 0,937,938,1,0,0,0,938,940,1,0,0,0,939,941,3,170,85,0,940,939,1,0, - 0,0,940,941,1,0,0,0,941,942,1,0,0,0,942,943,3,186,93,0,943,65,1, - 0,0,0,944,946,5,56,0,0,945,947,5,46,0,0,946,945,1,0,0,0,946,947, - 1,0,0,0,947,949,1,0,0,0,948,950,7,3,0,0,949,948,1,0,0,0,949,950, - 1,0,0,0,950,951,1,0,0,0,951,952,3,384,192,0,952,67,1,0,0,0,953,956, - 3,70,35,0,954,956,3,72,36,0,955,953,1,0,0,0,955,954,1,0,0,0,956, - 69,1,0,0,0,957,958,5,36,0,0,958,959,5,182,0,0,959,961,3,186,93,0, - 960,962,3,316,158,0,961,960,1,0,0,0,961,962,1,0,0,0,962,975,1,0, - 0,0,963,964,5,190,0,0,964,965,5,185,0,0,965,966,5,265,0,0,966,967, - 3,392,196,0,967,973,5,266,0,0,968,969,5,157,0,0,969,970,5,265,0, - 0,970,971,3,392,196,0,971,972,5,266,0,0,972,974,1,0,0,0,973,968, - 1,0,0,0,973,974,1,0,0,0,974,976,1,0,0,0,975,963,1,0,0,0,975,976, - 1,0,0,0,976,71,1,0,0,0,977,978,5,36,0,0,978,979,5,96,0,0,979,980, - 5,182,0,0,980,986,3,186,93,0,981,982,5,145,0,0,982,983,5,265,0,0, - 983,984,3,330,165,0,984,985,5,266,0,0,985,987,1,0,0,0,986,981,1, - 0,0,0,986,987,1,0,0,0,987,73,1,0,0,0,988,995,3,86,43,0,989,995,3, - 84,42,0,990,995,3,82,41,0,991,995,3,78,39,0,992,995,3,80,40,0,993, - 995,3,76,38,0,994,988,1,0,0,0,994,989,1,0,0,0,994,990,1,0,0,0,994, - 991,1,0,0,0,994,992,1,0,0,0,994,993,1,0,0,0,995,75,1,0,0,0,996,997, - 5,58,0,0,997,999,7,0,0,0,998,1000,3,170,85,0,999,998,1,0,0,0,999, - 1000,1,0,0,0,1000,1001,1,0,0,0,1001,1003,3,184,92,0,1002,1004,7, - 4,0,0,1003,1002,1,0,0,0,1003,1004,1,0,0,0,1004,77,1,0,0,0,1005,1006, - 5,58,0,0,1006,1008,5,212,0,0,1007,1009,3,170,85,0,1008,1007,1,0, - 0,0,1008,1009,1,0,0,0,1009,1010,1,0,0,0,1010,1011,3,188,94,0,1011, - 79,1,0,0,0,1012,1013,5,58,0,0,1013,1015,5,188,0,0,1014,1016,3,170, - 85,0,1015,1014,1,0,0,0,1015,1016,1,0,0,0,1016,1017,1,0,0,0,1017, - 1019,3,186,93,0,1018,1020,5,22,0,0,1019,1018,1,0,0,0,1019,1020,1, - 0,0,0,1020,81,1,0,0,0,1021,1023,5,58,0,0,1022,1024,5,96,0,0,1023, - 1022,1,0,0,0,1023,1024,1,0,0,0,1024,1025,1,0,0,0,1025,1026,5,182, - 0,0,1026,1029,3,186,93,0,1027,1028,5,145,0,0,1028,1030,3,330,165, - 0,1029,1027,1,0,0,0,1029,1030,1,0,0,0,1030,83,1,0,0,0,1031,1033, - 5,58,0,0,1032,1034,5,12,0,0,1033,1032,1,0,0,0,1033,1034,1,0,0,0, - 1034,1035,1,0,0,0,1035,1037,5,84,0,0,1036,1038,3,170,85,0,1037,1036, - 1,0,0,0,1037,1038,1,0,0,0,1038,1039,1,0,0,0,1039,1052,3,190,95,0, - 1040,1049,5,265,0,0,1041,1046,3,356,178,0,1042,1043,5,263,0,0,1043, - 1045,3,356,178,0,1044,1042,1,0,0,0,1045,1048,1,0,0,0,1046,1044,1, - 0,0,0,1046,1047,1,0,0,0,1047,1050,1,0,0,0,1048,1046,1,0,0,0,1049, - 1041,1,0,0,0,1049,1050,1,0,0,0,1050,1051,1,0,0,0,1051,1053,5,266, - 0,0,1052,1040,1,0,0,0,1052,1053,1,0,0,0,1053,85,1,0,0,0,1054,1055, - 5,58,0,0,1055,1056,5,166,0,0,1056,1057,3,390,195,0,1057,87,1,0,0, - 0,1058,1061,3,90,45,0,1059,1061,3,92,46,0,1060,1058,1,0,0,0,1060, - 1059,1,0,0,0,1061,89,1,0,0,0,1062,1063,5,86,0,0,1063,1064,5,166, - 0,0,1064,1065,3,390,195,0,1065,1066,5,193,0,0,1066,1067,5,87,0,0, - 1067,1068,3,390,195,0,1068,91,1,0,0,0,1069,1070,5,86,0,0,1070,1071, - 3,380,190,0,1071,1072,5,136,0,0,1072,1074,3,382,191,0,1073,1075, - 3,384,192,0,1074,1073,1,0,0,0,1074,1075,1,0,0,0,1075,1076,1,0,0, - 0,1076,1077,5,193,0,0,1077,1078,3,388,194,0,1078,93,1,0,0,0,1079, - 1082,3,96,48,0,1080,1082,3,98,49,0,1081,1079,1,0,0,0,1081,1080,1, - 0,0,0,1082,95,1,0,0,0,1083,1084,5,161,0,0,1084,1085,5,166,0,0,1085, - 1086,3,390,195,0,1086,1087,5,82,0,0,1087,1088,5,87,0,0,1088,1089, - 3,390,195,0,1089,97,1,0,0,0,1090,1094,5,161,0,0,1091,1092,5,86,0, - 0,1092,1093,5,137,0,0,1093,1095,5,78,0,0,1094,1091,1,0,0,0,1094, - 1095,1,0,0,0,1095,1096,1,0,0,0,1096,1097,3,380,190,0,1097,1098,5, - 136,0,0,1098,1100,3,382,191,0,1099,1101,3,384,192,0,1100,1099,1, - 0,0,0,1100,1101,1,0,0,0,1101,1102,1,0,0,0,1102,1108,5,82,0,0,1103, - 1109,3,388,194,0,1104,1106,5,166,0,0,1105,1104,1,0,0,0,1105,1106, - 1,0,0,0,1106,1107,1,0,0,0,1107,1109,3,390,195,0,1108,1103,1,0,0, - 0,1108,1105,1,0,0,0,1109,99,1,0,0,0,1110,1112,3,214,107,0,1111,1110, - 1,0,0,0,1111,1112,1,0,0,0,1112,1113,1,0,0,0,1113,1114,5,99,0,0,1114, - 1116,7,5,0,0,1115,1117,5,188,0,0,1116,1115,1,0,0,0,1116,1117,1,0, - 0,0,1117,1118,1,0,0,0,1118,1120,3,186,93,0,1119,1121,3,316,158,0, - 1120,1119,1,0,0,0,1120,1121,1,0,0,0,1121,1134,1,0,0,0,1122,1123, - 5,145,0,0,1123,1124,5,265,0,0,1124,1129,3,330,165,0,1125,1126,5, - 263,0,0,1126,1128,3,330,165,0,1127,1125,1,0,0,0,1128,1131,1,0,0, - 0,1129,1127,1,0,0,0,1129,1130,1,0,0,0,1130,1132,1,0,0,0,1131,1129, - 1,0,0,0,1132,1133,5,266,0,0,1133,1135,1,0,0,0,1134,1122,1,0,0,0, - 1134,1135,1,0,0,0,1135,1136,1,0,0,0,1136,1137,3,212,106,0,1137,101, - 1,0,0,0,1138,1141,3,104,52,0,1139,1141,3,106,53,0,1140,1138,1,0, - 0,0,1140,1139,1,0,0,0,1141,103,1,0,0,0,1142,1144,5,50,0,0,1143,1145, - 5,82,0,0,1144,1143,1,0,0,0,1144,1145,1,0,0,0,1145,1146,1,0,0,0,1146, - 1148,3,186,93,0,1147,1149,3,280,140,0,1148,1147,1,0,0,0,1148,1149, - 1,0,0,0,1149,105,1,0,0,0,1150,1151,5,50,0,0,1151,1156,3,186,93,0, - 1152,1154,5,9,0,0,1153,1152,1,0,0,0,1153,1154,1,0,0,0,1154,1155, - 1,0,0,0,1155,1157,3,390,195,0,1156,1153,1,0,0,0,1156,1157,1,0,0, - 0,1157,1158,1,0,0,0,1158,1167,5,82,0,0,1159,1164,3,304,152,0,1160, - 1161,5,263,0,0,1161,1163,3,304,152,0,1162,1160,1,0,0,0,1163,1166, - 1,0,0,0,1164,1162,1,0,0,0,1164,1165,1,0,0,0,1165,1168,1,0,0,0,1166, - 1164,1,0,0,0,1167,1159,1,0,0,0,1167,1168,1,0,0,0,1168,1170,1,0,0, - 0,1169,1171,3,280,140,0,1170,1169,1,0,0,0,1170,1171,1,0,0,0,1171, - 107,1,0,0,0,1172,1173,5,54,0,0,1173,1174,3,186,93,0,1174,1175,5, - 176,0,0,1175,1185,3,204,102,0,1176,1177,5,82,0,0,1177,1182,3,304, - 152,0,1178,1179,5,263,0,0,1179,1181,3,304,152,0,1180,1178,1,0,0, - 0,1181,1184,1,0,0,0,1182,1180,1,0,0,0,1182,1183,1,0,0,0,1183,1186, - 1,0,0,0,1184,1182,1,0,0,0,1185,1176,1,0,0,0,1185,1186,1,0,0,0,1186, - 1188,1,0,0,0,1187,1189,3,280,140,0,1188,1187,1,0,0,0,1188,1189,1, - 0,0,0,1189,109,1,0,0,0,1190,1191,5,207,0,0,1191,1193,5,103,0,0,1192, - 1194,5,188,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0,1194,1195,1,0, - 0,0,1195,1197,3,186,93,0,1196,1198,3,316,158,0,1197,1196,1,0,0,0, - 1197,1198,1,0,0,0,1198,1199,1,0,0,0,1199,1200,3,212,106,0,1200,111, - 1,0,0,0,1201,1214,3,132,66,0,1202,1214,3,134,67,0,1203,1214,3,136, - 68,0,1204,1214,3,130,65,0,1205,1214,3,128,64,0,1206,1214,3,126,63, - 0,1207,1214,3,124,62,0,1208,1214,3,122,61,0,1209,1214,3,120,60,0, - 1210,1214,3,118,59,0,1211,1214,3,116,58,0,1212,1214,3,114,57,0,1213, - 1201,1,0,0,0,1213,1202,1,0,0,0,1213,1203,1,0,0,0,1213,1204,1,0,0, - 0,1213,1205,1,0,0,0,1213,1206,1,0,0,0,1213,1207,1,0,0,0,1213,1208, - 1,0,0,0,1213,1209,1,0,0,0,1213,1210,1,0,0,0,1213,1211,1,0,0,0,1213, - 1212,1,0,0,0,1214,113,1,0,0,0,1215,1216,5,179,0,0,1216,1228,7,6, - 0,0,1217,1219,5,115,0,0,1218,1217,1,0,0,0,1218,1219,1,0,0,0,1219, - 1220,1,0,0,0,1220,1225,3,342,171,0,1221,1222,5,271,0,0,1222,1224, - 3,342,171,0,1223,1221,1,0,0,0,1224,1227,1,0,0,0,1225,1223,1,0,0, - 0,1225,1226,1,0,0,0,1226,1229,1,0,0,0,1227,1225,1,0,0,0,1228,1218, - 1,0,0,0,1228,1229,1,0,0,0,1229,115,1,0,0,0,1230,1231,5,179,0,0,1231, - 1234,5,189,0,0,1232,1233,5,94,0,0,1233,1235,3,186,93,0,1234,1232, - 1,0,0,0,1234,1235,1,0,0,0,1235,1247,1,0,0,0,1236,1238,5,115,0,0, - 1237,1236,1,0,0,0,1237,1238,1,0,0,0,1238,1239,1,0,0,0,1239,1244, - 3,342,171,0,1240,1241,5,271,0,0,1241,1243,3,342,171,0,1242,1240, - 1,0,0,0,1243,1246,1,0,0,0,1244,1242,1,0,0,0,1244,1245,1,0,0,0,1245, - 1248,1,0,0,0,1246,1244,1,0,0,0,1247,1237,1,0,0,0,1247,1248,1,0,0, - 0,1248,117,1,0,0,0,1249,1251,5,179,0,0,1250,1252,7,7,0,0,1251,1250, - 1,0,0,0,1251,1252,1,0,0,0,1252,1253,1,0,0,0,1253,1256,5,85,0,0,1254, - 1255,5,94,0,0,1255,1257,3,184,92,0,1256,1254,1,0,0,0,1256,1257,1, - 0,0,0,1257,1269,1,0,0,0,1258,1260,5,115,0,0,1259,1258,1,0,0,0,1259, - 1260,1,0,0,0,1260,1261,1,0,0,0,1261,1266,3,342,171,0,1262,1263,5, - 271,0,0,1263,1265,3,342,171,0,1264,1262,1,0,0,0,1265,1268,1,0,0, - 0,1266,1264,1,0,0,0,1266,1267,1,0,0,0,1267,1270,1,0,0,0,1268,1266, - 1,0,0,0,1269,1259,1,0,0,0,1269,1270,1,0,0,0,1270,119,1,0,0,0,1271, - 1272,5,179,0,0,1272,1273,5,37,0,0,1273,1274,5,188,0,0,1274,1275, - 3,186,93,0,1275,121,1,0,0,0,1276,1277,5,179,0,0,1277,1278,5,37,0, - 0,1278,1279,5,212,0,0,1279,1280,3,188,94,0,1280,123,1,0,0,0,1281, - 1282,5,179,0,0,1282,1283,5,188,0,0,1283,1284,5,182,0,0,1284,1285, - 3,186,93,0,1285,125,1,0,0,0,1286,1287,5,179,0,0,1287,1288,5,32,0, - 0,1288,1289,5,182,0,0,1289,1290,3,186,93,0,1290,127,1,0,0,0,1291, - 1293,5,179,0,0,1292,1294,5,154,0,0,1293,1292,1,0,0,0,1293,1294,1, - 0,0,0,1294,1295,1,0,0,0,1295,1296,5,146,0,0,1296,1297,3,186,93,0, - 1297,129,1,0,0,0,1298,1299,5,179,0,0,1299,1300,5,73,0,0,1300,1301, - 5,94,0,0,1301,1311,3,186,93,0,1302,1303,5,145,0,0,1303,1304,5,265, - 0,0,1304,1307,3,330,165,0,1305,1306,5,263,0,0,1306,1308,3,330,165, - 0,1307,1305,1,0,0,0,1307,1308,1,0,0,0,1308,1309,1,0,0,0,1309,1310, - 5,266,0,0,1310,1312,1,0,0,0,1311,1302,1,0,0,0,1311,1312,1,0,0,0, - 1312,131,1,0,0,0,1313,1315,5,179,0,0,1314,1316,5,39,0,0,1315,1314, - 1,0,0,0,1315,1316,1,0,0,0,1316,1317,1,0,0,0,1317,1318,5,167,0,0, - 1318,133,1,0,0,0,1319,1320,5,179,0,0,1320,1321,5,166,0,0,1321,1322, - 5,86,0,0,1322,1323,5,87,0,0,1323,1324,3,390,195,0,1324,135,1,0,0, - 0,1325,1340,3,138,69,0,1326,1340,3,140,70,0,1327,1340,3,142,71,0, - 1328,1329,5,179,0,0,1329,1330,5,86,0,0,1330,1331,7,8,0,0,1331,1337, - 3,390,195,0,1332,1333,5,136,0,0,1333,1335,7,9,0,0,1334,1336,3,384, - 192,0,1335,1334,1,0,0,0,1335,1336,1,0,0,0,1336,1338,1,0,0,0,1337, - 1332,1,0,0,0,1337,1338,1,0,0,0,1338,1340,1,0,0,0,1339,1325,1,0,0, - 0,1339,1326,1,0,0,0,1339,1327,1,0,0,0,1339,1328,1,0,0,0,1340,137, - 1,0,0,0,1341,1342,5,179,0,0,1342,1343,5,86,0,0,1343,1344,7,8,0,0, - 1344,1350,3,390,195,0,1345,1346,5,136,0,0,1346,1348,5,46,0,0,1347, - 1349,3,184,92,0,1348,1347,1,0,0,0,1348,1349,1,0,0,0,1349,1351,1, - 0,0,0,1350,1345,1,0,0,0,1350,1351,1,0,0,0,1351,139,1,0,0,0,1352, - 1353,5,179,0,0,1353,1354,5,86,0,0,1354,1355,7,8,0,0,1355,1361,3, - 390,195,0,1356,1357,5,136,0,0,1357,1359,5,188,0,0,1358,1360,3,186, - 93,0,1359,1358,1,0,0,0,1359,1360,1,0,0,0,1360,1362,1,0,0,0,1361, - 1356,1,0,0,0,1361,1362,1,0,0,0,1362,141,1,0,0,0,1363,1364,5,179, - 0,0,1364,1365,5,86,0,0,1365,1366,7,8,0,0,1366,1372,3,390,195,0,1367, - 1368,5,136,0,0,1368,1370,5,32,0,0,1369,1371,3,194,97,0,1370,1369, - 1,0,0,0,1370,1371,1,0,0,0,1371,1373,1,0,0,0,1372,1367,1,0,0,0,1372, - 1373,1,0,0,0,1373,143,1,0,0,0,1374,1378,3,146,73,0,1375,1378,3,148, - 74,0,1376,1378,3,150,75,0,1377,1374,1,0,0,0,1377,1375,1,0,0,0,1377, - 1376,1,0,0,0,1378,145,1,0,0,0,1379,1380,5,34,0,0,1380,1381,5,136, - 0,0,1381,1382,5,46,0,0,1382,1383,3,184,92,0,1383,1386,5,108,0,0, - 1384,1387,3,342,171,0,1385,1387,5,133,0,0,1386,1384,1,0,0,0,1386, - 1385,1,0,0,0,1387,147,1,0,0,0,1388,1389,5,34,0,0,1389,1390,5,136, - 0,0,1390,1391,5,188,0,0,1391,1392,3,186,93,0,1392,1395,5,108,0,0, - 1393,1396,3,342,171,0,1394,1396,5,133,0,0,1395,1393,1,0,0,0,1395, - 1394,1,0,0,0,1396,149,1,0,0,0,1397,1398,5,34,0,0,1398,1399,5,136, - 0,0,1399,1400,5,32,0,0,1400,1401,3,194,97,0,1401,1404,5,108,0,0, - 1402,1405,3,342,171,0,1403,1405,5,133,0,0,1404,1402,1,0,0,0,1404, - 1403,1,0,0,0,1405,151,1,0,0,0,1406,1407,5,67,0,0,1407,1408,3,4,2, - 0,1408,153,1,0,0,0,1409,1415,5,176,0,0,1410,1416,5,2,0,0,1411,1412, - 3,390,195,0,1412,1413,5,249,0,0,1413,1414,3,330,165,0,1414,1416, - 1,0,0,0,1415,1410,1,0,0,0,1415,1411,1,0,0,0,1415,1416,1,0,0,0,1416, - 155,1,0,0,0,1417,1418,5,264,0,0,1418,1419,5,180,0,0,1419,1429,5, - 265,0,0,1420,1422,3,342,171,0,1421,1420,1,0,0,0,1421,1422,1,0,0, - 0,1422,1430,1,0,0,0,1423,1426,3,342,171,0,1424,1425,5,263,0,0,1425, - 1427,3,330,165,0,1426,1424,1,0,0,0,1426,1427,1,0,0,0,1427,1430,1, - 0,0,0,1428,1430,3,330,165,0,1429,1421,1,0,0,0,1429,1423,1,0,0,0, - 1429,1428,1,0,0,0,1430,1431,1,0,0,0,1431,1432,5,266,0,0,1432,157, - 1,0,0,0,1433,1434,5,107,0,0,1434,1435,5,121,0,0,1435,1436,3,186, - 93,0,1436,159,1,0,0,0,1437,1438,5,118,0,0,1438,1439,5,45,0,0,1439, - 1440,5,98,0,0,1440,1442,5,274,0,0,1441,1443,5,144,0,0,1442,1441, - 1,0,0,0,1442,1443,1,0,0,0,1443,1444,1,0,0,0,1444,1445,5,103,0,0, - 1445,1446,5,188,0,0,1446,1456,3,186,93,0,1447,1448,5,145,0,0,1448, - 1449,5,265,0,0,1449,1452,3,330,165,0,1450,1451,5,263,0,0,1451,1453, - 3,330,165,0,1452,1450,1,0,0,0,1452,1453,1,0,0,0,1453,1454,1,0,0, - 0,1454,1455,5,266,0,0,1455,1457,1,0,0,0,1456,1447,1,0,0,0,1456,1457, - 1,0,0,0,1457,161,1,0,0,0,1458,1462,3,164,82,0,1459,1462,3,166,83, - 0,1460,1462,3,168,84,0,1461,1458,1,0,0,0,1461,1459,1,0,0,0,1461, - 1460,1,0,0,0,1462,163,1,0,0,0,1463,1464,5,162,0,0,1464,1477,3,186, - 93,0,1465,1466,5,145,0,0,1466,1467,5,265,0,0,1467,1472,3,330,165, - 0,1468,1469,5,263,0,0,1469,1471,3,330,165,0,1470,1468,1,0,0,0,1471, - 1474,1,0,0,0,1472,1473,1,0,0,0,1472,1470,1,0,0,0,1473,1475,1,0,0, - 0,1474,1472,1,0,0,0,1475,1476,5,266,0,0,1476,1478,1,0,0,0,1477,1465, - 1,0,0,0,1477,1478,1,0,0,0,1478,165,1,0,0,0,1479,1480,5,162,0,0,1480, - 1481,5,13,0,0,1481,167,1,0,0,0,1482,1483,5,162,0,0,1483,1484,5,85, - 0,0,1484,1485,3,190,95,0,1485,169,1,0,0,0,1486,1487,5,93,0,0,1487, - 1488,5,66,0,0,1488,171,1,0,0,0,1489,1490,5,93,0,0,1490,1491,5,132, - 0,0,1491,1492,5,66,0,0,1492,173,1,0,0,0,1493,1494,3,384,192,0,1494, - 175,1,0,0,0,1495,1496,3,384,192,0,1496,177,1,0,0,0,1497,1498,3,384, - 192,0,1498,179,1,0,0,0,1499,1500,3,384,192,0,1500,181,1,0,0,0,1501, - 1502,3,384,192,0,1502,183,1,0,0,0,1503,1504,3,384,192,0,1504,185, - 1,0,0,0,1505,1510,3,390,195,0,1506,1507,5,261,0,0,1507,1509,3,390, - 195,0,1508,1506,1,0,0,0,1509,1512,1,0,0,0,1510,1508,1,0,0,0,1510, - 1511,1,0,0,0,1511,187,1,0,0,0,1512,1510,1,0,0,0,1513,1518,3,390, - 195,0,1514,1515,5,261,0,0,1515,1517,3,390,195,0,1516,1514,1,0,0, - 0,1517,1520,1,0,0,0,1518,1516,1,0,0,0,1518,1519,1,0,0,0,1519,189, - 1,0,0,0,1520,1518,1,0,0,0,1521,1524,3,394,197,0,1522,1524,3,384, - 192,0,1523,1521,1,0,0,0,1523,1522,1,0,0,0,1524,191,1,0,0,0,1525, - 1526,1,0,0,0,1526,193,1,0,0,0,1527,1528,4,97,0,0,1528,1531,3,192, - 96,0,1529,1531,3,386,193,0,1530,1527,1,0,0,0,1530,1529,1,0,0,0,1531, - 195,1,0,0,0,1532,1533,3,384,192,0,1533,197,1,0,0,0,1534,1535,4,99, - 1,0,1535,1538,3,192,96,0,1536,1538,3,386,193,0,1537,1534,1,0,0,0, - 1537,1536,1,0,0,0,1538,199,1,0,0,0,1539,1542,3,186,93,0,1540,1542, - 3,188,94,0,1541,1539,1,0,0,0,1541,1540,1,0,0,0,1542,201,1,0,0,0, - 1543,1544,5,21,0,0,1544,1545,5,26,0,0,1545,1547,3,316,158,0,1546, - 1543,1,0,0,0,1546,1547,1,0,0,0,1547,1549,1,0,0,0,1548,1550,3,228, - 114,0,1549,1548,1,0,0,0,1549,1550,1,0,0,0,1550,1554,1,0,0,0,1551, - 1552,5,168,0,0,1552,1553,5,79,0,0,1553,1555,3,264,132,0,1554,1551, - 1,0,0,0,1554,1555,1,0,0,0,1555,1559,1,0,0,0,1556,1557,5,216,0,0, - 1557,1558,5,175,0,0,1558,1560,3,258,129,0,1559,1556,1,0,0,0,1559, - 1560,1,0,0,0,1560,1564,1,0,0,0,1561,1562,5,23,0,0,1562,1563,5,9, - 0,0,1563,1565,3,240,120,0,1564,1561,1,0,0,0,1564,1565,1,0,0,0,1565, - 1568,1,0,0,0,1566,1567,5,24,0,0,1567,1569,3,342,171,0,1568,1566, - 1,0,0,0,1568,1569,1,0,0,0,1569,1580,1,0,0,0,1570,1571,5,30,0,0,1571, - 1572,5,94,0,0,1572,1577,3,384,192,0,1573,1574,5,216,0,0,1574,1575, - 5,151,0,0,1575,1576,5,249,0,0,1576,1578,5,277,0,0,1577,1573,1,0, - 0,0,1577,1578,1,0,0,0,1578,1581,1,0,0,0,1579,1581,5,197,0,0,1580, - 1570,1,0,0,0,1580,1579,1,0,0,0,1580,1581,1,0,0,0,1581,1584,1,0,0, - 0,1582,1583,5,25,0,0,1583,1585,3,258,129,0,1584,1582,1,0,0,0,1584, - 1585,1,0,0,0,1585,203,1,0,0,0,1586,1591,3,206,103,0,1587,1588,5, - 263,0,0,1588,1590,3,206,103,0,1589,1587,1,0,0,0,1590,1593,1,0,0, - 0,1591,1589,1,0,0,0,1591,1592,1,0,0,0,1592,205,1,0,0,0,1593,1591, - 1,0,0,0,1594,1595,3,384,192,0,1595,1596,5,249,0,0,1596,1597,3,330, - 165,0,1597,207,1,0,0,0,1598,1600,5,265,0,0,1599,1601,3,210,105,0, - 1600,1599,1,0,0,0,1600,1601,1,0,0,0,1601,1608,1,0,0,0,1602,1604, - 5,263,0,0,1603,1605,3,210,105,0,1604,1603,1,0,0,0,1604,1605,1,0, - 0,0,1605,1607,1,0,0,0,1606,1602,1,0,0,0,1607,1610,1,0,0,0,1608,1606, - 1,0,0,0,1608,1609,1,0,0,0,1609,1611,1,0,0,0,1610,1608,1,0,0,0,1611, - 1612,5,266,0,0,1612,209,1,0,0,0,1613,1615,3,182,91,0,1614,1616,3, - 228,114,0,1615,1614,1,0,0,0,1615,1616,1,0,0,0,1616,211,1,0,0,0,1617, - 1619,3,214,107,0,1618,1617,1,0,0,0,1618,1619,1,0,0,0,1619,1620,1, - 0,0,0,1620,1621,3,268,134,0,1621,213,1,0,0,0,1622,1623,5,216,0,0, - 1623,1628,3,290,145,0,1624,1625,5,263,0,0,1625,1627,3,290,145,0, - 1626,1624,1,0,0,0,1627,1630,1,0,0,0,1628,1626,1,0,0,0,1628,1629, - 1,0,0,0,1629,215,1,0,0,0,1630,1628,1,0,0,0,1631,1632,5,150,0,0,1632, - 1633,5,110,0,0,1633,1635,3,316,158,0,1634,1636,5,53,0,0,1635,1634, - 1,0,0,0,1635,1636,1,0,0,0,1636,1640,1,0,0,0,1637,1641,5,225,0,0, - 1638,1639,5,263,0,0,1639,1641,5,225,0,0,1640,1637,1,0,0,0,1640,1638, - 1,0,0,0,1640,1641,1,0,0,0,1641,1645,1,0,0,0,1642,1646,5,226,0,0, - 1643,1644,5,263,0,0,1644,1646,5,226,0,0,1645,1642,1,0,0,0,1645,1643, - 1,0,0,0,1645,1646,1,0,0,0,1646,1659,1,0,0,0,1647,1648,5,263,0,0, - 1648,1651,3,218,109,0,1649,1651,3,218,109,0,1650,1647,1,0,0,0,1650, - 1649,1,0,0,0,1651,1656,1,0,0,0,1652,1653,5,263,0,0,1653,1655,3,218, - 109,0,1654,1652,1,0,0,0,1655,1658,1,0,0,0,1656,1657,1,0,0,0,1656, - 1654,1,0,0,0,1657,1660,1,0,0,0,1658,1656,1,0,0,0,1659,1650,1,0,0, - 0,1659,1660,1,0,0,0,1660,217,1,0,0,0,1661,1662,5,81,0,0,1662,1663, - 5,110,0,0,1663,1664,3,316,158,0,1664,1665,5,224,0,0,1665,1666,3, - 186,93,0,1666,1668,3,316,158,0,1667,1669,5,53,0,0,1668,1667,1,0, - 0,0,1668,1669,1,0,0,0,1669,1671,1,0,0,0,1670,1672,5,225,0,0,1671, - 1670,1,0,0,0,1671,1672,1,0,0,0,1672,1674,1,0,0,0,1673,1675,5,226, - 0,0,1674,1673,1,0,0,0,1674,1675,1,0,0,0,1675,219,1,0,0,0,1676,1677, - 3,194,97,0,1677,1680,3,356,178,0,1678,1679,5,34,0,0,1679,1681,3, - 342,171,0,1680,1678,1,0,0,0,1680,1681,1,0,0,0,1681,221,1,0,0,0,1682, - 1683,3,182,91,0,1683,1685,3,356,178,0,1684,1686,3,228,114,0,1685, - 1684,1,0,0,0,1685,1686,1,0,0,0,1686,223,1,0,0,0,1687,1688,3,226, - 113,0,1688,225,1,0,0,0,1689,1690,3,182,91,0,1690,1698,3,356,178, - 0,1691,1695,3,234,117,0,1692,1694,3,234,117,0,1693,1692,1,0,0,0, - 1694,1697,1,0,0,0,1695,1696,1,0,0,0,1695,1693,1,0,0,0,1696,1699, - 1,0,0,0,1697,1695,1,0,0,0,1698,1691,1,0,0,0,1698,1699,1,0,0,0,1699, - 1701,1,0,0,0,1700,1702,3,228,114,0,1701,1700,1,0,0,0,1701,1702,1, - 0,0,0,1702,1705,1,0,0,0,1703,1704,5,150,0,0,1704,1706,5,110,0,0, - 1705,1703,1,0,0,0,1705,1706,1,0,0,0,1706,227,1,0,0,0,1707,1708,5, - 34,0,0,1708,1709,3,342,171,0,1709,229,1,0,0,0,1710,1718,3,220,110, - 0,1711,1715,3,234,117,0,1712,1714,3,234,117,0,1713,1712,1,0,0,0, - 1714,1717,1,0,0,0,1715,1716,1,0,0,0,1715,1713,1,0,0,0,1716,1719, - 1,0,0,0,1717,1715,1,0,0,0,1718,1711,1,0,0,0,1718,1719,1,0,0,0,1719, - 231,1,0,0,0,1720,1721,3,182,91,0,1721,1724,3,356,178,0,1722,1723, - 5,34,0,0,1723,1725,3,342,171,0,1724,1722,1,0,0,0,1724,1725,1,0,0, - 0,1725,1733,1,0,0,0,1726,1730,3,234,117,0,1727,1729,3,234,117,0, - 1728,1727,1,0,0,0,1729,1732,1,0,0,0,1730,1731,1,0,0,0,1730,1728, - 1,0,0,0,1731,1734,1,0,0,0,1732,1730,1,0,0,0,1733,1726,1,0,0,0,1733, - 1734,1,0,0,0,1734,233,1,0,0,0,1735,1737,5,132,0,0,1736,1735,1,0, - 0,0,1736,1737,1,0,0,0,1737,1738,1,0,0,0,1738,1741,5,133,0,0,1739, - 1741,3,236,118,0,1740,1736,1,0,0,0,1740,1739,1,0,0,0,1741,235,1, - 0,0,0,1742,1743,5,60,0,0,1743,1751,3,330,165,0,1744,1745,5,35,0, - 0,1745,1751,3,330,165,0,1746,1747,5,51,0,0,1747,1751,3,330,165,0, - 1748,1749,5,16,0,0,1749,1751,3,392,196,0,1750,1742,1,0,0,0,1750, - 1744,1,0,0,0,1750,1746,1,0,0,0,1750,1748,1,0,0,0,1751,237,1,0,0, - 0,1752,1753,7,10,0,0,1753,239,1,0,0,0,1754,1755,7,11,0,0,1755,241, - 1,0,0,0,1756,1761,3,244,122,0,1757,1758,5,263,0,0,1758,1760,3,244, - 122,0,1759,1757,1,0,0,0,1760,1763,1,0,0,0,1761,1762,1,0,0,0,1761, - 1759,1,0,0,0,1762,1766,1,0,0,0,1763,1761,1,0,0,0,1764,1765,5,263, - 0,0,1765,1767,3,246,123,0,1766,1764,1,0,0,0,1766,1767,1,0,0,0,1767, - 1770,1,0,0,0,1768,1770,3,246,123,0,1769,1756,1,0,0,0,1769,1768,1, - 0,0,0,1770,243,1,0,0,0,1771,1773,5,89,0,0,1772,1774,3,316,158,0, - 1773,1772,1,0,0,0,1773,1774,1,0,0,0,1774,1775,1,0,0,0,1775,1776, - 5,146,0,0,1776,1777,3,392,196,0,1777,245,1,0,0,0,1778,1780,5,154, - 0,0,1779,1781,3,316,158,0,1780,1779,1,0,0,0,1780,1781,1,0,0,0,1781, - 1782,1,0,0,0,1782,1783,5,265,0,0,1783,1784,5,145,0,0,1784,1790,3, - 248,124,0,1785,1786,5,263,0,0,1786,1787,5,145,0,0,1787,1789,3,248, - 124,0,1788,1785,1,0,0,0,1789,1792,1,0,0,0,1790,1791,1,0,0,0,1790, - 1788,1,0,0,0,1791,1793,1,0,0,0,1792,1790,1,0,0,0,1793,1794,5,266, - 0,0,1794,247,1,0,0,0,1795,1796,5,210,0,0,1796,1797,3,254,127,0,1797, - 1798,3,330,165,0,1798,1811,1,0,0,0,1799,1800,3,330,165,0,1800,1801, - 3,252,126,0,1801,1803,1,0,0,0,1802,1799,1,0,0,0,1802,1803,1,0,0, - 0,1803,1804,1,0,0,0,1804,1808,5,211,0,0,1805,1806,3,252,126,0,1806, - 1807,3,330,165,0,1807,1809,1,0,0,0,1808,1805,1,0,0,0,1808,1809,1, - 0,0,0,1809,1811,1,0,0,0,1810,1795,1,0,0,0,1810,1802,1,0,0,0,1811, - 249,1,0,0,0,1812,1813,5,30,0,0,1813,1814,5,94,0,0,1814,1819,3,390, - 195,0,1815,1816,5,216,0,0,1816,1817,5,151,0,0,1817,1818,5,249,0, - 0,1818,1820,3,392,196,0,1819,1815,1,0,0,0,1819,1820,1,0,0,0,1820, - 1823,1,0,0,0,1821,1823,5,197,0,0,1822,1812,1,0,0,0,1822,1821,1,0, - 0,0,1823,251,1,0,0,0,1824,1830,1,0,0,0,1825,1830,5,251,0,0,1826, - 1830,5,252,0,0,1827,1830,5,253,0,0,1828,1830,5,254,0,0,1829,1824, - 1,0,0,0,1829,1825,1,0,0,0,1829,1826,1,0,0,0,1829,1827,1,0,0,0,1829, - 1828,1,0,0,0,1830,253,1,0,0,0,1831,1840,5,249,0,0,1832,1840,5,250, - 0,0,1833,1840,5,115,0,0,1834,1840,5,164,0,0,1835,1840,5,163,0,0, - 1836,1840,5,15,0,0,1837,1840,5,94,0,0,1838,1840,3,252,126,0,1839, - 1831,1,0,0,0,1839,1832,1,0,0,0,1839,1833,1,0,0,0,1839,1834,1,0,0, - 0,1839,1835,1,0,0,0,1839,1836,1,0,0,0,1839,1837,1,0,0,0,1839,1838, - 1,0,0,0,1840,255,1,0,0,0,1841,1842,5,115,0,0,1842,1845,3,384,192, - 0,1843,1844,7,12,0,0,1844,1846,5,153,0,0,1845,1843,1,0,0,0,1845, - 1846,1,0,0,0,1846,257,1,0,0,0,1847,1848,5,265,0,0,1848,1853,3,266, - 133,0,1849,1850,5,263,0,0,1850,1852,3,266,133,0,1851,1849,1,0,0, - 0,1852,1855,1,0,0,0,1853,1851,1,0,0,0,1853,1854,1,0,0,0,1854,1856, - 1,0,0,0,1855,1853,1,0,0,0,1856,1857,5,266,0,0,1857,259,1,0,0,0,1858, - 1859,5,265,0,0,1859,1864,3,220,110,0,1860,1861,5,263,0,0,1861,1863, - 3,220,110,0,1862,1860,1,0,0,0,1863,1866,1,0,0,0,1864,1865,1,0,0, - 0,1864,1862,1,0,0,0,1865,1867,1,0,0,0,1866,1864,1,0,0,0,1867,1868, - 5,266,0,0,1868,261,1,0,0,0,1869,1874,3,330,165,0,1870,1871,5,263, - 0,0,1871,1873,3,330,165,0,1872,1870,1,0,0,0,1873,1876,1,0,0,0,1874, - 1872,1,0,0,0,1874,1875,1,0,0,0,1875,263,1,0,0,0,1876,1874,1,0,0, - 0,1877,1887,5,52,0,0,1878,1879,5,71,0,0,1879,1880,5,191,0,0,1880, - 1881,5,26,0,0,1881,1885,3,342,171,0,1882,1883,5,63,0,0,1883,1884, - 5,26,0,0,1884,1886,3,342,171,0,1885,1882,1,0,0,0,1885,1886,1,0,0, - 0,1886,1888,1,0,0,0,1887,1878,1,0,0,0,1887,1888,1,0,0,0,1888,1893, - 1,0,0,0,1889,1890,5,117,0,0,1890,1891,5,191,0,0,1891,1892,5,26,0, - 0,1892,1894,3,342,171,0,1893,1889,1,0,0,0,1893,1894,1,0,0,0,1894, - 265,1,0,0,0,1895,1898,3,390,195,0,1896,1897,5,249,0,0,1897,1899, - 3,330,165,0,1898,1896,1,0,0,0,1898,1899,1,0,0,0,1899,267,1,0,0,0, - 1900,1911,3,270,135,0,1901,1902,5,139,0,0,1902,1903,5,26,0,0,1903, - 1908,3,274,137,0,1904,1905,5,263,0,0,1905,1907,3,274,137,0,1906, - 1904,1,0,0,0,1907,1910,1,0,0,0,1908,1906,1,0,0,0,1908,1909,1,0,0, - 0,1909,1912,1,0,0,0,1910,1908,1,0,0,0,1911,1901,1,0,0,0,1911,1912, - 1,0,0,0,1912,1919,1,0,0,0,1913,1914,5,116,0,0,1914,1917,3,330,165, - 0,1915,1916,5,135,0,0,1916,1918,5,277,0,0,1917,1915,1,0,0,0,1917, - 1918,1,0,0,0,1918,1920,1,0,0,0,1919,1913,1,0,0,0,1919,1920,1,0,0, - 0,1920,269,1,0,0,0,1921,1922,6,135,-1,0,1922,1923,3,272,136,0,1923, - 1938,1,0,0,0,1924,1925,10,2,0,0,1925,1927,5,100,0,0,1926,1928,3, - 292,146,0,1927,1926,1,0,0,0,1927,1928,1,0,0,0,1928,1929,1,0,0,0, - 1929,1937,3,270,135,3,1930,1931,10,1,0,0,1931,1933,7,13,0,0,1932, - 1934,3,292,146,0,1933,1932,1,0,0,0,1933,1934,1,0,0,0,1934,1935,1, - 0,0,0,1935,1937,3,270,135,2,1936,1924,1,0,0,0,1936,1930,1,0,0,0, - 1937,1940,1,0,0,0,1938,1936,1,0,0,0,1938,1939,1,0,0,0,1939,271,1, - 0,0,0,1940,1938,1,0,0,0,1941,1958,3,276,138,0,1942,1943,5,188,0, - 0,1943,1958,3,186,93,0,1944,1945,5,211,0,0,1945,1950,3,330,165,0, - 1946,1947,5,263,0,0,1947,1949,3,330,165,0,1948,1946,1,0,0,0,1949, - 1952,1,0,0,0,1950,1948,1,0,0,0,1950,1951,1,0,0,0,1951,1958,1,0,0, - 0,1952,1950,1,0,0,0,1953,1954,5,265,0,0,1954,1955,3,268,134,0,1955, - 1956,5,266,0,0,1956,1958,1,0,0,0,1957,1941,1,0,0,0,1957,1942,1,0, - 0,0,1957,1944,1,0,0,0,1957,1953,1,0,0,0,1958,273,1,0,0,0,1959,1961, - 3,328,164,0,1960,1962,7,14,0,0,1961,1960,1,0,0,0,1961,1962,1,0,0, - 0,1962,1965,1,0,0,0,1963,1964,5,134,0,0,1964,1966,7,15,0,0,1965, - 1963,1,0,0,0,1965,1966,1,0,0,0,1966,275,1,0,0,0,1967,1969,5,174, - 0,0,1968,1970,3,292,146,0,1969,1968,1,0,0,0,1969,1970,1,0,0,0,1970, - 1972,1,0,0,0,1971,1973,5,183,0,0,1972,1971,1,0,0,0,1972,1973,1,0, - 0,0,1973,1974,1,0,0,0,1974,1984,3,278,139,0,1975,1976,5,82,0,0,1976, - 1981,3,304,152,0,1977,1978,5,263,0,0,1978,1980,3,304,152,0,1979, - 1977,1,0,0,0,1980,1983,1,0,0,0,1981,1979,1,0,0,0,1981,1982,1,0,0, - 0,1982,1985,1,0,0,0,1983,1981,1,0,0,0,1984,1975,1,0,0,0,1984,1985, - 1,0,0,0,1985,1987,1,0,0,0,1986,1988,3,280,140,0,1987,1986,1,0,0, - 0,1987,1988,1,0,0,0,1988,1992,1,0,0,0,1989,1990,5,87,0,0,1990,1991, - 5,26,0,0,1991,1993,3,284,142,0,1992,1989,1,0,0,0,1992,1993,1,0,0, - 0,1993,1995,1,0,0,0,1994,1996,3,282,141,0,1995,1994,1,0,0,0,1995, - 1996,1,0,0,0,1996,277,1,0,0,0,1997,2002,3,294,147,0,1998,1999,5, - 263,0,0,1999,2001,3,294,147,0,2000,1998,1,0,0,0,2001,2004,1,0,0, - 0,2002,2000,1,0,0,0,2002,2003,1,0,0,0,2003,279,1,0,0,0,2004,2002, - 1,0,0,0,2005,2008,5,215,0,0,2006,2009,3,332,166,0,2007,2009,3,198, - 99,0,2008,2006,1,0,0,0,2008,2007,1,0,0,0,2009,281,1,0,0,0,2010,2013, - 5,90,0,0,2011,2014,3,332,166,0,2012,2014,3,198,99,0,2013,2011,1, - 0,0,0,2013,2012,1,0,0,0,2014,283,1,0,0,0,2015,2017,3,292,146,0,2016, - 2015,1,0,0,0,2016,2017,1,0,0,0,2017,2018,1,0,0,0,2018,2023,3,286, - 143,0,2019,2020,5,263,0,0,2020,2022,3,286,143,0,2021,2019,1,0,0, - 0,2022,2025,1,0,0,0,2023,2021,1,0,0,0,2023,2024,1,0,0,0,2024,285, - 1,0,0,0,2025,2023,1,0,0,0,2026,2027,3,288,144,0,2027,287,1,0,0,0, - 2028,2037,5,265,0,0,2029,2034,3,328,164,0,2030,2031,5,263,0,0,2031, - 2033,3,328,164,0,2032,2030,1,0,0,0,2033,2036,1,0,0,0,2034,2032,1, - 0,0,0,2034,2035,1,0,0,0,2035,2038,1,0,0,0,2036,2034,1,0,0,0,2037, - 2029,1,0,0,0,2037,2038,1,0,0,0,2038,2039,1,0,0,0,2039,2042,5,266, - 0,0,2040,2042,3,328,164,0,2041,2028,1,0,0,0,2041,2040,1,0,0,0,2042, - 289,1,0,0,0,2043,2045,3,390,195,0,2044,2046,3,316,158,0,2045,2044, - 1,0,0,0,2045,2046,1,0,0,0,2046,2047,1,0,0,0,2047,2048,5,9,0,0,2048, - 2049,3,322,161,0,2049,291,1,0,0,0,2050,2051,7,16,0,0,2051,293,1, - 0,0,0,2052,2054,3,298,149,0,2053,2055,3,296,148,0,2054,2053,1,0, - 0,0,2054,2055,1,0,0,0,2055,2064,1,0,0,0,2056,2058,3,300,150,0,2057, - 2059,3,296,148,0,2058,2057,1,0,0,0,2058,2059,1,0,0,0,2059,2064,1, - 0,0,0,2060,2064,3,302,151,0,2061,2062,4,147,4,0,2062,2064,3,192, - 96,0,2063,2052,1,0,0,0,2063,2056,1,0,0,0,2063,2060,1,0,0,0,2063, - 2061,1,0,0,0,2064,295,1,0,0,0,2065,2067,5,9,0,0,2066,2065,1,0,0, - 0,2066,2067,1,0,0,0,2067,2068,1,0,0,0,2068,2069,3,390,195,0,2069, - 297,1,0,0,0,2070,2071,3,194,97,0,2071,299,1,0,0,0,2072,2073,3,330, - 165,0,2073,301,1,0,0,0,2074,2075,3,384,192,0,2075,2076,5,261,0,0, - 2076,2078,1,0,0,0,2077,2074,1,0,0,0,2077,2078,1,0,0,0,2078,2079, - 1,0,0,0,2079,2080,5,257,0,0,2080,303,1,0,0,0,2081,2082,6,152,-1, - 0,2082,2083,3,310,155,0,2083,2097,1,0,0,0,2084,2093,10,2,0,0,2085, - 2086,5,38,0,0,2086,2087,5,109,0,0,2087,2094,3,310,155,0,2088,2089, - 3,306,153,0,2089,2090,5,109,0,0,2090,2091,3,304,152,0,2091,2092, - 3,308,154,0,2092,2094,1,0,0,0,2093,2085,1,0,0,0,2093,2088,1,0,0, - 0,2094,2096,1,0,0,0,2095,2084,1,0,0,0,2096,2099,1,0,0,0,2097,2095, - 1,0,0,0,2097,2098,1,0,0,0,2098,305,1,0,0,0,2099,2097,1,0,0,0,2100, - 2102,5,97,0,0,2101,2100,1,0,0,0,2101,2102,1,0,0,0,2102,2132,1,0, - 0,0,2103,2105,5,114,0,0,2104,2106,5,97,0,0,2105,2104,1,0,0,0,2105, - 2106,1,0,0,0,2106,2132,1,0,0,0,2107,2109,5,165,0,0,2108,2110,5,97, - 0,0,2109,2108,1,0,0,0,2109,2110,1,0,0,0,2110,2132,1,0,0,0,2111,2113, - 5,114,0,0,2112,2114,5,141,0,0,2113,2112,1,0,0,0,2113,2114,1,0,0, - 0,2114,2132,1,0,0,0,2115,2117,5,165,0,0,2116,2118,5,141,0,0,2117, - 2116,1,0,0,0,2117,2118,1,0,0,0,2118,2132,1,0,0,0,2119,2121,5,83, - 0,0,2120,2122,5,141,0,0,2121,2120,1,0,0,0,2121,2122,1,0,0,0,2122, - 2132,1,0,0,0,2123,2124,5,114,0,0,2124,2132,5,177,0,0,2125,2126,5, - 165,0,0,2126,2132,5,177,0,0,2127,2128,5,114,0,0,2128,2132,5,7,0, - 0,2129,2130,5,165,0,0,2130,2132,5,7,0,0,2131,2101,1,0,0,0,2131,2103, - 1,0,0,0,2131,2107,1,0,0,0,2131,2111,1,0,0,0,2131,2115,1,0,0,0,2131, - 2119,1,0,0,0,2131,2123,1,0,0,0,2131,2125,1,0,0,0,2131,2127,1,0,0, - 0,2131,2129,1,0,0,0,2132,307,1,0,0,0,2133,2136,5,136,0,0,2134,2137, - 3,332,166,0,2135,2137,3,198,99,0,2136,2134,1,0,0,0,2136,2135,1,0, - 0,0,2137,2151,1,0,0,0,2138,2139,5,205,0,0,2139,2140,5,265,0,0,2140, - 2145,3,390,195,0,2141,2142,5,263,0,0,2142,2144,3,390,195,0,2143, - 2141,1,0,0,0,2144,2147,1,0,0,0,2145,2143,1,0,0,0,2145,2146,1,0,0, - 0,2146,2148,1,0,0,0,2147,2145,1,0,0,0,2148,2149,5,266,0,0,2149,2151, - 1,0,0,0,2150,2133,1,0,0,0,2150,2138,1,0,0,0,2151,309,1,0,0,0,2152, - 2165,3,314,157,0,2153,2154,5,190,0,0,2154,2155,3,312,156,0,2155, - 2156,5,265,0,0,2156,2157,3,330,165,0,2157,2163,5,266,0,0,2158,2159, - 5,157,0,0,2159,2160,5,265,0,0,2160,2161,3,330,165,0,2161,2162,5, - 266,0,0,2162,2164,1,0,0,0,2163,2158,1,0,0,0,2163,2164,1,0,0,0,2164, - 2166,1,0,0,0,2165,2153,1,0,0,0,2165,2166,1,0,0,0,2166,311,1,0,0, - 0,2167,2168,7,17,0,0,2168,313,1,0,0,0,2169,2177,3,318,159,0,2170, - 2172,5,9,0,0,2171,2170,1,0,0,0,2171,2172,1,0,0,0,2172,2173,1,0,0, - 0,2173,2175,3,390,195,0,2174,2176,3,316,158,0,2175,2174,1,0,0,0, - 2175,2176,1,0,0,0,2176,2178,1,0,0,0,2177,2171,1,0,0,0,2177,2178, - 1,0,0,0,2178,315,1,0,0,0,2179,2180,5,265,0,0,2180,2185,3,194,97, - 0,2181,2182,5,263,0,0,2182,2184,3,194,97,0,2183,2181,1,0,0,0,2184, - 2187,1,0,0,0,2185,2183,1,0,0,0,2185,2186,1,0,0,0,2186,2188,1,0,0, - 0,2187,2185,1,0,0,0,2188,2189,5,266,0,0,2189,317,1,0,0,0,2190,2195, - 3,200,100,0,2191,2195,3,320,160,0,2192,2195,3,324,162,0,2193,2195, - 3,326,163,0,2194,2190,1,0,0,0,2194,2191,1,0,0,0,2194,2192,1,0,0, - 0,2194,2193,1,0,0,0,2195,319,1,0,0,0,2196,2198,5,113,0,0,2197,2196, - 1,0,0,0,2197,2198,1,0,0,0,2198,2199,1,0,0,0,2199,2200,3,322,161, - 0,2200,321,1,0,0,0,2201,2202,5,265,0,0,2202,2203,3,212,106,0,2203, - 2204,5,266,0,0,2204,323,1,0,0,0,2205,2206,5,201,0,0,2206,2207,5, - 265,0,0,2207,2212,3,330,165,0,2208,2209,5,263,0,0,2209,2211,3,330, - 165,0,2210,2208,1,0,0,0,2211,2214,1,0,0,0,2212,2210,1,0,0,0,2212, - 2213,1,0,0,0,2213,2215,1,0,0,0,2214,2212,1,0,0,0,2215,2218,5,266, - 0,0,2216,2217,5,216,0,0,2217,2219,5,140,0,0,2218,2216,1,0,0,0,2218, - 2219,1,0,0,0,2219,325,1,0,0,0,2220,2221,5,265,0,0,2221,2222,3,304, - 152,0,2222,2223,5,266,0,0,2223,327,1,0,0,0,2224,2227,3,194,97,0, - 2225,2227,3,330,165,0,2226,2224,1,0,0,0,2226,2225,1,0,0,0,2227,329, - 1,0,0,0,2228,2229,3,332,166,0,2229,331,1,0,0,0,2230,2231,6,166,-1, - 0,2231,2233,3,336,168,0,2232,2234,3,334,167,0,2233,2232,1,0,0,0, - 2233,2234,1,0,0,0,2234,2238,1,0,0,0,2235,2236,5,132,0,0,2236,2238, - 3,332,166,3,2237,2230,1,0,0,0,2237,2235,1,0,0,0,2238,2247,1,0,0, - 0,2239,2240,10,2,0,0,2240,2241,5,5,0,0,2241,2246,3,332,166,3,2242, - 2243,10,1,0,0,2243,2244,5,138,0,0,2244,2246,3,332,166,2,2245,2239, - 1,0,0,0,2245,2242,1,0,0,0,2246,2249,1,0,0,0,2247,2245,1,0,0,0,2247, - 2248,1,0,0,0,2248,333,1,0,0,0,2249,2247,1,0,0,0,2250,2251,3,344, - 172,0,2251,2252,3,336,168,0,2252,2309,1,0,0,0,2253,2254,3,344,172, - 0,2254,2255,3,346,173,0,2255,2256,3,322,161,0,2256,2309,1,0,0,0, - 2257,2259,5,132,0,0,2258,2257,1,0,0,0,2258,2259,1,0,0,0,2259,2260, - 1,0,0,0,2260,2261,5,15,0,0,2261,2262,3,336,168,0,2262,2263,5,5,0, - 0,2263,2264,3,336,168,0,2264,2309,1,0,0,0,2265,2267,5,132,0,0,2266, - 2265,1,0,0,0,2266,2267,1,0,0,0,2267,2268,1,0,0,0,2268,2269,5,94, - 0,0,2269,2270,5,265,0,0,2270,2275,3,330,165,0,2271,2272,5,263,0, - 0,2272,2274,3,330,165,0,2273,2271,1,0,0,0,2274,2277,1,0,0,0,2275, - 2273,1,0,0,0,2275,2276,1,0,0,0,2276,2278,1,0,0,0,2277,2275,1,0,0, - 0,2278,2279,5,266,0,0,2279,2309,1,0,0,0,2280,2282,5,132,0,0,2281, - 2280,1,0,0,0,2281,2282,1,0,0,0,2282,2283,1,0,0,0,2283,2284,5,94, - 0,0,2284,2309,3,322,161,0,2285,2287,5,132,0,0,2286,2285,1,0,0,0, - 2286,2287,1,0,0,0,2287,2288,1,0,0,0,2288,2289,7,18,0,0,2289,2292, - 3,336,168,0,2290,2291,5,62,0,0,2291,2293,3,336,168,0,2292,2290,1, - 0,0,0,2292,2293,1,0,0,0,2293,2309,1,0,0,0,2294,2295,7,19,0,0,2295, - 2309,3,336,168,0,2296,2298,5,108,0,0,2297,2299,5,132,0,0,2298,2297, - 1,0,0,0,2298,2299,1,0,0,0,2299,2300,1,0,0,0,2300,2309,7,20,0,0,2301, - 2303,5,108,0,0,2302,2304,5,132,0,0,2303,2302,1,0,0,0,2303,2304,1, - 0,0,0,2304,2305,1,0,0,0,2305,2306,5,57,0,0,2306,2307,5,82,0,0,2307, - 2309,3,336,168,0,2308,2250,1,0,0,0,2308,2253,1,0,0,0,2308,2258,1, - 0,0,0,2308,2266,1,0,0,0,2308,2281,1,0,0,0,2308,2286,1,0,0,0,2308, - 2294,1,0,0,0,2308,2296,1,0,0,0,2308,2301,1,0,0,0,2309,335,1,0,0, - 0,2310,2311,6,168,-1,0,2311,2315,3,340,170,0,2312,2313,7,21,0,0, - 2313,2315,3,336,168,4,2314,2310,1,0,0,0,2314,2312,1,0,0,0,2315,2327, - 1,0,0,0,2316,2317,10,3,0,0,2317,2318,7,22,0,0,2318,2326,3,336,168, - 4,2319,2320,10,2,0,0,2320,2321,7,21,0,0,2321,2326,3,336,168,3,2322, - 2323,10,1,0,0,2323,2324,5,260,0,0,2324,2326,3,336,168,2,2325,2316, - 1,0,0,0,2325,2319,1,0,0,0,2325,2322,1,0,0,0,2326,2329,1,0,0,0,2327, - 2325,1,0,0,0,2327,2328,1,0,0,0,2328,337,1,0,0,0,2329,2327,1,0,0, - 0,2330,2331,3,190,95,0,2331,2343,5,265,0,0,2332,2334,3,292,146,0, - 2333,2332,1,0,0,0,2333,2334,1,0,0,0,2334,2335,1,0,0,0,2335,2340, - 3,330,165,0,2336,2337,5,263,0,0,2337,2339,3,330,165,0,2338,2336, - 1,0,0,0,2339,2342,1,0,0,0,2340,2338,1,0,0,0,2340,2341,1,0,0,0,2341, - 2344,1,0,0,0,2342,2340,1,0,0,0,2343,2333,1,0,0,0,2343,2344,1,0,0, - 0,2344,2355,1,0,0,0,2345,2346,5,139,0,0,2346,2347,5,26,0,0,2347, - 2352,3,274,137,0,2348,2349,5,263,0,0,2349,2351,3,274,137,0,2350, - 2348,1,0,0,0,2351,2354,1,0,0,0,2352,2350,1,0,0,0,2352,2353,1,0,0, - 0,2353,2356,1,0,0,0,2354,2352,1,0,0,0,2355,2345,1,0,0,0,2355,2356, - 1,0,0,0,2356,2357,1,0,0,0,2357,2359,5,266,0,0,2358,2360,3,366,183, - 0,2359,2358,1,0,0,0,2359,2360,1,0,0,0,2360,2362,1,0,0,0,2361,2363, - 3,370,185,0,2362,2361,1,0,0,0,2362,2363,1,0,0,0,2363,339,1,0,0,0, - 2364,2365,6,170,-1,0,2365,2578,5,133,0,0,2366,2578,3,350,175,0,2367, - 2368,3,390,195,0,2368,2369,3,342,171,0,2369,2578,1,0,0,0,2370,2371, - 5,286,0,0,2371,2578,3,342,171,0,2372,2578,3,392,196,0,2373,2578, - 3,348,174,0,2374,2578,3,342,171,0,2375,2578,5,276,0,0,2376,2578, - 5,272,0,0,2377,2378,5,148,0,0,2378,2379,5,265,0,0,2379,2380,3,336, - 168,0,2380,2381,5,94,0,0,2381,2382,3,336,168,0,2382,2383,5,266,0, - 0,2383,2578,1,0,0,0,2384,2385,5,265,0,0,2385,2388,3,330,165,0,2386, - 2387,5,9,0,0,2387,2389,3,356,178,0,2388,2386,1,0,0,0,2388,2389,1, - 0,0,0,2389,2398,1,0,0,0,2390,2391,5,263,0,0,2391,2394,3,330,165, - 0,2392,2393,5,9,0,0,2393,2395,3,356,178,0,2394,2392,1,0,0,0,2394, - 2395,1,0,0,0,2395,2397,1,0,0,0,2396,2390,1,0,0,0,2397,2400,1,0,0, - 0,2398,2399,1,0,0,0,2398,2396,1,0,0,0,2399,2401,1,0,0,0,2400,2398, - 1,0,0,0,2401,2402,5,266,0,0,2402,2578,1,0,0,0,2403,2404,5,168,0, - 0,2404,2405,5,265,0,0,2405,2410,3,330,165,0,2406,2407,5,263,0,0, - 2407,2409,3,330,165,0,2408,2406,1,0,0,0,2409,2412,1,0,0,0,2410,2408, - 1,0,0,0,2410,2411,1,0,0,0,2411,2413,1,0,0,0,2412,2410,1,0,0,0,2413, - 2414,5,266,0,0,2414,2578,1,0,0,0,2415,2416,3,190,95,0,2416,2417, - 5,265,0,0,2417,2418,5,257,0,0,2418,2420,5,266,0,0,2419,2421,3,366, - 183,0,2420,2419,1,0,0,0,2420,2421,1,0,0,0,2421,2423,1,0,0,0,2422, - 2424,3,370,185,0,2423,2422,1,0,0,0,2423,2424,1,0,0,0,2424,2578,1, - 0,0,0,2425,2578,3,338,169,0,2426,2427,3,390,195,0,2427,2428,5,273, - 0,0,2428,2429,3,330,165,0,2429,2578,1,0,0,0,2430,2439,5,265,0,0, - 2431,2436,3,390,195,0,2432,2433,5,263,0,0,2433,2435,3,390,195,0, - 2434,2432,1,0,0,0,2435,2438,1,0,0,0,2436,2434,1,0,0,0,2436,2437, - 1,0,0,0,2437,2440,1,0,0,0,2438,2436,1,0,0,0,2439,2431,1,0,0,0,2439, - 2440,1,0,0,0,2440,2441,1,0,0,0,2441,2442,5,266,0,0,2442,2443,5,273, - 0,0,2443,2578,3,330,165,0,2444,2445,5,265,0,0,2445,2446,3,212,106, - 0,2446,2447,5,266,0,0,2447,2578,1,0,0,0,2448,2449,5,66,0,0,2449, - 2450,5,265,0,0,2450,2451,3,212,106,0,2451,2452,5,266,0,0,2452,2578, - 1,0,0,0,2453,2454,5,28,0,0,2454,2456,3,336,168,0,2455,2457,3,364, - 182,0,2456,2455,1,0,0,0,2457,2458,1,0,0,0,2458,2456,1,0,0,0,2458, - 2459,1,0,0,0,2459,2462,1,0,0,0,2460,2461,5,59,0,0,2461,2463,3,330, - 165,0,2462,2460,1,0,0,0,2462,2463,1,0,0,0,2463,2464,1,0,0,0,2464, - 2465,5,61,0,0,2465,2578,1,0,0,0,2466,2468,5,28,0,0,2467,2469,3,364, - 182,0,2468,2467,1,0,0,0,2469,2470,1,0,0,0,2470,2468,1,0,0,0,2470, - 2471,1,0,0,0,2471,2474,1,0,0,0,2472,2473,5,59,0,0,2473,2475,3,330, - 165,0,2474,2472,1,0,0,0,2474,2475,1,0,0,0,2475,2476,1,0,0,0,2476, - 2477,5,61,0,0,2477,2578,1,0,0,0,2478,2479,5,29,0,0,2479,2480,5,265, - 0,0,2480,2481,3,330,165,0,2481,2482,5,9,0,0,2482,2483,3,356,178, - 0,2483,2484,5,266,0,0,2484,2578,1,0,0,0,2485,2486,5,195,0,0,2486, - 2487,5,265,0,0,2487,2488,3,330,165,0,2488,2489,5,9,0,0,2489,2490, - 3,356,178,0,2490,2491,5,266,0,0,2491,2578,1,0,0,0,2492,2493,5,8, - 0,0,2493,2502,5,267,0,0,2494,2499,3,330,165,0,2495,2496,5,263,0, - 0,2496,2498,3,330,165,0,2497,2495,1,0,0,0,2498,2501,1,0,0,0,2499, - 2497,1,0,0,0,2499,2500,1,0,0,0,2500,2503,1,0,0,0,2501,2499,1,0,0, - 0,2502,2494,1,0,0,0,2502,2503,1,0,0,0,2503,2504,1,0,0,0,2504,2578, - 5,268,0,0,2505,2578,3,196,98,0,2506,2578,5,40,0,0,2507,2511,5,42, - 0,0,2508,2509,5,265,0,0,2509,2510,5,277,0,0,2510,2512,5,266,0,0, - 2511,2508,1,0,0,0,2511,2512,1,0,0,0,2512,2578,1,0,0,0,2513,2517, - 5,43,0,0,2514,2515,5,265,0,0,2515,2516,5,277,0,0,2516,2518,5,266, - 0,0,2517,2514,1,0,0,0,2517,2518,1,0,0,0,2518,2578,1,0,0,0,2519,2523, - 5,119,0,0,2520,2521,5,265,0,0,2521,2522,5,277,0,0,2522,2524,5,266, - 0,0,2523,2520,1,0,0,0,2523,2524,1,0,0,0,2524,2578,1,0,0,0,2525,2529, - 5,120,0,0,2526,2527,5,265,0,0,2527,2528,5,277,0,0,2528,2530,5,266, - 0,0,2529,2526,1,0,0,0,2529,2530,1,0,0,0,2530,2578,1,0,0,0,2531,2578, - 5,44,0,0,2532,2578,5,41,0,0,2533,2534,5,184,0,0,2534,2535,5,265, - 0,0,2535,2536,3,336,168,0,2536,2537,5,82,0,0,2537,2540,3,336,168, - 0,2538,2539,5,78,0,0,2539,2541,3,336,168,0,2540,2538,1,0,0,0,2540, - 2541,1,0,0,0,2541,2542,1,0,0,0,2542,2543,5,266,0,0,2543,2578,1,0, - 0,0,2544,2545,5,131,0,0,2545,2546,5,265,0,0,2546,2549,3,336,168, - 0,2547,2548,5,263,0,0,2548,2550,3,354,177,0,2549,2547,1,0,0,0,2549, - 2550,1,0,0,0,2550,2551,1,0,0,0,2551,2552,5,266,0,0,2552,2578,1,0, - 0,0,2553,2554,5,68,0,0,2554,2555,5,265,0,0,2555,2556,3,390,195,0, - 2556,2557,5,82,0,0,2557,2558,3,336,168,0,2558,2559,5,266,0,0,2559, - 2578,1,0,0,0,2560,2561,5,265,0,0,2561,2562,3,330,165,0,2562,2563, - 5,266,0,0,2563,2578,1,0,0,0,2564,2565,5,88,0,0,2565,2574,5,265,0, - 0,2566,2571,3,384,192,0,2567,2568,5,263,0,0,2568,2570,3,384,192, - 0,2569,2567,1,0,0,0,2570,2573,1,0,0,0,2571,2569,1,0,0,0,2571,2572, - 1,0,0,0,2572,2575,1,0,0,0,2573,2571,1,0,0,0,2574,2566,1,0,0,0,2574, - 2575,1,0,0,0,2575,2576,1,0,0,0,2576,2578,5,266,0,0,2577,2364,1,0, - 0,0,2577,2366,1,0,0,0,2577,2367,1,0,0,0,2577,2370,1,0,0,0,2577,2372, - 1,0,0,0,2577,2373,1,0,0,0,2577,2374,1,0,0,0,2577,2375,1,0,0,0,2577, - 2376,1,0,0,0,2577,2377,1,0,0,0,2577,2384,1,0,0,0,2577,2403,1,0,0, - 0,2577,2415,1,0,0,0,2577,2425,1,0,0,0,2577,2426,1,0,0,0,2577,2430, - 1,0,0,0,2577,2444,1,0,0,0,2577,2448,1,0,0,0,2577,2453,1,0,0,0,2577, - 2466,1,0,0,0,2577,2478,1,0,0,0,2577,2485,1,0,0,0,2577,2492,1,0,0, - 0,2577,2505,1,0,0,0,2577,2506,1,0,0,0,2577,2507,1,0,0,0,2577,2513, - 1,0,0,0,2577,2519,1,0,0,0,2577,2525,1,0,0,0,2577,2531,1,0,0,0,2577, - 2532,1,0,0,0,2577,2533,1,0,0,0,2577,2544,1,0,0,0,2577,2553,1,0,0, - 0,2577,2560,1,0,0,0,2577,2564,1,0,0,0,2578,2589,1,0,0,0,2579,2580, - 10,15,0,0,2580,2581,5,267,0,0,2581,2582,3,336,168,0,2582,2583,5, - 268,0,0,2583,2588,1,0,0,0,2584,2585,10,13,0,0,2585,2586,5,261,0, - 0,2586,2588,3,390,195,0,2587,2579,1,0,0,0,2587,2584,1,0,0,0,2588, - 2591,1,0,0,0,2589,2587,1,0,0,0,2589,2590,1,0,0,0,2590,341,1,0,0, - 0,2591,2589,1,0,0,0,2592,2599,5,274,0,0,2593,2596,5,275,0,0,2594, - 2595,5,198,0,0,2595,2597,5,274,0,0,2596,2594,1,0,0,0,2596,2597,1, - 0,0,0,2597,2599,1,0,0,0,2598,2592,1,0,0,0,2598,2593,1,0,0,0,2599, - 343,1,0,0,0,2600,2601,7,23,0,0,2601,345,1,0,0,0,2602,2603,7,24,0, - 0,2603,347,1,0,0,0,2604,2605,7,25,0,0,2605,349,1,0,0,0,2606,2607, - 5,277,0,0,2607,2621,3,352,176,0,2608,2609,5,265,0,0,2609,2610,5, - 277,0,0,2610,2611,5,266,0,0,2611,2621,3,352,176,0,2612,2613,5,101, - 0,0,2613,2614,5,277,0,0,2614,2621,3,352,176,0,2615,2616,5,101,0, - 0,2616,2617,5,265,0,0,2617,2618,5,277,0,0,2618,2619,5,266,0,0,2619, - 2621,3,352,176,0,2620,2606,1,0,0,0,2620,2608,1,0,0,0,2620,2612,1, - 0,0,0,2620,2615,1,0,0,0,2621,351,1,0,0,0,2622,2623,7,26,0,0,2623, - 353,1,0,0,0,2624,2625,7,27,0,0,2625,355,1,0,0,0,2626,2627,6,178, - -1,0,2627,2628,5,8,0,0,2628,2629,5,251,0,0,2629,2630,3,356,178,0, - 2630,2631,5,253,0,0,2631,2672,1,0,0,0,2632,2633,5,235,0,0,2633,2634, - 5,251,0,0,2634,2635,3,356,178,0,2635,2636,5,263,0,0,2636,2637,3, - 356,178,0,2637,2638,5,253,0,0,2638,2672,1,0,0,0,2639,2640,5,240, - 0,0,2640,2641,5,251,0,0,2641,2642,3,390,195,0,2642,2649,3,356,178, - 0,2643,2644,5,263,0,0,2644,2645,3,390,195,0,2645,2646,3,356,178, - 0,2646,2648,1,0,0,0,2647,2643,1,0,0,0,2648,2651,1,0,0,0,2649,2647, - 1,0,0,0,2649,2650,1,0,0,0,2650,2652,1,0,0,0,2651,2649,1,0,0,0,2652, - 2653,5,253,0,0,2653,2672,1,0,0,0,2654,2657,3,362,181,0,2655,2657, - 3,358,179,0,2656,2654,1,0,0,0,2656,2655,1,0,0,0,2657,2669,1,0,0, - 0,2658,2659,5,265,0,0,2659,2664,3,360,180,0,2660,2661,5,263,0,0, - 2661,2663,3,360,180,0,2662,2660,1,0,0,0,2663,2666,1,0,0,0,2664,2662, - 1,0,0,0,2664,2665,1,0,0,0,2665,2667,1,0,0,0,2666,2664,1,0,0,0,2667, - 2668,5,266,0,0,2668,2670,1,0,0,0,2669,2658,1,0,0,0,2669,2670,1,0, - 0,0,2670,2672,1,0,0,0,2671,2626,1,0,0,0,2671,2632,1,0,0,0,2671,2639, - 1,0,0,0,2671,2656,1,0,0,0,2672,2677,1,0,0,0,2673,2674,10,5,0,0,2674, - 2676,5,8,0,0,2675,2673,1,0,0,0,2676,2679,1,0,0,0,2677,2675,1,0,0, - 0,2677,2678,1,0,0,0,2678,357,1,0,0,0,2679,2677,1,0,0,0,2680,2681, - 7,28,0,0,2681,359,1,0,0,0,2682,2685,5,277,0,0,2683,2685,3,356,178, - 0,2684,2682,1,0,0,0,2684,2683,1,0,0,0,2685,361,1,0,0,0,2686,2691, - 5,284,0,0,2687,2691,5,285,0,0,2688,2691,5,286,0,0,2689,2691,3,390, - 195,0,2690,2686,1,0,0,0,2690,2687,1,0,0,0,2690,2688,1,0,0,0,2690, - 2689,1,0,0,0,2691,363,1,0,0,0,2692,2693,5,214,0,0,2693,2694,3,330, - 165,0,2694,2695,5,192,0,0,2695,2696,3,330,165,0,2696,365,1,0,0,0, - 2697,2698,5,74,0,0,2698,2699,5,265,0,0,2699,2700,3,280,140,0,2700, - 2701,5,266,0,0,2701,367,1,0,0,0,2702,2707,3,330,165,0,2703,2704, - 5,263,0,0,2704,2706,3,330,165,0,2705,2703,1,0,0,0,2706,2709,1,0, - 0,0,2707,2705,1,0,0,0,2707,2708,1,0,0,0,2708,369,1,0,0,0,2709,2707, - 1,0,0,0,2710,2711,5,143,0,0,2711,2715,5,265,0,0,2712,2713,5,145, - 0,0,2713,2714,5,26,0,0,2714,2716,3,368,184,0,2715,2712,1,0,0,0,2715, - 2716,1,0,0,0,2716,2727,1,0,0,0,2717,2718,5,139,0,0,2718,2719,5,26, - 0,0,2719,2724,3,274,137,0,2720,2721,5,263,0,0,2721,2723,3,274,137, - 0,2722,2720,1,0,0,0,2723,2726,1,0,0,0,2724,2722,1,0,0,0,2724,2725, - 1,0,0,0,2725,2728,1,0,0,0,2726,2724,1,0,0,0,2727,2717,1,0,0,0,2727, - 2728,1,0,0,0,2728,2730,1,0,0,0,2729,2731,3,372,186,0,2730,2729,1, - 0,0,0,2730,2731,1,0,0,0,2731,2732,1,0,0,0,2732,2733,5,266,0,0,2733, - 371,1,0,0,0,2734,2735,5,154,0,0,2735,2751,3,374,187,0,2736,2737, - 5,169,0,0,2737,2751,3,374,187,0,2738,2739,5,154,0,0,2739,2740,5, - 15,0,0,2740,2741,3,374,187,0,2741,2742,5,5,0,0,2742,2743,3,374,187, - 0,2743,2751,1,0,0,0,2744,2745,5,169,0,0,2745,2746,5,15,0,0,2746, - 2747,3,374,187,0,2747,2748,5,5,0,0,2748,2749,3,374,187,0,2749,2751, - 1,0,0,0,2750,2734,1,0,0,0,2750,2736,1,0,0,0,2750,2738,1,0,0,0,2750, - 2744,1,0,0,0,2751,373,1,0,0,0,2752,2753,5,199,0,0,2753,2762,5,149, - 0,0,2754,2755,5,199,0,0,2755,2762,5,77,0,0,2756,2757,5,39,0,0,2757, - 2762,5,168,0,0,2758,2759,3,330,165,0,2759,2760,7,29,0,0,2760,2762, - 1,0,0,0,2761,2752,1,0,0,0,2761,2754,1,0,0,0,2761,2756,1,0,0,0,2761, - 2758,1,0,0,0,2762,375,1,0,0,0,2763,2764,3,390,195,0,2764,2765,5, - 261,0,0,2765,2766,3,390,195,0,2766,2769,1,0,0,0,2767,2769,3,390, - 195,0,2768,2763,1,0,0,0,2768,2767,1,0,0,0,2769,377,1,0,0,0,2770, - 2775,3,376,188,0,2771,2772,5,263,0,0,2772,2774,3,376,188,0,2773, - 2771,1,0,0,0,2774,2777,1,0,0,0,2775,2773,1,0,0,0,2775,2776,1,0,0, - 0,2776,379,1,0,0,0,2777,2775,1,0,0,0,2778,2792,5,2,0,0,2779,2792, - 5,4,0,0,2780,2792,5,58,0,0,2781,2792,5,37,0,0,2782,2792,5,99,0,0, - 2783,2792,5,162,0,0,2784,2789,5,174,0,0,2785,2786,5,265,0,0,2786, - 2787,3,390,195,0,2787,2788,5,266,0,0,2788,2790,1,0,0,0,2789,2785, - 1,0,0,0,2789,2790,1,0,0,0,2790,2792,1,0,0,0,2791,2778,1,0,0,0,2791, - 2779,1,0,0,0,2791,2780,1,0,0,0,2791,2781,1,0,0,0,2791,2782,1,0,0, - 0,2791,2783,1,0,0,0,2791,2784,1,0,0,0,2792,381,1,0,0,0,2793,2794, - 7,30,0,0,2794,383,1,0,0,0,2795,2800,3,390,195,0,2796,2797,5,261, - 0,0,2797,2799,3,390,195,0,2798,2796,1,0,0,0,2799,2802,1,0,0,0,2800, - 2798,1,0,0,0,2800,2801,1,0,0,0,2801,385,1,0,0,0,2802,2800,1,0,0, - 0,2803,2809,4,193,14,0,2804,2805,3,390,195,0,2805,2806,5,261,0,0, - 2806,2807,3,192,96,0,2807,2810,1,0,0,0,2808,2810,3,192,96,0,2809, - 2804,1,0,0,0,2809,2808,1,0,0,0,2810,2820,1,0,0,0,2811,2816,3,390, - 195,0,2812,2813,5,261,0,0,2813,2815,3,390,195,0,2814,2812,1,0,0, - 0,2815,2818,1,0,0,0,2816,2814,1,0,0,0,2816,2817,1,0,0,0,2817,2820, - 1,0,0,0,2818,2816,1,0,0,0,2819,2803,1,0,0,0,2819,2811,1,0,0,0,2820, - 387,1,0,0,0,2821,2822,5,166,0,0,2822,2828,3,390,195,0,2823,2824, - 5,204,0,0,2824,2828,3,390,195,0,2825,2826,5,87,0,0,2826,2828,3,390, - 195,0,2827,2821,1,0,0,0,2827,2823,1,0,0,0,2827,2825,1,0,0,0,2828, - 389,1,0,0,0,2829,2835,5,280,0,0,2830,2835,5,274,0,0,2831,2835,3, - 396,198,0,2832,2835,5,283,0,0,2833,2835,5,281,0,0,2834,2829,1,0, - 0,0,2834,2830,1,0,0,0,2834,2831,1,0,0,0,2834,2832,1,0,0,0,2834,2833, - 1,0,0,0,2835,391,1,0,0,0,2836,2838,5,256,0,0,2837,2836,1,0,0,0,2837, - 2838,1,0,0,0,2838,2839,1,0,0,0,2839,2849,5,278,0,0,2840,2842,5,256, - 0,0,2841,2840,1,0,0,0,2841,2842,1,0,0,0,2842,2843,1,0,0,0,2843,2849, - 5,279,0,0,2844,2846,5,256,0,0,2845,2844,1,0,0,0,2845,2846,1,0,0, - 0,2846,2847,1,0,0,0,2847,2849,5,277,0,0,2848,2837,1,0,0,0,2848,2841, - 1,0,0,0,2848,2845,1,0,0,0,2849,393,1,0,0,0,2850,2851,7,31,0,0,2851, - 395,1,0,0,0,2852,2853,7,32,0,0,2853,397,1,0,0,0,362,401,408,432, - 445,449,453,462,467,471,477,479,484,488,492,499,504,510,514,523, - 530,534,539,541,546,549,556,560,565,569,572,576,584,588,592,600, - 604,613,616,619,625,632,643,648,653,658,663,672,675,678,682,708, - 734,743,753,756,770,788,790,799,810,819,826,830,837,843,846,851, - 858,872,885,890,895,901,937,940,946,949,955,961,973,975,986,994, - 999,1003,1008,1015,1019,1023,1029,1033,1037,1046,1049,1052,1060, - 1074,1081,1094,1100,1105,1108,1111,1116,1120,1129,1134,1140,1144, - 1148,1153,1156,1164,1167,1170,1182,1185,1188,1193,1197,1213,1218, - 1225,1228,1234,1237,1244,1247,1251,1256,1259,1266,1269,1293,1307, - 1311,1315,1335,1337,1339,1348,1350,1359,1361,1370,1372,1377,1386, - 1395,1404,1415,1421,1426,1429,1442,1452,1456,1461,1472,1477,1510, - 1518,1523,1530,1537,1541,1546,1549,1554,1559,1564,1568,1577,1580, - 1584,1591,1600,1604,1608,1615,1618,1628,1635,1640,1645,1650,1656, - 1659,1668,1671,1674,1680,1685,1695,1698,1701,1705,1715,1718,1724, - 1730,1733,1736,1740,1750,1761,1766,1769,1773,1780,1790,1802,1808, - 1810,1819,1822,1829,1839,1845,1853,1864,1874,1885,1887,1893,1898, - 1908,1911,1917,1919,1927,1933,1936,1938,1950,1957,1961,1965,1969, - 1972,1981,1984,1987,1992,1995,2002,2008,2013,2016,2023,2034,2037, - 2041,2045,2054,2058,2063,2066,2077,2093,2097,2101,2105,2109,2113, - 2117,2121,2131,2136,2145,2150,2163,2165,2171,2175,2177,2185,2194, - 2197,2212,2218,2226,2233,2237,2245,2247,2258,2266,2275,2281,2286, - 2292,2298,2303,2308,2314,2325,2327,2333,2340,2343,2352,2355,2359, - 2362,2388,2394,2398,2410,2420,2423,2436,2439,2458,2462,2470,2474, - 2499,2502,2511,2517,2523,2529,2540,2549,2571,2574,2577,2587,2589, - 2596,2598,2620,2649,2656,2664,2669,2671,2677,2684,2690,2707,2715, - 2724,2727,2730,2750,2761,2768,2775,2789,2791,2800,2809,2816,2819, - 2827,2834,2837,2841,2845,2848 + 184,185,195,195,204,204,213,213,217,217,220,220,231,231,3150,0,393, + 1,0,0,0,2,398,1,0,0,0,4,424,1,0,0,0,6,426,1,0,0,0,8,437,1,0,0,0, + 10,439,1,0,0,0,12,478,1,0,0,0,14,500,1,0,0,0,16,555,1,0,0,0,18,574, + 1,0,0,0,20,587,1,0,0,0,22,591,1,0,0,0,24,653,1,0,0,0,26,701,1,0, + 0,0,28,703,1,0,0,0,30,711,1,0,0,0,32,730,1,0,0,0,34,750,1,0,0,0, + 36,757,1,0,0,0,38,766,1,0,0,0,40,774,1,0,0,0,42,796,1,0,0,0,44,806, + 1,0,0,0,46,824,1,0,0,0,48,845,1,0,0,0,50,866,1,0,0,0,52,872,1,0, + 0,0,54,889,1,0,0,0,56,898,1,0,0,0,58,905,1,0,0,0,60,913,1,0,0,0, + 62,920,1,0,0,0,64,927,1,0,0,0,66,936,1,0,0,0,68,947,1,0,0,0,70,949, + 1,0,0,0,72,969,1,0,0,0,74,986,1,0,0,0,76,988,1,0,0,0,78,997,1,0, + 0,0,80,1004,1,0,0,0,82,1013,1,0,0,0,84,1023,1,0,0,0,86,1046,1,0, + 0,0,88,1052,1,0,0,0,90,1054,1,0,0,0,92,1061,1,0,0,0,94,1073,1,0, + 0,0,96,1075,1,0,0,0,98,1082,1,0,0,0,100,1103,1,0,0,0,102,1132,1, + 0,0,0,104,1134,1,0,0,0,106,1142,1,0,0,0,108,1164,1,0,0,0,110,1182, + 1,0,0,0,112,1205,1,0,0,0,114,1207,1,0,0,0,116,1222,1,0,0,0,118,1241, + 1,0,0,0,120,1263,1,0,0,0,122,1268,1,0,0,0,124,1273,1,0,0,0,126,1278, + 1,0,0,0,128,1283,1,0,0,0,130,1290,1,0,0,0,132,1305,1,0,0,0,134,1311, + 1,0,0,0,136,1331,1,0,0,0,138,1333,1,0,0,0,140,1344,1,0,0,0,142,1355, + 1,0,0,0,144,1369,1,0,0,0,146,1371,1,0,0,0,148,1380,1,0,0,0,150,1389, + 1,0,0,0,152,1398,1,0,0,0,154,1401,1,0,0,0,156,1409,1,0,0,0,158,1425, + 1,0,0,0,160,1429,1,0,0,0,162,1453,1,0,0,0,164,1455,1,0,0,0,166,1471, + 1,0,0,0,168,1474,1,0,0,0,170,1478,1,0,0,0,172,1481,1,0,0,0,174,1485, + 1,0,0,0,176,1487,1,0,0,0,178,1489,1,0,0,0,180,1491,1,0,0,0,182,1493, + 1,0,0,0,184,1495,1,0,0,0,186,1497,1,0,0,0,188,1505,1,0,0,0,190,1515, + 1,0,0,0,192,1517,1,0,0,0,194,1522,1,0,0,0,196,1524,1,0,0,0,198,1529, + 1,0,0,0,200,1533,1,0,0,0,202,1538,1,0,0,0,204,1578,1,0,0,0,206,1586, + 1,0,0,0,208,1590,1,0,0,0,210,1605,1,0,0,0,212,1610,1,0,0,0,214,1614, + 1,0,0,0,216,1623,1,0,0,0,218,1653,1,0,0,0,220,1668,1,0,0,0,222,1674, + 1,0,0,0,224,1679,1,0,0,0,226,1681,1,0,0,0,228,1699,1,0,0,0,230,1702, + 1,0,0,0,232,1712,1,0,0,0,234,1732,1,0,0,0,236,1742,1,0,0,0,238,1744, + 1,0,0,0,240,1759,1,0,0,0,242,1761,1,0,0,0,244,1768,1,0,0,0,246,1800, + 1,0,0,0,248,1812,1,0,0,0,250,1819,1,0,0,0,252,1829,1,0,0,0,254,1831, + 1,0,0,0,256,1837,1,0,0,0,258,1848,1,0,0,0,260,1859,1,0,0,0,262,1867, + 1,0,0,0,264,1885,1,0,0,0,266,1890,1,0,0,0,268,1911,1,0,0,0,270,1947, + 1,0,0,0,272,1949,1,0,0,0,274,1957,1,0,0,0,276,1987,1,0,0,0,278,1995, + 1,0,0,0,280,2000,1,0,0,0,282,2006,1,0,0,0,284,2016,1,0,0,0,286,2031, + 1,0,0,0,288,2033,1,0,0,0,290,2040,1,0,0,0,292,2053,1,0,0,0,294,2056, + 1,0,0,0,296,2060,1,0,0,0,298,2062,1,0,0,0,300,2067,1,0,0,0,302,2071, + 1,0,0,0,304,2121,1,0,0,0,306,2140,1,0,0,0,308,2142,1,0,0,0,310,2157, + 1,0,0,0,312,2167,1,0,0,0,314,2182,1,0,0,0,316,2185,1,0,0,0,318,2189, + 1,0,0,0,320,2193,1,0,0,0,322,2208,1,0,0,0,324,2214,1,0,0,0,326,2216, + 1,0,0,0,328,2225,1,0,0,0,330,2296,1,0,0,0,332,2302,1,0,0,0,334,2318, + 1,0,0,0,336,2565,1,0,0,0,338,2586,1,0,0,0,340,2588,1,0,0,0,342,2590, + 1,0,0,0,344,2606,1,0,0,0,346,2608,1,0,0,0,348,2655,1,0,0,0,350,2664, + 1,0,0,0,352,2668,1,0,0,0,354,2674,1,0,0,0,356,2676,1,0,0,0,358,2681, + 1,0,0,0,360,2686,1,0,0,0,362,2694,1,0,0,0,364,2726,1,0,0,0,366,2737, + 1,0,0,0,368,2744,1,0,0,0,370,2746,1,0,0,0,372,2767,1,0,0,0,374,2769, + 1,0,0,0,376,2771,1,0,0,0,378,2795,1,0,0,0,380,2803,1,0,0,0,382,2810, + 1,0,0,0,384,2824,1,0,0,0,386,2826,1,0,0,0,388,2828,1,0,0,0,390,392, + 3,2,1,0,391,390,1,0,0,0,392,395,1,0,0,0,393,391,1,0,0,0,393,394, + 1,0,0,0,394,396,1,0,0,0,395,393,1,0,0,0,396,397,5,0,0,1,397,1,1, + 0,0,0,398,400,3,4,2,0,399,401,5,262,0,0,400,399,1,0,0,0,400,401, + 1,0,0,0,401,3,1,0,0,0,402,425,3,212,106,0,403,425,3,6,3,0,404,425, + 3,8,4,0,405,425,3,26,13,0,406,425,3,64,32,0,407,425,3,66,33,0,408, + 425,3,68,34,0,409,425,3,74,37,0,410,425,3,88,44,0,411,425,3,94,47, + 0,412,425,3,100,50,0,413,425,3,102,51,0,414,425,3,108,54,0,415,425, + 3,110,55,0,416,425,3,112,56,0,417,425,3,144,72,0,418,425,3,152,76, + 0,419,425,3,154,77,0,420,425,3,156,78,0,421,425,3,158,79,0,422,425, + 3,160,80,0,423,425,3,162,81,0,424,402,1,0,0,0,424,403,1,0,0,0,424, + 404,1,0,0,0,424,405,1,0,0,0,424,406,1,0,0,0,424,407,1,0,0,0,424, + 408,1,0,0,0,424,409,1,0,0,0,424,410,1,0,0,0,424,411,1,0,0,0,424, + 412,1,0,0,0,424,413,1,0,0,0,424,414,1,0,0,0,424,415,1,0,0,0,424, + 416,1,0,0,0,424,417,1,0,0,0,424,418,1,0,0,0,424,419,1,0,0,0,424, + 420,1,0,0,0,424,421,1,0,0,0,424,422,1,0,0,0,424,423,1,0,0,0,425, + 5,1,0,0,0,426,427,5,203,0,0,427,428,3,184,92,0,428,7,1,0,0,0,429, + 438,3,18,9,0,430,438,3,20,10,0,431,438,3,22,11,0,432,438,3,24,12, + 0,433,438,3,16,8,0,434,438,3,14,7,0,435,438,3,12,6,0,436,438,3,10, + 5,0,437,429,1,0,0,0,437,430,1,0,0,0,437,431,1,0,0,0,437,432,1,0, + 0,0,437,433,1,0,0,0,437,434,1,0,0,0,437,435,1,0,0,0,437,436,1,0, + 0,0,438,9,1,0,0,0,439,441,5,37,0,0,440,442,5,19,0,0,441,440,1,0, + 0,0,441,442,1,0,0,0,442,443,1,0,0,0,443,445,5,188,0,0,444,446,3, + 172,86,0,445,444,1,0,0,0,445,446,1,0,0,0,446,447,1,0,0,0,447,463, + 3,174,87,0,448,449,5,265,0,0,449,454,3,222,111,0,450,451,5,263,0, + 0,451,453,3,222,111,0,452,450,1,0,0,0,453,456,1,0,0,0,454,452,1, + 0,0,0,454,455,1,0,0,0,455,459,1,0,0,0,456,454,1,0,0,0,457,458,5, + 263,0,0,458,460,3,216,108,0,459,457,1,0,0,0,459,460,1,0,0,0,460, + 461,1,0,0,0,461,462,5,266,0,0,462,464,1,0,0,0,463,448,1,0,0,0,463, + 464,1,0,0,0,464,471,1,0,0,0,465,466,5,17,0,0,466,469,5,26,0,0,467, + 470,3,312,156,0,468,470,3,258,129,0,469,467,1,0,0,0,469,468,1,0, + 0,0,470,472,1,0,0,0,471,465,1,0,0,0,471,472,1,0,0,0,472,473,1,0, + 0,0,473,476,3,202,101,0,474,475,5,9,0,0,475,477,3,212,106,0,476, + 474,1,0,0,0,476,477,1,0,0,0,477,11,1,0,0,0,478,480,5,37,0,0,479, + 481,5,19,0,0,480,479,1,0,0,0,480,481,1,0,0,0,481,482,1,0,0,0,482, + 484,5,188,0,0,483,485,3,172,86,0,484,483,1,0,0,0,484,485,1,0,0,0, + 485,486,1,0,0,0,486,487,3,174,87,0,487,491,5,115,0,0,488,492,3,186, + 93,0,489,490,5,147,0,0,490,492,3,338,169,0,491,488,1,0,0,0,491,489, + 1,0,0,0,492,496,1,0,0,0,493,494,5,17,0,0,494,495,5,26,0,0,495,497, + 3,258,129,0,496,493,1,0,0,0,496,497,1,0,0,0,497,498,1,0,0,0,498, + 499,3,202,101,0,499,13,1,0,0,0,500,502,5,37,0,0,501,503,5,19,0,0, + 502,501,1,0,0,0,502,503,1,0,0,0,503,504,1,0,0,0,504,506,5,188,0, + 0,505,507,3,172,86,0,506,505,1,0,0,0,506,507,1,0,0,0,507,508,1,0, + 0,0,508,526,3,174,87,0,509,510,5,265,0,0,510,515,3,224,112,0,511, + 512,5,263,0,0,512,514,3,224,112,0,513,511,1,0,0,0,514,517,1,0,0, + 0,515,513,1,0,0,0,515,516,1,0,0,0,516,522,1,0,0,0,517,515,1,0,0, + 0,518,519,5,263,0,0,519,520,5,150,0,0,520,521,5,110,0,0,521,523, + 3,312,156,0,522,518,1,0,0,0,522,523,1,0,0,0,523,524,1,0,0,0,524, + 525,5,266,0,0,525,527,1,0,0,0,526,509,1,0,0,0,526,527,1,0,0,0,527, + 533,1,0,0,0,528,529,5,150,0,0,529,531,5,110,0,0,530,532,3,312,156, + 0,531,530,1,0,0,0,531,532,1,0,0,0,532,534,1,0,0,0,533,528,1,0,0, + 0,533,534,1,0,0,0,534,538,1,0,0,0,535,536,5,145,0,0,536,537,5,26, + 0,0,537,539,3,240,120,0,538,535,1,0,0,0,538,539,1,0,0,0,539,542, + 1,0,0,0,540,541,5,34,0,0,541,543,3,338,169,0,542,540,1,0,0,0,542, + 543,1,0,0,0,543,544,1,0,0,0,544,545,5,23,0,0,545,546,5,9,0,0,546, + 549,5,111,0,0,547,548,5,25,0,0,548,550,3,256,128,0,549,547,1,0,0, + 0,549,550,1,0,0,0,550,553,1,0,0,0,551,552,5,9,0,0,552,554,3,212, + 106,0,553,551,1,0,0,0,553,554,1,0,0,0,554,15,1,0,0,0,555,556,5,37, + 0,0,556,558,5,212,0,0,557,559,3,172,86,0,558,557,1,0,0,0,558,559, + 1,0,0,0,559,560,1,0,0,0,560,562,3,178,89,0,561,563,3,208,104,0,562, + 561,1,0,0,0,562,563,1,0,0,0,563,565,1,0,0,0,564,566,3,228,114,0, + 565,564,1,0,0,0,565,566,1,0,0,0,566,569,1,0,0,0,567,568,5,25,0,0, + 568,570,3,256,128,0,569,567,1,0,0,0,569,570,1,0,0,0,570,571,1,0, + 0,0,571,572,5,9,0,0,572,573,3,212,106,0,573,17,1,0,0,0,574,575,5, + 37,0,0,575,577,7,0,0,0,576,578,3,172,86,0,577,576,1,0,0,0,577,578, + 1,0,0,0,578,579,1,0,0,0,579,581,3,176,88,0,580,582,3,228,114,0,581, + 580,1,0,0,0,581,582,1,0,0,0,582,585,1,0,0,0,583,584,5,24,0,0,584, + 586,3,338,169,0,585,583,1,0,0,0,585,586,1,0,0,0,586,19,1,0,0,0,587, + 588,5,37,0,0,588,589,5,166,0,0,589,590,3,382,191,0,590,21,1,0,0, + 0,591,593,5,37,0,0,592,594,5,12,0,0,593,592,1,0,0,0,593,594,1,0, + 0,0,594,595,1,0,0,0,595,597,5,84,0,0,596,598,3,172,86,0,597,596, + 1,0,0,0,597,598,1,0,0,0,598,599,1,0,0,0,599,612,3,180,90,0,600,609, + 5,265,0,0,601,606,3,348,174,0,602,603,5,263,0,0,603,605,3,348,174, + 0,604,602,1,0,0,0,605,608,1,0,0,0,606,604,1,0,0,0,606,607,1,0,0, + 0,607,610,1,0,0,0,608,606,1,0,0,0,609,601,1,0,0,0,609,610,1,0,0, + 0,610,611,1,0,0,0,611,613,5,266,0,0,612,600,1,0,0,0,612,613,1,0, + 0,0,613,614,1,0,0,0,614,615,5,160,0,0,615,618,3,348,174,0,616,617, + 5,102,0,0,617,619,3,348,174,0,618,616,1,0,0,0,618,619,1,0,0,0,619, + 620,1,0,0,0,620,621,5,24,0,0,621,625,5,274,0,0,622,623,5,104,0,0, + 623,624,5,249,0,0,624,626,5,274,0,0,625,622,1,0,0,0,625,626,1,0, + 0,0,626,627,1,0,0,0,627,628,5,206,0,0,628,629,5,249,0,0,629,630, + 5,274,0,0,630,631,5,126,0,0,631,632,5,249,0,0,632,636,5,274,0,0, + 633,634,5,18,0,0,634,635,5,249,0,0,635,637,5,274,0,0,636,633,1,0, + 0,0,636,637,1,0,0,0,637,641,1,0,0,0,638,639,5,20,0,0,639,640,5,249, + 0,0,640,642,5,274,0,0,641,638,1,0,0,0,641,642,1,0,0,0,642,646,1, + 0,0,0,643,644,5,187,0,0,644,645,5,249,0,0,645,647,5,274,0,0,646, + 643,1,0,0,0,646,647,1,0,0,0,647,651,1,0,0,0,648,649,5,76,0,0,649, + 650,5,249,0,0,650,652,5,274,0,0,651,648,1,0,0,0,651,652,1,0,0,0, + 652,23,1,0,0,0,653,654,5,37,0,0,654,656,5,84,0,0,655,657,3,172,86, + 0,656,655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0,0,658,671,3,180, + 90,0,659,668,5,265,0,0,660,665,3,348,174,0,661,662,5,263,0,0,662, + 664,3,348,174,0,663,661,1,0,0,0,664,667,1,0,0,0,665,663,1,0,0,0, + 665,666,1,0,0,0,666,669,1,0,0,0,667,665,1,0,0,0,668,660,1,0,0,0, + 668,669,1,0,0,0,669,670,1,0,0,0,670,672,5,266,0,0,671,659,1,0,0, + 0,671,672,1,0,0,0,672,675,1,0,0,0,673,674,5,160,0,0,674,676,3,348, + 174,0,675,673,1,0,0,0,675,676,1,0,0,0,676,677,1,0,0,0,677,678,5, + 24,0,0,678,679,5,274,0,0,679,680,5,186,0,0,680,681,5,249,0,0,681, + 682,3,338,169,0,682,25,1,0,0,0,683,702,3,28,14,0,684,702,3,62,31, + 0,685,702,3,60,30,0,686,702,3,58,29,0,687,702,3,54,27,0,688,702, + 3,56,28,0,689,702,3,52,26,0,690,702,3,48,24,0,691,702,3,50,25,0, + 692,702,3,46,23,0,693,702,3,44,22,0,694,702,3,42,21,0,695,702,3, + 40,20,0,696,702,3,34,17,0,697,702,3,30,15,0,698,702,3,32,16,0,699, + 702,3,36,18,0,700,702,3,38,19,0,701,683,1,0,0,0,701,684,1,0,0,0, + 701,685,1,0,0,0,701,686,1,0,0,0,701,687,1,0,0,0,701,688,1,0,0,0, + 701,689,1,0,0,0,701,690,1,0,0,0,701,691,1,0,0,0,701,692,1,0,0,0, + 701,693,1,0,0,0,701,694,1,0,0,0,701,695,1,0,0,0,701,696,1,0,0,0, + 701,697,1,0,0,0,701,698,1,0,0,0,701,699,1,0,0,0,701,700,1,0,0,0, + 702,27,1,0,0,0,703,704,5,4,0,0,704,705,5,46,0,0,705,706,3,184,92, + 0,706,707,5,176,0,0,707,708,5,142,0,0,708,709,7,1,0,0,709,710,3, + 382,191,0,710,29,1,0,0,0,711,712,5,4,0,0,712,713,5,188,0,0,713,714, + 3,186,93,0,714,715,5,176,0,0,715,716,5,32,0,0,716,717,5,182,0,0, + 717,718,3,194,97,0,718,719,5,265,0,0,719,720,7,2,0,0,720,721,5,249, + 0,0,721,726,3,338,169,0,722,723,5,263,0,0,723,724,7,2,0,0,724,725, + 5,249,0,0,725,727,3,338,169,0,726,722,1,0,0,0,726,727,1,0,0,0,727, + 728,1,0,0,0,728,729,5,266,0,0,729,31,1,0,0,0,730,731,5,4,0,0,731, + 732,5,188,0,0,732,735,3,186,93,0,733,734,5,145,0,0,734,736,3,326, + 163,0,735,733,1,0,0,0,735,736,1,0,0,0,736,737,1,0,0,0,737,748,5, + 176,0,0,738,739,5,30,0,0,739,740,5,94,0,0,740,745,3,338,169,0,741, + 742,5,216,0,0,742,743,5,151,0,0,743,744,5,249,0,0,744,746,3,384, + 192,0,745,741,1,0,0,0,745,746,1,0,0,0,746,749,1,0,0,0,747,749,5, + 197,0,0,748,738,1,0,0,0,748,747,1,0,0,0,749,33,1,0,0,0,750,751,5, + 4,0,0,751,752,5,188,0,0,752,753,3,186,93,0,753,754,5,31,0,0,754, + 755,3,194,97,0,755,756,3,230,115,0,756,35,1,0,0,0,757,758,5,4,0, + 0,758,759,5,188,0,0,759,760,3,186,93,0,760,762,5,58,0,0,761,763, + 5,32,0,0,762,761,1,0,0,0,762,763,1,0,0,0,763,764,1,0,0,0,764,765, + 3,194,97,0,765,37,1,0,0,0,766,767,5,4,0,0,767,768,5,188,0,0,768, + 769,3,186,93,0,769,770,5,176,0,0,770,771,5,142,0,0,771,772,7,1,0, + 0,772,773,3,382,191,0,773,39,1,0,0,0,774,775,5,4,0,0,775,776,5,188, + 0,0,776,782,3,186,93,0,777,783,5,158,0,0,778,780,5,1,0,0,779,781, + 3,172,86,0,780,779,1,0,0,0,780,781,1,0,0,0,781,783,1,0,0,0,782,777, + 1,0,0,0,782,778,1,0,0,0,783,784,1,0,0,0,784,785,5,33,0,0,785,786, + 5,265,0,0,786,791,3,230,115,0,787,788,5,263,0,0,788,790,3,230,115, + 0,789,787,1,0,0,0,790,793,1,0,0,0,791,792,1,0,0,0,791,789,1,0,0, + 0,792,794,1,0,0,0,793,791,1,0,0,0,794,795,5,266,0,0,795,41,1,0,0, + 0,796,797,5,4,0,0,797,798,5,188,0,0,798,799,3,186,93,0,799,800,5, + 1,0,0,800,802,5,32,0,0,801,803,3,172,86,0,802,801,1,0,0,0,802,803, + 1,0,0,0,803,804,1,0,0,0,804,805,3,232,116,0,805,43,1,0,0,0,806,807, + 5,4,0,0,807,808,5,188,0,0,808,809,3,186,93,0,809,811,5,4,0,0,810, + 812,5,32,0,0,811,810,1,0,0,0,811,812,1,0,0,0,812,813,1,0,0,0,813, + 822,3,194,97,0,814,818,5,176,0,0,815,819,3,236,118,0,816,817,5,34, + 0,0,817,819,3,338,169,0,818,815,1,0,0,0,818,816,1,0,0,0,819,823, + 1,0,0,0,820,821,5,58,0,0,821,823,5,51,0,0,822,814,1,0,0,0,822,820, + 1,0,0,0,823,45,1,0,0,0,824,825,5,4,0,0,825,826,5,188,0,0,826,827, + 3,186,93,0,827,829,5,1,0,0,828,830,3,172,86,0,829,828,1,0,0,0,829, + 830,1,0,0,0,830,843,1,0,0,0,831,832,5,145,0,0,832,835,3,326,163, + 0,833,834,5,24,0,0,834,836,3,338,169,0,835,833,1,0,0,0,835,836,1, + 0,0,0,836,838,1,0,0,0,837,839,3,248,124,0,838,837,1,0,0,0,838,839, + 1,0,0,0,839,844,1,0,0,0,840,841,5,154,0,0,841,842,5,145,0,0,842, + 844,3,246,123,0,843,831,1,0,0,0,843,840,1,0,0,0,844,47,1,0,0,0,845, + 846,5,4,0,0,846,847,5,188,0,0,847,850,3,186,93,0,848,849,5,145,0, + 0,849,851,3,326,163,0,850,848,1,0,0,0,850,851,1,0,0,0,851,852,1, + 0,0,0,852,864,5,176,0,0,853,854,5,72,0,0,854,865,3,238,119,0,855, + 856,5,168,0,0,856,857,5,79,0,0,857,865,3,262,131,0,858,859,5,24, + 0,0,859,865,3,338,169,0,860,861,5,25,0,0,861,865,3,256,128,0,862, + 863,5,175,0,0,863,865,3,256,128,0,864,853,1,0,0,0,864,855,1,0,0, + 0,864,858,1,0,0,0,864,860,1,0,0,0,864,862,1,0,0,0,865,49,1,0,0,0, + 866,867,5,4,0,0,867,868,5,188,0,0,868,869,3,186,93,0,869,870,5,155, + 0,0,870,871,5,146,0,0,871,51,1,0,0,0,872,873,5,4,0,0,873,874,5,188, + 0,0,874,875,3,186,93,0,875,877,5,58,0,0,876,878,3,170,85,0,877,876, + 1,0,0,0,877,878,1,0,0,0,878,887,1,0,0,0,879,880,5,145,0,0,880,882, + 3,326,163,0,881,883,5,22,0,0,882,881,1,0,0,0,882,883,1,0,0,0,883, + 888,1,0,0,0,884,885,5,154,0,0,885,886,5,145,0,0,886,888,3,246,123, + 0,887,879,1,0,0,0,887,884,1,0,0,0,888,53,1,0,0,0,889,890,5,4,0,0, + 890,891,5,212,0,0,891,893,3,188,94,0,892,894,3,208,104,0,893,892, + 1,0,0,0,893,894,1,0,0,0,894,895,1,0,0,0,895,896,5,9,0,0,896,897, + 3,212,106,0,897,55,1,0,0,0,898,899,5,4,0,0,899,900,5,212,0,0,900, + 901,3,188,94,0,901,902,5,156,0,0,902,903,5,193,0,0,903,904,3,188, + 94,0,904,57,1,0,0,0,905,906,5,4,0,0,906,907,5,212,0,0,907,908,3, + 188,94,0,908,909,5,176,0,0,909,910,5,142,0,0,910,911,7,1,0,0,911, + 912,3,376,188,0,912,59,1,0,0,0,913,914,5,4,0,0,914,915,5,188,0,0, + 915,916,3,186,93,0,916,917,5,156,0,0,917,918,5,193,0,0,918,919,3, + 186,93,0,919,61,1,0,0,0,920,921,5,4,0,0,921,922,5,212,0,0,922,923, + 3,188,94,0,923,924,7,3,0,0,924,925,5,25,0,0,925,926,3,256,128,0, + 926,63,1,0,0,0,927,929,5,196,0,0,928,930,5,188,0,0,929,928,1,0,0, + 0,929,930,1,0,0,0,930,932,1,0,0,0,931,933,3,170,85,0,932,931,1,0, + 0,0,932,933,1,0,0,0,933,934,1,0,0,0,934,935,3,186,93,0,935,65,1, + 0,0,0,936,938,5,56,0,0,937,939,5,46,0,0,938,937,1,0,0,0,938,939, + 1,0,0,0,939,941,1,0,0,0,940,942,7,4,0,0,941,940,1,0,0,0,941,942, + 1,0,0,0,942,943,1,0,0,0,943,944,3,376,188,0,944,67,1,0,0,0,945,948, + 3,70,35,0,946,948,3,72,36,0,947,945,1,0,0,0,947,946,1,0,0,0,948, + 69,1,0,0,0,949,950,5,36,0,0,950,951,5,182,0,0,951,953,3,186,93,0, + 952,954,3,312,156,0,953,952,1,0,0,0,953,954,1,0,0,0,954,967,1,0, + 0,0,955,956,5,190,0,0,956,957,5,185,0,0,957,958,5,265,0,0,958,959, + 3,384,192,0,959,965,5,266,0,0,960,961,5,157,0,0,961,962,5,265,0, + 0,962,963,3,384,192,0,963,964,5,266,0,0,964,966,1,0,0,0,965,960, + 1,0,0,0,965,966,1,0,0,0,966,968,1,0,0,0,967,955,1,0,0,0,967,968, + 1,0,0,0,968,71,1,0,0,0,969,970,5,36,0,0,970,971,5,96,0,0,971,972, + 5,182,0,0,972,978,3,186,93,0,973,974,5,145,0,0,974,975,5,265,0,0, + 975,976,3,326,163,0,976,977,5,266,0,0,977,979,1,0,0,0,978,973,1, + 0,0,0,978,979,1,0,0,0,979,73,1,0,0,0,980,987,3,86,43,0,981,987,3, + 84,42,0,982,987,3,82,41,0,983,987,3,78,39,0,984,987,3,80,40,0,985, + 987,3,76,38,0,986,980,1,0,0,0,986,981,1,0,0,0,986,982,1,0,0,0,986, + 983,1,0,0,0,986,984,1,0,0,0,986,985,1,0,0,0,987,75,1,0,0,0,988,989, + 5,58,0,0,989,991,7,0,0,0,990,992,3,170,85,0,991,990,1,0,0,0,991, + 992,1,0,0,0,992,993,1,0,0,0,993,995,3,184,92,0,994,996,7,5,0,0,995, + 994,1,0,0,0,995,996,1,0,0,0,996,77,1,0,0,0,997,998,5,58,0,0,998, + 1000,5,212,0,0,999,1001,3,170,85,0,1000,999,1,0,0,0,1000,1001,1, + 0,0,0,1001,1002,1,0,0,0,1002,1003,3,188,94,0,1003,79,1,0,0,0,1004, + 1005,5,58,0,0,1005,1007,5,188,0,0,1006,1008,3,170,85,0,1007,1006, + 1,0,0,0,1007,1008,1,0,0,0,1008,1009,1,0,0,0,1009,1011,3,186,93,0, + 1010,1012,5,22,0,0,1011,1010,1,0,0,0,1011,1012,1,0,0,0,1012,81,1, + 0,0,0,1013,1015,5,58,0,0,1014,1016,5,96,0,0,1015,1014,1,0,0,0,1015, + 1016,1,0,0,0,1016,1017,1,0,0,0,1017,1018,5,182,0,0,1018,1021,3,186, + 93,0,1019,1020,5,145,0,0,1020,1022,3,326,163,0,1021,1019,1,0,0,0, + 1021,1022,1,0,0,0,1022,83,1,0,0,0,1023,1025,5,58,0,0,1024,1026,5, + 12,0,0,1025,1024,1,0,0,0,1025,1026,1,0,0,0,1026,1027,1,0,0,0,1027, + 1029,5,84,0,0,1028,1030,3,170,85,0,1029,1028,1,0,0,0,1029,1030,1, + 0,0,0,1030,1031,1,0,0,0,1031,1044,3,190,95,0,1032,1041,5,265,0,0, + 1033,1038,3,348,174,0,1034,1035,5,263,0,0,1035,1037,3,348,174,0, + 1036,1034,1,0,0,0,1037,1040,1,0,0,0,1038,1036,1,0,0,0,1038,1039, + 1,0,0,0,1039,1042,1,0,0,0,1040,1038,1,0,0,0,1041,1033,1,0,0,0,1041, + 1042,1,0,0,0,1042,1043,1,0,0,0,1043,1045,5,266,0,0,1044,1032,1,0, + 0,0,1044,1045,1,0,0,0,1045,85,1,0,0,0,1046,1047,5,58,0,0,1047,1048, + 5,166,0,0,1048,1049,3,382,191,0,1049,87,1,0,0,0,1050,1053,3,90,45, + 0,1051,1053,3,92,46,0,1052,1050,1,0,0,0,1052,1051,1,0,0,0,1053,89, + 1,0,0,0,1054,1055,5,86,0,0,1055,1056,5,166,0,0,1056,1057,3,382,191, + 0,1057,1058,5,193,0,0,1058,1059,5,87,0,0,1059,1060,3,382,191,0,1060, + 91,1,0,0,0,1061,1062,5,86,0,0,1062,1063,3,372,186,0,1063,1064,5, + 136,0,0,1064,1066,3,374,187,0,1065,1067,3,376,188,0,1066,1065,1, + 0,0,0,1066,1067,1,0,0,0,1067,1068,1,0,0,0,1068,1069,5,193,0,0,1069, + 1070,3,380,190,0,1070,93,1,0,0,0,1071,1074,3,96,48,0,1072,1074,3, + 98,49,0,1073,1071,1,0,0,0,1073,1072,1,0,0,0,1074,95,1,0,0,0,1075, + 1076,5,161,0,0,1076,1077,5,166,0,0,1077,1078,3,382,191,0,1078,1079, + 5,82,0,0,1079,1080,5,87,0,0,1080,1081,3,382,191,0,1081,97,1,0,0, + 0,1082,1086,5,161,0,0,1083,1084,5,86,0,0,1084,1085,5,137,0,0,1085, + 1087,5,78,0,0,1086,1083,1,0,0,0,1086,1087,1,0,0,0,1087,1088,1,0, + 0,0,1088,1089,3,372,186,0,1089,1090,5,136,0,0,1090,1092,3,374,187, + 0,1091,1093,3,376,188,0,1092,1091,1,0,0,0,1092,1093,1,0,0,0,1093, + 1094,1,0,0,0,1094,1100,5,82,0,0,1095,1101,3,380,190,0,1096,1098, + 5,166,0,0,1097,1096,1,0,0,0,1097,1098,1,0,0,0,1098,1099,1,0,0,0, + 1099,1101,3,382,191,0,1100,1095,1,0,0,0,1100,1097,1,0,0,0,1101,99, + 1,0,0,0,1102,1104,3,214,107,0,1103,1102,1,0,0,0,1103,1104,1,0,0, + 0,1104,1105,1,0,0,0,1105,1106,5,99,0,0,1106,1108,7,6,0,0,1107,1109, + 5,188,0,0,1108,1107,1,0,0,0,1108,1109,1,0,0,0,1109,1110,1,0,0,0, + 1110,1112,3,186,93,0,1111,1113,3,312,156,0,1112,1111,1,0,0,0,1112, + 1113,1,0,0,0,1113,1126,1,0,0,0,1114,1115,5,145,0,0,1115,1116,5,265, + 0,0,1116,1121,3,326,163,0,1117,1118,5,263,0,0,1118,1120,3,326,163, + 0,1119,1117,1,0,0,0,1120,1123,1,0,0,0,1121,1119,1,0,0,0,1121,1122, + 1,0,0,0,1122,1124,1,0,0,0,1123,1121,1,0,0,0,1124,1125,5,266,0,0, + 1125,1127,1,0,0,0,1126,1114,1,0,0,0,1126,1127,1,0,0,0,1127,1128, + 1,0,0,0,1128,1129,3,212,106,0,1129,101,1,0,0,0,1130,1133,3,104,52, + 0,1131,1133,3,106,53,0,1132,1130,1,0,0,0,1132,1131,1,0,0,0,1133, + 103,1,0,0,0,1134,1136,5,50,0,0,1135,1137,5,82,0,0,1136,1135,1,0, + 0,0,1136,1137,1,0,0,0,1137,1138,1,0,0,0,1138,1140,3,186,93,0,1139, + 1141,3,278,139,0,1140,1139,1,0,0,0,1140,1141,1,0,0,0,1141,105,1, + 0,0,0,1142,1143,5,50,0,0,1143,1148,3,186,93,0,1144,1146,5,9,0,0, + 1145,1144,1,0,0,0,1145,1146,1,0,0,0,1146,1147,1,0,0,0,1147,1149, + 3,382,191,0,1148,1145,1,0,0,0,1148,1149,1,0,0,0,1149,1150,1,0,0, + 0,1150,1159,5,82,0,0,1151,1156,3,302,151,0,1152,1153,5,263,0,0,1153, + 1155,3,302,151,0,1154,1152,1,0,0,0,1155,1158,1,0,0,0,1156,1154,1, + 0,0,0,1156,1157,1,0,0,0,1157,1160,1,0,0,0,1158,1156,1,0,0,0,1159, + 1151,1,0,0,0,1159,1160,1,0,0,0,1160,1162,1,0,0,0,1161,1163,3,278, + 139,0,1162,1161,1,0,0,0,1162,1163,1,0,0,0,1163,107,1,0,0,0,1164, + 1165,5,54,0,0,1165,1166,3,186,93,0,1166,1167,5,176,0,0,1167,1177, + 3,204,102,0,1168,1169,5,82,0,0,1169,1174,3,302,151,0,1170,1171,5, + 263,0,0,1171,1173,3,302,151,0,1172,1170,1,0,0,0,1173,1176,1,0,0, + 0,1174,1172,1,0,0,0,1174,1175,1,0,0,0,1175,1178,1,0,0,0,1176,1174, + 1,0,0,0,1177,1168,1,0,0,0,1177,1178,1,0,0,0,1178,1180,1,0,0,0,1179, + 1181,3,278,139,0,1180,1179,1,0,0,0,1180,1181,1,0,0,0,1181,109,1, + 0,0,0,1182,1183,5,207,0,0,1183,1185,5,103,0,0,1184,1186,5,188,0, + 0,1185,1184,1,0,0,0,1185,1186,1,0,0,0,1186,1187,1,0,0,0,1187,1189, + 3,186,93,0,1188,1190,3,312,156,0,1189,1188,1,0,0,0,1189,1190,1,0, + 0,0,1190,1191,1,0,0,0,1191,1192,3,212,106,0,1192,111,1,0,0,0,1193, + 1206,3,132,66,0,1194,1206,3,134,67,0,1195,1206,3,136,68,0,1196,1206, + 3,130,65,0,1197,1206,3,128,64,0,1198,1206,3,126,63,0,1199,1206,3, + 124,62,0,1200,1206,3,122,61,0,1201,1206,3,120,60,0,1202,1206,3,118, + 59,0,1203,1206,3,116,58,0,1204,1206,3,114,57,0,1205,1193,1,0,0,0, + 1205,1194,1,0,0,0,1205,1195,1,0,0,0,1205,1196,1,0,0,0,1205,1197, + 1,0,0,0,1205,1198,1,0,0,0,1205,1199,1,0,0,0,1205,1200,1,0,0,0,1205, + 1201,1,0,0,0,1205,1202,1,0,0,0,1205,1203,1,0,0,0,1205,1204,1,0,0, + 0,1206,113,1,0,0,0,1207,1208,5,179,0,0,1208,1220,7,7,0,0,1209,1211, + 5,115,0,0,1210,1209,1,0,0,0,1210,1211,1,0,0,0,1211,1212,1,0,0,0, + 1212,1217,3,338,169,0,1213,1214,5,271,0,0,1214,1216,3,338,169,0, + 1215,1213,1,0,0,0,1216,1219,1,0,0,0,1217,1215,1,0,0,0,1217,1218, + 1,0,0,0,1218,1221,1,0,0,0,1219,1217,1,0,0,0,1220,1210,1,0,0,0,1220, + 1221,1,0,0,0,1221,115,1,0,0,0,1222,1223,5,179,0,0,1223,1226,5,189, + 0,0,1224,1225,5,94,0,0,1225,1227,3,186,93,0,1226,1224,1,0,0,0,1226, + 1227,1,0,0,0,1227,1239,1,0,0,0,1228,1230,5,115,0,0,1229,1228,1,0, + 0,0,1229,1230,1,0,0,0,1230,1231,1,0,0,0,1231,1236,3,338,169,0,1232, + 1233,5,271,0,0,1233,1235,3,338,169,0,1234,1232,1,0,0,0,1235,1238, + 1,0,0,0,1236,1234,1,0,0,0,1236,1237,1,0,0,0,1237,1240,1,0,0,0,1238, + 1236,1,0,0,0,1239,1229,1,0,0,0,1239,1240,1,0,0,0,1240,117,1,0,0, + 0,1241,1243,5,179,0,0,1242,1244,7,8,0,0,1243,1242,1,0,0,0,1243,1244, + 1,0,0,0,1244,1245,1,0,0,0,1245,1248,5,85,0,0,1246,1247,5,94,0,0, + 1247,1249,3,184,92,0,1248,1246,1,0,0,0,1248,1249,1,0,0,0,1249,1261, + 1,0,0,0,1250,1252,5,115,0,0,1251,1250,1,0,0,0,1251,1252,1,0,0,0, + 1252,1253,1,0,0,0,1253,1258,3,338,169,0,1254,1255,5,271,0,0,1255, + 1257,3,338,169,0,1256,1254,1,0,0,0,1257,1260,1,0,0,0,1258,1256,1, + 0,0,0,1258,1259,1,0,0,0,1259,1262,1,0,0,0,1260,1258,1,0,0,0,1261, + 1251,1,0,0,0,1261,1262,1,0,0,0,1262,119,1,0,0,0,1263,1264,5,179, + 0,0,1264,1265,5,37,0,0,1265,1266,5,188,0,0,1266,1267,3,186,93,0, + 1267,121,1,0,0,0,1268,1269,5,179,0,0,1269,1270,5,37,0,0,1270,1271, + 5,212,0,0,1271,1272,3,188,94,0,1272,123,1,0,0,0,1273,1274,5,179, + 0,0,1274,1275,5,188,0,0,1275,1276,5,182,0,0,1276,1277,3,186,93,0, + 1277,125,1,0,0,0,1278,1279,5,179,0,0,1279,1280,5,32,0,0,1280,1281, + 5,182,0,0,1281,1282,3,186,93,0,1282,127,1,0,0,0,1283,1285,5,179, + 0,0,1284,1286,5,154,0,0,1285,1284,1,0,0,0,1285,1286,1,0,0,0,1286, + 1287,1,0,0,0,1287,1288,5,146,0,0,1288,1289,3,186,93,0,1289,129,1, + 0,0,0,1290,1291,5,179,0,0,1291,1292,5,73,0,0,1292,1293,5,94,0,0, + 1293,1303,3,186,93,0,1294,1295,5,145,0,0,1295,1296,5,265,0,0,1296, + 1299,3,326,163,0,1297,1298,5,263,0,0,1298,1300,3,326,163,0,1299, + 1297,1,0,0,0,1299,1300,1,0,0,0,1300,1301,1,0,0,0,1301,1302,5,266, + 0,0,1302,1304,1,0,0,0,1303,1294,1,0,0,0,1303,1304,1,0,0,0,1304,131, + 1,0,0,0,1305,1307,5,179,0,0,1306,1308,5,39,0,0,1307,1306,1,0,0,0, + 1307,1308,1,0,0,0,1308,1309,1,0,0,0,1309,1310,5,167,0,0,1310,133, + 1,0,0,0,1311,1312,5,179,0,0,1312,1313,5,166,0,0,1313,1314,5,86,0, + 0,1314,1315,5,87,0,0,1315,1316,3,382,191,0,1316,135,1,0,0,0,1317, + 1332,3,138,69,0,1318,1332,3,140,70,0,1319,1332,3,142,71,0,1320,1321, + 5,179,0,0,1321,1322,5,86,0,0,1322,1323,7,9,0,0,1323,1329,3,382,191, + 0,1324,1325,5,136,0,0,1325,1327,7,10,0,0,1326,1328,3,376,188,0,1327, + 1326,1,0,0,0,1327,1328,1,0,0,0,1328,1330,1,0,0,0,1329,1324,1,0,0, + 0,1329,1330,1,0,0,0,1330,1332,1,0,0,0,1331,1317,1,0,0,0,1331,1318, + 1,0,0,0,1331,1319,1,0,0,0,1331,1320,1,0,0,0,1332,137,1,0,0,0,1333, + 1334,5,179,0,0,1334,1335,5,86,0,0,1335,1336,7,9,0,0,1336,1342,3, + 382,191,0,1337,1338,5,136,0,0,1338,1340,5,46,0,0,1339,1341,3,184, + 92,0,1340,1339,1,0,0,0,1340,1341,1,0,0,0,1341,1343,1,0,0,0,1342, + 1337,1,0,0,0,1342,1343,1,0,0,0,1343,139,1,0,0,0,1344,1345,5,179, + 0,0,1345,1346,5,86,0,0,1346,1347,7,9,0,0,1347,1353,3,382,191,0,1348, + 1349,5,136,0,0,1349,1351,5,188,0,0,1350,1352,3,186,93,0,1351,1350, + 1,0,0,0,1351,1352,1,0,0,0,1352,1354,1,0,0,0,1353,1348,1,0,0,0,1353, + 1354,1,0,0,0,1354,141,1,0,0,0,1355,1356,5,179,0,0,1356,1357,5,86, + 0,0,1357,1358,7,9,0,0,1358,1364,3,382,191,0,1359,1360,5,136,0,0, + 1360,1362,5,32,0,0,1361,1363,3,194,97,0,1362,1361,1,0,0,0,1362,1363, + 1,0,0,0,1363,1365,1,0,0,0,1364,1359,1,0,0,0,1364,1365,1,0,0,0,1365, + 143,1,0,0,0,1366,1370,3,146,73,0,1367,1370,3,148,74,0,1368,1370, + 3,150,75,0,1369,1366,1,0,0,0,1369,1367,1,0,0,0,1369,1368,1,0,0,0, + 1370,145,1,0,0,0,1371,1372,5,34,0,0,1372,1373,5,136,0,0,1373,1374, + 5,46,0,0,1374,1375,3,184,92,0,1375,1378,5,108,0,0,1376,1379,3,338, + 169,0,1377,1379,5,133,0,0,1378,1376,1,0,0,0,1378,1377,1,0,0,0,1379, + 147,1,0,0,0,1380,1381,5,34,0,0,1381,1382,5,136,0,0,1382,1383,5,188, + 0,0,1383,1384,3,186,93,0,1384,1387,5,108,0,0,1385,1388,3,338,169, + 0,1386,1388,5,133,0,0,1387,1385,1,0,0,0,1387,1386,1,0,0,0,1388,149, + 1,0,0,0,1389,1390,5,34,0,0,1390,1391,5,136,0,0,1391,1392,5,32,0, + 0,1392,1393,3,194,97,0,1393,1396,5,108,0,0,1394,1397,3,338,169,0, + 1395,1397,5,133,0,0,1396,1394,1,0,0,0,1396,1395,1,0,0,0,1397,151, + 1,0,0,0,1398,1399,5,67,0,0,1399,1400,3,4,2,0,1400,153,1,0,0,0,1401, + 1407,5,176,0,0,1402,1408,5,2,0,0,1403,1404,3,382,191,0,1404,1405, + 5,249,0,0,1405,1406,3,326,163,0,1406,1408,1,0,0,0,1407,1402,1,0, + 0,0,1407,1403,1,0,0,0,1407,1408,1,0,0,0,1408,155,1,0,0,0,1409,1410, + 5,264,0,0,1410,1411,5,180,0,0,1411,1421,5,265,0,0,1412,1414,3,338, + 169,0,1413,1412,1,0,0,0,1413,1414,1,0,0,0,1414,1422,1,0,0,0,1415, + 1418,3,338,169,0,1416,1417,5,263,0,0,1417,1419,3,326,163,0,1418, + 1416,1,0,0,0,1418,1419,1,0,0,0,1419,1422,1,0,0,0,1420,1422,3,326, + 163,0,1421,1413,1,0,0,0,1421,1415,1,0,0,0,1421,1420,1,0,0,0,1422, + 1423,1,0,0,0,1423,1424,5,266,0,0,1424,157,1,0,0,0,1425,1426,5,107, + 0,0,1426,1427,5,121,0,0,1427,1428,3,186,93,0,1428,159,1,0,0,0,1429, + 1430,5,118,0,0,1430,1431,5,45,0,0,1431,1432,5,98,0,0,1432,1434,5, + 274,0,0,1433,1435,5,144,0,0,1434,1433,1,0,0,0,1434,1435,1,0,0,0, + 1435,1436,1,0,0,0,1436,1437,5,103,0,0,1437,1438,5,188,0,0,1438,1448, + 3,186,93,0,1439,1440,5,145,0,0,1440,1441,5,265,0,0,1441,1444,3,326, + 163,0,1442,1443,5,263,0,0,1443,1445,3,326,163,0,1444,1442,1,0,0, + 0,1444,1445,1,0,0,0,1445,1446,1,0,0,0,1446,1447,5,266,0,0,1447,1449, + 1,0,0,0,1448,1439,1,0,0,0,1448,1449,1,0,0,0,1449,161,1,0,0,0,1450, + 1454,3,164,82,0,1451,1454,3,166,83,0,1452,1454,3,168,84,0,1453,1450, + 1,0,0,0,1453,1451,1,0,0,0,1453,1452,1,0,0,0,1454,163,1,0,0,0,1455, + 1456,5,162,0,0,1456,1469,3,186,93,0,1457,1458,5,145,0,0,1458,1459, + 5,265,0,0,1459,1464,3,326,163,0,1460,1461,5,263,0,0,1461,1463,3, + 326,163,0,1462,1460,1,0,0,0,1463,1466,1,0,0,0,1464,1465,1,0,0,0, + 1464,1462,1,0,0,0,1465,1467,1,0,0,0,1466,1464,1,0,0,0,1467,1468, + 5,266,0,0,1468,1470,1,0,0,0,1469,1457,1,0,0,0,1469,1470,1,0,0,0, + 1470,165,1,0,0,0,1471,1472,5,162,0,0,1472,1473,5,13,0,0,1473,167, + 1,0,0,0,1474,1475,5,162,0,0,1475,1476,5,85,0,0,1476,1477,3,190,95, + 0,1477,169,1,0,0,0,1478,1479,5,93,0,0,1479,1480,5,66,0,0,1480,171, + 1,0,0,0,1481,1482,5,93,0,0,1482,1483,5,132,0,0,1483,1484,5,66,0, + 0,1484,173,1,0,0,0,1485,1486,3,376,188,0,1486,175,1,0,0,0,1487,1488, + 3,376,188,0,1488,177,1,0,0,0,1489,1490,3,376,188,0,1490,179,1,0, + 0,0,1491,1492,3,376,188,0,1492,181,1,0,0,0,1493,1494,3,376,188,0, + 1494,183,1,0,0,0,1495,1496,3,376,188,0,1496,185,1,0,0,0,1497,1502, + 3,382,191,0,1498,1499,5,261,0,0,1499,1501,3,382,191,0,1500,1498, + 1,0,0,0,1501,1504,1,0,0,0,1502,1500,1,0,0,0,1502,1503,1,0,0,0,1503, + 187,1,0,0,0,1504,1502,1,0,0,0,1505,1510,3,382,191,0,1506,1507,5, + 261,0,0,1507,1509,3,382,191,0,1508,1506,1,0,0,0,1509,1512,1,0,0, + 0,1510,1508,1,0,0,0,1510,1511,1,0,0,0,1511,189,1,0,0,0,1512,1510, + 1,0,0,0,1513,1516,3,386,193,0,1514,1516,3,376,188,0,1515,1513,1, + 0,0,0,1515,1514,1,0,0,0,1516,191,1,0,0,0,1517,1518,1,0,0,0,1518, + 193,1,0,0,0,1519,1520,4,97,0,0,1520,1523,3,192,96,0,1521,1523,3, + 378,189,0,1522,1519,1,0,0,0,1522,1521,1,0,0,0,1523,195,1,0,0,0,1524, + 1525,3,376,188,0,1525,197,1,0,0,0,1526,1527,4,99,1,0,1527,1530,3, + 192,96,0,1528,1530,3,378,189,0,1529,1526,1,0,0,0,1529,1528,1,0,0, + 0,1530,199,1,0,0,0,1531,1534,3,186,93,0,1532,1534,3,188,94,0,1533, + 1531,1,0,0,0,1533,1532,1,0,0,0,1534,201,1,0,0,0,1535,1536,5,21,0, + 0,1536,1537,5,26,0,0,1537,1539,3,312,156,0,1538,1535,1,0,0,0,1538, + 1539,1,0,0,0,1539,1541,1,0,0,0,1540,1542,3,228,114,0,1541,1540,1, + 0,0,0,1541,1542,1,0,0,0,1542,1546,1,0,0,0,1543,1544,5,168,0,0,1544, + 1545,5,79,0,0,1545,1547,3,262,131,0,1546,1543,1,0,0,0,1546,1547, + 1,0,0,0,1547,1551,1,0,0,0,1548,1549,5,216,0,0,1549,1550,5,175,0, + 0,1550,1552,3,256,128,0,1551,1548,1,0,0,0,1551,1552,1,0,0,0,1552, + 1556,1,0,0,0,1553,1554,5,23,0,0,1554,1555,5,9,0,0,1555,1557,3,238, + 119,0,1556,1553,1,0,0,0,1556,1557,1,0,0,0,1557,1560,1,0,0,0,1558, + 1559,5,24,0,0,1559,1561,3,338,169,0,1560,1558,1,0,0,0,1560,1561, + 1,0,0,0,1561,1572,1,0,0,0,1562,1563,5,30,0,0,1563,1564,5,94,0,0, + 1564,1569,3,376,188,0,1565,1566,5,216,0,0,1566,1567,5,151,0,0,1567, + 1568,5,249,0,0,1568,1570,5,277,0,0,1569,1565,1,0,0,0,1569,1570,1, + 0,0,0,1570,1573,1,0,0,0,1571,1573,5,197,0,0,1572,1562,1,0,0,0,1572, + 1571,1,0,0,0,1572,1573,1,0,0,0,1573,1576,1,0,0,0,1574,1575,5,25, + 0,0,1575,1577,3,256,128,0,1576,1574,1,0,0,0,1576,1577,1,0,0,0,1577, + 203,1,0,0,0,1578,1583,3,206,103,0,1579,1580,5,263,0,0,1580,1582, + 3,206,103,0,1581,1579,1,0,0,0,1582,1585,1,0,0,0,1583,1581,1,0,0, + 0,1583,1584,1,0,0,0,1584,205,1,0,0,0,1585,1583,1,0,0,0,1586,1587, + 3,376,188,0,1587,1588,5,249,0,0,1588,1589,3,326,163,0,1589,207,1, + 0,0,0,1590,1592,5,265,0,0,1591,1593,3,210,105,0,1592,1591,1,0,0, + 0,1592,1593,1,0,0,0,1593,1600,1,0,0,0,1594,1596,5,263,0,0,1595,1597, + 3,210,105,0,1596,1595,1,0,0,0,1596,1597,1,0,0,0,1597,1599,1,0,0, + 0,1598,1594,1,0,0,0,1599,1602,1,0,0,0,1600,1598,1,0,0,0,1600,1601, + 1,0,0,0,1601,1603,1,0,0,0,1602,1600,1,0,0,0,1603,1604,5,266,0,0, + 1604,209,1,0,0,0,1605,1607,3,182,91,0,1606,1608,3,228,114,0,1607, + 1606,1,0,0,0,1607,1608,1,0,0,0,1608,211,1,0,0,0,1609,1611,3,214, + 107,0,1610,1609,1,0,0,0,1610,1611,1,0,0,0,1611,1612,1,0,0,0,1612, + 1613,3,266,133,0,1613,213,1,0,0,0,1614,1615,5,216,0,0,1615,1620, + 3,288,144,0,1616,1617,5,263,0,0,1617,1619,3,288,144,0,1618,1616, + 1,0,0,0,1619,1622,1,0,0,0,1620,1618,1,0,0,0,1620,1621,1,0,0,0,1621, + 215,1,0,0,0,1622,1620,1,0,0,0,1623,1624,5,150,0,0,1624,1625,5,110, + 0,0,1625,1627,3,312,156,0,1626,1628,5,53,0,0,1627,1626,1,0,0,0,1627, + 1628,1,0,0,0,1628,1632,1,0,0,0,1629,1633,5,225,0,0,1630,1631,5,263, + 0,0,1631,1633,5,225,0,0,1632,1629,1,0,0,0,1632,1630,1,0,0,0,1632, + 1633,1,0,0,0,1633,1637,1,0,0,0,1634,1638,5,226,0,0,1635,1636,5,263, + 0,0,1636,1638,5,226,0,0,1637,1634,1,0,0,0,1637,1635,1,0,0,0,1637, + 1638,1,0,0,0,1638,1651,1,0,0,0,1639,1640,5,263,0,0,1640,1643,3,218, + 109,0,1641,1643,3,218,109,0,1642,1639,1,0,0,0,1642,1641,1,0,0,0, + 1643,1648,1,0,0,0,1644,1645,5,263,0,0,1645,1647,3,218,109,0,1646, + 1644,1,0,0,0,1647,1650,1,0,0,0,1648,1649,1,0,0,0,1648,1646,1,0,0, + 0,1649,1652,1,0,0,0,1650,1648,1,0,0,0,1651,1642,1,0,0,0,1651,1652, + 1,0,0,0,1652,217,1,0,0,0,1653,1654,5,81,0,0,1654,1655,5,110,0,0, + 1655,1656,3,312,156,0,1656,1657,5,224,0,0,1657,1658,3,186,93,0,1658, + 1660,3,312,156,0,1659,1661,5,53,0,0,1660,1659,1,0,0,0,1660,1661, + 1,0,0,0,1661,1663,1,0,0,0,1662,1664,5,225,0,0,1663,1662,1,0,0,0, + 1663,1664,1,0,0,0,1664,1666,1,0,0,0,1665,1667,5,226,0,0,1666,1665, + 1,0,0,0,1666,1667,1,0,0,0,1667,219,1,0,0,0,1668,1669,3,194,97,0, + 1669,1672,3,348,174,0,1670,1671,5,34,0,0,1671,1673,3,338,169,0,1672, + 1670,1,0,0,0,1672,1673,1,0,0,0,1673,221,1,0,0,0,1674,1675,3,182, + 91,0,1675,1677,3,348,174,0,1676,1678,3,228,114,0,1677,1676,1,0,0, + 0,1677,1678,1,0,0,0,1678,223,1,0,0,0,1679,1680,3,226,113,0,1680, + 225,1,0,0,0,1681,1682,3,182,91,0,1682,1690,3,348,174,0,1683,1687, + 3,234,117,0,1684,1686,3,234,117,0,1685,1684,1,0,0,0,1686,1689,1, + 0,0,0,1687,1688,1,0,0,0,1687,1685,1,0,0,0,1688,1691,1,0,0,0,1689, + 1687,1,0,0,0,1690,1683,1,0,0,0,1690,1691,1,0,0,0,1691,1693,1,0,0, + 0,1692,1694,3,228,114,0,1693,1692,1,0,0,0,1693,1694,1,0,0,0,1694, + 1697,1,0,0,0,1695,1696,5,150,0,0,1696,1698,5,110,0,0,1697,1695,1, + 0,0,0,1697,1698,1,0,0,0,1698,227,1,0,0,0,1699,1700,5,34,0,0,1700, + 1701,3,338,169,0,1701,229,1,0,0,0,1702,1710,3,220,110,0,1703,1707, + 3,234,117,0,1704,1706,3,234,117,0,1705,1704,1,0,0,0,1706,1709,1, + 0,0,0,1707,1708,1,0,0,0,1707,1705,1,0,0,0,1708,1711,1,0,0,0,1709, + 1707,1,0,0,0,1710,1703,1,0,0,0,1710,1711,1,0,0,0,1711,231,1,0,0, + 0,1712,1713,3,182,91,0,1713,1716,3,348,174,0,1714,1715,5,34,0,0, + 1715,1717,3,338,169,0,1716,1714,1,0,0,0,1716,1717,1,0,0,0,1717,1725, + 1,0,0,0,1718,1722,3,234,117,0,1719,1721,3,234,117,0,1720,1719,1, + 0,0,0,1721,1724,1,0,0,0,1722,1723,1,0,0,0,1722,1720,1,0,0,0,1723, + 1726,1,0,0,0,1724,1722,1,0,0,0,1725,1718,1,0,0,0,1725,1726,1,0,0, + 0,1726,233,1,0,0,0,1727,1729,5,132,0,0,1728,1727,1,0,0,0,1728,1729, + 1,0,0,0,1729,1730,1,0,0,0,1730,1733,5,133,0,0,1731,1733,3,236,118, + 0,1732,1728,1,0,0,0,1732,1731,1,0,0,0,1733,235,1,0,0,0,1734,1735, + 5,60,0,0,1735,1743,3,326,163,0,1736,1737,5,35,0,0,1737,1743,3,326, + 163,0,1738,1739,5,51,0,0,1739,1743,3,326,163,0,1740,1741,5,16,0, + 0,1741,1743,3,384,192,0,1742,1734,1,0,0,0,1742,1736,1,0,0,0,1742, + 1738,1,0,0,0,1742,1740,1,0,0,0,1743,237,1,0,0,0,1744,1745,7,11,0, + 0,1745,239,1,0,0,0,1746,1751,3,242,121,0,1747,1748,5,263,0,0,1748, + 1750,3,242,121,0,1749,1747,1,0,0,0,1750,1753,1,0,0,0,1751,1752,1, + 0,0,0,1751,1749,1,0,0,0,1752,1756,1,0,0,0,1753,1751,1,0,0,0,1754, + 1755,5,263,0,0,1755,1757,3,244,122,0,1756,1754,1,0,0,0,1756,1757, + 1,0,0,0,1757,1760,1,0,0,0,1758,1760,3,244,122,0,1759,1746,1,0,0, + 0,1759,1758,1,0,0,0,1760,241,1,0,0,0,1761,1763,5,89,0,0,1762,1764, + 3,312,156,0,1763,1762,1,0,0,0,1763,1764,1,0,0,0,1764,1765,1,0,0, + 0,1765,1766,5,146,0,0,1766,1767,3,384,192,0,1767,243,1,0,0,0,1768, + 1770,5,154,0,0,1769,1771,3,312,156,0,1770,1769,1,0,0,0,1770,1771, + 1,0,0,0,1771,1772,1,0,0,0,1772,1773,5,265,0,0,1773,1774,5,145,0, + 0,1774,1780,3,246,123,0,1775,1776,5,263,0,0,1776,1777,5,145,0,0, + 1777,1779,3,246,123,0,1778,1775,1,0,0,0,1779,1782,1,0,0,0,1780,1781, + 1,0,0,0,1780,1778,1,0,0,0,1781,1783,1,0,0,0,1782,1780,1,0,0,0,1783, + 1784,5,266,0,0,1784,245,1,0,0,0,1785,1786,5,210,0,0,1786,1787,3, + 252,126,0,1787,1788,3,326,163,0,1788,1801,1,0,0,0,1789,1790,3,326, + 163,0,1790,1791,3,250,125,0,1791,1793,1,0,0,0,1792,1789,1,0,0,0, + 1792,1793,1,0,0,0,1793,1794,1,0,0,0,1794,1798,5,211,0,0,1795,1796, + 3,250,125,0,1796,1797,3,326,163,0,1797,1799,1,0,0,0,1798,1795,1, + 0,0,0,1798,1799,1,0,0,0,1799,1801,1,0,0,0,1800,1785,1,0,0,0,1800, + 1792,1,0,0,0,1801,247,1,0,0,0,1802,1803,5,30,0,0,1803,1804,5,94, + 0,0,1804,1809,3,382,191,0,1805,1806,5,216,0,0,1806,1807,5,151,0, + 0,1807,1808,5,249,0,0,1808,1810,3,384,192,0,1809,1805,1,0,0,0,1809, + 1810,1,0,0,0,1810,1813,1,0,0,0,1811,1813,5,197,0,0,1812,1802,1,0, + 0,0,1812,1811,1,0,0,0,1813,249,1,0,0,0,1814,1820,1,0,0,0,1815,1820, + 5,251,0,0,1816,1820,5,252,0,0,1817,1820,5,253,0,0,1818,1820,5,254, + 0,0,1819,1814,1,0,0,0,1819,1815,1,0,0,0,1819,1816,1,0,0,0,1819,1817, + 1,0,0,0,1819,1818,1,0,0,0,1820,251,1,0,0,0,1821,1830,5,249,0,0,1822, + 1830,5,250,0,0,1823,1830,5,115,0,0,1824,1830,5,164,0,0,1825,1830, + 5,163,0,0,1826,1830,5,15,0,0,1827,1830,5,94,0,0,1828,1830,3,250, + 125,0,1829,1821,1,0,0,0,1829,1822,1,0,0,0,1829,1823,1,0,0,0,1829, + 1824,1,0,0,0,1829,1825,1,0,0,0,1829,1826,1,0,0,0,1829,1827,1,0,0, + 0,1829,1828,1,0,0,0,1830,253,1,0,0,0,1831,1832,5,115,0,0,1832,1835, + 3,376,188,0,1833,1834,7,12,0,0,1834,1836,5,153,0,0,1835,1833,1,0, + 0,0,1835,1836,1,0,0,0,1836,255,1,0,0,0,1837,1838,5,265,0,0,1838, + 1843,3,264,132,0,1839,1840,5,263,0,0,1840,1842,3,264,132,0,1841, + 1839,1,0,0,0,1842,1845,1,0,0,0,1843,1841,1,0,0,0,1843,1844,1,0,0, + 0,1844,1846,1,0,0,0,1845,1843,1,0,0,0,1846,1847,5,266,0,0,1847,257, + 1,0,0,0,1848,1849,5,265,0,0,1849,1854,3,220,110,0,1850,1851,5,263, + 0,0,1851,1853,3,220,110,0,1852,1850,1,0,0,0,1853,1856,1,0,0,0,1854, + 1855,1,0,0,0,1854,1852,1,0,0,0,1855,1857,1,0,0,0,1856,1854,1,0,0, + 0,1857,1858,5,266,0,0,1858,259,1,0,0,0,1859,1864,3,326,163,0,1860, + 1861,5,263,0,0,1861,1863,3,326,163,0,1862,1860,1,0,0,0,1863,1866, + 1,0,0,0,1864,1862,1,0,0,0,1864,1865,1,0,0,0,1865,261,1,0,0,0,1866, + 1864,1,0,0,0,1867,1877,5,52,0,0,1868,1869,5,71,0,0,1869,1870,5,191, + 0,0,1870,1871,5,26,0,0,1871,1875,3,338,169,0,1872,1873,5,63,0,0, + 1873,1874,5,26,0,0,1874,1876,3,338,169,0,1875,1872,1,0,0,0,1875, + 1876,1,0,0,0,1876,1878,1,0,0,0,1877,1868,1,0,0,0,1877,1878,1,0,0, + 0,1878,1883,1,0,0,0,1879,1880,5,117,0,0,1880,1881,5,191,0,0,1881, + 1882,5,26,0,0,1882,1884,3,338,169,0,1883,1879,1,0,0,0,1883,1884, + 1,0,0,0,1884,263,1,0,0,0,1885,1888,3,382,191,0,1886,1887,5,249,0, + 0,1887,1889,3,326,163,0,1888,1886,1,0,0,0,1888,1889,1,0,0,0,1889, + 265,1,0,0,0,1890,1901,3,268,134,0,1891,1892,5,139,0,0,1892,1893, + 5,26,0,0,1893,1898,3,272,136,0,1894,1895,5,263,0,0,1895,1897,3,272, + 136,0,1896,1894,1,0,0,0,1897,1900,1,0,0,0,1898,1896,1,0,0,0,1898, + 1899,1,0,0,0,1899,1902,1,0,0,0,1900,1898,1,0,0,0,1901,1891,1,0,0, + 0,1901,1902,1,0,0,0,1902,1909,1,0,0,0,1903,1904,5,116,0,0,1904,1907, + 3,326,163,0,1905,1906,5,135,0,0,1906,1908,5,277,0,0,1907,1905,1, + 0,0,0,1907,1908,1,0,0,0,1908,1910,1,0,0,0,1909,1903,1,0,0,0,1909, + 1910,1,0,0,0,1910,267,1,0,0,0,1911,1912,6,134,-1,0,1912,1913,3,270, + 135,0,1913,1928,1,0,0,0,1914,1915,10,2,0,0,1915,1917,5,100,0,0,1916, + 1918,3,290,145,0,1917,1916,1,0,0,0,1917,1918,1,0,0,0,1918,1919,1, + 0,0,0,1919,1927,3,268,134,3,1920,1921,10,1,0,0,1921,1923,7,13,0, + 0,1922,1924,3,290,145,0,1923,1922,1,0,0,0,1923,1924,1,0,0,0,1924, + 1925,1,0,0,0,1925,1927,3,268,134,2,1926,1914,1,0,0,0,1926,1920,1, + 0,0,0,1927,1930,1,0,0,0,1928,1926,1,0,0,0,1928,1929,1,0,0,0,1929, + 269,1,0,0,0,1930,1928,1,0,0,0,1931,1948,3,274,137,0,1932,1933,5, + 188,0,0,1933,1948,3,186,93,0,1934,1935,5,211,0,0,1935,1940,3,326, + 163,0,1936,1937,5,263,0,0,1937,1939,3,326,163,0,1938,1936,1,0,0, + 0,1939,1942,1,0,0,0,1940,1938,1,0,0,0,1940,1941,1,0,0,0,1941,1948, + 1,0,0,0,1942,1940,1,0,0,0,1943,1944,5,265,0,0,1944,1945,3,266,133, + 0,1945,1946,5,266,0,0,1946,1948,1,0,0,0,1947,1931,1,0,0,0,1947,1932, + 1,0,0,0,1947,1934,1,0,0,0,1947,1943,1,0,0,0,1948,271,1,0,0,0,1949, + 1951,3,324,162,0,1950,1952,7,14,0,0,1951,1950,1,0,0,0,1951,1952, + 1,0,0,0,1952,1955,1,0,0,0,1953,1954,5,134,0,0,1954,1956,7,15,0,0, + 1955,1953,1,0,0,0,1955,1956,1,0,0,0,1956,273,1,0,0,0,1957,1959,5, + 174,0,0,1958,1960,3,290,145,0,1959,1958,1,0,0,0,1959,1960,1,0,0, + 0,1960,1962,1,0,0,0,1961,1963,5,183,0,0,1962,1961,1,0,0,0,1962,1963, + 1,0,0,0,1963,1964,1,0,0,0,1964,1974,3,276,138,0,1965,1966,5,82,0, + 0,1966,1971,3,302,151,0,1967,1968,5,263,0,0,1968,1970,3,302,151, + 0,1969,1967,1,0,0,0,1970,1973,1,0,0,0,1971,1969,1,0,0,0,1971,1972, + 1,0,0,0,1972,1975,1,0,0,0,1973,1971,1,0,0,0,1974,1965,1,0,0,0,1974, + 1975,1,0,0,0,1975,1977,1,0,0,0,1976,1978,3,278,139,0,1977,1976,1, + 0,0,0,1977,1978,1,0,0,0,1978,1982,1,0,0,0,1979,1980,5,87,0,0,1980, + 1981,5,26,0,0,1981,1983,3,282,141,0,1982,1979,1,0,0,0,1982,1983, + 1,0,0,0,1983,1985,1,0,0,0,1984,1986,3,280,140,0,1985,1984,1,0,0, + 0,1985,1986,1,0,0,0,1986,275,1,0,0,0,1987,1992,3,292,146,0,1988, + 1989,5,263,0,0,1989,1991,3,292,146,0,1990,1988,1,0,0,0,1991,1994, + 1,0,0,0,1992,1990,1,0,0,0,1992,1993,1,0,0,0,1993,277,1,0,0,0,1994, + 1992,1,0,0,0,1995,1998,5,215,0,0,1996,1999,3,328,164,0,1997,1999, + 3,198,99,0,1998,1996,1,0,0,0,1998,1997,1,0,0,0,1999,279,1,0,0,0, + 2000,2003,5,90,0,0,2001,2004,3,328,164,0,2002,2004,3,198,99,0,2003, + 2001,1,0,0,0,2003,2002,1,0,0,0,2004,281,1,0,0,0,2005,2007,3,290, + 145,0,2006,2005,1,0,0,0,2006,2007,1,0,0,0,2007,2008,1,0,0,0,2008, + 2013,3,284,142,0,2009,2010,5,263,0,0,2010,2012,3,284,142,0,2011, + 2009,1,0,0,0,2012,2015,1,0,0,0,2013,2011,1,0,0,0,2013,2014,1,0,0, + 0,2014,283,1,0,0,0,2015,2013,1,0,0,0,2016,2017,3,286,143,0,2017, + 285,1,0,0,0,2018,2027,5,265,0,0,2019,2024,3,324,162,0,2020,2021, + 5,263,0,0,2021,2023,3,324,162,0,2022,2020,1,0,0,0,2023,2026,1,0, + 0,0,2024,2022,1,0,0,0,2024,2025,1,0,0,0,2025,2028,1,0,0,0,2026,2024, + 1,0,0,0,2027,2019,1,0,0,0,2027,2028,1,0,0,0,2028,2029,1,0,0,0,2029, + 2032,5,266,0,0,2030,2032,3,324,162,0,2031,2018,1,0,0,0,2031,2030, + 1,0,0,0,2032,287,1,0,0,0,2033,2035,3,382,191,0,2034,2036,3,312,156, + 0,2035,2034,1,0,0,0,2035,2036,1,0,0,0,2036,2037,1,0,0,0,2037,2038, + 5,9,0,0,2038,2039,3,318,159,0,2039,289,1,0,0,0,2040,2041,7,16,0, + 0,2041,291,1,0,0,0,2042,2044,3,296,148,0,2043,2045,3,294,147,0,2044, + 2043,1,0,0,0,2044,2045,1,0,0,0,2045,2054,1,0,0,0,2046,2048,3,298, + 149,0,2047,2049,3,294,147,0,2048,2047,1,0,0,0,2048,2049,1,0,0,0, + 2049,2054,1,0,0,0,2050,2054,3,300,150,0,2051,2052,4,146,4,0,2052, + 2054,3,192,96,0,2053,2042,1,0,0,0,2053,2046,1,0,0,0,2053,2050,1, + 0,0,0,2053,2051,1,0,0,0,2054,293,1,0,0,0,2055,2057,5,9,0,0,2056, + 2055,1,0,0,0,2056,2057,1,0,0,0,2057,2058,1,0,0,0,2058,2059,3,382, + 191,0,2059,295,1,0,0,0,2060,2061,3,194,97,0,2061,297,1,0,0,0,2062, + 2063,3,326,163,0,2063,299,1,0,0,0,2064,2065,3,376,188,0,2065,2066, + 5,261,0,0,2066,2068,1,0,0,0,2067,2064,1,0,0,0,2067,2068,1,0,0,0, + 2068,2069,1,0,0,0,2069,2070,5,257,0,0,2070,301,1,0,0,0,2071,2072, + 6,151,-1,0,2072,2073,3,308,154,0,2073,2087,1,0,0,0,2074,2083,10, + 2,0,0,2075,2076,5,38,0,0,2076,2077,5,109,0,0,2077,2084,3,308,154, + 0,2078,2079,3,304,152,0,2079,2080,5,109,0,0,2080,2081,3,302,151, + 0,2081,2082,3,306,153,0,2082,2084,1,0,0,0,2083,2075,1,0,0,0,2083, + 2078,1,0,0,0,2084,2086,1,0,0,0,2085,2074,1,0,0,0,2086,2089,1,0,0, + 0,2087,2085,1,0,0,0,2087,2088,1,0,0,0,2088,303,1,0,0,0,2089,2087, + 1,0,0,0,2090,2092,5,97,0,0,2091,2090,1,0,0,0,2091,2092,1,0,0,0,2092, + 2122,1,0,0,0,2093,2095,5,114,0,0,2094,2096,5,97,0,0,2095,2094,1, + 0,0,0,2095,2096,1,0,0,0,2096,2122,1,0,0,0,2097,2099,5,165,0,0,2098, + 2100,5,97,0,0,2099,2098,1,0,0,0,2099,2100,1,0,0,0,2100,2122,1,0, + 0,0,2101,2103,5,114,0,0,2102,2104,5,141,0,0,2103,2102,1,0,0,0,2103, + 2104,1,0,0,0,2104,2122,1,0,0,0,2105,2107,5,165,0,0,2106,2108,5,141, + 0,0,2107,2106,1,0,0,0,2107,2108,1,0,0,0,2108,2122,1,0,0,0,2109,2111, + 5,83,0,0,2110,2112,5,141,0,0,2111,2110,1,0,0,0,2111,2112,1,0,0,0, + 2112,2122,1,0,0,0,2113,2114,5,114,0,0,2114,2122,5,177,0,0,2115,2116, + 5,165,0,0,2116,2122,5,177,0,0,2117,2118,5,114,0,0,2118,2122,5,7, + 0,0,2119,2120,5,165,0,0,2120,2122,5,7,0,0,2121,2091,1,0,0,0,2121, + 2093,1,0,0,0,2121,2097,1,0,0,0,2121,2101,1,0,0,0,2121,2105,1,0,0, + 0,2121,2109,1,0,0,0,2121,2113,1,0,0,0,2121,2115,1,0,0,0,2121,2117, + 1,0,0,0,2121,2119,1,0,0,0,2122,305,1,0,0,0,2123,2126,5,136,0,0,2124, + 2127,3,328,164,0,2125,2127,3,198,99,0,2126,2124,1,0,0,0,2126,2125, + 1,0,0,0,2127,2141,1,0,0,0,2128,2129,5,205,0,0,2129,2130,5,265,0, + 0,2130,2135,3,382,191,0,2131,2132,5,263,0,0,2132,2134,3,382,191, + 0,2133,2131,1,0,0,0,2134,2137,1,0,0,0,2135,2133,1,0,0,0,2135,2136, + 1,0,0,0,2136,2138,1,0,0,0,2137,2135,1,0,0,0,2138,2139,5,266,0,0, + 2139,2141,1,0,0,0,2140,2123,1,0,0,0,2140,2128,1,0,0,0,2141,307,1, + 0,0,0,2142,2155,3,310,155,0,2143,2144,5,190,0,0,2144,2145,7,17,0, + 0,2145,2146,5,265,0,0,2146,2147,3,326,163,0,2147,2153,5,266,0,0, + 2148,2149,5,157,0,0,2149,2150,5,265,0,0,2150,2151,3,326,163,0,2151, + 2152,5,266,0,0,2152,2154,1,0,0,0,2153,2148,1,0,0,0,2153,2154,1,0, + 0,0,2154,2156,1,0,0,0,2155,2143,1,0,0,0,2155,2156,1,0,0,0,2156,309, + 1,0,0,0,2157,2165,3,314,157,0,2158,2160,5,9,0,0,2159,2158,1,0,0, + 0,2159,2160,1,0,0,0,2160,2161,1,0,0,0,2161,2163,3,382,191,0,2162, + 2164,3,312,156,0,2163,2162,1,0,0,0,2163,2164,1,0,0,0,2164,2166,1, + 0,0,0,2165,2159,1,0,0,0,2165,2166,1,0,0,0,2166,311,1,0,0,0,2167, + 2168,5,265,0,0,2168,2173,3,194,97,0,2169,2170,5,263,0,0,2170,2172, + 3,194,97,0,2171,2169,1,0,0,0,2172,2175,1,0,0,0,2173,2171,1,0,0,0, + 2173,2174,1,0,0,0,2174,2176,1,0,0,0,2175,2173,1,0,0,0,2176,2177, + 5,266,0,0,2177,313,1,0,0,0,2178,2183,3,200,100,0,2179,2183,3,316, + 158,0,2180,2183,3,320,160,0,2181,2183,3,322,161,0,2182,2178,1,0, + 0,0,2182,2179,1,0,0,0,2182,2180,1,0,0,0,2182,2181,1,0,0,0,2183,315, + 1,0,0,0,2184,2186,5,113,0,0,2185,2184,1,0,0,0,2185,2186,1,0,0,0, + 2186,2187,1,0,0,0,2187,2188,3,318,159,0,2188,317,1,0,0,0,2189,2190, + 5,265,0,0,2190,2191,3,212,106,0,2191,2192,5,266,0,0,2192,319,1,0, + 0,0,2193,2194,5,201,0,0,2194,2195,5,265,0,0,2195,2200,3,326,163, + 0,2196,2197,5,263,0,0,2197,2199,3,326,163,0,2198,2196,1,0,0,0,2199, + 2202,1,0,0,0,2200,2198,1,0,0,0,2200,2201,1,0,0,0,2201,2203,1,0,0, + 0,2202,2200,1,0,0,0,2203,2206,5,266,0,0,2204,2205,5,216,0,0,2205, + 2207,5,140,0,0,2206,2204,1,0,0,0,2206,2207,1,0,0,0,2207,321,1,0, + 0,0,2208,2209,5,265,0,0,2209,2210,3,302,151,0,2210,2211,5,266,0, + 0,2211,323,1,0,0,0,2212,2215,3,194,97,0,2213,2215,3,326,163,0,2214, + 2212,1,0,0,0,2214,2213,1,0,0,0,2215,325,1,0,0,0,2216,2217,3,328, + 164,0,2217,327,1,0,0,0,2218,2219,6,164,-1,0,2219,2221,3,332,166, + 0,2220,2222,3,330,165,0,2221,2220,1,0,0,0,2221,2222,1,0,0,0,2222, + 2226,1,0,0,0,2223,2224,5,132,0,0,2224,2226,3,328,164,3,2225,2218, + 1,0,0,0,2225,2223,1,0,0,0,2226,2235,1,0,0,0,2227,2228,10,2,0,0,2228, + 2229,5,5,0,0,2229,2234,3,328,164,3,2230,2231,10,1,0,0,2231,2232, + 5,138,0,0,2232,2234,3,328,164,2,2233,2227,1,0,0,0,2233,2230,1,0, + 0,0,2234,2237,1,0,0,0,2235,2233,1,0,0,0,2235,2236,1,0,0,0,2236,329, + 1,0,0,0,2237,2235,1,0,0,0,2238,2239,3,340,170,0,2239,2240,3,332, + 166,0,2240,2297,1,0,0,0,2241,2242,3,340,170,0,2242,2243,3,342,171, + 0,2243,2244,3,318,159,0,2244,2297,1,0,0,0,2245,2247,5,132,0,0,2246, + 2245,1,0,0,0,2246,2247,1,0,0,0,2247,2248,1,0,0,0,2248,2249,5,15, + 0,0,2249,2250,3,332,166,0,2250,2251,5,5,0,0,2251,2252,3,332,166, + 0,2252,2297,1,0,0,0,2253,2255,5,132,0,0,2254,2253,1,0,0,0,2254,2255, + 1,0,0,0,2255,2256,1,0,0,0,2256,2257,5,94,0,0,2257,2258,5,265,0,0, + 2258,2263,3,326,163,0,2259,2260,5,263,0,0,2260,2262,3,326,163,0, + 2261,2259,1,0,0,0,2262,2265,1,0,0,0,2263,2261,1,0,0,0,2263,2264, + 1,0,0,0,2264,2266,1,0,0,0,2265,2263,1,0,0,0,2266,2267,5,266,0,0, + 2267,2297,1,0,0,0,2268,2270,5,132,0,0,2269,2268,1,0,0,0,2269,2270, + 1,0,0,0,2270,2271,1,0,0,0,2271,2272,5,94,0,0,2272,2297,3,318,159, + 0,2273,2275,5,132,0,0,2274,2273,1,0,0,0,2274,2275,1,0,0,0,2275,2276, + 1,0,0,0,2276,2277,7,18,0,0,2277,2280,3,332,166,0,2278,2279,5,62, + 0,0,2279,2281,3,332,166,0,2280,2278,1,0,0,0,2280,2281,1,0,0,0,2281, + 2297,1,0,0,0,2282,2283,7,19,0,0,2283,2297,3,332,166,0,2284,2286, + 5,108,0,0,2285,2287,5,132,0,0,2286,2285,1,0,0,0,2286,2287,1,0,0, + 0,2287,2288,1,0,0,0,2288,2297,7,20,0,0,2289,2291,5,108,0,0,2290, + 2292,5,132,0,0,2291,2290,1,0,0,0,2291,2292,1,0,0,0,2292,2293,1,0, + 0,0,2293,2294,5,57,0,0,2294,2295,5,82,0,0,2295,2297,3,332,166,0, + 2296,2238,1,0,0,0,2296,2241,1,0,0,0,2296,2246,1,0,0,0,2296,2254, + 1,0,0,0,2296,2269,1,0,0,0,2296,2274,1,0,0,0,2296,2282,1,0,0,0,2296, + 2284,1,0,0,0,2296,2289,1,0,0,0,2297,331,1,0,0,0,2298,2299,6,166, + -1,0,2299,2303,3,336,168,0,2300,2301,7,21,0,0,2301,2303,3,332,166, + 4,2302,2298,1,0,0,0,2302,2300,1,0,0,0,2303,2315,1,0,0,0,2304,2305, + 10,3,0,0,2305,2306,7,22,0,0,2306,2314,3,332,166,4,2307,2308,10,2, + 0,0,2308,2309,7,21,0,0,2309,2314,3,332,166,3,2310,2311,10,1,0,0, + 2311,2312,5,260,0,0,2312,2314,3,332,166,2,2313,2304,1,0,0,0,2313, + 2307,1,0,0,0,2313,2310,1,0,0,0,2314,2317,1,0,0,0,2315,2313,1,0,0, + 0,2315,2316,1,0,0,0,2316,333,1,0,0,0,2317,2315,1,0,0,0,2318,2319, + 3,190,95,0,2319,2331,5,265,0,0,2320,2322,3,290,145,0,2321,2320,1, + 0,0,0,2321,2322,1,0,0,0,2322,2323,1,0,0,0,2323,2328,3,326,163,0, + 2324,2325,5,263,0,0,2325,2327,3,326,163,0,2326,2324,1,0,0,0,2327, + 2330,1,0,0,0,2328,2326,1,0,0,0,2328,2329,1,0,0,0,2329,2332,1,0,0, + 0,2330,2328,1,0,0,0,2331,2321,1,0,0,0,2331,2332,1,0,0,0,2332,2343, + 1,0,0,0,2333,2334,5,139,0,0,2334,2335,5,26,0,0,2335,2340,3,272,136, + 0,2336,2337,5,263,0,0,2337,2339,3,272,136,0,2338,2336,1,0,0,0,2339, + 2342,1,0,0,0,2340,2338,1,0,0,0,2340,2341,1,0,0,0,2341,2344,1,0,0, + 0,2342,2340,1,0,0,0,2343,2333,1,0,0,0,2343,2344,1,0,0,0,2344,2345, + 1,0,0,0,2345,2347,5,266,0,0,2346,2348,3,358,179,0,2347,2346,1,0, + 0,0,2347,2348,1,0,0,0,2348,2350,1,0,0,0,2349,2351,3,362,181,0,2350, + 2349,1,0,0,0,2350,2351,1,0,0,0,2351,335,1,0,0,0,2352,2353,6,168, + -1,0,2353,2566,5,133,0,0,2354,2566,3,344,172,0,2355,2356,3,382,191, + 0,2356,2357,3,338,169,0,2357,2566,1,0,0,0,2358,2359,5,286,0,0,2359, + 2566,3,338,169,0,2360,2566,3,384,192,0,2361,2566,7,23,0,0,2362,2566, + 3,338,169,0,2363,2566,5,276,0,0,2364,2566,5,272,0,0,2365,2366,5, + 148,0,0,2366,2367,5,265,0,0,2367,2368,3,332,166,0,2368,2369,5,94, + 0,0,2369,2370,3,332,166,0,2370,2371,5,266,0,0,2371,2566,1,0,0,0, + 2372,2373,5,265,0,0,2373,2376,3,326,163,0,2374,2375,5,9,0,0,2375, + 2377,3,348,174,0,2376,2374,1,0,0,0,2376,2377,1,0,0,0,2377,2386,1, + 0,0,0,2378,2379,5,263,0,0,2379,2382,3,326,163,0,2380,2381,5,9,0, + 0,2381,2383,3,348,174,0,2382,2380,1,0,0,0,2382,2383,1,0,0,0,2383, + 2385,1,0,0,0,2384,2378,1,0,0,0,2385,2388,1,0,0,0,2386,2387,1,0,0, + 0,2386,2384,1,0,0,0,2387,2389,1,0,0,0,2388,2386,1,0,0,0,2389,2390, + 5,266,0,0,2390,2566,1,0,0,0,2391,2392,5,168,0,0,2392,2393,5,265, + 0,0,2393,2398,3,326,163,0,2394,2395,5,263,0,0,2395,2397,3,326,163, + 0,2396,2394,1,0,0,0,2397,2400,1,0,0,0,2398,2396,1,0,0,0,2398,2399, + 1,0,0,0,2399,2401,1,0,0,0,2400,2398,1,0,0,0,2401,2402,5,266,0,0, + 2402,2566,1,0,0,0,2403,2404,3,190,95,0,2404,2405,5,265,0,0,2405, + 2406,5,257,0,0,2406,2408,5,266,0,0,2407,2409,3,358,179,0,2408,2407, + 1,0,0,0,2408,2409,1,0,0,0,2409,2411,1,0,0,0,2410,2412,3,362,181, + 0,2411,2410,1,0,0,0,2411,2412,1,0,0,0,2412,2566,1,0,0,0,2413,2566, + 3,334,167,0,2414,2415,3,382,191,0,2415,2416,5,273,0,0,2416,2417, + 3,326,163,0,2417,2566,1,0,0,0,2418,2427,5,265,0,0,2419,2424,3,382, + 191,0,2420,2421,5,263,0,0,2421,2423,3,382,191,0,2422,2420,1,0,0, + 0,2423,2426,1,0,0,0,2424,2422,1,0,0,0,2424,2425,1,0,0,0,2425,2428, + 1,0,0,0,2426,2424,1,0,0,0,2427,2419,1,0,0,0,2427,2428,1,0,0,0,2428, + 2429,1,0,0,0,2429,2430,5,266,0,0,2430,2431,5,273,0,0,2431,2566,3, + 326,163,0,2432,2433,5,265,0,0,2433,2434,3,212,106,0,2434,2435,5, + 266,0,0,2435,2566,1,0,0,0,2436,2437,5,66,0,0,2437,2438,5,265,0,0, + 2438,2439,3,212,106,0,2439,2440,5,266,0,0,2440,2566,1,0,0,0,2441, + 2442,5,28,0,0,2442,2444,3,332,166,0,2443,2445,3,356,178,0,2444,2443, + 1,0,0,0,2445,2446,1,0,0,0,2446,2444,1,0,0,0,2446,2447,1,0,0,0,2447, + 2450,1,0,0,0,2448,2449,5,59,0,0,2449,2451,3,326,163,0,2450,2448, + 1,0,0,0,2450,2451,1,0,0,0,2451,2452,1,0,0,0,2452,2453,5,61,0,0,2453, + 2566,1,0,0,0,2454,2456,5,28,0,0,2455,2457,3,356,178,0,2456,2455, + 1,0,0,0,2457,2458,1,0,0,0,2458,2456,1,0,0,0,2458,2459,1,0,0,0,2459, + 2462,1,0,0,0,2460,2461,5,59,0,0,2461,2463,3,326,163,0,2462,2460, + 1,0,0,0,2462,2463,1,0,0,0,2463,2464,1,0,0,0,2464,2465,5,61,0,0,2465, + 2566,1,0,0,0,2466,2467,5,29,0,0,2467,2468,5,265,0,0,2468,2469,3, + 326,163,0,2469,2470,5,9,0,0,2470,2471,3,348,174,0,2471,2472,5,266, + 0,0,2472,2566,1,0,0,0,2473,2474,5,195,0,0,2474,2475,5,265,0,0,2475, + 2476,3,326,163,0,2476,2477,5,9,0,0,2477,2478,3,348,174,0,2478,2479, + 5,266,0,0,2479,2566,1,0,0,0,2480,2481,5,8,0,0,2481,2490,5,267,0, + 0,2482,2487,3,326,163,0,2483,2484,5,263,0,0,2484,2486,3,326,163, + 0,2485,2483,1,0,0,0,2486,2489,1,0,0,0,2487,2485,1,0,0,0,2487,2488, + 1,0,0,0,2488,2491,1,0,0,0,2489,2487,1,0,0,0,2490,2482,1,0,0,0,2490, + 2491,1,0,0,0,2491,2492,1,0,0,0,2492,2566,5,268,0,0,2493,2566,3,196, + 98,0,2494,2566,5,40,0,0,2495,2499,5,42,0,0,2496,2497,5,265,0,0,2497, + 2498,5,277,0,0,2498,2500,5,266,0,0,2499,2496,1,0,0,0,2499,2500,1, + 0,0,0,2500,2566,1,0,0,0,2501,2505,5,43,0,0,2502,2503,5,265,0,0,2503, + 2504,5,277,0,0,2504,2506,5,266,0,0,2505,2502,1,0,0,0,2505,2506,1, + 0,0,0,2506,2566,1,0,0,0,2507,2511,5,119,0,0,2508,2509,5,265,0,0, + 2509,2510,5,277,0,0,2510,2512,5,266,0,0,2511,2508,1,0,0,0,2511,2512, + 1,0,0,0,2512,2566,1,0,0,0,2513,2517,5,120,0,0,2514,2515,5,265,0, + 0,2515,2516,5,277,0,0,2516,2518,5,266,0,0,2517,2514,1,0,0,0,2517, + 2518,1,0,0,0,2518,2566,1,0,0,0,2519,2566,5,44,0,0,2520,2566,5,41, + 0,0,2521,2522,5,184,0,0,2522,2523,5,265,0,0,2523,2524,3,332,166, + 0,2524,2525,5,82,0,0,2525,2528,3,332,166,0,2526,2527,5,78,0,0,2527, + 2529,3,332,166,0,2528,2526,1,0,0,0,2528,2529,1,0,0,0,2529,2530,1, + 0,0,0,2530,2531,5,266,0,0,2531,2566,1,0,0,0,2532,2533,5,131,0,0, + 2533,2534,5,265,0,0,2534,2537,3,332,166,0,2535,2536,5,263,0,0,2536, + 2538,7,24,0,0,2537,2535,1,0,0,0,2537,2538,1,0,0,0,2538,2539,1,0, + 0,0,2539,2540,5,266,0,0,2540,2566,1,0,0,0,2541,2542,5,68,0,0,2542, + 2543,5,265,0,0,2543,2544,3,382,191,0,2544,2545,5,82,0,0,2545,2546, + 3,332,166,0,2546,2547,5,266,0,0,2547,2566,1,0,0,0,2548,2549,5,265, + 0,0,2549,2550,3,326,163,0,2550,2551,5,266,0,0,2551,2566,1,0,0,0, + 2552,2553,5,88,0,0,2553,2562,5,265,0,0,2554,2559,3,376,188,0,2555, + 2556,5,263,0,0,2556,2558,3,376,188,0,2557,2555,1,0,0,0,2558,2561, + 1,0,0,0,2559,2557,1,0,0,0,2559,2560,1,0,0,0,2560,2563,1,0,0,0,2561, + 2559,1,0,0,0,2562,2554,1,0,0,0,2562,2563,1,0,0,0,2563,2564,1,0,0, + 0,2564,2566,5,266,0,0,2565,2352,1,0,0,0,2565,2354,1,0,0,0,2565,2355, + 1,0,0,0,2565,2358,1,0,0,0,2565,2360,1,0,0,0,2565,2361,1,0,0,0,2565, + 2362,1,0,0,0,2565,2363,1,0,0,0,2565,2364,1,0,0,0,2565,2365,1,0,0, + 0,2565,2372,1,0,0,0,2565,2391,1,0,0,0,2565,2403,1,0,0,0,2565,2413, + 1,0,0,0,2565,2414,1,0,0,0,2565,2418,1,0,0,0,2565,2432,1,0,0,0,2565, + 2436,1,0,0,0,2565,2441,1,0,0,0,2565,2454,1,0,0,0,2565,2466,1,0,0, + 0,2565,2473,1,0,0,0,2565,2480,1,0,0,0,2565,2493,1,0,0,0,2565,2494, + 1,0,0,0,2565,2495,1,0,0,0,2565,2501,1,0,0,0,2565,2507,1,0,0,0,2565, + 2513,1,0,0,0,2565,2519,1,0,0,0,2565,2520,1,0,0,0,2565,2521,1,0,0, + 0,2565,2532,1,0,0,0,2565,2541,1,0,0,0,2565,2548,1,0,0,0,2565,2552, + 1,0,0,0,2566,2577,1,0,0,0,2567,2568,10,15,0,0,2568,2569,5,267,0, + 0,2569,2570,3,332,166,0,2570,2571,5,268,0,0,2571,2576,1,0,0,0,2572, + 2573,10,13,0,0,2573,2574,5,261,0,0,2574,2576,3,382,191,0,2575,2567, + 1,0,0,0,2575,2572,1,0,0,0,2576,2579,1,0,0,0,2577,2575,1,0,0,0,2577, + 2578,1,0,0,0,2578,337,1,0,0,0,2579,2577,1,0,0,0,2580,2587,5,274, + 0,0,2581,2584,5,275,0,0,2582,2583,5,198,0,0,2583,2585,5,274,0,0, + 2584,2582,1,0,0,0,2584,2585,1,0,0,0,2585,2587,1,0,0,0,2586,2580, + 1,0,0,0,2586,2581,1,0,0,0,2587,339,1,0,0,0,2588,2589,7,25,0,0,2589, + 341,1,0,0,0,2590,2591,7,26,0,0,2591,343,1,0,0,0,2592,2593,5,277, + 0,0,2593,2607,3,346,173,0,2594,2595,5,265,0,0,2595,2596,5,277,0, + 0,2596,2597,5,266,0,0,2597,2607,3,346,173,0,2598,2599,5,101,0,0, + 2599,2600,5,277,0,0,2600,2607,3,346,173,0,2601,2602,5,101,0,0,2602, + 2603,5,265,0,0,2603,2604,5,277,0,0,2604,2605,5,266,0,0,2605,2607, + 3,346,173,0,2606,2592,1,0,0,0,2606,2594,1,0,0,0,2606,2598,1,0,0, + 0,2606,2601,1,0,0,0,2607,345,1,0,0,0,2608,2609,7,27,0,0,2609,347, + 1,0,0,0,2610,2611,6,174,-1,0,2611,2612,5,8,0,0,2612,2613,5,251,0, + 0,2613,2614,3,348,174,0,2614,2615,5,253,0,0,2615,2656,1,0,0,0,2616, + 2617,5,235,0,0,2617,2618,5,251,0,0,2618,2619,3,348,174,0,2619,2620, + 5,263,0,0,2620,2621,3,348,174,0,2621,2622,5,253,0,0,2622,2656,1, + 0,0,0,2623,2624,5,240,0,0,2624,2625,5,251,0,0,2625,2626,3,382,191, + 0,2626,2633,3,348,174,0,2627,2628,5,263,0,0,2628,2629,3,382,191, + 0,2629,2630,3,348,174,0,2630,2632,1,0,0,0,2631,2627,1,0,0,0,2632, + 2635,1,0,0,0,2633,2631,1,0,0,0,2633,2634,1,0,0,0,2634,2636,1,0,0, + 0,2635,2633,1,0,0,0,2636,2637,5,253,0,0,2637,2656,1,0,0,0,2638,2641, + 3,354,177,0,2639,2641,3,350,175,0,2640,2638,1,0,0,0,2640,2639,1, + 0,0,0,2641,2653,1,0,0,0,2642,2643,5,265,0,0,2643,2648,3,352,176, + 0,2644,2645,5,263,0,0,2645,2647,3,352,176,0,2646,2644,1,0,0,0,2647, + 2650,1,0,0,0,2648,2646,1,0,0,0,2648,2649,1,0,0,0,2649,2651,1,0,0, + 0,2650,2648,1,0,0,0,2651,2652,5,266,0,0,2652,2654,1,0,0,0,2653,2642, + 1,0,0,0,2653,2654,1,0,0,0,2654,2656,1,0,0,0,2655,2610,1,0,0,0,2655, + 2616,1,0,0,0,2655,2623,1,0,0,0,2655,2640,1,0,0,0,2656,2661,1,0,0, + 0,2657,2658,10,5,0,0,2658,2660,5,8,0,0,2659,2657,1,0,0,0,2660,2663, + 1,0,0,0,2661,2659,1,0,0,0,2661,2662,1,0,0,0,2662,349,1,0,0,0,2663, + 2661,1,0,0,0,2664,2665,7,28,0,0,2665,351,1,0,0,0,2666,2669,5,277, + 0,0,2667,2669,3,348,174,0,2668,2666,1,0,0,0,2668,2667,1,0,0,0,2669, + 353,1,0,0,0,2670,2675,5,284,0,0,2671,2675,5,285,0,0,2672,2675,5, + 286,0,0,2673,2675,3,382,191,0,2674,2670,1,0,0,0,2674,2671,1,0,0, + 0,2674,2672,1,0,0,0,2674,2673,1,0,0,0,2675,355,1,0,0,0,2676,2677, + 5,214,0,0,2677,2678,3,326,163,0,2678,2679,5,192,0,0,2679,2680,3, + 326,163,0,2680,357,1,0,0,0,2681,2682,5,74,0,0,2682,2683,5,265,0, + 0,2683,2684,3,278,139,0,2684,2685,5,266,0,0,2685,359,1,0,0,0,2686, + 2691,3,326,163,0,2687,2688,5,263,0,0,2688,2690,3,326,163,0,2689, + 2687,1,0,0,0,2690,2693,1,0,0,0,2691,2689,1,0,0,0,2691,2692,1,0,0, + 0,2692,361,1,0,0,0,2693,2691,1,0,0,0,2694,2695,5,143,0,0,2695,2699, + 5,265,0,0,2696,2697,5,145,0,0,2697,2698,5,26,0,0,2698,2700,3,360, + 180,0,2699,2696,1,0,0,0,2699,2700,1,0,0,0,2700,2711,1,0,0,0,2701, + 2702,5,139,0,0,2702,2703,5,26,0,0,2703,2708,3,272,136,0,2704,2705, + 5,263,0,0,2705,2707,3,272,136,0,2706,2704,1,0,0,0,2707,2710,1,0, + 0,0,2708,2706,1,0,0,0,2708,2709,1,0,0,0,2709,2712,1,0,0,0,2710,2708, + 1,0,0,0,2711,2701,1,0,0,0,2711,2712,1,0,0,0,2712,2714,1,0,0,0,2713, + 2715,3,364,182,0,2714,2713,1,0,0,0,2714,2715,1,0,0,0,2715,2716,1, + 0,0,0,2716,2717,5,266,0,0,2717,363,1,0,0,0,2718,2719,7,29,0,0,2719, + 2727,3,366,183,0,2720,2721,7,29,0,0,2721,2722,5,15,0,0,2722,2723, + 3,366,183,0,2723,2724,5,5,0,0,2724,2725,3,366,183,0,2725,2727,1, + 0,0,0,2726,2718,1,0,0,0,2726,2720,1,0,0,0,2727,365,1,0,0,0,2728, + 2729,5,199,0,0,2729,2738,5,149,0,0,2730,2731,5,199,0,0,2731,2738, + 5,77,0,0,2732,2733,5,39,0,0,2733,2738,5,168,0,0,2734,2735,3,326, + 163,0,2735,2736,7,30,0,0,2736,2738,1,0,0,0,2737,2728,1,0,0,0,2737, + 2730,1,0,0,0,2737,2732,1,0,0,0,2737,2734,1,0,0,0,2738,367,1,0,0, + 0,2739,2740,3,382,191,0,2740,2741,5,261,0,0,2741,2742,3,382,191, + 0,2742,2745,1,0,0,0,2743,2745,3,382,191,0,2744,2739,1,0,0,0,2744, + 2743,1,0,0,0,2745,369,1,0,0,0,2746,2751,3,368,184,0,2747,2748,5, + 263,0,0,2748,2750,3,368,184,0,2749,2747,1,0,0,0,2750,2753,1,0,0, + 0,2751,2749,1,0,0,0,2751,2752,1,0,0,0,2752,371,1,0,0,0,2753,2751, + 1,0,0,0,2754,2768,5,2,0,0,2755,2768,5,4,0,0,2756,2768,5,58,0,0,2757, + 2768,5,37,0,0,2758,2768,5,99,0,0,2759,2768,5,162,0,0,2760,2765,5, + 174,0,0,2761,2762,5,265,0,0,2762,2763,3,382,191,0,2763,2764,5,266, + 0,0,2764,2766,1,0,0,0,2765,2761,1,0,0,0,2765,2766,1,0,0,0,2766,2768, + 1,0,0,0,2767,2754,1,0,0,0,2767,2755,1,0,0,0,2767,2756,1,0,0,0,2767, + 2757,1,0,0,0,2767,2758,1,0,0,0,2767,2759,1,0,0,0,2767,2760,1,0,0, + 0,2768,373,1,0,0,0,2769,2770,7,31,0,0,2770,375,1,0,0,0,2771,2776, + 3,382,191,0,2772,2773,5,261,0,0,2773,2775,3,382,191,0,2774,2772, + 1,0,0,0,2775,2778,1,0,0,0,2776,2774,1,0,0,0,2776,2777,1,0,0,0,2777, + 377,1,0,0,0,2778,2776,1,0,0,0,2779,2785,4,189,14,0,2780,2781,3,382, + 191,0,2781,2782,5,261,0,0,2782,2783,3,192,96,0,2783,2786,1,0,0,0, + 2784,2786,3,192,96,0,2785,2780,1,0,0,0,2785,2784,1,0,0,0,2786,2796, + 1,0,0,0,2787,2792,3,382,191,0,2788,2789,5,261,0,0,2789,2791,3,382, + 191,0,2790,2788,1,0,0,0,2791,2794,1,0,0,0,2792,2790,1,0,0,0,2792, + 2793,1,0,0,0,2793,2796,1,0,0,0,2794,2792,1,0,0,0,2795,2779,1,0,0, + 0,2795,2787,1,0,0,0,2796,379,1,0,0,0,2797,2798,5,166,0,0,2798,2804, + 3,382,191,0,2799,2800,5,204,0,0,2800,2804,3,382,191,0,2801,2802, + 5,87,0,0,2802,2804,3,382,191,0,2803,2797,1,0,0,0,2803,2799,1,0,0, + 0,2803,2801,1,0,0,0,2804,381,1,0,0,0,2805,2811,5,280,0,0,2806,2811, + 5,274,0,0,2807,2811,3,388,194,0,2808,2811,5,283,0,0,2809,2811,5, + 281,0,0,2810,2805,1,0,0,0,2810,2806,1,0,0,0,2810,2807,1,0,0,0,2810, + 2808,1,0,0,0,2810,2809,1,0,0,0,2811,383,1,0,0,0,2812,2814,5,256, + 0,0,2813,2812,1,0,0,0,2813,2814,1,0,0,0,2814,2815,1,0,0,0,2815,2825, + 5,278,0,0,2816,2818,5,256,0,0,2817,2816,1,0,0,0,2817,2818,1,0,0, + 0,2818,2819,1,0,0,0,2819,2825,5,279,0,0,2820,2822,5,256,0,0,2821, + 2820,1,0,0,0,2821,2822,1,0,0,0,2822,2823,1,0,0,0,2823,2825,5,277, + 0,0,2824,2813,1,0,0,0,2824,2817,1,0,0,0,2824,2821,1,0,0,0,2825,385, + 1,0,0,0,2826,2827,7,32,0,0,2827,387,1,0,0,0,2828,2829,7,33,0,0,2829, + 389,1,0,0,0,362,393,400,424,437,441,445,454,459,463,469,471,476, + 480,484,491,496,502,506,515,522,526,531,533,538,542,549,553,558, + 562,565,569,577,581,585,593,597,606,609,612,618,625,636,641,646, + 651,656,665,668,671,675,701,726,735,745,748,762,780,782,791,802, + 811,818,822,829,835,838,843,850,864,877,882,887,893,929,932,938, + 941,947,953,965,967,978,986,991,995,1000,1007,1011,1015,1021,1025, + 1029,1038,1041,1044,1052,1066,1073,1086,1092,1097,1100,1103,1108, + 1112,1121,1126,1132,1136,1140,1145,1148,1156,1159,1162,1174,1177, + 1180,1185,1189,1205,1210,1217,1220,1226,1229,1236,1239,1243,1248, + 1251,1258,1261,1285,1299,1303,1307,1327,1329,1331,1340,1342,1351, + 1353,1362,1364,1369,1378,1387,1396,1407,1413,1418,1421,1434,1444, + 1448,1453,1464,1469,1502,1510,1515,1522,1529,1533,1538,1541,1546, + 1551,1556,1560,1569,1572,1576,1583,1592,1596,1600,1607,1610,1620, + 1627,1632,1637,1642,1648,1651,1660,1663,1666,1672,1677,1687,1690, + 1693,1697,1707,1710,1716,1722,1725,1728,1732,1742,1751,1756,1759, + 1763,1770,1780,1792,1798,1800,1809,1812,1819,1829,1835,1843,1854, + 1864,1875,1877,1883,1888,1898,1901,1907,1909,1917,1923,1926,1928, + 1940,1947,1951,1955,1959,1962,1971,1974,1977,1982,1985,1992,1998, + 2003,2006,2013,2024,2027,2031,2035,2044,2048,2053,2056,2067,2083, + 2087,2091,2095,2099,2103,2107,2111,2121,2126,2135,2140,2153,2155, + 2159,2163,2165,2173,2182,2185,2200,2206,2214,2221,2225,2233,2235, + 2246,2254,2263,2269,2274,2280,2286,2291,2296,2302,2313,2315,2321, + 2328,2331,2340,2343,2347,2350,2376,2382,2386,2398,2408,2411,2424, + 2427,2446,2450,2458,2462,2487,2490,2499,2505,2511,2517,2528,2537, + 2559,2562,2565,2575,2577,2584,2586,2606,2633,2640,2648,2653,2655, + 2661,2668,2674,2691,2699,2708,2711,2714,2726,2737,2744,2751,2765, + 2767,2776,2785,2792,2795,2803,2810,2813,2817,2821,2824 ]; private static __ATN: antlr.ATN; @@ -15188,6 +15077,7 @@ export class CreateTableLikeContext extends antlr.ParserRuleContext { export class CreateKuduTableAsSelectContext extends antlr.ParserRuleContext { + public _comment?: StringLiteralContext; public _tblProp?: PropertiesContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -15264,8 +15154,8 @@ export class CreateKuduTableAsSelectContext extends antlr.ParserRuleContext { public kuduPartitionClause(): KuduPartitionClauseContext | null { return this.getRuleContext(0, KuduPartitionClauseContext); } - public commentClause(): CommentClauseContext | null { - return this.getRuleContext(0, CommentClauseContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); } public KW_TBLPROPERTIES(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_TBLPROPERTIES, 0); @@ -15273,6 +15163,9 @@ export class CreateKuduTableAsSelectContext extends antlr.ParserRuleContext { public queryStatement(): QueryStatementContext | null { return this.getRuleContext(0, QueryStatementContext); } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } public properties(): PropertiesContext | null { return this.getRuleContext(0, PropertiesContext); } @@ -15822,15 +15715,6 @@ export class AlterStatsKeyContext extends antlr.ParserRuleContext { public LPAREN(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.LPAREN, 0)!; } - public statsKey(): StatsKeyContext[]; - public statsKey(i: number): StatsKeyContext | null; - public statsKey(i?: number): StatsKeyContext[] | StatsKeyContext | null { - if (i === undefined) { - return this.getRuleContexts(StatsKeyContext); - } - - return this.getRuleContext(i, StatsKeyContext); - } public EQ(): antlr.TerminalNode[]; public EQ(i: number): antlr.TerminalNode | null; public EQ(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -15852,6 +15736,42 @@ export class AlterStatsKeyContext extends antlr.ParserRuleContext { public RPAREN(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.RPAREN, 0)!; } + public STATS_NUMDVS(): antlr.TerminalNode[]; + public STATS_NUMDVS(i: number): antlr.TerminalNode | null; + public STATS_NUMDVS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(ImpalaSqlParser.STATS_NUMDVS); + } else { + return this.getToken(ImpalaSqlParser.STATS_NUMDVS, i); + } + } + public STATS_NUMNULLS(): antlr.TerminalNode[]; + public STATS_NUMNULLS(i: number): antlr.TerminalNode | null; + public STATS_NUMNULLS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(ImpalaSqlParser.STATS_NUMNULLS); + } else { + return this.getToken(ImpalaSqlParser.STATS_NUMNULLS, i); + } + } + public STATS_AVGSIZE(): antlr.TerminalNode[]; + public STATS_AVGSIZE(i: number): antlr.TerminalNode | null; + public STATS_AVGSIZE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(ImpalaSqlParser.STATS_AVGSIZE); + } else { + return this.getToken(ImpalaSqlParser.STATS_AVGSIZE, i); + } + } + public STATS_MAXSIZE(): antlr.TerminalNode[]; + public STATS_MAXSIZE(i: number): antlr.TerminalNode | null; + public STATS_MAXSIZE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(ImpalaSqlParser.STATS_MAXSIZE); + } else { + return this.getToken(ImpalaSqlParser.STATS_MAXSIZE, i); + } + } public COMMA(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.COMMA, 0); } @@ -20663,45 +20583,6 @@ export class KuduStorageAttrContext extends antlr.ParserRuleContext { } -export class StatsKeyContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public STATS_NUMDVS(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.STATS_NUMDVS, 0); - } - public STATS_NUMNULLS(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.STATS_NUMNULLS, 0); - } - public STATS_AVGSIZE(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.STATS_AVGSIZE, 0); - } - public STATS_MAXSIZE(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.STATS_MAXSIZE, 0); - } - public override get ruleIndex(): number { - return ImpalaSqlParser.RULE_statsKey; - } - public override enterRule(listener: ImpalaSqlParserListener): void { - if(listener.enterStatsKey) { - listener.enterStatsKey(this); - } - } - public override exitRule(listener: ImpalaSqlParserListener): void { - if(listener.exitStatsKey) { - listener.exitStatsKey(this); - } - } - public override accept(visitor: ImpalaSqlParserVisitor): Result | null { - if (visitor.visitStatsKey) { - return visitor.visitStatsKey(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class FileFormatContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -22521,9 +22402,6 @@ export class SampledRelationContext extends antlr.ParserRuleContext { public KW_TABLESAMPLE(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_TABLESAMPLE, 0); } - public sampleType(): SampleTypeContext | null { - return this.getRuleContext(0, SampleTypeContext); - } public LPAREN(): antlr.TerminalNode[]; public LPAREN(i: number): antlr.TerminalNode | null; public LPAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -22542,6 +22420,12 @@ export class SampledRelationContext extends antlr.ParserRuleContext { return this.getToken(ImpalaSqlParser.RPAREN, i); } } + public KW_BERNOULLI(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_BERNOULLI, 0); + } + public KW_SYSTEM(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_SYSTEM, 0); + } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext | null; public expression(i?: number): ExpressionContext[] | ExpressionContext | null { @@ -22577,39 +22461,6 @@ export class SampledRelationContext extends antlr.ParserRuleContext { } -export class SampleTypeContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_BERNOULLI(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_BERNOULLI, 0); - } - public KW_SYSTEM(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_SYSTEM, 0); - } - public override get ruleIndex(): number { - return ImpalaSqlParser.RULE_sampleType; - } - public override enterRule(listener: ImpalaSqlParserListener): void { - if(listener.enterSampleType) { - listener.enterSampleType(this); - } - } - public override exitRule(listener: ImpalaSqlParserListener): void { - if(listener.exitSampleType) { - listener.exitSampleType(this); - } - } - public override accept(visitor: ImpalaSqlParserVisitor): Result | null { - if (visitor.visitSampleType) { - return visitor.visitSampleType(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class AliasedRelationContext extends antlr.ParserRuleContext { public _alias?: IdentifierContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { @@ -24060,8 +23911,17 @@ export class NormalizeContext extends PrimaryExpressionContext { public COMMA(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.COMMA, 0); } - public normalForm(): NormalFormContext | null { - return this.getRuleContext(0, NormalFormContext); + public KW_NFD(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_NFD, 0); + } + public KW_NFC(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_NFC, 0); + } + public KW_NFKD(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_NFKD, 0); + } + public KW_NFKC(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_NFKC, 0); } public override enterRule(listener: ImpalaSqlParserListener): void { if(listener.enterNormalize) { @@ -24138,8 +23998,11 @@ export class BooleanLiteralContext extends PrimaryExpressionContext { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public booleanValue(): BooleanValueContext { - return this.getRuleContext(0, BooleanValueContext)!; + public KW_TRUE(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_TRUE, 0); + } + public KW_FALSE(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_FALSE, 0); } public override enterRule(listener: ImpalaSqlParserListener): void { if(listener.enterBooleanLiteral) { @@ -24939,39 +24802,6 @@ export class ComparisonQuantifierContext extends antlr.ParserRuleContext { } -export class BooleanValueContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_TRUE(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_TRUE, 0); - } - public KW_FALSE(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_FALSE, 0); - } - public override get ruleIndex(): number { - return ImpalaSqlParser.RULE_booleanValue; - } - public override enterRule(listener: ImpalaSqlParserListener): void { - if(listener.enterBooleanValue) { - listener.enterBooleanValue(this); - } - } - public override exitRule(listener: ImpalaSqlParserListener): void { - if(listener.exitBooleanValue) { - listener.exitBooleanValue(this); - } - } - public override accept(visitor: ImpalaSqlParserVisitor): Result | null { - if (visitor.visitBooleanValue) { - return visitor.visitBooleanValue(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class IntervalContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -25077,45 +24907,6 @@ export class IntervalFieldContext extends antlr.ParserRuleContext { } -export class NormalFormContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_NFD(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_NFD, 0); - } - public KW_NFC(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_NFC, 0); - } - public KW_NFKD(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_NFKD, 0); - } - public KW_NFKC(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_NFKC, 0); - } - public override get ruleIndex(): number { - return ImpalaSqlParser.RULE_normalForm; - } - public override enterRule(listener: ImpalaSqlParserListener): void { - if(listener.enterNormalForm) { - listener.enterNormalForm(this); - } - } - public override exitRule(listener: ImpalaSqlParserListener): void { - if(listener.exitNormalForm) { - listener.exitNormalForm(this); - } - } - public override accept(visitor: ImpalaSqlParserVisitor): Result | null { - if (visitor.visitNormalForm) { - return visitor.visitNormalForm(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class TypeContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -25574,9 +25365,6 @@ export class WindowFrameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public KW_RANGE(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_RANGE, 0); - } public frameBound(): FrameBoundContext[]; public frameBound(i: number): FrameBoundContext | null; public frameBound(i?: number): FrameBoundContext[] | FrameBoundContext | null { @@ -25586,6 +25374,9 @@ export class WindowFrameContext extends antlr.ParserRuleContext { return this.getRuleContext(i, FrameBoundContext); } + public KW_RANGE(): antlr.TerminalNode | null { + return this.getToken(ImpalaSqlParser.KW_RANGE, 0); + } public KW_ROWS(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_ROWS, 0); } diff --git a/src/lib/impala/ImpalaSqlParserListener.ts b/src/lib/impala/ImpalaSqlParserListener.ts index 3f0bfc43..85200319 100644 --- a/src/lib/impala/ImpalaSqlParserListener.ts +++ b/src/lib/impala/ImpalaSqlParserListener.ts @@ -127,7 +127,6 @@ import { ColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { CreateColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { KuduAttributesContext } from "./ImpalaSqlParser.js"; import { KuduStorageAttrContext } from "./ImpalaSqlParser.js"; -import { StatsKeyContext } from "./ImpalaSqlParser.js"; import { FileFormatContext } from "./ImpalaSqlParser.js"; import { KuduPartitionClauseContext } from "./ImpalaSqlParser.js"; import { HashClauseContext } from "./ImpalaSqlParser.js"; @@ -169,7 +168,6 @@ import { JoinRelationContext } from "./ImpalaSqlParser.js"; import { JoinTypeContext } from "./ImpalaSqlParser.js"; import { JoinCriteriaContext } from "./ImpalaSqlParser.js"; import { SampledRelationContext } from "./ImpalaSqlParser.js"; -import { SampleTypeContext } from "./ImpalaSqlParser.js"; import { AliasedRelationContext } from "./ImpalaSqlParser.js"; import { ColumnAliasesContext } from "./ImpalaSqlParser.js"; import { RelationPrimaryContext } from "./ImpalaSqlParser.js"; @@ -229,10 +227,8 @@ import { BasicStringLiteralContext } from "./ImpalaSqlParser.js"; import { UnicodeStringLiteralContext } from "./ImpalaSqlParser.js"; import { ComparisonOperatorContext } from "./ImpalaSqlParser.js"; import { ComparisonQuantifierContext } from "./ImpalaSqlParser.js"; -import { BooleanValueContext } from "./ImpalaSqlParser.js"; import { IntervalContext } from "./ImpalaSqlParser.js"; import { IntervalFieldContext } from "./ImpalaSqlParser.js"; -import { NormalFormContext } from "./ImpalaSqlParser.js"; import { TypeContext } from "./ImpalaSqlParser.js"; import { DataTypeContext } from "./ImpalaSqlParser.js"; import { TypeParameterContext } from "./ImpalaSqlParser.js"; @@ -1461,16 +1457,6 @@ export class ImpalaSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitKuduStorageAttr?: (ctx: KuduStorageAttrContext) => void; - /** - * Enter a parse tree produced by `ImpalaSqlParser.statsKey`. - * @param ctx the parse tree - */ - enterStatsKey?: (ctx: StatsKeyContext) => void; - /** - * Exit a parse tree produced by `ImpalaSqlParser.statsKey`. - * @param ctx the parse tree - */ - exitStatsKey?: (ctx: StatsKeyContext) => void; /** * Enter a parse tree produced by `ImpalaSqlParser.fileFormat`. * @param ctx the parse tree @@ -1899,16 +1885,6 @@ export class ImpalaSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitSampledRelation?: (ctx: SampledRelationContext) => void; - /** - * Enter a parse tree produced by `ImpalaSqlParser.sampleType`. - * @param ctx the parse tree - */ - enterSampleType?: (ctx: SampleTypeContext) => void; - /** - * Exit a parse tree produced by `ImpalaSqlParser.sampleType`. - * @param ctx the parse tree - */ - exitSampleType?: (ctx: SampleTypeContext) => void; /** * Enter a parse tree produced by `ImpalaSqlParser.aliasedRelation`. * @param ctx the parse tree @@ -2593,16 +2569,6 @@ export class ImpalaSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitComparisonQuantifier?: (ctx: ComparisonQuantifierContext) => void; - /** - * Enter a parse tree produced by `ImpalaSqlParser.booleanValue`. - * @param ctx the parse tree - */ - enterBooleanValue?: (ctx: BooleanValueContext) => void; - /** - * Exit a parse tree produced by `ImpalaSqlParser.booleanValue`. - * @param ctx the parse tree - */ - exitBooleanValue?: (ctx: BooleanValueContext) => void; /** * Enter a parse tree produced by `ImpalaSqlParser.interval`. * @param ctx the parse tree @@ -2623,16 +2589,6 @@ export class ImpalaSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitIntervalField?: (ctx: IntervalFieldContext) => void; - /** - * Enter a parse tree produced by `ImpalaSqlParser.normalForm`. - * @param ctx the parse tree - */ - enterNormalForm?: (ctx: NormalFormContext) => void; - /** - * Exit a parse tree produced by `ImpalaSqlParser.normalForm`. - * @param ctx the parse tree - */ - exitNormalForm?: (ctx: NormalFormContext) => void; /** * Enter a parse tree produced by `ImpalaSqlParser.type`. * @param ctx the parse tree diff --git a/src/lib/impala/ImpalaSqlParserVisitor.ts b/src/lib/impala/ImpalaSqlParserVisitor.ts index eadf7c3d..c9fb5900 100644 --- a/src/lib/impala/ImpalaSqlParserVisitor.ts +++ b/src/lib/impala/ImpalaSqlParserVisitor.ts @@ -127,7 +127,6 @@ import { ColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { CreateColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { KuduAttributesContext } from "./ImpalaSqlParser.js"; import { KuduStorageAttrContext } from "./ImpalaSqlParser.js"; -import { StatsKeyContext } from "./ImpalaSqlParser.js"; import { FileFormatContext } from "./ImpalaSqlParser.js"; import { KuduPartitionClauseContext } from "./ImpalaSqlParser.js"; import { HashClauseContext } from "./ImpalaSqlParser.js"; @@ -169,7 +168,6 @@ import { JoinRelationContext } from "./ImpalaSqlParser.js"; import { JoinTypeContext } from "./ImpalaSqlParser.js"; import { JoinCriteriaContext } from "./ImpalaSqlParser.js"; import { SampledRelationContext } from "./ImpalaSqlParser.js"; -import { SampleTypeContext } from "./ImpalaSqlParser.js"; import { AliasedRelationContext } from "./ImpalaSqlParser.js"; import { ColumnAliasesContext } from "./ImpalaSqlParser.js"; import { RelationPrimaryContext } from "./ImpalaSqlParser.js"; @@ -229,10 +227,8 @@ import { BasicStringLiteralContext } from "./ImpalaSqlParser.js"; import { UnicodeStringLiteralContext } from "./ImpalaSqlParser.js"; import { ComparisonOperatorContext } from "./ImpalaSqlParser.js"; import { ComparisonQuantifierContext } from "./ImpalaSqlParser.js"; -import { BooleanValueContext } from "./ImpalaSqlParser.js"; import { IntervalContext } from "./ImpalaSqlParser.js"; import { IntervalFieldContext } from "./ImpalaSqlParser.js"; -import { NormalFormContext } from "./ImpalaSqlParser.js"; import { TypeContext } from "./ImpalaSqlParser.js"; import { DataTypeContext } from "./ImpalaSqlParser.js"; import { TypeParameterContext } from "./ImpalaSqlParser.js"; @@ -988,12 +984,6 @@ export class ImpalaSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `ImpalaSqlParser.statsKey`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStatsKey?: (ctx: StatsKeyContext) => Result; /** * Visit a parse tree produced by `ImpalaSqlParser.fileFormat`. * @param ctx the parse tree @@ -1249,12 +1239,6 @@ export class ImpalaSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `ImpalaSqlParser.sampleType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSampleType?: (ctx: SampleTypeContext) => Result; /** * Visit a parse tree produced by `ImpalaSqlParser.aliasedRelation`. * @param ctx the parse tree @@ -1656,12 +1640,6 @@ export class ImpalaSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `ImpalaSqlParser.booleanValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBooleanValue?: (ctx: BooleanValueContext) => Result; /** * Visit a parse tree produced by `ImpalaSqlParser.interval`. * @param ctx the parse tree @@ -1674,12 +1652,6 @@ export class ImpalaSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `ImpalaSqlParser.normalForm`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNormalForm?: (ctx: NormalFormContext) => Result; /** * Visit a parse tree produced by `ImpalaSqlParser.type`. * @param ctx the parse tree diff --git a/test/parser/impala/syntax/fixtures/select.sql b/test/parser/impala/syntax/fixtures/select.sql index 73b19037..1f79da20 100644 --- a/test/parser/impala/syntax/fixtures/select.sql +++ b/test/parser/impala/syntax/fixtures/select.sql @@ -217,4 +217,24 @@ select c_first_name, c_last_name from customer where lower(trim(c_last_name)) rl SELECT COALESCE(SUM(c.amount), 0) AS total_amount FROM cust c; -SELECT SUM(c.amount) AS total_amount FROM cust c; \ No newline at end of file +SELECT SUM(c.amount) AS total_amount FROM cust c; + +-- TABLESAMPLE with BERNOULLI (sampleType inlined) +SELECT * FROM t1 TABLESAMPLE BERNOULLI(50); +SELECT * FROM t1 TABLESAMPLE SYSTEM(20); + +-- NORMALIZE with normalForm (inlined) +SELECT NORMALIZE(col1, NFD) FROM t1; +SELECT NORMALIZE(col1, NFC) FROM t1; +SELECT NORMALIZE(col1, NFKD) FROM t1; +SELECT NORMALIZE(col1, NFKC) FROM t1; + +-- Window frame with RANGE/ROWS (windowFrame merged) +SELECT id, SUM(val) OVER (ORDER BY ts ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1; +SELECT id, SUM(val) OVER (ORDER BY ts RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1; +SELECT id, SUM(val) OVER (ORDER BY ts ROWS UNBOUNDED PRECEDING) FROM t1; +SELECT id, SUM(val) OVER (ORDER BY ts RANGE CURRENT ROW) FROM t1; + +-- booleanValue (inlined) +SELECT * FROM t1 WHERE col1 = TRUE; +SELECT * FROM t1 WHERE col1 = FALSE; \ No newline at end of file