diff --git a/package.json b/package.json index f33c597..5fb1605 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@types/node": "^18.15.11", "@typescript-eslint/eslint-plugin": "^3.10.1", "@typescript-eslint/parser": "^3.10.1", + "antlr4ts-cli": "^0.5.0-alpha.4", "eslint": "^7.32.0", "eslint-config-google": "^0.14.0", "jest": "^29.5.0", @@ -47,7 +48,7 @@ "registry": "https://registry.npmjs.org/" }, "dependencies": { - "antlr4ts": "^0.5.0-alpha.4", - "antlr4ts-cli": "^0.5.0-alpha.4" + "antlr4-c3": "^3.0.1", + "antlr4ts": "^0.5.0-alpha.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fb879c..a902caa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.4 +lockfileVersion: 5.3 specifiers: '@swc/core': ^1.3.60 @@ -7,6 +7,7 @@ specifiers: '@types/node': ^18.15.11 '@typescript-eslint/eslint-plugin': ^3.10.1 '@typescript-eslint/parser': ^3.10.1 + antlr4-c3: ^3.0.1 antlr4ts: ^0.5.0-alpha.4 antlr4ts-cli: ^0.5.0-alpha.4 eslint: ^7.32.0 @@ -17,16 +18,17 @@ specifiers: yargs-parser: ^21.1.1 dependencies: + antlr4-c3: 3.0.1 antlr4ts: 0.5.0-alpha.4 - antlr4ts-cli: 0.5.0-alpha.4 devDependencies: '@swc/core': 1.3.60 '@swc/jest': 0.2.26_@swc+core@1.3.60 '@types/jest': 29.5.1 '@types/node': 18.16.16 - '@typescript-eslint/eslint-plugin': 3.10.1_ughicqazzfm5kkseraofkm6oci - '@typescript-eslint/parser': 3.10.1_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/eslint-plugin': 3.10.1_a18e814019c959d52a44881c5533ce12 + '@typescript-eslint/parser': 3.10.1_eslint@7.32.0+typescript@5.0.4 + antlr4ts-cli: 0.5.0-alpha.4 eslint: 7.32.0 eslint-config-google: 0.14.0_eslint@7.32.0 jest: 29.5.0_@types+node@18.16.16 @@ -942,7 +944,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/3.10.1_ughicqazzfm5kkseraofkm6oci: + /@typescript-eslint/eslint-plugin/3.10.1_a18e814019c959d52a44881c5533ce12: resolution: {integrity: sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -953,8 +955,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 3.10.1_cgdknpc562nnyruteofhkegnom - '@typescript-eslint/parser': 3.10.1_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/experimental-utils': 3.10.1_eslint@7.32.0+typescript@5.0.4 + '@typescript-eslint/parser': 3.10.1_eslint@7.32.0+typescript@5.0.4 debug: 4.3.4 eslint: 7.32.0 functional-red-black-tree: 1.0.1 @@ -966,7 +968,7 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/3.10.1_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/experimental-utils/3.10.1_eslint@7.32.0+typescript@5.0.4: resolution: {integrity: sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -983,7 +985,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser/3.10.1_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/parser/3.10.1_eslint@7.32.0+typescript@5.0.4: resolution: {integrity: sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -994,7 +996,7 @@ packages: optional: true dependencies: '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 3.10.1_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/experimental-utils': 3.10.1_eslint@7.32.0+typescript@5.0.4 '@typescript-eslint/types': 3.10.1 '@typescript-eslint/typescript-estree': 3.10.1_typescript@5.0.4 eslint: 7.32.0 @@ -1118,10 +1120,16 @@ packages: engines: {node: '>=10'} dev: true + /antlr4-c3/3.0.1: + resolution: {integrity: sha512-Vbizas0WK4Id6l1f48ANYHFZgfzmj82LZx4OuB/a87vCpyoUwofrlJ+sCiL1qT/D2SWf8HEcBPCsgskdx8NnzQ==} + dependencies: + antlr4ts: 0.5.0-alpha.4 + dev: false + /antlr4ts-cli/0.5.0-alpha.4: resolution: {integrity: sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw==} hasBin: true - dev: false + dev: true /antlr4ts/0.5.0-alpha.4: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} @@ -1535,8 +1543,8 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - JSONStream: 1.3.5 is-text-path: 1.0.1 + JSONStream: 1.3.5 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 diff --git a/src/grammar/flinksql/FlinkSqlParser.g4 b/src/grammar/flinksql/FlinkSqlParser.g4 index 5f7d592..0aa3fa5 100644 --- a/src/grammar/flinksql/FlinkSqlParser.g4 +++ b/src/grammar/flinksql/FlinkSqlParser.g4 @@ -9,12 +9,14 @@ statement ; sqlStatements - : (sqlStatement SEMICOLON? | emptyStatement)* + : (sqlStatement | emptyStatement)* ; sqlStatement - : ddlStatement | dmlStatement | describeStatement | explainStatement | useStatement | showStatememt - | loadStatement | unloadStatememt | setStatememt | resetStatememt | jarStatememt | dtAddStatement + : ddlStatement SEMICOLON? | dmlStatement SEMICOLON? | describeStatement SEMICOLON? + | explainStatement SEMICOLON? | useStatement SEMICOLON?| showStatememt SEMICOLON? + | loadStatement SEMICOLON?| unloadStatememt SEMICOLON?| setStatememt SEMICOLON? + | resetStatememt SEMICOLON?| jarStatememt SEMICOLON?| dtAddStatement SEMICOLON? ; emptyStatement @@ -33,7 +35,7 @@ dmlStatement // some statemen describeStatement - : (KW_DESCRIBE | KW_DESC) uid + : (KW_DESCRIBE | KW_DESC) tablePath ; explainStatement @@ -49,7 +51,9 @@ explainDetail ; useStatement - : KW_USE KW_CATALOG? uid | useModuleStatement + : KW_USE KW_CATALOG catalogPath + | KW_USE databasePath + | useModuleStatement ; useModuleStatement @@ -59,7 +63,7 @@ useModuleStatement showStatememt : KW_SHOW (KW_CATALOGS | KW_DATABASES | KW_VIEWS | KW_JARS) | KW_SHOW KW_CURRENT (KW_CATALOG | KW_DATABASE) - | KW_SHOW KW_TABLES (( KW_FROM | KW_IN ) uid)? likePredicate? + | KW_SHOW KW_TABLES (( KW_FROM | KW_IN ) tablePath)? likePredicate? | KW_SHOW KW_COLUMNS ( KW_FROM | KW_IN ) uid likePredicate? | KW_SHOW KW_CREATE (KW_TABLE | KW_VIEW) uid | KW_SHOW KW_USER? KW_FUNCTIONS @@ -106,7 +110,7 @@ createTable ; simpleCreateTable - : KW_CREATE KW_TEMPORARY? KW_TABLE ifNotExists? sourceTable + : KW_CREATE KW_TEMPORARY? KW_TABLE ifNotExists? tablePathCreate LR_BRACKET columnOptionDefinition (COMMA columnOptionDefinition)* (COMMA watermarkDefinition)? @@ -124,7 +128,7 @@ simpleCreateTable * CTAS 不支持指定显示指定列,不支持创建分区表,临时表 */ createTableAsSelect - : KW_CREATE KW_TABLE ifNotExists? sourceTable withOption (KW_AS queryStatement)? + : KW_CREATE KW_TABLE ifNotExists? tablePathCreate withOption (KW_AS queryStatement)? ; columnOptionDefinition @@ -244,11 +248,7 @@ transformArgument ; likeDefinition - : KW_LIKE sourceTable (LR_BRACKET likeOption* RR_BRACKET)? - ; - -sourceTable - : uid + : KW_LIKE tablePath (LR_BRACKET likeOption* RR_BRACKET)? ; likeOption @@ -261,7 +261,7 @@ createCatalog ; createDatabase - : KW_CREATE KW_DATABASE ifNotExists? uid commentSpec? withOption + : KW_CREATE KW_DATABASE ifNotExists? databasePathCreate commentSpec? withOption ; createView @@ -269,7 +269,7 @@ createView ; createFunction - : KW_CREATE (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifNotExists? uid KW_AS identifier (KW_LANGUAGE (KW_JAVA|KW_SCALA|KW_PYTHON))? usingClause? + : KW_CREATE (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifNotExists? functionName KW_AS identifier (KW_LANGUAGE (KW_JAVA|KW_SCALA|KW_PYTHON))? usingClause? ; usingClause @@ -285,7 +285,7 @@ jarFileName // it only includes rename, set key, add constraint, drop constraint, add unique alterTable - : KW_ALTER KW_TABLE ifExists? uid (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique) + : KW_ALTER KW_TABLE ifExists? tablePath (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique) ; renameDefinition @@ -317,7 +317,7 @@ alertView ; alterDatabase - : KW_ALTER KW_DATABASE uid setKeyValueDefinition + : KW_ALTER KW_DATABASE databasePath setKeyValueDefinition ; alterFunction @@ -328,15 +328,15 @@ alterFunction // Drop statements dropCatalog - : KW_DROP KW_CATALOG ifExists? uid + : KW_DROP KW_CATALOG ifExists? catalogPath ; dropTable - : KW_DROP KW_TEMPORARY? KW_TABLE ifExists? uid + : KW_DROP KW_TEMPORARY? KW_TABLE ifExists? tablePath ; dropDatabase - : KW_DROP KW_DATABASE ifExists? uid dropType=(KW_RESTRICT | KW_CASCADE)? + : KW_DROP KW_DATABASE ifExists? databasePath dropType=(KW_RESTRICT | KW_CASCADE)? ; dropView @@ -344,7 +344,7 @@ dropView ; dropFunction - : KW_DROP (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifExists? uid + : KW_DROP (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifExists? functionName ; @@ -356,7 +356,7 @@ insertStatement ; insertSimpleStatement - : KW_INSERT (KW_INTO | KW_OVERWRITE) uid + : KW_INSERT (KW_INTO | KW_OVERWRITE) tablePath ( insertPartitionDefinition? columnNameList? queryStatement | valuesDefinition @@ -454,9 +454,7 @@ tablePrimary | KW_UNNEST LR_BRACKET expression RR_BRACKET ; -tablePath - : uid - ; + systemTimePeriod : KW_FOR KW_SYSTEM_TIME KW_AS KW_OF dateTimeExpression @@ -827,6 +825,26 @@ whenClause : KW_WHEN condition=expression KW_THEN result=expression ; +catalogPath + : uid + ; + +databasePath + : uid + ; + +databasePathCreate + : uid + ; + +tablePathCreate + : uid + ; + +tablePath + : uid + ; + uid : identifier (DOT identifier)*? ; diff --git a/src/index.ts b/src/index.ts index fe4e410..dece824 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,3 +14,6 @@ export * from './lib/pgsql/PostgreSQLParserListener'; export * from './lib/pgsql/PostgreSQLParserVisitor'; export * from './lib/trinosql/TrinoSqlListener'; export * from './lib/trinosql/TrinoSqlVisitor'; + +export type * from './parser/common/basic-parser-types'; +export type { SyntaxError, ParserError } from './parser/common/parserErrorListener'; diff --git a/src/lib/flinksql/FlinkSqlLexer.ts b/src/lib/flinksql/FlinkSqlLexer.ts index f2d2929..747bdc6 100644 --- a/src/lib/flinksql/FlinkSqlLexer.ts +++ b/src/lib/flinksql/FlinkSqlLexer.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT import { ATN } from "antlr4ts/atn/ATN"; diff --git a/src/lib/flinksql/FlinkSqlParser.interp b/src/lib/flinksql/FlinkSqlParser.interp index 8705638..aa11c2c 100644 --- a/src/lib/flinksql/FlinkSqlParser.interp +++ b/src/lib/flinksql/FlinkSqlParser.interp @@ -875,7 +875,6 @@ transformList transform transformArgument likeDefinition -sourceTable likeOption createCatalog createDatabase @@ -918,7 +917,6 @@ fromClause tableExpression tableReference tablePrimary -tablePath systemTimePeriod dateTimeExpression inlineDataValueClause @@ -983,6 +981,11 @@ identifier unquotedIdentifier quotedIdentifier whenClause +catalogPath +databasePath +databasePathCreate +tablePathCreate +tablePath uid withOption ifNotExists @@ -1011,4 +1014,4 @@ nonReservedKeywords atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 412, 2175, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 377, 10, 4, 3, 4, 7, 4, 380, 10, 4, 12, 4, 14, 4, 383, 11, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 397, 10, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 415, 10, 7, 3, 8, 3, 8, 5, 8, 419, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 428, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 433, 10, 10, 3, 11, 3, 11, 3, 11, 7, 11, 438, 10, 11, 12, 11, 14, 11, 441, 11, 11, 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 447, 10, 13, 3, 13, 3, 13, 5, 13, 451, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 458, 10, 14, 12, 14, 14, 14, 461, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 472, 10, 15, 3, 15, 5, 15, 475, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 482, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 490, 10, 15, 3, 15, 3, 15, 3, 15, 5, 15, 495, 10, 15, 3, 15, 5, 15, 498, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 505, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 513, 10, 18, 3, 19, 3, 19, 5, 19, 517, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 529, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 537, 10, 21, 3, 21, 3, 21, 5, 21, 541, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 563, 10, 21, 3, 22, 6, 22, 566, 10, 22, 13, 22, 14, 22, 567, 3, 23, 3, 23, 5, 23, 572, 10, 23, 3, 24, 3, 24, 5, 24, 576, 10, 24, 3, 24, 3, 24, 5, 24, 580, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 587, 10, 24, 12, 24, 14, 24, 590, 11, 24, 3, 24, 3, 24, 5, 24, 594, 10, 24, 3, 24, 3, 24, 5, 24, 598, 10, 24, 3, 24, 3, 24, 5, 24, 602, 10, 24, 3, 24, 3, 24, 5, 24, 606, 10, 24, 3, 24, 5, 24, 609, 10, 24, 3, 24, 3, 24, 5, 24, 613, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 618, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 624, 10, 25, 3, 26, 3, 26, 3, 26, 5, 26, 629, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 634, 10, 27, 3, 27, 5, 27, 637, 10, 27, 3, 28, 3, 28, 5, 28, 641, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 647, 10, 29, 12, 29, 14, 29, 650, 11, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 5, 30, 657, 10, 30, 3, 30, 3, 30, 5, 30, 661, 10, 30, 3, 30, 3, 30, 5, 30, 665, 10, 30, 3, 30, 3, 30, 5, 30, 669, 10, 30, 3, 30, 3, 30, 5, 30, 673, 10, 30, 3, 30, 3, 30, 5, 30, 677, 10, 30, 3, 30, 3, 30, 5, 30, 681, 10, 30, 3, 30, 3, 30, 5, 30, 685, 10, 30, 3, 30, 3, 30, 5, 30, 689, 10, 30, 5, 30, 691, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 701, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 709, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 731, 10, 36, 12, 36, 14, 36, 734, 11, 36, 3, 36, 3, 36, 3, 37, 3, 37, 5, 37, 740, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 746, 10, 37, 3, 37, 5, 37, 749, 10, 37, 3, 37, 5, 37, 752, 10, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 762, 10, 39, 3, 39, 5, 39, 765, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 773, 10, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 5, 44, 785, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 807, 10, 48, 12, 48, 14, 48, 810, 11, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 820, 10, 49, 12, 49, 14, 49, 823, 11, 49, 3, 49, 3, 49, 5, 49, 827, 10, 49, 3, 50, 3, 50, 5, 50, 831, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 837, 10, 51, 12, 51, 14, 51, 840, 11, 51, 3, 51, 5, 51, 843, 10, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 851, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 5, 55, 861, 10, 55, 3, 55, 3, 55, 5, 55, 865, 10, 55, 3, 55, 3, 55, 3, 56, 3, 56, 5, 56, 871, 10, 56, 3, 56, 3, 56, 5, 56, 875, 10, 56, 3, 56, 3, 56, 5, 56, 879, 10, 56, 3, 56, 5, 56, 882, 10, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 891, 10, 57, 3, 57, 3, 57, 5, 57, 895, 10, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 902, 10, 57, 3, 57, 5, 57, 905, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 913, 10, 58, 12, 58, 14, 58, 916, 11, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 923, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 931, 10, 60, 3, 61, 3, 61, 5, 61, 935, 10, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 950, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 969, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 980, 10, 69, 3, 69, 3, 69, 5, 69, 984, 10, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 991, 10, 69, 3, 70, 3, 70, 3, 70, 5, 70, 996, 10, 70, 3, 70, 3, 70, 3, 71, 3, 71, 5, 71, 1002, 10, 71, 3, 71, 3, 71, 5, 71, 1006, 10, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 5, 72, 1013, 10, 72, 3, 72, 3, 72, 5, 72, 1017, 10, 72, 3, 73, 3, 73, 5, 73, 1021, 10, 73, 3, 73, 3, 73, 5, 73, 1025, 10, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1033, 10, 74, 3, 74, 3, 74, 5, 74, 1037, 10, 74, 3, 74, 3, 74, 3, 75, 5, 75, 1042, 10, 75, 3, 75, 3, 75, 3, 75, 3, 75, 5, 75, 1048, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 1054, 10, 76, 3, 76, 5, 76, 1057, 10, 76, 3, 76, 3, 76, 5, 76, 1061, 10, 76, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 1070, 10, 78, 12, 78, 14, 78, 1073, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 1079, 10, 79, 12, 79, 14, 79, 1082, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 6, 80, 1093, 10, 80, 13, 80, 14, 80, 1094, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 6, 81, 1105, 10, 81, 13, 81, 14, 81, 1106, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 1122, 10, 82, 3, 82, 5, 82, 1125, 10, 82, 3, 82, 3, 82, 5, 82, 1129, 10, 82, 3, 82, 5, 82, 1132, 10, 82, 5, 82, 1134, 10, 82, 3, 82, 3, 82, 3, 82, 5, 82, 1139, 10, 82, 3, 82, 3, 82, 5, 82, 1143, 10, 82, 3, 82, 5, 82, 1146, 10, 82, 7, 82, 1148, 10, 82, 12, 82, 14, 82, 1151, 11, 82, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 1157, 10, 83, 12, 83, 14, 83, 1160, 11, 83, 3, 84, 3, 84, 3, 84, 3, 84, 7, 84, 1166, 10, 84, 12, 84, 14, 84, 1169, 11, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 7, 85, 1176, 10, 85, 12, 85, 14, 85, 1179, 11, 85, 3, 85, 3, 85, 5, 85, 1183, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 5, 87, 1195, 10, 87, 3, 87, 5, 87, 1198, 10, 87, 3, 87, 5, 87, 1201, 10, 87, 3, 87, 5, 87, 1204, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 1210, 10, 87, 3, 88, 3, 88, 5, 88, 1214, 10, 88, 3, 88, 3, 88, 3, 88, 3, 88, 7, 88, 1220, 10, 88, 12, 88, 14, 88, 1223, 11, 88, 5, 88, 1225, 10, 88, 3, 89, 3, 89, 3, 89, 5, 89, 1230, 10, 89, 3, 89, 5, 89, 1233, 10, 89, 5, 89, 1235, 10, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 5, 90, 1249, 10, 90, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 7, 92, 1258, 10, 92, 12, 92, 14, 92, 1261, 11, 92, 3, 92, 3, 92, 5, 92, 1265, 10, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 5, 92, 1273, 10, 92, 3, 92, 5, 92, 1276, 10, 92, 3, 92, 5, 92, 1279, 10, 92, 3, 92, 3, 92, 3, 92, 5, 92, 1284, 10, 92, 7, 92, 1286, 10, 92, 12, 92, 14, 92, 1289, 11, 92, 3, 93, 3, 93, 5, 93, 1293, 10, 93, 3, 94, 5, 94, 1296, 10, 94, 3, 94, 3, 94, 5, 94, 1300, 10, 94, 3, 94, 5, 94, 1303, 10, 94, 3, 94, 5, 94, 1306, 10, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 7, 94, 1316, 10, 94, 12, 94, 14, 94, 1319, 11, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 1325, 10, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 1336, 10, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 7, 100, 1363, 10, 100, 12, 100, 14, 100, 1366, 11, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 5, 102, 1387, 10, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 7, 105, 1403, 10, 105, 12, 105, 14, 105, 1406, 11, 105, 3, 105, 3, 105, 5, 105, 1410, 10, 105, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 7, 107, 1420, 10, 107, 12, 107, 14, 107, 1423, 11, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 7, 108, 1433, 10, 108, 12, 108, 14, 108, 1436, 11, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 7, 108, 1445, 10, 108, 12, 108, 14, 108, 1448, 11, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 7, 108, 1457, 10, 108, 12, 108, 14, 108, 1460, 11, 108, 3, 108, 3, 108, 5, 108, 1464, 10, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 7, 115, 1489, 10, 115, 12, 115, 14, 115, 1492, 11, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 5, 117, 1499, 10, 117, 3, 117, 3, 117, 5, 117, 1503, 10, 117, 3, 117, 5, 117, 1506, 10, 117, 3, 117, 5, 117, 1509, 10, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 5, 118, 1516, 10, 118, 3, 118, 5, 118, 1519, 10, 118, 3, 118, 5, 118, 1522, 10, 118, 3, 118, 5, 118, 1525, 10, 118, 3, 118, 5, 118, 1528, 10, 118, 3, 118, 5, 118, 1531, 10, 118, 3, 118, 3, 118, 3, 118, 5, 118, 1536, 10, 118, 3, 118, 5, 118, 1539, 10, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 7, 119, 1546, 10, 119, 12, 119, 14, 119, 1549, 11, 119, 3, 120, 3, 120, 5, 120, 1553, 10, 120, 3, 120, 3, 120, 5, 120, 1557, 10, 120, 3, 121, 3, 121, 3, 121, 5, 121, 1562, 10, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 7, 122, 1569, 10, 122, 12, 122, 14, 122, 1572, 11, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 5, 123, 1590, 10, 123, 3, 124, 3, 124, 3, 124, 3, 124, 7, 124, 1596, 10, 124, 12, 124, 14, 124, 1599, 11, 124, 3, 125, 3, 125, 3, 125, 6, 125, 1604, 10, 125, 13, 125, 14, 125, 1605, 3, 125, 3, 125, 5, 125, 1610, 10, 125, 3, 126, 3, 126, 5, 126, 1614, 10, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 5, 127, 1624, 10, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 5, 128, 1650, 10, 128, 3, 129, 3, 129, 3, 129, 3, 129, 7, 129, 1656, 10, 129, 12, 129, 14, 129, 1659, 11, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 5, 130, 1670, 10, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 5, 134, 1692, 10, 134, 5, 134, 1694, 10, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 5, 134, 1705, 10, 134, 3, 134, 7, 134, 1708, 10, 134, 12, 134, 14, 134, 1711, 11, 134, 3, 135, 5, 135, 1714, 10, 135, 3, 135, 3, 135, 5, 135, 1718, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1725, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 7, 135, 1732, 10, 135, 12, 135, 14, 135, 1735, 11, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1740, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1753, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1760, 10, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1765, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1771, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1778, 10, 135, 5, 135, 1780, 10, 135, 3, 136, 5, 136, 1783, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 7, 136, 1793, 10, 136, 12, 136, 14, 136, 1796, 11, 136, 3, 136, 3, 136, 5, 136, 1800, 10, 136, 3, 136, 5, 136, 1803, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1809, 10, 136, 5, 136, 1811, 10, 136, 3, 137, 3, 137, 3, 137, 3, 137, 5, 137, 1817, 10, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 7, 137, 1840, 10, 137, 12, 137, 14, 137, 1843, 11, 137, 3, 138, 3, 138, 3, 138, 6, 138, 1848, 10, 138, 13, 138, 14, 138, 1849, 3, 138, 3, 138, 5, 138, 1854, 10, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 6, 138, 1861, 10, 138, 13, 138, 14, 138, 1862, 3, 138, 3, 138, 5, 138, 1867, 10, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 5, 138, 1883, 10, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 5, 138, 1892, 10, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 5, 138, 1916, 10, 138, 3, 138, 3, 138, 3, 138, 7, 138, 1921, 10, 138, 12, 138, 14, 138, 1924, 11, 138, 5, 138, 1926, 10, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 5, 138, 1936, 10, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 7, 138, 1943, 10, 138, 12, 138, 14, 138, 1946, 11, 138, 3, 139, 3, 139, 3, 139, 5, 139, 1951, 10, 139, 3, 140, 3, 140, 3, 140, 3, 140, 5, 140, 1957, 10, 140, 3, 141, 3, 141, 3, 142, 3, 142, 3, 143, 3, 143, 5, 143, 1965, 10, 143, 3, 144, 3, 144, 3, 144, 5, 144, 1970, 10, 144, 3, 145, 3, 145, 5, 145, 1974, 10, 145, 3, 146, 3, 146, 3, 146, 6, 146, 1979, 10, 146, 13, 146, 14, 146, 1980, 3, 147, 3, 147, 3, 147, 5, 147, 1986, 10, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 5, 149, 1994, 10, 149, 3, 149, 3, 149, 5, 149, 1998, 10, 149, 3, 150, 5, 150, 2001, 10, 150, 3, 150, 3, 150, 5, 150, 2005, 10, 150, 3, 151, 5, 151, 2008, 10, 151, 3, 151, 3, 151, 5, 151, 2012, 10, 151, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 6, 153, 2019, 10, 153, 13, 153, 14, 153, 2020, 3, 153, 5, 153, 2024, 10, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 7, 155, 2033, 10, 155, 12, 155, 14, 155, 2036, 11, 155, 3, 156, 3, 156, 3, 156, 5, 156, 2041, 10, 156, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 7, 160, 2055, 10, 160, 12, 160, 14, 160, 2058, 11, 160, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 7, 164, 2074, 10, 164, 12, 164, 14, 164, 2077, 11, 164, 3, 164, 3, 164, 3, 165, 3, 165, 5, 165, 2083, 10, 165, 3, 165, 5, 165, 2086, 10, 165, 3, 166, 3, 166, 3, 166, 5, 166, 2091, 10, 166, 3, 167, 3, 167, 3, 167, 3, 167, 5, 167, 2097, 10, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 5, 168, 2105, 10, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 5, 169, 2121, 10, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 5, 170, 2130, 10, 170, 3, 171, 3, 171, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 173, 5, 173, 2140, 10, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 5, 173, 2147, 10, 173, 3, 173, 5, 173, 2150, 10, 173, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 176, 3, 176, 3, 177, 3, 177, 3, 178, 3, 178, 3, 179, 3, 179, 3, 180, 3, 180, 3, 181, 3, 181, 3, 182, 3, 182, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 2056, 2, 7, 162, 182, 266, 272, 274, 185, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 180, 2, 182, 2, 184, 2, 186, 2, 188, 2, 190, 2, 192, 2, 194, 2, 196, 2, 198, 2, 200, 2, 202, 2, 204, 2, 206, 2, 208, 2, 210, 2, 212, 2, 214, 2, 216, 2, 218, 2, 220, 2, 222, 2, 224, 2, 226, 2, 228, 2, 230, 2, 232, 2, 234, 2, 236, 2, 238, 2, 240, 2, 242, 2, 244, 2, 246, 2, 248, 2, 250, 2, 252, 2, 254, 2, 256, 2, 258, 2, 260, 2, 262, 2, 264, 2, 266, 2, 268, 2, 270, 2, 272, 2, 274, 2, 276, 2, 278, 2, 280, 2, 282, 2, 284, 2, 286, 2, 288, 2, 290, 2, 292, 2, 294, 2, 296, 2, 298, 2, 300, 2, 302, 2, 304, 2, 306, 2, 308, 2, 310, 2, 312, 2, 314, 2, 316, 2, 318, 2, 320, 2, 322, 2, 324, 2, 326, 2, 328, 2, 330, 2, 332, 2, 334, 2, 336, 2, 338, 2, 340, 2, 342, 2, 344, 2, 346, 2, 348, 2, 350, 2, 352, 2, 354, 2, 356, 2, 358, 2, 360, 2, 362, 2, 364, 2, 366, 2, 2, 49, 4, 2, 32, 32, 236, 236, 5, 2, 18, 18, 40, 40, 70, 70, 6, 2, 15, 15, 28, 28, 67, 67, 169, 169, 4, 2, 14, 14, 27, 27, 4, 2, 254, 254, 265, 265, 4, 2, 168, 168, 346, 346, 4, 2, 6, 6, 120, 120, 3, 2, 110, 114, 5, 2, 197, 197, 227, 227, 301, 301, 13, 2, 12, 12, 148, 148, 154, 154, 193, 194, 206, 206, 228, 228, 270, 271, 337, 337, 349, 349, 351, 351, 366, 367, 4, 2, 371, 371, 373, 373, 6, 2, 230, 231, 238, 238, 252, 252, 302, 302, 4, 2, 186, 186, 295, 295, 4, 2, 43, 43, 266, 266, 5, 2, 23, 23, 98, 98, 180, 180, 5, 2, 43, 43, 96, 96, 266, 266, 5, 2, 55, 55, 92, 92, 172, 172, 5, 2, 68, 68, 109, 109, 128, 128, 4, 2, 13, 13, 125, 125, 4, 2, 95, 95, 274, 274, 5, 2, 245, 245, 272, 272, 356, 356, 6, 2, 255, 255, 267, 267, 281, 281, 325, 325, 5, 2, 25, 25, 59, 59, 158, 158, 7, 2, 26, 26, 141, 142, 147, 147, 153, 153, 304, 304, 4, 2, 223, 223, 328, 328, 5, 2, 59, 59, 138, 138, 158, 158, 4, 2, 10, 10, 32, 32, 4, 2, 47, 47, 75, 75, 6, 2, 251, 251, 301, 301, 354, 354, 358, 358, 4, 2, 188, 188, 342, 342, 4, 2, 180, 180, 184, 184, 4, 2, 379, 379, 399, 400, 6, 2, 34, 34, 397, 397, 401, 401, 404, 404, 4, 2, 399, 400, 402, 402, 3, 2, 399, 400, 3, 2, 408, 409, 4, 2, 408, 408, 411, 411, 6, 2, 34, 34, 397, 397, 399, 401, 403, 404, 5, 2, 300, 300, 378, 379, 399, 400, 4, 2, 251, 251, 354, 354, 4, 2, 180, 180, 237, 237, 12, 2, 80, 80, 82, 82, 116, 116, 173, 173, 229, 229, 263, 263, 291, 291, 294, 294, 331, 331, 374, 374, 18, 2, 16, 16, 29, 30, 38, 38, 60, 60, 80, 83, 87, 88, 116, 116, 132, 132, 173, 174, 177, 177, 229, 229, 263, 263, 291, 291, 294, 294, 331, 331, 374, 374, 8, 2, 180, 180, 198, 198, 237, 237, 280, 280, 353, 353, 397, 397, 30, 2, 61, 61, 79, 79, 116, 116, 173, 173, 179, 179, 186, 186, 190, 190, 204, 205, 211, 211, 213, 213, 220, 220, 227, 227, 260, 260, 263, 263, 277, 277, 281, 281, 291, 291, 294, 294, 312, 312, 318, 319, 322, 322, 325, 325, 331, 331, 340, 341, 349, 350, 355, 355, 360, 360, 374, 374, 7, 2, 179, 243, 245, 318, 320, 341, 343, 352, 354, 374, 5, 2, 6, 37, 39, 173, 175, 178, 2, 2359, 2, 368, 3, 2, 2, 2, 4, 371, 3, 2, 2, 2, 6, 381, 3, 2, 2, 2, 8, 396, 3, 2, 2, 2, 10, 398, 3, 2, 2, 2, 12, 414, 3, 2, 2, 2, 14, 418, 3, 2, 2, 2, 16, 420, 3, 2, 2, 2, 18, 423, 3, 2, 2, 2, 20, 434, 3, 2, 2, 2, 22, 442, 3, 2, 2, 2, 24, 450, 3, 2, 2, 2, 26, 452, 3, 2, 2, 2, 28, 497, 3, 2, 2, 2, 30, 499, 3, 2, 2, 2, 32, 506, 3, 2, 2, 2, 34, 510, 3, 2, 2, 2, 36, 514, 3, 2, 2, 2, 38, 518, 3, 2, 2, 2, 40, 562, 3, 2, 2, 2, 42, 565, 3, 2, 2, 2, 44, 571, 3, 2, 2, 2, 46, 573, 3, 2, 2, 2, 48, 614, 3, 2, 2, 2, 50, 628, 3, 2, 2, 2, 52, 630, 3, 2, 2, 2, 54, 640, 3, 2, 2, 2, 56, 642, 3, 2, 2, 2, 58, 690, 3, 2, 2, 2, 60, 692, 3, 2, 2, 2, 62, 696, 3, 2, 2, 2, 64, 704, 3, 2, 2, 2, 66, 712, 3, 2, 2, 2, 68, 716, 3, 2, 2, 2, 70, 723, 3, 2, 2, 2, 72, 751, 3, 2, 2, 2, 74, 753, 3, 2, 2, 2, 76, 756, 3, 2, 2, 2, 78, 766, 3, 2, 2, 2, 80, 768, 3, 2, 2, 2, 82, 774, 3, 2, 2, 2, 84, 776, 3, 2, 2, 2, 86, 784, 3, 2, 2, 2, 88, 792, 3, 2, 2, 2, 90, 794, 3, 2, 2, 2, 92, 798, 3, 2, 2, 2, 94, 802, 3, 2, 2, 2, 96, 826, 3, 2, 2, 2, 98, 830, 3, 2, 2, 2, 100, 832, 3, 2, 2, 2, 102, 844, 3, 2, 2, 2, 104, 850, 3, 2, 2, 2, 106, 852, 3, 2, 2, 2, 108, 857, 3, 2, 2, 2, 110, 868, 3, 2, 2, 2, 112, 886, 3, 2, 2, 2, 114, 906, 3, 2, 2, 2, 116, 917, 3, 2, 2, 2, 118, 919, 3, 2, 2, 2, 120, 932, 3, 2, 2, 2, 122, 939, 3, 2, 2, 2, 124, 942, 3, 2, 2, 2, 126, 951, 3, 2, 2, 2, 128, 955, 3, 2, 2, 2, 130, 959, 3, 2, 2, 2, 132, 962, 3, 2, 2, 2, 134, 970, 3, 2, 2, 2, 136, 975, 3, 2, 2, 2, 138, 992, 3, 2, 2, 2, 140, 999, 3, 2, 2, 2, 142, 1009, 3, 2, 2, 2, 144, 1018, 3, 2, 2, 2, 146, 1028, 3, 2, 2, 2, 148, 1047, 3, 2, 2, 2, 150, 1049, 3, 2, 2, 2, 152, 1062, 3, 2, 2, 2, 154, 1065, 3, 2, 2, 2, 156, 1074, 3, 2, 2, 2, 158, 1085, 3, 2, 2, 2, 160, 1098, 3, 2, 2, 2, 162, 1133, 3, 2, 2, 2, 164, 1152, 3, 2, 2, 2, 166, 1161, 3, 2, 2, 2, 168, 1170, 3, 2, 2, 2, 170, 1189, 3, 2, 2, 2, 172, 1209, 3, 2, 2, 2, 174, 1211, 3, 2, 2, 2, 176, 1234, 3, 2, 2, 2, 178, 1248, 3, 2, 2, 2, 180, 1250, 3, 2, 2, 2, 182, 1264, 3, 2, 2, 2, 184, 1290, 3, 2, 2, 2, 186, 1335, 3, 2, 2, 2, 188, 1337, 3, 2, 2, 2, 190, 1339, 3, 2, 2, 2, 192, 1345, 3, 2, 2, 2, 194, 1347, 3, 2, 2, 2, 196, 1352, 3, 2, 2, 2, 198, 1357, 3, 2, 2, 2, 200, 1369, 3, 2, 2, 2, 202, 1386, 3, 2, 2, 2, 204, 1388, 3, 2, 2, 2, 206, 1390, 3, 2, 2, 2, 208, 1409, 3, 2, 2, 2, 210, 1411, 3, 2, 2, 2, 212, 1414, 3, 2, 2, 2, 214, 1463, 3, 2, 2, 2, 216, 1465, 3, 2, 2, 2, 218, 1468, 3, 2, 2, 2, 220, 1470, 3, 2, 2, 2, 222, 1477, 3, 2, 2, 2, 224, 1479, 3, 2, 2, 2, 226, 1481, 3, 2, 2, 2, 228, 1484, 3, 2, 2, 2, 230, 1493, 3, 2, 2, 2, 232, 1498, 3, 2, 2, 2, 234, 1512, 3, 2, 2, 2, 236, 1540, 3, 2, 2, 2, 238, 1550, 3, 2, 2, 2, 240, 1558, 3, 2, 2, 2, 242, 1563, 3, 2, 2, 2, 244, 1589, 3, 2, 2, 2, 246, 1591, 3, 2, 2, 2, 248, 1600, 3, 2, 2, 2, 250, 1611, 3, 2, 2, 2, 252, 1623, 3, 2, 2, 2, 254, 1649, 3, 2, 2, 2, 256, 1651, 3, 2, 2, 2, 258, 1669, 3, 2, 2, 2, 260, 1671, 3, 2, 2, 2, 262, 1676, 3, 2, 2, 2, 264, 1679, 3, 2, 2, 2, 266, 1693, 3, 2, 2, 2, 268, 1779, 3, 2, 2, 2, 270, 1810, 3, 2, 2, 2, 272, 1816, 3, 2, 2, 2, 274, 1935, 3, 2, 2, 2, 276, 1950, 3, 2, 2, 2, 278, 1956, 3, 2, 2, 2, 280, 1958, 3, 2, 2, 2, 282, 1960, 3, 2, 2, 2, 284, 1964, 3, 2, 2, 2, 286, 1966, 3, 2, 2, 2, 288, 1971, 3, 2, 2, 2, 290, 1978, 3, 2, 2, 2, 292, 1982, 3, 2, 2, 2, 294, 1987, 3, 2, 2, 2, 296, 1997, 3, 2, 2, 2, 298, 2000, 3, 2, 2, 2, 300, 2007, 3, 2, 2, 2, 302, 2013, 3, 2, 2, 2, 304, 2023, 3, 2, 2, 2, 306, 2025, 3, 2, 2, 2, 308, 2029, 3, 2, 2, 2, 310, 2040, 3, 2, 2, 2, 312, 2042, 3, 2, 2, 2, 314, 2044, 3, 2, 2, 2, 316, 2046, 3, 2, 2, 2, 318, 2051, 3, 2, 2, 2, 320, 2059, 3, 2, 2, 2, 322, 2062, 3, 2, 2, 2, 324, 2066, 3, 2, 2, 2, 326, 2069, 3, 2, 2, 2, 328, 2080, 3, 2, 2, 2, 330, 2090, 3, 2, 2, 2, 332, 2096, 3, 2, 2, 2, 334, 2104, 3, 2, 2, 2, 336, 2120, 3, 2, 2, 2, 338, 2129, 3, 2, 2, 2, 340, 2131, 3, 2, 2, 2, 342, 2133, 3, 2, 2, 2, 344, 2149, 3, 2, 2, 2, 346, 2151, 3, 2, 2, 2, 348, 2154, 3, 2, 2, 2, 350, 2156, 3, 2, 2, 2, 352, 2158, 3, 2, 2, 2, 354, 2160, 3, 2, 2, 2, 356, 2162, 3, 2, 2, 2, 358, 2164, 3, 2, 2, 2, 360, 2166, 3, 2, 2, 2, 362, 2168, 3, 2, 2, 2, 364, 2170, 3, 2, 2, 2, 366, 2172, 3, 2, 2, 2, 368, 369, 5, 4, 3, 2, 369, 370, 7, 2, 2, 3, 370, 3, 3, 2, 2, 2, 371, 372, 5, 6, 4, 2, 372, 373, 7, 2, 2, 3, 373, 5, 3, 2, 2, 2, 374, 376, 5, 8, 5, 2, 375, 377, 7, 391, 2, 2, 376, 375, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 380, 3, 2, 2, 2, 378, 380, 5, 10, 6, 2, 379, 374, 3, 2, 2, 2, 379, 378, 3, 2, 2, 2, 380, 383, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 7, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 397, 5, 12, 7, 2, 385, 397, 5, 14, 8, 2, 386, 397, 5, 16, 9, 2, 387, 397, 5, 18, 10, 2, 388, 397, 5, 24, 13, 2, 389, 397, 5, 28, 15, 2, 390, 397, 5, 30, 16, 2, 391, 397, 5, 32, 17, 2, 392, 397, 5, 34, 18, 2, 393, 397, 5, 36, 19, 2, 394, 397, 5, 38, 20, 2, 395, 397, 5, 40, 21, 2, 396, 384, 3, 2, 2, 2, 396, 385, 3, 2, 2, 2, 396, 386, 3, 2, 2, 2, 396, 387, 3, 2, 2, 2, 396, 388, 3, 2, 2, 2, 396, 389, 3, 2, 2, 2, 396, 390, 3, 2, 2, 2, 396, 391, 3, 2, 2, 2, 396, 392, 3, 2, 2, 2, 396, 393, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 395, 3, 2, 2, 2, 397, 9, 3, 2, 2, 2, 398, 399, 7, 391, 2, 2, 399, 11, 3, 2, 2, 2, 400, 415, 5, 44, 23, 2, 401, 415, 5, 108, 55, 2, 402, 415, 5, 110, 56, 2, 403, 415, 5, 112, 57, 2, 404, 415, 5, 106, 54, 2, 405, 415, 5, 118, 60, 2, 406, 415, 5, 132, 67, 2, 407, 415, 5, 134, 68, 2, 408, 415, 5, 136, 69, 2, 409, 415, 5, 138, 70, 2, 410, 415, 5, 140, 71, 2, 411, 415, 5, 142, 72, 2, 412, 415, 5, 144, 73, 2, 413, 415, 5, 146, 74, 2, 414, 400, 3, 2, 2, 2, 414, 401, 3, 2, 2, 2, 414, 402, 3, 2, 2, 2, 414, 403, 3, 2, 2, 2, 414, 404, 3, 2, 2, 2, 414, 405, 3, 2, 2, 2, 414, 406, 3, 2, 2, 2, 414, 407, 3, 2, 2, 2, 414, 408, 3, 2, 2, 2, 414, 409, 3, 2, 2, 2, 414, 410, 3, 2, 2, 2, 414, 411, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 414, 413, 3, 2, 2, 2, 415, 13, 3, 2, 2, 2, 416, 419, 5, 162, 82, 2, 417, 419, 5, 148, 75, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 15, 3, 2, 2, 2, 420, 421, 9, 2, 2, 2, 421, 422, 5, 318, 160, 2, 422, 17, 3, 2, 2, 2, 423, 427, 7, 248, 2, 2, 424, 428, 5, 20, 11, 2, 425, 426, 7, 103, 2, 2, 426, 428, 7, 253, 2, 2, 427, 424, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 432, 3, 2, 2, 2, 429, 433, 5, 14, 8, 2, 430, 433, 5, 150, 76, 2, 431, 433, 5, 160, 81, 2, 432, 429, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 431, 3, 2, 2, 2, 433, 19, 3, 2, 2, 2, 434, 439, 5, 22, 12, 2, 435, 436, 7, 390, 2, 2, 436, 438, 5, 22, 12, 2, 437, 435, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 21, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 443, 9, 3, 2, 2, 443, 23, 3, 2, 2, 2, 444, 446, 7, 163, 2, 2, 445, 447, 7, 14, 2, 2, 446, 445, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 451, 5, 318, 160, 2, 449, 451, 5, 26, 14, 2, 450, 444, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 25, 3, 2, 2, 2, 452, 453, 7, 163, 2, 2, 453, 454, 7, 86, 2, 2, 454, 459, 5, 318, 160, 2, 455, 456, 7, 390, 2, 2, 456, 458, 5, 318, 160, 2, 457, 455, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 27, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 463, 7, 334, 2, 2, 463, 498, 9, 4, 2, 2, 464, 465, 7, 334, 2, 2, 465, 466, 7, 224, 2, 2, 466, 498, 9, 5, 2, 2, 467, 468, 7, 334, 2, 2, 468, 471, 7, 151, 2, 2, 469, 470, 9, 6, 2, 2, 470, 472, 5, 318, 160, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 475, 5, 270, 136, 2, 474, 473, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 498, 3, 2, 2, 2, 476, 477, 7, 334, 2, 2, 477, 478, 7, 22, 2, 2, 478, 479, 9, 6, 2, 2, 479, 481, 5, 318, 160, 2, 480, 482, 5, 270, 136, 2, 481, 480, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 498, 3, 2, 2, 2, 483, 484, 7, 334, 2, 2, 484, 485, 7, 221, 2, 2, 485, 486, 9, 7, 2, 2, 486, 498, 5, 318, 160, 2, 487, 489, 7, 334, 2, 2, 488, 490, 7, 362, 2, 2, 489, 488, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 498, 7, 53, 2, 2, 492, 494, 7, 334, 2, 2, 493, 495, 7, 255, 2, 2, 494, 493, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 7, 86, 2, 2, 497, 462, 3, 2, 2, 2, 497, 464, 3, 2, 2, 2, 497, 467, 3, 2, 2, 2, 497, 476, 3, 2, 2, 2, 497, 483, 3, 2, 2, 2, 497, 487, 3, 2, 2, 2, 497, 492, 3, 2, 2, 2, 498, 29, 3, 2, 2, 2, 499, 500, 7, 78, 2, 2, 500, 501, 7, 293, 2, 2, 501, 504, 5, 318, 160, 2, 502, 503, 7, 371, 2, 2, 503, 505, 5, 326, 164, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 31, 3, 2, 2, 2, 506, 507, 7, 161, 2, 2, 507, 508, 7, 293, 2, 2, 508, 509, 5, 318, 160, 2, 509, 33, 3, 2, 2, 2, 510, 512, 7, 333, 2, 2, 511, 513, 5, 328, 165, 2, 512, 511, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 35, 3, 2, 2, 2, 514, 516, 7, 323, 2, 2, 515, 517, 5, 330, 166, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 37, 3, 2, 2, 2, 518, 519, 9, 8, 2, 2, 519, 520, 7, 66, 2, 2, 520, 521, 5, 116, 59, 2, 521, 39, 3, 2, 2, 2, 522, 523, 7, 6, 2, 2, 523, 524, 7, 66, 2, 2, 524, 525, 7, 371, 2, 2, 525, 528, 5, 42, 22, 2, 526, 527, 7, 187, 2, 2, 527, 529, 5, 318, 160, 2, 528, 526, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 563, 3, 2, 2, 2, 530, 531, 7, 6, 2, 2, 531, 532, 7, 45, 2, 2, 532, 533, 7, 371, 2, 2, 533, 536, 5, 42, 22, 2, 534, 535, 7, 187, 2, 2, 535, 537, 5, 318, 160, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 540, 3, 2, 2, 2, 538, 539, 7, 121, 2, 2, 539, 541, 5, 318, 160, 2, 540, 538, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 563, 3, 2, 2, 2, 542, 543, 7, 6, 2, 2, 543, 544, 9, 9, 2, 2, 544, 545, 7, 371, 2, 2, 545, 546, 5, 42, 22, 2, 546, 547, 7, 121, 2, 2, 547, 548, 5, 318, 160, 2, 548, 563, 3, 2, 2, 2, 549, 550, 7, 6, 2, 2, 550, 551, 7, 115, 2, 2, 551, 563, 5, 42, 22, 2, 552, 553, 7, 6, 2, 2, 553, 554, 7, 37, 2, 2, 554, 555, 7, 45, 2, 2, 555, 556, 7, 371, 2, 2, 556, 557, 5, 42, 22, 2, 557, 558, 7, 121, 2, 2, 558, 559, 5, 318, 160, 2, 559, 560, 7, 71, 2, 2, 560, 561, 5, 318, 160, 2, 561, 563, 3, 2, 2, 2, 562, 522, 3, 2, 2, 2, 562, 530, 3, 2, 2, 2, 562, 542, 3, 2, 2, 2, 562, 549, 3, 2, 2, 2, 562, 552, 3, 2, 2, 2, 563, 41, 3, 2, 2, 2, 564, 566, 7, 412, 2, 2, 565, 564, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 43, 3, 2, 2, 2, 569, 572, 5, 46, 24, 2, 570, 572, 5, 48, 25, 2, 571, 569, 3, 2, 2, 2, 571, 570, 3, 2, 2, 2, 572, 45, 3, 2, 2, 2, 573, 575, 7, 221, 2, 2, 574, 576, 7, 152, 2, 2, 575, 574, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 579, 7, 346, 2, 2, 578, 580, 5, 322, 162, 2, 579, 578, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 5, 102, 52, 2, 582, 583, 7, 386, 2, 2, 583, 588, 5, 50, 26, 2, 584, 585, 7, 390, 2, 2, 585, 587, 5, 50, 26, 2, 586, 584, 3, 2, 2, 2, 587, 590, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 588, 589, 3, 2, 2, 2, 589, 593, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 591, 592, 7, 390, 2, 2, 592, 594, 5, 84, 43, 2, 593, 591, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 597, 3, 2, 2, 2, 595, 596, 7, 390, 2, 2, 596, 598, 5, 86, 44, 2, 597, 595, 3, 2, 2, 2, 597, 598, 3, 2, 2, 2, 598, 601, 3, 2, 2, 2, 599, 600, 7, 390, 2, 2, 600, 602, 5, 90, 46, 2, 601, 599, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 605, 7, 387, 2, 2, 604, 606, 5, 74, 38, 2, 605, 604, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 608, 3, 2, 2, 2, 607, 609, 5, 92, 47, 2, 608, 607, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 612, 5, 320, 161, 2, 611, 613, 5, 100, 51, 2, 612, 611, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 47, 3, 2, 2, 2, 614, 615, 7, 221, 2, 2, 615, 617, 7, 346, 2, 2, 616, 618, 5, 322, 162, 2, 617, 616, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 5, 102, 52, 2, 620, 623, 5, 320, 161, 2, 621, 622, 7, 187, 2, 2, 622, 624, 5, 162, 82, 2, 623, 621, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 49, 3, 2, 2, 2, 625, 629, 5, 52, 27, 2, 626, 629, 5, 76, 39, 2, 627, 629, 5, 80, 41, 2, 628, 625, 3, 2, 2, 2, 628, 626, 3, 2, 2, 2, 628, 627, 3, 2, 2, 2, 629, 51, 3, 2, 2, 2, 630, 631, 5, 54, 28, 2, 631, 633, 5, 58, 30, 2, 632, 634, 5, 72, 37, 2, 633, 632, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634, 636, 3, 2, 2, 2, 635, 637, 5, 74, 38, 2, 636, 635, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 53, 3, 2, 2, 2, 638, 641, 5, 318, 160, 2, 639, 641, 5, 264, 133, 2, 640, 638, 3, 2, 2, 2, 640, 639, 3, 2, 2, 2, 641, 55, 3, 2, 2, 2, 642, 643, 7, 386, 2, 2, 643, 648, 5, 54, 28, 2, 644, 645, 7, 390, 2, 2, 645, 647, 5, 54, 28, 2, 646, 644, 3, 2, 2, 2, 647, 650, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 651, 3, 2, 2, 2, 650, 648, 3, 2, 2, 2, 651, 652, 7, 387, 2, 2, 652, 57, 3, 2, 2, 2, 653, 691, 9, 10, 2, 2, 654, 656, 9, 11, 2, 2, 655, 657, 5, 60, 31, 2, 656, 655, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 691, 3, 2, 2, 2, 658, 660, 7, 350, 2, 2, 659, 661, 5, 60, 31, 2, 660, 659, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 668, 3, 2, 2, 2, 662, 664, 9, 12, 2, 2, 663, 665, 7, 284, 2, 2, 664, 663, 3, 2, 2, 2, 664, 665, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 667, 7, 349, 2, 2, 667, 669, 7, 178, 2, 2, 668, 662, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 691, 3, 2, 2, 2, 670, 672, 9, 13, 2, 2, 671, 673, 5, 62, 32, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 691, 3, 2, 2, 2, 674, 676, 9, 14, 2, 2, 675, 677, 5, 66, 34, 2, 676, 675, 3, 2, 2, 2, 676, 677, 3, 2, 2, 2, 677, 691, 3, 2, 2, 2, 678, 680, 7, 79, 2, 2, 679, 681, 5, 68, 35, 2, 680, 679, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 691, 3, 2, 2, 2, 682, 684, 7, 329, 2, 2, 683, 685, 5, 70, 36, 2, 684, 683, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 691, 3, 2, 2, 2, 686, 688, 7, 117, 2, 2, 687, 689, 5, 64, 33, 2, 688, 687, 3, 2, 2, 2, 688, 689, 3, 2, 2, 2, 689, 691, 3, 2, 2, 2, 690, 653, 3, 2, 2, 2, 690, 654, 3, 2, 2, 2, 690, 658, 3, 2, 2, 2, 690, 670, 3, 2, 2, 2, 690, 674, 3, 2, 2, 2, 690, 678, 3, 2, 2, 2, 690, 682, 3, 2, 2, 2, 690, 686, 3, 2, 2, 2, 691, 59, 3, 2, 2, 2, 692, 693, 7, 386, 2, 2, 693, 694, 5, 350, 176, 2, 694, 695, 7, 387, 2, 2, 695, 61, 3, 2, 2, 2, 696, 697, 7, 386, 2, 2, 697, 700, 5, 350, 176, 2, 698, 699, 7, 390, 2, 2, 699, 701, 5, 350, 176, 2, 700, 698, 3, 2, 2, 2, 700, 701, 3, 2, 2, 2, 701, 702, 3, 2, 2, 2, 702, 703, 7, 387, 2, 2, 703, 63, 3, 2, 2, 2, 704, 705, 7, 386, 2, 2, 705, 708, 5, 348, 175, 2, 706, 707, 7, 390, 2, 2, 707, 709, 5, 348, 175, 2, 708, 706, 3, 2, 2, 2, 708, 709, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 711, 7, 387, 2, 2, 711, 65, 3, 2, 2, 2, 712, 713, 7, 377, 2, 2, 713, 714, 5, 58, 30, 2, 714, 715, 7, 376, 2, 2, 715, 67, 3, 2, 2, 2, 716, 717, 7, 377, 2, 2, 717, 718, 5, 58, 30, 2, 718, 719, 7, 390, 2, 2, 719, 720, 5, 58, 30, 2, 720, 721, 3, 2, 2, 2, 721, 722, 7, 376, 2, 2, 722, 69, 3, 2, 2, 2, 723, 724, 7, 377, 2, 2, 724, 725, 5, 54, 28, 2, 725, 732, 5, 58, 30, 2, 726, 727, 7, 390, 2, 2, 727, 728, 5, 54, 28, 2, 728, 729, 5, 58, 30, 2, 729, 731, 3, 2, 2, 2, 730, 726, 3, 2, 2, 2, 731, 734, 3, 2, 2, 2, 732, 730, 3, 2, 2, 2, 732, 733, 3, 2, 2, 2, 733, 735, 3, 2, 2, 2, 734, 732, 3, 2, 2, 2, 735, 736, 7, 376, 2, 2, 736, 71, 3, 2, 2, 2, 737, 738, 7, 217, 2, 2, 738, 740, 5, 88, 45, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 742, 7, 320, 2, 2, 742, 745, 7, 71, 2, 2, 743, 744, 7, 300, 2, 2, 744, 746, 7, 36, 2, 2, 745, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 752, 3, 2, 2, 2, 747, 749, 7, 300, 2, 2, 748, 747, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 752, 7, 301, 2, 2, 751, 739, 3, 2, 2, 2, 751, 748, 3, 2, 2, 2, 752, 73, 3, 2, 2, 2, 753, 754, 7, 20, 2, 2, 754, 755, 7, 407, 2, 2, 755, 75, 3, 2, 2, 2, 756, 757, 5, 54, 28, 2, 757, 758, 5, 58, 30, 2, 758, 761, 7, 289, 2, 2, 759, 760, 7, 254, 2, 2, 760, 762, 5, 78, 40, 2, 761, 759, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 764, 3, 2, 2, 2, 763, 765, 7, 170, 2, 2, 764, 763, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 77, 3, 2, 2, 2, 766, 767, 7, 407, 2, 2, 767, 79, 3, 2, 2, 2, 768, 769, 5, 54, 28, 2, 769, 770, 7, 187, 2, 2, 770, 772, 5, 82, 42, 2, 771, 773, 5, 74, 38, 2, 772, 771, 3, 2, 2, 2, 772, 773, 3, 2, 2, 2, 773, 81, 3, 2, 2, 2, 774, 775, 5, 264, 133, 2, 775, 83, 3, 2, 2, 2, 776, 777, 7, 171, 2, 2, 777, 778, 7, 253, 2, 2, 778, 779, 5, 264, 133, 2, 779, 780, 7, 187, 2, 2, 780, 781, 5, 264, 133, 2, 781, 85, 3, 2, 2, 2, 782, 783, 7, 217, 2, 2, 783, 785, 5, 88, 45, 2, 784, 782, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 787, 7, 320, 2, 2, 787, 788, 7, 71, 2, 2, 788, 789, 5, 56, 29, 2, 789, 790, 7, 300, 2, 2, 790, 791, 7, 36, 2, 2, 791, 87, 3, 2, 2, 2, 792, 793, 5, 310, 156, 2, 793, 89, 3, 2, 2, 2, 794, 795, 7, 317, 2, 2, 795, 796, 7, 253, 2, 2, 796, 797, 7, 344, 2, 2, 797, 91, 3, 2, 2, 2, 798, 799, 7, 97, 2, 2, 799, 800, 7, 199, 2, 2, 800, 801, 5, 94, 48, 2, 801, 93, 3, 2, 2, 2, 802, 803, 7, 386, 2, 2, 803, 808, 5, 96, 49, 2, 804, 805, 7, 390, 2, 2, 805, 807, 5, 96, 49, 2, 806, 804, 3, 2, 2, 2, 807, 810, 3, 2, 2, 2, 808, 806, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 811, 3, 2, 2, 2, 810, 808, 3, 2, 2, 2, 811, 812, 7, 387, 2, 2, 812, 95, 3, 2, 2, 2, 813, 827, 5, 284, 143, 2, 814, 815, 5, 310, 156, 2, 815, 816, 7, 386, 2, 2, 816, 821, 5, 98, 50, 2, 817, 818, 7, 390, 2, 2, 818, 820, 5, 98, 50, 2, 819, 817, 3, 2, 2, 2, 820, 823, 3, 2, 2, 2, 821, 819, 3, 2, 2, 2, 821, 822, 3, 2, 2, 2, 822, 824, 3, 2, 2, 2, 823, 821, 3, 2, 2, 2, 824, 825, 7, 387, 2, 2, 825, 827, 3, 2, 2, 2, 826, 813, 3, 2, 2, 2, 826, 814, 3, 2, 2, 2, 827, 97, 3, 2, 2, 2, 828, 831, 5, 284, 143, 2, 829, 831, 5, 344, 173, 2, 830, 828, 3, 2, 2, 2, 830, 829, 3, 2, 2, 2, 831, 99, 3, 2, 2, 2, 832, 833, 7, 282, 2, 2, 833, 842, 5, 102, 52, 2, 834, 838, 7, 386, 2, 2, 835, 837, 5, 104, 53, 2, 836, 835, 3, 2, 2, 2, 837, 840, 3, 2, 2, 2, 838, 836, 3, 2, 2, 2, 838, 839, 3, 2, 2, 2, 839, 841, 3, 2, 2, 2, 840, 838, 3, 2, 2, 2, 841, 843, 7, 387, 2, 2, 842, 834, 3, 2, 2, 2, 842, 843, 3, 2, 2, 2, 843, 101, 3, 2, 2, 2, 844, 845, 5, 318, 160, 2, 845, 103, 3, 2, 2, 2, 846, 847, 9, 15, 2, 2, 847, 851, 9, 16, 2, 2, 848, 849, 9, 17, 2, 2, 849, 851, 9, 18, 2, 2, 850, 846, 3, 2, 2, 2, 850, 848, 3, 2, 2, 2, 851, 105, 3, 2, 2, 2, 852, 853, 7, 221, 2, 2, 853, 854, 7, 14, 2, 2, 854, 855, 5, 318, 160, 2, 855, 856, 5, 320, 161, 2, 856, 107, 3, 2, 2, 2, 857, 858, 7, 221, 2, 2, 858, 860, 7, 27, 2, 2, 859, 861, 5, 322, 162, 2, 860, 859, 3, 2, 2, 2, 860, 861, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 864, 5, 318, 160, 2, 863, 865, 5, 74, 38, 2, 864, 863, 3, 2, 2, 2, 864, 865, 3, 2, 2, 2, 865, 866, 3, 2, 2, 2, 866, 867, 5, 320, 161, 2, 867, 109, 3, 2, 2, 2, 868, 870, 7, 221, 2, 2, 869, 871, 7, 152, 2, 2, 870, 869, 3, 2, 2, 2, 870, 871, 3, 2, 2, 2, 871, 872, 3, 2, 2, 2, 872, 874, 7, 168, 2, 2, 873, 875, 5, 322, 162, 2, 874, 873, 3, 2, 2, 2, 874, 875, 3, 2, 2, 2, 875, 876, 3, 2, 2, 2, 876, 878, 5, 318, 160, 2, 877, 879, 5, 56, 29, 2, 878, 877, 3, 2, 2, 2, 878, 879, 3, 2, 2, 2, 879, 881, 3, 2, 2, 2, 880, 882, 5, 74, 38, 2, 881, 880, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, 884, 7, 187, 2, 2, 884, 885, 5, 162, 82, 2, 885, 111, 3, 2, 2, 2, 886, 890, 7, 221, 2, 2, 887, 891, 7, 152, 2, 2, 888, 889, 7, 152, 2, 2, 889, 891, 7, 343, 2, 2, 890, 887, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 890, 891, 3, 2, 2, 2, 891, 892, 3, 2, 2, 2, 892, 894, 7, 256, 2, 2, 893, 895, 5, 322, 162, 2, 894, 893, 3, 2, 2, 2, 894, 895, 3, 2, 2, 2, 895, 896, 3, 2, 2, 2, 896, 897, 5, 318, 160, 2, 897, 898, 7, 187, 2, 2, 898, 901, 5, 310, 156, 2, 899, 900, 7, 278, 2, 2, 900, 902, 9, 19, 2, 2, 901, 899, 3, 2, 2, 2, 901, 902, 3, 2, 2, 2, 902, 904, 3, 2, 2, 2, 903, 905, 5, 114, 58, 2, 904, 903, 3, 2, 2, 2, 904, 905, 3, 2, 2, 2, 905, 113, 3, 2, 2, 2, 906, 907, 7, 363, 2, 2, 907, 908, 7, 66, 2, 2, 908, 914, 5, 116, 59, 2, 909, 910, 7, 390, 2, 2, 910, 911, 7, 66, 2, 2, 911, 913, 5, 116, 59, 2, 912, 909, 3, 2, 2, 2, 913, 916, 3, 2, 2, 2, 914, 912, 3, 2, 2, 2, 914, 915, 3, 2, 2, 2, 915, 115, 3, 2, 2, 2, 916, 914, 3, 2, 2, 2, 917, 918, 7, 407, 2, 2, 918, 117, 3, 2, 2, 2, 919, 920, 7, 182, 2, 2, 920, 922, 7, 346, 2, 2, 921, 923, 5, 324, 163, 2, 922, 921, 3, 2, 2, 2, 922, 923, 3, 2, 2, 2, 923, 924, 3, 2, 2, 2, 924, 930, 5, 318, 160, 2, 925, 931, 5, 120, 61, 2, 926, 931, 5, 122, 62, 2, 927, 931, 5, 124, 63, 2, 928, 931, 5, 126, 64, 2, 929, 931, 5, 128, 65, 2, 930, 925, 3, 2, 2, 2, 930, 926, 3, 2, 2, 2, 930, 927, 3, 2, 2, 2, 930, 928, 3, 2, 2, 2, 930, 929, 3, 2, 2, 2, 931, 119, 3, 2, 2, 2, 932, 934, 7, 121, 2, 2, 933, 935, 5, 318, 160, 2, 934, 933, 3, 2, 2, 2, 934, 935, 3, 2, 2, 2, 935, 936, 3, 2, 2, 2, 936, 937, 7, 352, 2, 2, 937, 938, 5, 318, 160, 2, 938, 121, 3, 2, 2, 2, 939, 940, 7, 333, 2, 2, 940, 941, 5, 326, 164, 2, 941, 123, 3, 2, 2, 2, 942, 943, 7, 6, 2, 2, 943, 944, 7, 217, 2, 2, 944, 945, 5, 88, 45, 2, 945, 946, 7, 320, 2, 2, 946, 947, 7, 71, 2, 2, 947, 949, 5, 56, 29, 2, 948, 950, 5, 130, 66, 2, 949, 948, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 125, 3, 2, 2, 2, 951, 952, 7, 239, 2, 2, 952, 953, 7, 217, 2, 2, 953, 954, 5, 88, 45, 2, 954, 127, 3, 2, 2, 2, 955, 956, 7, 6, 2, 2, 956, 957, 7, 357, 2, 2, 957, 958, 5, 56, 29, 2, 958, 129, 3, 2, 2, 2, 959, 960, 7, 300, 2, 2, 960, 961, 7, 36, 2, 2, 961, 131, 3, 2, 2, 2, 962, 963, 7, 182, 2, 2, 963, 964, 7, 168, 2, 2, 964, 968, 5, 318, 160, 2, 965, 969, 5, 120, 61, 2, 966, 967, 7, 187, 2, 2, 967, 969, 5, 162, 82, 2, 968, 965, 3, 2, 2, 2, 968, 966, 3, 2, 2, 2, 969, 133, 3, 2, 2, 2, 970, 971, 7, 182, 2, 2, 971, 972, 7, 27, 2, 2, 972, 973, 5, 318, 160, 2, 973, 974, 5, 122, 62, 2, 974, 135, 3, 2, 2, 2, 975, 979, 7, 182, 2, 2, 976, 980, 7, 152, 2, 2, 977, 978, 7, 152, 2, 2, 978, 980, 7, 343, 2, 2, 979, 976, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 981, 3, 2, 2, 2, 981, 983, 7, 256, 2, 2, 982, 984, 5, 324, 163, 2, 983, 982, 3, 2, 2, 2, 983, 984, 3, 2, 2, 2, 984, 985, 3, 2, 2, 2, 985, 986, 5, 318, 160, 2, 986, 987, 7, 187, 2, 2, 987, 990, 5, 310, 156, 2, 988, 989, 7, 278, 2, 2, 989, 991, 9, 19, 2, 2, 990, 988, 3, 2, 2, 2, 990, 991, 3, 2, 2, 2, 991, 137, 3, 2, 2, 2, 992, 993, 7, 239, 2, 2, 993, 995, 7, 14, 2, 2, 994, 996, 5, 324, 163, 2, 995, 994, 3, 2, 2, 2, 995, 996, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 998, 5, 318, 160, 2, 998, 139, 3, 2, 2, 2, 999, 1001, 7, 239, 2, 2, 1000, 1002, 7, 152, 2, 2, 1001, 1000, 3, 2, 2, 2, 1001, 1002, 3, 2, 2, 2, 1002, 1003, 3, 2, 2, 2, 1003, 1005, 7, 346, 2, 2, 1004, 1006, 5, 324, 163, 2, 1005, 1004, 3, 2, 2, 2, 1005, 1006, 3, 2, 2, 2, 1006, 1007, 3, 2, 2, 2, 1007, 1008, 5, 318, 160, 2, 1008, 141, 3, 2, 2, 2, 1009, 1010, 7, 239, 2, 2, 1010, 1012, 7, 27, 2, 2, 1011, 1013, 5, 324, 163, 2, 1012, 1011, 3, 2, 2, 2, 1012, 1013, 3, 2, 2, 2, 1013, 1014, 3, 2, 2, 2, 1014, 1016, 5, 318, 160, 2, 1015, 1017, 9, 20, 2, 2, 1016, 1015, 3, 2, 2, 2, 1016, 1017, 3, 2, 2, 2, 1017, 143, 3, 2, 2, 2, 1018, 1020, 7, 239, 2, 2, 1019, 1021, 7, 152, 2, 2, 1020, 1019, 3, 2, 2, 2, 1020, 1021, 3, 2, 2, 2, 1021, 1022, 3, 2, 2, 2, 1022, 1024, 7, 168, 2, 2, 1023, 1025, 5, 324, 163, 2, 1024, 1023, 3, 2, 2, 2, 1024, 1025, 3, 2, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1027, 5, 318, 160, 2, 1027, 145, 3, 2, 2, 2, 1028, 1032, 7, 239, 2, 2, 1029, 1033, 7, 152, 2, 2, 1030, 1031, 7, 152, 2, 2, 1031, 1033, 7, 343, 2, 2, 1032, 1029, 3, 2, 2, 2, 1032, 1030, 3, 2, 2, 2, 1032, 1033, 3, 2, 2, 2, 1033, 1034, 3, 2, 2, 2, 1034, 1036, 7, 256, 2, 2, 1035, 1037, 5, 324, 163, 2, 1036, 1035, 3, 2, 2, 2, 1036, 1037, 3, 2, 2, 2, 1037, 1038, 3, 2, 2, 2, 1038, 1039, 5, 318, 160, 2, 1039, 147, 3, 2, 2, 2, 1040, 1042, 7, 246, 2, 2, 1041, 1040, 3, 2, 2, 2, 1041, 1042, 3, 2, 2, 2, 1042, 1043, 3, 2, 2, 2, 1043, 1048, 5, 150, 76, 2, 1044, 1048, 5, 158, 80, 2, 1045, 1046, 7, 246, 2, 2, 1046, 1048, 5, 160, 81, 2, 1047, 1041, 3, 2, 2, 2, 1047, 1044, 3, 2, 2, 2, 1047, 1045, 3, 2, 2, 2, 1048, 149, 3, 2, 2, 2, 1049, 1050, 7, 269, 2, 2, 1050, 1051, 9, 21, 2, 2, 1051, 1060, 5, 318, 160, 2, 1052, 1054, 5, 152, 77, 2, 1053, 1052, 3, 2, 2, 2, 1053, 1054, 3, 2, 2, 2, 1054, 1056, 3, 2, 2, 2, 1055, 1057, 5, 56, 29, 2, 1056, 1055, 3, 2, 2, 2, 1056, 1057, 3, 2, 2, 2, 1057, 1058, 3, 2, 2, 2, 1058, 1061, 5, 162, 82, 2, 1059, 1061, 5, 154, 78, 2, 1060, 1053, 3, 2, 2, 2, 1060, 1059, 3, 2, 2, 2, 1061, 151, 3, 2, 2, 2, 1062, 1063, 7, 313, 2, 2, 1063, 1064, 5, 326, 164, 2, 1064, 153, 3, 2, 2, 2, 1065, 1066, 7, 365, 2, 2, 1066, 1071, 5, 156, 79, 2, 1067, 1068, 7, 390, 2, 2, 1068, 1070, 5, 156, 79, 2, 1069, 1067, 3, 2, 2, 2, 1070, 1073, 3, 2, 2, 2, 1071, 1069, 3, 2, 2, 2, 1071, 1072, 3, 2, 2, 2, 1072, 155, 3, 2, 2, 2, 1073, 1071, 3, 2, 2, 2, 1074, 1075, 7, 386, 2, 2, 1075, 1080, 5, 344, 173, 2, 1076, 1077, 7, 390, 2, 2, 1077, 1079, 5, 344, 173, 2, 1078, 1076, 3, 2, 2, 2, 1079, 1082, 3, 2, 2, 2, 1080, 1078, 3, 2, 2, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1083, 3, 2, 2, 2, 1082, 1080, 3, 2, 2, 2, 1083, 1084, 7, 387, 2, 2, 1084, 157, 3, 2, 2, 2, 1085, 1086, 7, 191, 2, 2, 1086, 1087, 7, 146, 2, 2, 1087, 1088, 7, 333, 2, 2, 1088, 1092, 7, 391, 2, 2, 1089, 1090, 5, 150, 76, 2, 1090, 1091, 7, 391, 2, 2, 1091, 1093, 3, 2, 2, 2, 1092, 1089, 3, 2, 2, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1092, 3, 2, 2, 2, 1094, 1095, 3, 2, 2, 2, 1095, 1096, 3, 2, 2, 2, 1096, 1097, 7, 242, 2, 2, 1097, 159, 3, 2, 2, 2, 1098, 1099, 7, 146, 2, 2, 1099, 1100, 7, 333, 2, 2, 1100, 1104, 7, 191, 2, 2, 1101, 1102, 5, 150, 76, 2, 1102, 1103, 7, 391, 2, 2, 1103, 1105, 3, 2, 2, 2, 1104, 1101, 3, 2, 2, 2, 1105, 1106, 3, 2, 2, 2, 1106, 1104, 3, 2, 2, 2, 1106, 1107, 3, 2, 2, 2, 1107, 1108, 3, 2, 2, 2, 1108, 1109, 7, 242, 2, 2, 1109, 161, 3, 2, 2, 2, 1110, 1111, 8, 82, 1, 2, 1111, 1134, 5, 164, 83, 2, 1112, 1113, 5, 166, 84, 2, 1113, 1114, 5, 162, 82, 7, 1114, 1134, 3, 2, 2, 2, 1115, 1116, 7, 386, 2, 2, 1116, 1117, 5, 162, 82, 2, 1117, 1118, 7, 387, 2, 2, 1118, 1134, 3, 2, 2, 2, 1119, 1121, 5, 174, 88, 2, 1120, 1122, 5, 236, 119, 2, 1121, 1120, 3, 2, 2, 2, 1121, 1122, 3, 2, 2, 2, 1122, 1124, 3, 2, 2, 2, 1123, 1125, 5, 240, 121, 2, 1124, 1123, 3, 2, 2, 2, 1124, 1125, 3, 2, 2, 2, 1125, 1134, 3, 2, 2, 2, 1126, 1128, 5, 172, 87, 2, 1127, 1129, 5, 236, 119, 2, 1128, 1127, 3, 2, 2, 2, 1128, 1129, 3, 2, 2, 2, 1129, 1131, 3, 2, 2, 2, 1130, 1132, 5, 240, 121, 2, 1131, 1130, 3, 2, 2, 2, 1131, 1132, 3, 2, 2, 2, 1132, 1134, 3, 2, 2, 2, 1133, 1110, 3, 2, 2, 2, 1133, 1112, 3, 2, 2, 2, 1133, 1115, 3, 2, 2, 2, 1133, 1119, 3, 2, 2, 2, 1133, 1126, 3, 2, 2, 2, 1134, 1149, 3, 2, 2, 2, 1135, 1136, 12, 5, 2, 2, 1136, 1138, 9, 22, 2, 2, 1137, 1139, 7, 180, 2, 2, 1138, 1137, 3, 2, 2, 2, 1138, 1139, 3, 2, 2, 2, 1139, 1140, 3, 2, 2, 2, 1140, 1142, 5, 162, 82, 2, 1141, 1143, 5, 236, 119, 2, 1142, 1141, 3, 2, 2, 2, 1142, 1143, 3, 2, 2, 2, 1143, 1145, 3, 2, 2, 2, 1144, 1146, 5, 240, 121, 2, 1145, 1144, 3, 2, 2, 2, 1145, 1146, 3, 2, 2, 2, 1146, 1148, 3, 2, 2, 2, 1147, 1135, 3, 2, 2, 2, 1148, 1151, 3, 2, 2, 2, 1149, 1147, 3, 2, 2, 2, 1149, 1150, 3, 2, 2, 2, 1150, 163, 3, 2, 2, 2, 1151, 1149, 3, 2, 2, 2, 1152, 1153, 7, 365, 2, 2, 1153, 1158, 5, 264, 133, 2, 1154, 1155, 7, 390, 2, 2, 1155, 1157, 5, 264, 133, 2, 1156, 1154, 3, 2, 2, 2, 1157, 1160, 3, 2, 2, 2, 1158, 1156, 3, 2, 2, 2, 1158, 1159, 3, 2, 2, 2, 1159, 165, 3, 2, 2, 2, 1160, 1158, 3, 2, 2, 2, 1161, 1162, 7, 371, 2, 2, 1162, 1167, 5, 168, 85, 2, 1163, 1164, 7, 390, 2, 2, 1164, 1166, 5, 168, 85, 2, 1165, 1163, 3, 2, 2, 2, 1166, 1169, 3, 2, 2, 2, 1167, 1165, 3, 2, 2, 2, 1167, 1168, 3, 2, 2, 2, 1168, 167, 3, 2, 2, 2, 1169, 1167, 3, 2, 2, 2, 1170, 1182, 5, 170, 86, 2, 1171, 1172, 7, 386, 2, 2, 1172, 1177, 5, 54, 28, 2, 1173, 1174, 7, 390, 2, 2, 1174, 1176, 5, 54, 28, 2, 1175, 1173, 3, 2, 2, 2, 1176, 1179, 3, 2, 2, 2, 1177, 1175, 3, 2, 2, 2, 1177, 1178, 3, 2, 2, 2, 1178, 1180, 3, 2, 2, 2, 1179, 1177, 3, 2, 2, 2, 1180, 1181, 7, 387, 2, 2, 1181, 1183, 3, 2, 2, 2, 1182, 1171, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 1184, 3, 2, 2, 2, 1184, 1185, 7, 187, 2, 2, 1185, 1186, 7, 386, 2, 2, 1186, 1187, 5, 162, 82, 2, 1187, 1188, 7, 387, 2, 2, 1188, 169, 3, 2, 2, 2, 1189, 1190, 5, 310, 156, 2, 1190, 171, 3, 2, 2, 2, 1191, 1192, 5, 174, 88, 2, 1192, 1194, 5, 180, 91, 2, 1193, 1195, 5, 210, 106, 2, 1194, 1193, 3, 2, 2, 2, 1194, 1195, 3, 2, 2, 2, 1195, 1197, 3, 2, 2, 2, 1196, 1198, 5, 212, 107, 2, 1197, 1196, 3, 2, 2, 2, 1197, 1198, 3, 2, 2, 2, 1198, 1200, 3, 2, 2, 2, 1199, 1201, 5, 226, 114, 2, 1200, 1199, 3, 2, 2, 2, 1200, 1201, 3, 2, 2, 2, 1201, 1203, 3, 2, 2, 2, 1202, 1204, 5, 228, 115, 2, 1203, 1202, 3, 2, 2, 2, 1203, 1204, 3, 2, 2, 2, 1204, 1210, 3, 2, 2, 2, 1205, 1206, 5, 174, 88, 2, 1206, 1207, 5, 180, 91, 2, 1207, 1208, 5, 234, 118, 2, 1208, 1210, 3, 2, 2, 2, 1209, 1191, 3, 2, 2, 2, 1209, 1205, 3, 2, 2, 2, 1210, 173, 3, 2, 2, 2, 1211, 1213, 7, 332, 2, 2, 1212, 1214, 5, 354, 178, 2, 1213, 1212, 3, 2, 2, 2, 1213, 1214, 3, 2, 2, 2, 1214, 1224, 3, 2, 2, 2, 1215, 1225, 7, 397, 2, 2, 1216, 1221, 5, 176, 89, 2, 1217, 1218, 7, 390, 2, 2, 1218, 1220, 5, 176, 89, 2, 1219, 1217, 3, 2, 2, 2, 1220, 1223, 3, 2, 2, 2, 1221, 1219, 3, 2, 2, 2, 1221, 1222, 3, 2, 2, 2, 1222, 1225, 3, 2, 2, 2, 1223, 1221, 3, 2, 2, 2, 1224, 1215, 3, 2, 2, 2, 1224, 1216, 3, 2, 2, 2, 1225, 175, 3, 2, 2, 2, 1226, 1235, 5, 178, 90, 2, 1227, 1232, 5, 264, 133, 2, 1228, 1230, 7, 187, 2, 2, 1229, 1228, 3, 2, 2, 2, 1229, 1230, 3, 2, 2, 2, 1230, 1231, 3, 2, 2, 2, 1231, 1233, 5, 264, 133, 2, 1232, 1229, 3, 2, 2, 2, 1232, 1233, 3, 2, 2, 2, 1233, 1235, 3, 2, 2, 2, 1234, 1226, 3, 2, 2, 2, 1234, 1227, 3, 2, 2, 2, 1235, 177, 3, 2, 2, 2, 1236, 1237, 5, 274, 138, 2, 1237, 1238, 7, 311, 2, 2, 1238, 1239, 5, 232, 117, 2, 1239, 1240, 7, 187, 2, 2, 1240, 1241, 5, 310, 156, 2, 1241, 1249, 3, 2, 2, 2, 1242, 1243, 5, 274, 138, 2, 1243, 1244, 7, 311, 2, 2, 1244, 1245, 5, 302, 152, 2, 1245, 1246, 7, 187, 2, 2, 1246, 1247, 5, 310, 156, 2, 1247, 1249, 3, 2, 2, 2, 1248, 1236, 3, 2, 2, 2, 1248, 1242, 3, 2, 2, 2, 1249, 179, 3, 2, 2, 2, 1250, 1251, 7, 254, 2, 2, 1251, 1252, 5, 182, 92, 2, 1252, 181, 3, 2, 2, 2, 1253, 1254, 8, 92, 1, 2, 1254, 1259, 5, 184, 93, 2, 1255, 1256, 7, 390, 2, 2, 1256, 1258, 5, 184, 93, 2, 1257, 1255, 3, 2, 2, 2, 1258, 1261, 3, 2, 2, 2, 1259, 1257, 3, 2, 2, 2, 1259, 1260, 3, 2, 2, 2, 1260, 1265, 3, 2, 2, 2, 1261, 1259, 3, 2, 2, 2, 1262, 1265, 5, 194, 98, 2, 1263, 1265, 5, 196, 99, 2, 1264, 1253, 3, 2, 2, 2, 1264, 1262, 3, 2, 2, 2, 1264, 1263, 3, 2, 2, 2, 1265, 1287, 3, 2, 2, 2, 1266, 1267, 12, 5, 2, 2, 1267, 1268, 7, 222, 2, 2, 1268, 1269, 7, 276, 2, 2, 1269, 1286, 5, 182, 92, 6, 1270, 1272, 12, 6, 2, 2, 1271, 1273, 7, 296, 2, 2, 1272, 1271, 3, 2, 2, 2, 1272, 1273, 3, 2, 2, 2, 1273, 1275, 3, 2, 2, 2, 1274, 1276, 9, 23, 2, 2, 1275, 1274, 3, 2, 2, 2, 1275, 1276, 3, 2, 2, 2, 1276, 1278, 3, 2, 2, 2, 1277, 1279, 7, 310, 2, 2, 1278, 1277, 3, 2, 2, 2, 1278, 1279, 3, 2, 2, 2, 1279, 1280, 3, 2, 2, 2, 1280, 1281, 7, 276, 2, 2, 1281, 1283, 5, 182, 92, 2, 1282, 1284, 5, 208, 105, 2, 1283, 1282, 3, 2, 2, 2, 1283, 1284, 3, 2, 2, 2, 1284, 1286, 3, 2, 2, 2, 1285, 1266, 3, 2, 2, 2, 1285, 1270, 3, 2, 2, 2, 1286, 1289, 3, 2, 2, 2, 1287, 1285, 3, 2, 2, 2, 1287, 1288, 3, 2, 2, 2, 1288, 183, 3, 2, 2, 2, 1289, 1287, 3, 2, 2, 2, 1290, 1292, 5, 186, 94, 2, 1291, 1293, 5, 300, 151, 2, 1292, 1291, 3, 2, 2, 2, 1292, 1293, 3, 2, 2, 2, 1293, 185, 3, 2, 2, 2, 1294, 1296, 7, 346, 2, 2, 1295, 1294, 3, 2, 2, 2, 1295, 1296, 3, 2, 2, 2, 1296, 1297, 3, 2, 2, 2, 1297, 1299, 5, 188, 95, 2, 1298, 1300, 5, 190, 96, 2, 1299, 1298, 3, 2, 2, 2, 1299, 1300, 3, 2, 2, 2, 1300, 1305, 3, 2, 2, 2, 1301, 1303, 7, 187, 2, 2, 1302, 1301, 3, 2, 2, 2, 1302, 1303, 3, 2, 2, 2, 1303, 1304, 3, 2, 2, 2, 1304, 1306, 5, 282, 142, 2, 1305, 1302, 3, 2, 2, 2, 1305, 1306, 3, 2, 2, 2, 1306, 1336, 3, 2, 2, 2, 1307, 1308, 7, 279, 2, 2, 1308, 1309, 7, 346, 2, 2, 1309, 1310, 7, 386, 2, 2, 1310, 1311, 5, 276, 139, 2, 1311, 1312, 7, 386, 2, 2, 1312, 1317, 5, 278, 140, 2, 1313, 1314, 7, 390, 2, 2, 1314, 1316, 5, 278, 140, 2, 1315, 1313, 3, 2, 2, 2, 1316, 1319, 3, 2, 2, 2, 1317, 1315, 3, 2, 2, 2, 1317, 1318, 3, 2, 2, 2, 1318, 1320, 3, 2, 2, 2, 1319, 1317, 3, 2, 2, 2, 1320, 1321, 7, 387, 2, 2, 1321, 1322, 7, 387, 2, 2, 1322, 1336, 3, 2, 2, 2, 1323, 1325, 7, 279, 2, 2, 1324, 1323, 3, 2, 2, 2, 1324, 1325, 3, 2, 2, 2, 1325, 1326, 3, 2, 2, 2, 1326, 1327, 7, 386, 2, 2, 1327, 1328, 5, 162, 82, 2, 1328, 1329, 7, 387, 2, 2, 1329, 1336, 3, 2, 2, 2, 1330, 1331, 7, 359, 2, 2, 1331, 1332, 7, 386, 2, 2, 1332, 1333, 5, 264, 133, 2, 1333, 1334, 7, 387, 2, 2, 1334, 1336, 3, 2, 2, 2, 1335, 1295, 3, 2, 2, 2, 1335, 1307, 3, 2, 2, 2, 1335, 1324, 3, 2, 2, 2, 1335, 1330, 3, 2, 2, 2, 1336, 187, 3, 2, 2, 2, 1337, 1338, 5, 318, 160, 2, 1338, 189, 3, 2, 2, 2, 1339, 1340, 7, 253, 2, 2, 1340, 1341, 7, 344, 2, 2, 1341, 1342, 7, 187, 2, 2, 1342, 1343, 7, 303, 2, 2, 1343, 1344, 5, 192, 97, 2, 1344, 191, 3, 2, 2, 2, 1345, 1346, 5, 264, 133, 2, 1346, 193, 3, 2, 2, 2, 1347, 1348, 7, 386, 2, 2, 1348, 1349, 5, 154, 78, 2, 1349, 1350, 7, 387, 2, 2, 1350, 1351, 5, 300, 151, 2, 1351, 195, 3, 2, 2, 2, 1352, 1353, 7, 346, 2, 2, 1353, 1354, 7, 386, 2, 2, 1354, 1355, 5, 198, 100, 2, 1355, 1356, 7, 387, 2, 2, 1356, 197, 3, 2, 2, 2, 1357, 1358, 5, 200, 101, 2, 1358, 1359, 7, 386, 2, 2, 1359, 1364, 5, 202, 102, 2, 1360, 1361, 7, 390, 2, 2, 1361, 1363, 5, 202, 102, 2, 1362, 1360, 3, 2, 2, 2, 1363, 1366, 3, 2, 2, 2, 1364, 1362, 3, 2, 2, 2, 1364, 1365, 3, 2, 2, 2, 1365, 1367, 3, 2, 2, 2, 1366, 1364, 3, 2, 2, 2, 1367, 1368, 7, 387, 2, 2, 1368, 199, 3, 2, 2, 2, 1369, 1370, 9, 24, 2, 2, 1370, 201, 3, 2, 2, 2, 1371, 1372, 7, 346, 2, 2, 1372, 1387, 5, 224, 113, 2, 1373, 1387, 5, 206, 104, 2, 1374, 1387, 5, 286, 144, 2, 1375, 1376, 7, 26, 2, 2, 1376, 1377, 7, 406, 2, 2, 1377, 1378, 7, 346, 2, 2, 1378, 1387, 5, 224, 113, 2, 1379, 1380, 7, 153, 2, 2, 1380, 1381, 7, 406, 2, 2, 1381, 1387, 5, 206, 104, 2, 1382, 1383, 5, 204, 103, 2, 1383, 1384, 7, 406, 2, 2, 1384, 1385, 5, 286, 144, 2, 1385, 1387, 3, 2, 2, 2, 1386, 1371, 3, 2, 2, 2, 1386, 1373, 3, 2, 2, 2, 1386, 1374, 3, 2, 2, 2, 1386, 1375, 3, 2, 2, 2, 1386, 1379, 3, 2, 2, 2, 1386, 1382, 3, 2, 2, 2, 1387, 203, 3, 2, 2, 2, 1388, 1389, 9, 25, 2, 2, 1389, 205, 3, 2, 2, 2, 1390, 1391, 7, 33, 2, 2, 1391, 1392, 7, 386, 2, 2, 1392, 1393, 5, 318, 160, 2, 1393, 1394, 7, 387, 2, 2, 1394, 207, 3, 2, 2, 2, 1395, 1396, 7, 305, 2, 2, 1396, 1410, 5, 266, 134, 2, 1397, 1398, 7, 363, 2, 2, 1398, 1399, 7, 386, 2, 2, 1399, 1404, 5, 318, 160, 2, 1400, 1401, 7, 390, 2, 2, 1401, 1403, 5, 318, 160, 2, 1402, 1400, 3, 2, 2, 2, 1403, 1406, 3, 2, 2, 2, 1404, 1402, 3, 2, 2, 2, 1404, 1405, 3, 2, 2, 2, 1405, 1407, 3, 2, 2, 2, 1406, 1404, 3, 2, 2, 2, 1407, 1408, 7, 387, 2, 2, 1408, 1410, 3, 2, 2, 2, 1409, 1395, 3, 2, 2, 2, 1409, 1397, 3, 2, 2, 2, 1410, 209, 3, 2, 2, 2, 1411, 1412, 7, 369, 2, 2, 1412, 1413, 5, 266, 134, 2, 1413, 211, 3, 2, 2, 2, 1414, 1415, 7, 259, 2, 2, 1415, 1416, 7, 199, 2, 2, 1416, 1421, 5, 214, 108, 2, 1417, 1418, 7, 390, 2, 2, 1418, 1420, 5, 214, 108, 2, 1419, 1417, 3, 2, 2, 2, 1420, 1423, 3, 2, 2, 2, 1421, 1419, 3, 2, 2, 2, 1421, 1422, 3, 2, 2, 2, 1422, 213, 3, 2, 2, 2, 1423, 1421, 3, 2, 2, 2, 1424, 1464, 5, 264, 133, 2, 1425, 1464, 5, 220, 111, 2, 1426, 1427, 7, 386, 2, 2, 1427, 1464, 7, 387, 2, 2, 1428, 1429, 7, 386, 2, 2, 1429, 1434, 5, 264, 133, 2, 1430, 1431, 7, 390, 2, 2, 1431, 1433, 5, 264, 133, 2, 1432, 1430, 3, 2, 2, 2, 1433, 1436, 3, 2, 2, 2, 1434, 1432, 3, 2, 2, 2, 1434, 1435, 3, 2, 2, 2, 1435, 1437, 3, 2, 2, 2, 1436, 1434, 3, 2, 2, 2, 1437, 1438, 7, 387, 2, 2, 1438, 1464, 3, 2, 2, 2, 1439, 1440, 5, 218, 110, 2, 1440, 1441, 7, 386, 2, 2, 1441, 1446, 5, 264, 133, 2, 1442, 1443, 7, 390, 2, 2, 1443, 1445, 5, 264, 133, 2, 1444, 1442, 3, 2, 2, 2, 1445, 1448, 3, 2, 2, 2, 1446, 1444, 3, 2, 2, 2, 1446, 1447, 3, 2, 2, 2, 1447, 1449, 3, 2, 2, 2, 1448, 1446, 3, 2, 2, 2, 1449, 1450, 7, 387, 2, 2, 1450, 1464, 3, 2, 2, 2, 1451, 1452, 5, 216, 109, 2, 1452, 1453, 7, 386, 2, 2, 1453, 1458, 5, 214, 108, 2, 1454, 1455, 7, 390, 2, 2, 1455, 1457, 5, 214, 108, 2, 1456, 1454, 3, 2, 2, 2, 1457, 1460, 3, 2, 2, 2, 1458, 1456, 3, 2, 2, 2, 1458, 1459, 3, 2, 2, 2, 1459, 1461, 3, 2, 2, 2, 1460, 1458, 3, 2, 2, 2, 1461, 1462, 7, 387, 2, 2, 1462, 1464, 3, 2, 2, 2, 1463, 1424, 3, 2, 2, 2, 1463, 1425, 3, 2, 2, 2, 1463, 1426, 3, 2, 2, 2, 1463, 1428, 3, 2, 2, 2, 1463, 1439, 3, 2, 2, 2, 1463, 1451, 3, 2, 2, 2, 1464, 215, 3, 2, 2, 2, 1465, 1466, 7, 260, 2, 2, 1466, 1467, 7, 139, 2, 2, 1467, 217, 3, 2, 2, 2, 1468, 1469, 9, 26, 2, 2, 1469, 219, 3, 2, 2, 2, 1470, 1471, 5, 222, 112, 2, 1471, 1472, 7, 386, 2, 2, 1472, 1473, 5, 224, 113, 2, 1473, 1474, 7, 390, 2, 2, 1474, 1475, 5, 286, 144, 2, 1475, 1476, 7, 387, 2, 2, 1476, 221, 3, 2, 2, 2, 1477, 1478, 9, 27, 2, 2, 1478, 223, 3, 2, 2, 2, 1479, 1480, 5, 318, 160, 2, 1480, 225, 3, 2, 2, 2, 1481, 1482, 7, 262, 2, 2, 1482, 1483, 5, 266, 134, 2, 1483, 227, 3, 2, 2, 2, 1484, 1485, 7, 370, 2, 2, 1485, 1490, 5, 230, 116, 2, 1486, 1487, 7, 390, 2, 2, 1487, 1489, 5, 230, 116, 2, 1488, 1486, 3, 2, 2, 2, 1489, 1492, 3, 2, 2, 2, 1490, 1488, 3, 2, 2, 2, 1490, 1491, 3, 2, 2, 2, 1491, 229, 3, 2, 2, 2, 1492, 1490, 3, 2, 2, 2, 1493, 1494, 5, 302, 152, 2, 1494, 1495, 7, 187, 2, 2, 1495, 1496, 5, 232, 117, 2, 1496, 231, 3, 2, 2, 2, 1497, 1499, 5, 302, 152, 2, 1498, 1497, 3, 2, 2, 2, 1498, 1499, 3, 2, 2, 2, 1499, 1500, 3, 2, 2, 2, 1500, 1502, 7, 386, 2, 2, 1501, 1503, 5, 242, 122, 2, 1502, 1501, 3, 2, 2, 2, 1502, 1503, 3, 2, 2, 2, 1503, 1505, 3, 2, 2, 2, 1504, 1506, 5, 236, 119, 2, 1505, 1504, 3, 2, 2, 2, 1505, 1506, 3, 2, 2, 2, 1506, 1508, 3, 2, 2, 2, 1507, 1509, 5, 258, 130, 2, 1508, 1507, 3, 2, 2, 2, 1508, 1509, 3, 2, 2, 2, 1509, 1510, 3, 2, 2, 2, 1510, 1511, 7, 387, 2, 2, 1511, 233, 3, 2, 2, 2, 1512, 1513, 7, 286, 2, 2, 1513, 1515, 7, 386, 2, 2, 1514, 1516, 5, 242, 122, 2, 1515, 1514, 3, 2, 2, 2, 1515, 1516, 3, 2, 2, 2, 1516, 1518, 3, 2, 2, 2, 1517, 1519, 5, 236, 119, 2, 1518, 1517, 3, 2, 2, 2, 1518, 1519, 3, 2, 2, 2, 1519, 1521, 3, 2, 2, 2, 1520, 1522, 5, 246, 124, 2, 1521, 1520, 3, 2, 2, 2, 1521, 1522, 3, 2, 2, 2, 1522, 1524, 3, 2, 2, 2, 1523, 1525, 5, 252, 127, 2, 1524, 1523, 3, 2, 2, 2, 1524, 1525, 3, 2, 2, 2, 1525, 1527, 3, 2, 2, 2, 1526, 1528, 5, 254, 128, 2, 1527, 1526, 3, 2, 2, 2, 1527, 1528, 3, 2, 2, 2, 1528, 1530, 3, 2, 2, 2, 1529, 1531, 5, 248, 125, 2, 1530, 1529, 3, 2, 2, 2, 1530, 1531, 3, 2, 2, 2, 1531, 1532, 3, 2, 2, 2, 1532, 1533, 5, 256, 129, 2, 1533, 1538, 7, 387, 2, 2, 1534, 1536, 7, 187, 2, 2, 1535, 1534, 3, 2, 2, 2, 1535, 1536, 3, 2, 2, 2, 1536, 1537, 3, 2, 2, 2, 1537, 1539, 5, 310, 156, 2, 1538, 1535, 3, 2, 2, 2, 1538, 1539, 3, 2, 2, 2, 1539, 235, 3, 2, 2, 2, 1540, 1541, 7, 308, 2, 2, 1541, 1542, 7, 199, 2, 2, 1542, 1547, 5, 238, 120, 2, 1543, 1544, 7, 390, 2, 2, 1544, 1546, 5, 238, 120, 2, 1545, 1543, 3, 2, 2, 2, 1546, 1549, 3, 2, 2, 2, 1547, 1545, 3, 2, 2, 2, 1547, 1548, 3, 2, 2, 2, 1548, 237, 3, 2, 2, 2, 1549, 1547, 3, 2, 2, 2, 1550, 1552, 5, 264, 133, 2, 1551, 1553, 9, 28, 2, 2, 1552, 1551, 3, 2, 2, 2, 1552, 1553, 3, 2, 2, 2, 1553, 1556, 3, 2, 2, 2, 1554, 1555, 7, 89, 2, 2, 1555, 1557, 9, 29, 2, 2, 1556, 1554, 3, 2, 2, 2, 1556, 1557, 3, 2, 2, 2, 1557, 239, 3, 2, 2, 2, 1558, 1561, 7, 283, 2, 2, 1559, 1562, 7, 180, 2, 2, 1560, 1562, 5, 264, 133, 2, 1561, 1559, 3, 2, 2, 2, 1561, 1560, 3, 2, 2, 2, 1562, 241, 3, 2, 2, 2, 1563, 1564, 7, 313, 2, 2, 1564, 1565, 7, 199, 2, 2, 1565, 1570, 5, 264, 133, 2, 1566, 1567, 7, 390, 2, 2, 1567, 1569, 5, 264, 133, 2, 1568, 1566, 3, 2, 2, 2, 1569, 1572, 3, 2, 2, 2, 1570, 1568, 3, 2, 2, 2, 1570, 1571, 3, 2, 2, 2, 1571, 243, 3, 2, 2, 2, 1572, 1570, 3, 2, 2, 2, 1573, 1590, 7, 397, 2, 2, 1574, 1590, 7, 400, 2, 2, 1575, 1590, 7, 405, 2, 2, 1576, 1577, 7, 388, 2, 2, 1577, 1578, 7, 408, 2, 2, 1578, 1579, 7, 390, 2, 2, 1579, 1580, 7, 408, 2, 2, 1580, 1590, 7, 389, 2, 2, 1581, 1582, 7, 388, 2, 2, 1582, 1583, 7, 408, 2, 2, 1583, 1584, 7, 390, 2, 2, 1584, 1590, 7, 389, 2, 2, 1585, 1586, 7, 388, 2, 2, 1586, 1587, 7, 390, 2, 2, 1587, 1588, 7, 408, 2, 2, 1588, 1590, 7, 389, 2, 2, 1589, 1573, 3, 2, 2, 2, 1589, 1574, 3, 2, 2, 2, 1589, 1575, 3, 2, 2, 2, 1589, 1576, 3, 2, 2, 2, 1589, 1581, 3, 2, 2, 2, 1589, 1585, 3, 2, 2, 2, 1590, 245, 3, 2, 2, 2, 1591, 1592, 7, 287, 2, 2, 1592, 1597, 5, 176, 89, 2, 1593, 1594, 7, 390, 2, 2, 1594, 1596, 5, 176, 89, 2, 1595, 1593, 3, 2, 2, 2, 1596, 1599, 3, 2, 2, 2, 1597, 1595, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 247, 3, 2, 2, 2, 1599, 1597, 3, 2, 2, 2, 1600, 1601, 7, 314, 2, 2, 1601, 1603, 7, 386, 2, 2, 1602, 1604, 5, 250, 126, 2, 1603, 1602, 3, 2, 2, 2, 1604, 1605, 3, 2, 2, 2, 1605, 1603, 3, 2, 2, 2, 1605, 1606, 3, 2, 2, 2, 1606, 1607, 3, 2, 2, 2, 1607, 1609, 7, 387, 2, 2, 1608, 1610, 5, 262, 132, 2, 1609, 1608, 3, 2, 2, 2, 1609, 1610, 3, 2, 2, 2, 1610, 249, 3, 2, 2, 2, 1611, 1613, 5, 312, 157, 2, 1612, 1614, 5, 244, 123, 2, 1613, 1612, 3, 2, 2, 2, 1613, 1614, 3, 2, 2, 2, 1614, 251, 3, 2, 2, 2, 1615, 1616, 7, 180, 2, 2, 1616, 1617, 7, 330, 2, 2, 1617, 1618, 7, 315, 2, 2, 1618, 1624, 7, 285, 2, 2, 1619, 1620, 7, 306, 2, 2, 1620, 1621, 7, 329, 2, 2, 1621, 1622, 7, 315, 2, 2, 1622, 1624, 7, 285, 2, 2, 1623, 1615, 3, 2, 2, 2, 1623, 1619, 3, 2, 2, 2, 1624, 253, 3, 2, 2, 2, 1625, 1626, 7, 8, 2, 2, 1626, 1627, 7, 285, 2, 2, 1627, 1628, 7, 336, 2, 2, 1628, 1629, 7, 100, 2, 2, 1629, 1630, 7, 75, 2, 2, 1630, 1650, 7, 329, 2, 2, 1631, 1632, 7, 8, 2, 2, 1632, 1633, 7, 285, 2, 2, 1633, 1634, 7, 336, 2, 2, 1634, 1635, 7, 352, 2, 2, 1635, 1636, 7, 297, 2, 2, 1636, 1650, 7, 329, 2, 2, 1637, 1638, 7, 8, 2, 2, 1638, 1639, 7, 285, 2, 2, 1639, 1640, 7, 336, 2, 2, 1640, 1641, 7, 352, 2, 2, 1641, 1642, 7, 75, 2, 2, 1642, 1650, 5, 312, 157, 2, 1643, 1644, 7, 8, 2, 2, 1644, 1645, 7, 285, 2, 2, 1645, 1646, 7, 336, 2, 2, 1646, 1647, 7, 352, 2, 2, 1647, 1648, 7, 47, 2, 2, 1648, 1650, 5, 312, 157, 2, 1649, 1625, 3, 2, 2, 2, 1649, 1631, 3, 2, 2, 2, 1649, 1637, 3, 2, 2, 2, 1649, 1643, 3, 2, 2, 2, 1650, 255, 3, 2, 2, 2, 1651, 1652, 7, 234, 2, 2, 1652, 1657, 5, 176, 89, 2, 1653, 1654, 7, 390, 2, 2, 1654, 1656, 5, 176, 89, 2, 1655, 1653, 3, 2, 2, 2, 1656, 1659, 3, 2, 2, 2, 1657, 1655, 3, 2, 2, 2, 1657, 1658, 3, 2, 2, 2, 1658, 257, 3, 2, 2, 2, 1659, 1657, 3, 2, 2, 2, 1660, 1661, 7, 321, 2, 2, 1661, 1662, 7, 192, 2, 2, 1662, 1663, 5, 286, 144, 2, 1663, 1664, 5, 260, 131, 2, 1664, 1670, 3, 2, 2, 2, 1665, 1666, 7, 330, 2, 2, 1666, 1667, 7, 192, 2, 2, 1667, 1668, 7, 408, 2, 2, 1668, 1670, 5, 260, 131, 2, 1669, 1660, 3, 2, 2, 2, 1669, 1665, 3, 2, 2, 2, 1670, 259, 3, 2, 2, 2, 1671, 1672, 7, 104, 2, 2, 1672, 1673, 7, 183, 2, 2, 1673, 1674, 7, 224, 2, 2, 1674, 1675, 7, 329, 2, 2, 1675, 261, 3, 2, 2, 2, 1676, 1677, 7, 372, 2, 2, 1677, 1678, 5, 286, 144, 2, 1678, 263, 3, 2, 2, 2, 1679, 1680, 5, 266, 134, 2, 1680, 265, 3, 2, 2, 2, 1681, 1682, 8, 134, 1, 2, 1682, 1683, 7, 300, 2, 2, 1683, 1694, 5, 266, 134, 8, 1684, 1685, 7, 247, 2, 2, 1685, 1686, 7, 386, 2, 2, 1686, 1687, 5, 162, 82, 2, 1687, 1688, 7, 387, 2, 2, 1688, 1694, 3, 2, 2, 2, 1689, 1691, 5, 272, 137, 2, 1690, 1692, 5, 268, 135, 2, 1691, 1690, 3, 2, 2, 2, 1691, 1692, 3, 2, 2, 2, 1692, 1694, 3, 2, 2, 2, 1693, 1681, 3, 2, 2, 2, 1693, 1684, 3, 2, 2, 2, 1693, 1689, 3, 2, 2, 2, 1694, 1709, 3, 2, 2, 2, 1695, 1696, 12, 5, 2, 2, 1696, 1697, 7, 183, 2, 2, 1697, 1708, 5, 266, 134, 6, 1698, 1699, 12, 4, 2, 2, 1699, 1700, 7, 307, 2, 2, 1700, 1708, 5, 266, 134, 5, 1701, 1702, 12, 3, 2, 2, 1702, 1704, 7, 275, 2, 2, 1703, 1705, 7, 300, 2, 2, 1704, 1703, 3, 2, 2, 2, 1704, 1705, 3, 2, 2, 2, 1705, 1706, 3, 2, 2, 2, 1706, 1708, 9, 30, 2, 2, 1707, 1695, 3, 2, 2, 2, 1707, 1698, 3, 2, 2, 2, 1707, 1701, 3, 2, 2, 2, 1708, 1711, 3, 2, 2, 2, 1709, 1707, 3, 2, 2, 2, 1709, 1710, 3, 2, 2, 2, 1710, 267, 3, 2, 2, 2, 1711, 1709, 3, 2, 2, 2, 1712, 1714, 7, 300, 2, 2, 1713, 1712, 3, 2, 2, 2, 1713, 1714, 3, 2, 2, 2, 1714, 1715, 3, 2, 2, 2, 1715, 1717, 7, 192, 2, 2, 1716, 1718, 9, 31, 2, 2, 1717, 1716, 3, 2, 2, 2, 1717, 1718, 3, 2, 2, 2, 1718, 1719, 3, 2, 2, 2, 1719, 1720, 5, 272, 137, 2, 1720, 1721, 7, 183, 2, 2, 1721, 1722, 5, 272, 137, 2, 1722, 1780, 3, 2, 2, 2, 1723, 1725, 7, 300, 2, 2, 1724, 1723, 3, 2, 2, 2, 1724, 1725, 3, 2, 2, 2, 1725, 1726, 3, 2, 2, 2, 1726, 1727, 7, 265, 2, 2, 1727, 1728, 7, 386, 2, 2, 1728, 1733, 5, 264, 133, 2, 1729, 1730, 7, 390, 2, 2, 1730, 1732, 5, 264, 133, 2, 1731, 1729, 3, 2, 2, 2, 1732, 1735, 3, 2, 2, 2, 1733, 1731, 3, 2, 2, 2, 1733, 1734, 3, 2, 2, 2, 1734, 1736, 3, 2, 2, 2, 1735, 1733, 3, 2, 2, 2, 1736, 1737, 7, 387, 2, 2, 1737, 1780, 3, 2, 2, 2, 1738, 1740, 7, 300, 2, 2, 1739, 1738, 3, 2, 2, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1741, 3, 2, 2, 2, 1741, 1742, 7, 265, 2, 2, 1742, 1743, 7, 386, 2, 2, 1743, 1744, 5, 162, 82, 2, 1744, 1745, 7, 387, 2, 2, 1745, 1780, 3, 2, 2, 2, 1746, 1747, 7, 247, 2, 2, 1747, 1748, 7, 386, 2, 2, 1748, 1749, 5, 162, 82, 2, 1749, 1750, 7, 387, 2, 2, 1750, 1780, 3, 2, 2, 2, 1751, 1753, 7, 300, 2, 2, 1752, 1751, 3, 2, 2, 2, 1752, 1753, 3, 2, 2, 2, 1753, 1754, 3, 2, 2, 2, 1754, 1755, 7, 326, 2, 2, 1755, 1780, 5, 272, 137, 2, 1756, 1780, 5, 270, 136, 2, 1757, 1759, 7, 275, 2, 2, 1758, 1760, 7, 300, 2, 2, 1759, 1758, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1761, 3, 2, 2, 2, 1761, 1780, 9, 30, 2, 2, 1762, 1764, 7, 275, 2, 2, 1763, 1765, 7, 300, 2, 2, 1764, 1763, 3, 2, 2, 2, 1764, 1765, 3, 2, 2, 2, 1765, 1766, 3, 2, 2, 2, 1766, 1767, 7, 237, 2, 2, 1767, 1768, 7, 254, 2, 2, 1768, 1780, 5, 272, 137, 2, 1769, 1771, 7, 300, 2, 2, 1770, 1769, 3, 2, 2, 2, 1770, 1771, 3, 2, 2, 2, 1771, 1772, 3, 2, 2, 2, 1772, 1773, 7, 335, 2, 2, 1773, 1774, 7, 352, 2, 2, 1774, 1777, 5, 272, 137, 2, 1775, 1776, 7, 244, 2, 2, 1776, 1778, 5, 348, 175, 2, 1777, 1775, 3, 2, 2, 2, 1777, 1778, 3, 2, 2, 2, 1778, 1780, 3, 2, 2, 2, 1779, 1713, 3, 2, 2, 2, 1779, 1724, 3, 2, 2, 2, 1779, 1739, 3, 2, 2, 2, 1779, 1746, 3, 2, 2, 2, 1779, 1752, 3, 2, 2, 2, 1779, 1756, 3, 2, 2, 2, 1779, 1757, 3, 2, 2, 2, 1779, 1762, 3, 2, 2, 2, 1779, 1770, 3, 2, 2, 2, 1780, 269, 3, 2, 2, 2, 1781, 1783, 7, 300, 2, 2, 1782, 1781, 3, 2, 2, 2, 1782, 1783, 3, 2, 2, 2, 1783, 1784, 3, 2, 2, 2, 1784, 1785, 7, 282, 2, 2, 1785, 1799, 9, 32, 2, 2, 1786, 1787, 7, 386, 2, 2, 1787, 1800, 7, 387, 2, 2, 1788, 1789, 7, 386, 2, 2, 1789, 1794, 5, 264, 133, 2, 1790, 1791, 7, 390, 2, 2, 1791, 1793, 5, 264, 133, 2, 1792, 1790, 3, 2, 2, 2, 1793, 1796, 3, 2, 2, 2, 1794, 1792, 3, 2, 2, 2, 1794, 1795, 3, 2, 2, 2, 1795, 1797, 3, 2, 2, 2, 1796, 1794, 3, 2, 2, 2, 1797, 1798, 7, 387, 2, 2, 1798, 1800, 3, 2, 2, 2, 1799, 1786, 3, 2, 2, 2, 1799, 1788, 3, 2, 2, 2, 1800, 1811, 3, 2, 2, 2, 1801, 1803, 7, 300, 2, 2, 1802, 1801, 3, 2, 2, 2, 1802, 1803, 3, 2, 2, 2, 1803, 1804, 3, 2, 2, 2, 1804, 1805, 7, 282, 2, 2, 1805, 1808, 5, 272, 137, 2, 1806, 1807, 7, 244, 2, 2, 1807, 1809, 5, 348, 175, 2, 1808, 1806, 3, 2, 2, 2, 1808, 1809, 3, 2, 2, 2, 1809, 1811, 3, 2, 2, 2, 1810, 1782, 3, 2, 2, 2, 1810, 1802, 3, 2, 2, 2, 1811, 271, 3, 2, 2, 2, 1812, 1813, 8, 137, 1, 2, 1813, 1817, 5, 274, 138, 2, 1814, 1815, 9, 33, 2, 2, 1815, 1817, 5, 272, 137, 10, 1816, 1812, 3, 2, 2, 2, 1816, 1814, 3, 2, 2, 2, 1817, 1841, 3, 2, 2, 2, 1818, 1819, 12, 9, 2, 2, 1819, 1820, 9, 34, 2, 2, 1820, 1840, 5, 272, 137, 10, 1821, 1822, 12, 8, 2, 2, 1822, 1823, 9, 35, 2, 2, 1823, 1840, 5, 272, 137, 9, 1824, 1825, 12, 7, 2, 2, 1825, 1826, 7, 381, 2, 2, 1826, 1840, 5, 272, 137, 8, 1827, 1828, 12, 6, 2, 2, 1828, 1829, 7, 382, 2, 2, 1829, 1840, 5, 272, 137, 7, 1830, 1831, 12, 5, 2, 2, 1831, 1832, 7, 380, 2, 2, 1832, 1840, 5, 272, 137, 6, 1833, 1834, 12, 4, 2, 2, 1834, 1835, 5, 336, 169, 2, 1835, 1836, 5, 272, 137, 5, 1836, 1840, 3, 2, 2, 2, 1837, 1838, 12, 3, 2, 2, 1838, 1840, 7, 412, 2, 2, 1839, 1818, 3, 2, 2, 2, 1839, 1821, 3, 2, 2, 2, 1839, 1824, 3, 2, 2, 2, 1839, 1827, 3, 2, 2, 2, 1839, 1830, 3, 2, 2, 2, 1839, 1833, 3, 2, 2, 2, 1839, 1837, 3, 2, 2, 2, 1840, 1843, 3, 2, 2, 2, 1841, 1839, 3, 2, 2, 2, 1841, 1842, 3, 2, 2, 2, 1842, 273, 3, 2, 2, 2, 1843, 1841, 3, 2, 2, 2, 1844, 1845, 8, 138, 1, 2, 1845, 1847, 7, 203, 2, 2, 1846, 1848, 5, 316, 159, 2, 1847, 1846, 3, 2, 2, 2, 1848, 1849, 3, 2, 2, 2, 1849, 1847, 3, 2, 2, 2, 1849, 1850, 3, 2, 2, 2, 1850, 1853, 3, 2, 2, 2, 1851, 1852, 7, 241, 2, 2, 1852, 1854, 5, 264, 133, 2, 1853, 1851, 3, 2, 2, 2, 1853, 1854, 3, 2, 2, 2, 1854, 1855, 3, 2, 2, 2, 1855, 1856, 7, 242, 2, 2, 1856, 1936, 3, 2, 2, 2, 1857, 1858, 7, 203, 2, 2, 1858, 1860, 5, 264, 133, 2, 1859, 1861, 5, 316, 159, 2, 1860, 1859, 3, 2, 2, 2, 1861, 1862, 3, 2, 2, 2, 1862, 1860, 3, 2, 2, 2, 1862, 1863, 3, 2, 2, 2, 1863, 1866, 3, 2, 2, 2, 1864, 1865, 7, 241, 2, 2, 1865, 1867, 5, 264, 133, 2, 1866, 1864, 3, 2, 2, 2, 1866, 1867, 3, 2, 2, 2, 1867, 1868, 3, 2, 2, 2, 1868, 1869, 7, 242, 2, 2, 1869, 1936, 3, 2, 2, 2, 1870, 1871, 7, 204, 2, 2, 1871, 1872, 7, 386, 2, 2, 1872, 1873, 5, 264, 133, 2, 1873, 1874, 7, 187, 2, 2, 1874, 1875, 5, 58, 30, 2, 1875, 1876, 7, 387, 2, 2, 1876, 1936, 3, 2, 2, 2, 1877, 1878, 7, 47, 2, 2, 1878, 1879, 7, 386, 2, 2, 1879, 1882, 5, 264, 133, 2, 1880, 1881, 7, 62, 2, 2, 1881, 1883, 7, 89, 2, 2, 1882, 1880, 3, 2, 2, 2, 1882, 1883, 3, 2, 2, 2, 1883, 1884, 3, 2, 2, 2, 1884, 1885, 7, 387, 2, 2, 1885, 1936, 3, 2, 2, 2, 1886, 1887, 7, 75, 2, 2, 1887, 1888, 7, 386, 2, 2, 1888, 1891, 5, 264, 133, 2, 1889, 1890, 7, 62, 2, 2, 1890, 1892, 7, 89, 2, 2, 1891, 1889, 3, 2, 2, 2, 1891, 1892, 3, 2, 2, 2, 1892, 1893, 3, 2, 2, 2, 1893, 1894, 7, 387, 2, 2, 1894, 1936, 3, 2, 2, 2, 1895, 1896, 7, 318, 2, 2, 1896, 1897, 7, 386, 2, 2, 1897, 1898, 5, 272, 137, 2, 1898, 1899, 7, 265, 2, 2, 1899, 1900, 5, 272, 137, 2, 1900, 1901, 7, 387, 2, 2, 1901, 1936, 3, 2, 2, 2, 1902, 1936, 5, 344, 173, 2, 1903, 1936, 7, 397, 2, 2, 1904, 1905, 5, 318, 160, 2, 1905, 1906, 7, 383, 2, 2, 1906, 1907, 7, 397, 2, 2, 1907, 1936, 3, 2, 2, 2, 1908, 1909, 7, 386, 2, 2, 1909, 1910, 5, 162, 82, 2, 1910, 1911, 7, 387, 2, 2, 1911, 1936, 3, 2, 2, 2, 1912, 1913, 5, 276, 139, 2, 1913, 1925, 7, 386, 2, 2, 1914, 1916, 5, 354, 178, 2, 1915, 1914, 3, 2, 2, 2, 1915, 1916, 3, 2, 2, 2, 1916, 1917, 3, 2, 2, 2, 1917, 1922, 5, 278, 140, 2, 1918, 1919, 7, 390, 2, 2, 1919, 1921, 5, 278, 140, 2, 1920, 1918, 3, 2, 2, 2, 1921, 1924, 3, 2, 2, 2, 1922, 1920, 3, 2, 2, 2, 1922, 1923, 3, 2, 2, 2, 1923, 1926, 3, 2, 2, 2, 1924, 1922, 3, 2, 2, 2, 1925, 1915, 3, 2, 2, 2, 1925, 1926, 3, 2, 2, 2, 1926, 1927, 3, 2, 2, 2, 1927, 1928, 7, 387, 2, 2, 1928, 1936, 3, 2, 2, 2, 1929, 1936, 5, 310, 156, 2, 1930, 1936, 5, 280, 141, 2, 1931, 1932, 7, 386, 2, 2, 1932, 1933, 5, 264, 133, 2, 1933, 1934, 7, 387, 2, 2, 1934, 1936, 3, 2, 2, 2, 1935, 1844, 3, 2, 2, 2, 1935, 1857, 3, 2, 2, 2, 1935, 1870, 3, 2, 2, 2, 1935, 1877, 3, 2, 2, 2, 1935, 1886, 3, 2, 2, 2, 1935, 1895, 3, 2, 2, 2, 1935, 1902, 3, 2, 2, 2, 1935, 1903, 3, 2, 2, 2, 1935, 1904, 3, 2, 2, 2, 1935, 1908, 3, 2, 2, 2, 1935, 1912, 3, 2, 2, 2, 1935, 1929, 3, 2, 2, 2, 1935, 1930, 3, 2, 2, 2, 1935, 1931, 3, 2, 2, 2, 1936, 1944, 3, 2, 2, 2, 1937, 1938, 12, 6, 2, 2, 1938, 1939, 7, 384, 2, 2, 1939, 1940, 5, 272, 137, 2, 1940, 1941, 7, 385, 2, 2, 1941, 1943, 3, 2, 2, 2, 1942, 1937, 3, 2, 2, 2, 1943, 1946, 3, 2, 2, 2, 1944, 1942, 3, 2, 2, 2, 1944, 1945, 3, 2, 2, 2, 1945, 275, 3, 2, 2, 2, 1946, 1944, 3, 2, 2, 2, 1947, 1951, 5, 362, 182, 2, 1948, 1951, 5, 366, 184, 2, 1949, 1951, 5, 318, 160, 2, 1950, 1947, 3, 2, 2, 2, 1950, 1948, 3, 2, 2, 2, 1950, 1949, 3, 2, 2, 2, 1951, 277, 3, 2, 2, 2, 1952, 1957, 5, 360, 181, 2, 1953, 1957, 5, 358, 180, 2, 1954, 1957, 5, 356, 179, 2, 1955, 1957, 5, 264, 133, 2, 1956, 1952, 3, 2, 2, 2, 1956, 1953, 3, 2, 2, 2, 1956, 1954, 3, 2, 2, 2, 1956, 1955, 3, 2, 2, 2, 1957, 279, 3, 2, 2, 2, 1958, 1959, 5, 318, 160, 2, 1959, 281, 3, 2, 2, 2, 1960, 1961, 5, 310, 156, 2, 1961, 283, 3, 2, 2, 2, 1962, 1965, 5, 310, 156, 2, 1963, 1965, 5, 280, 141, 2, 1964, 1962, 3, 2, 2, 2, 1964, 1963, 3, 2, 2, 2, 1965, 285, 3, 2, 2, 2, 1966, 1969, 7, 273, 2, 2, 1967, 1970, 5, 288, 145, 2, 1968, 1970, 5, 292, 147, 2, 1969, 1967, 3, 2, 2, 2, 1969, 1968, 3, 2, 2, 2, 1969, 1970, 3, 2, 2, 2, 1970, 287, 3, 2, 2, 2, 1971, 1973, 5, 290, 146, 2, 1972, 1974, 5, 294, 148, 2, 1973, 1972, 3, 2, 2, 2, 1973, 1974, 3, 2, 2, 2, 1974, 289, 3, 2, 2, 2, 1975, 1976, 5, 296, 149, 2, 1976, 1977, 5, 358, 180, 2, 1977, 1979, 3, 2, 2, 2, 1978, 1975, 3, 2, 2, 2, 1979, 1980, 3, 2, 2, 2, 1980, 1978, 3, 2, 2, 2, 1980, 1981, 3, 2, 2, 2, 1981, 291, 3, 2, 2, 2, 1982, 1985, 5, 294, 148, 2, 1983, 1986, 5, 290, 146, 2, 1984, 1986, 5, 294, 148, 2, 1985, 1983, 3, 2, 2, 2, 1985, 1984, 3, 2, 2, 2, 1985, 1986, 3, 2, 2, 2, 1986, 293, 3, 2, 2, 2, 1987, 1988, 5, 296, 149, 2, 1988, 1989, 5, 358, 180, 2, 1989, 1990, 7, 352, 2, 2, 1990, 1991, 5, 358, 180, 2, 1991, 295, 3, 2, 2, 2, 1992, 1994, 9, 36, 2, 2, 1993, 1992, 3, 2, 2, 2, 1993, 1994, 3, 2, 2, 2, 1994, 1995, 3, 2, 2, 2, 1995, 1998, 9, 37, 2, 2, 1996, 1998, 7, 407, 2, 2, 1997, 1993, 3, 2, 2, 2, 1997, 1996, 3, 2, 2, 2, 1998, 297, 3, 2, 2, 2, 1999, 2001, 7, 187, 2, 2, 2000, 1999, 3, 2, 2, 2, 2000, 2001, 3, 2, 2, 2, 2001, 2002, 3, 2, 2, 2, 2002, 2004, 5, 310, 156, 2, 2003, 2005, 5, 306, 154, 2, 2004, 2003, 3, 2, 2, 2, 2004, 2005, 3, 2, 2, 2, 2005, 299, 3, 2, 2, 2, 2006, 2008, 7, 187, 2, 2, 2007, 2006, 3, 2, 2, 2, 2007, 2008, 3, 2, 2, 2, 2008, 2009, 3, 2, 2, 2, 2009, 2011, 5, 310, 156, 2, 2010, 2012, 5, 306, 154, 2, 2011, 2010, 3, 2, 2, 2, 2011, 2012, 3, 2, 2, 2, 2012, 301, 3, 2, 2, 2, 2013, 2014, 5, 310, 156, 2, 2014, 2015, 5, 304, 153, 2, 2015, 303, 3, 2, 2, 2, 2016, 2017, 7, 290, 2, 2, 2017, 2019, 5, 310, 156, 2, 2018, 2016, 3, 2, 2, 2, 2019, 2020, 3, 2, 2, 2, 2020, 2018, 3, 2, 2, 2, 2020, 2021, 3, 2, 2, 2, 2021, 2024, 3, 2, 2, 2, 2022, 2024, 3, 2, 2, 2, 2023, 2018, 3, 2, 2, 2, 2023, 2022, 3, 2, 2, 2, 2024, 305, 3, 2, 2, 2, 2025, 2026, 7, 386, 2, 2, 2026, 2027, 5, 308, 155, 2, 2027, 2028, 7, 387, 2, 2, 2028, 307, 3, 2, 2, 2, 2029, 2034, 5, 310, 156, 2, 2030, 2031, 7, 390, 2, 2, 2031, 2033, 5, 310, 156, 2, 2032, 2030, 3, 2, 2, 2, 2033, 2036, 3, 2, 2, 2, 2034, 2032, 3, 2, 2, 2, 2034, 2035, 3, 2, 2, 2, 2035, 309, 3, 2, 2, 2, 2036, 2034, 3, 2, 2, 2, 2037, 2041, 5, 312, 157, 2, 2038, 2041, 5, 314, 158, 2, 2039, 2041, 5, 366, 184, 2, 2040, 2037, 3, 2, 2, 2, 2040, 2038, 3, 2, 2, 2, 2040, 2039, 3, 2, 2, 2, 2041, 311, 3, 2, 2, 2, 2042, 2043, 9, 38, 2, 2, 2043, 313, 3, 2, 2, 2, 2044, 2045, 7, 407, 2, 2, 2045, 315, 3, 2, 2, 2, 2046, 2047, 7, 368, 2, 2, 2047, 2048, 5, 264, 133, 2, 2048, 2049, 7, 348, 2, 2, 2049, 2050, 5, 264, 133, 2, 2050, 317, 3, 2, 2, 2, 2051, 2056, 5, 310, 156, 2, 2052, 2053, 7, 383, 2, 2, 2053, 2055, 5, 310, 156, 2, 2054, 2052, 3, 2, 2, 2, 2055, 2058, 3, 2, 2, 2, 2056, 2057, 3, 2, 2, 2, 2056, 2054, 3, 2, 2, 2, 2057, 319, 3, 2, 2, 2, 2058, 2056, 3, 2, 2, 2, 2059, 2060, 7, 371, 2, 2, 2060, 2061, 5, 326, 164, 2, 2061, 321, 3, 2, 2, 2, 2062, 2063, 7, 61, 2, 2, 2063, 2064, 7, 300, 2, 2, 2064, 2065, 7, 247, 2, 2, 2065, 323, 3, 2, 2, 2, 2066, 2067, 7, 61, 2, 2, 2067, 2068, 7, 247, 2, 2, 2068, 325, 3, 2, 2, 2, 2069, 2070, 7, 386, 2, 2, 2070, 2075, 5, 328, 165, 2, 2071, 2072, 7, 390, 2, 2, 2072, 2074, 5, 328, 165, 2, 2073, 2071, 3, 2, 2, 2, 2074, 2077, 3, 2, 2, 2, 2075, 2073, 3, 2, 2, 2, 2075, 2076, 3, 2, 2, 2, 2076, 2078, 3, 2, 2, 2, 2077, 2075, 3, 2, 2, 2, 2078, 2079, 7, 387, 2, 2, 2079, 327, 3, 2, 2, 2, 2080, 2085, 5, 330, 166, 2, 2081, 2083, 7, 375, 2, 2, 2082, 2081, 3, 2, 2, 2, 2082, 2083, 3, 2, 2, 2, 2083, 2084, 3, 2, 2, 2, 2084, 2086, 5, 332, 167, 2, 2085, 2082, 3, 2, 2, 2, 2085, 2086, 3, 2, 2, 2, 2086, 329, 3, 2, 2, 2, 2087, 2091, 5, 310, 156, 2, 2088, 2091, 5, 280, 141, 2, 2089, 2091, 7, 407, 2, 2, 2090, 2087, 3, 2, 2, 2, 2090, 2088, 3, 2, 2, 2, 2090, 2089, 3, 2, 2, 2, 2091, 331, 3, 2, 2, 2, 2092, 2097, 7, 408, 2, 2, 2093, 2097, 7, 409, 2, 2, 2094, 2097, 5, 352, 177, 2, 2095, 2097, 7, 407, 2, 2, 2096, 2092, 3, 2, 2, 2, 2096, 2093, 3, 2, 2, 2, 2096, 2094, 3, 2, 2, 2, 2096, 2095, 3, 2, 2, 2, 2097, 333, 3, 2, 2, 2, 2098, 2105, 7, 183, 2, 2, 2099, 2100, 7, 381, 2, 2, 2100, 2105, 7, 381, 2, 2, 2101, 2105, 7, 307, 2, 2, 2102, 2103, 7, 380, 2, 2, 2103, 2105, 7, 380, 2, 2, 2104, 2098, 3, 2, 2, 2, 2104, 2099, 3, 2, 2, 2, 2104, 2101, 3, 2, 2, 2, 2104, 2102, 3, 2, 2, 2, 2105, 335, 3, 2, 2, 2, 2106, 2121, 7, 375, 2, 2, 2107, 2121, 7, 376, 2, 2, 2108, 2121, 7, 377, 2, 2, 2109, 2110, 7, 377, 2, 2, 2110, 2121, 7, 375, 2, 2, 2111, 2112, 7, 376, 2, 2, 2112, 2121, 7, 375, 2, 2, 2113, 2114, 7, 377, 2, 2, 2114, 2121, 7, 376, 2, 2, 2115, 2116, 7, 378, 2, 2, 2116, 2121, 7, 375, 2, 2, 2117, 2118, 7, 377, 2, 2, 2118, 2119, 7, 375, 2, 2, 2119, 2121, 7, 376, 2, 2, 2120, 2106, 3, 2, 2, 2, 2120, 2107, 3, 2, 2, 2, 2120, 2108, 3, 2, 2, 2, 2120, 2109, 3, 2, 2, 2, 2120, 2111, 3, 2, 2, 2, 2120, 2113, 3, 2, 2, 2, 2120, 2115, 3, 2, 2, 2, 2120, 2117, 3, 2, 2, 2, 2121, 337, 3, 2, 2, 2, 2122, 2123, 7, 377, 2, 2, 2123, 2130, 7, 377, 2, 2, 2124, 2125, 7, 376, 2, 2, 2125, 2130, 7, 376, 2, 2, 2126, 2130, 7, 381, 2, 2, 2127, 2130, 7, 382, 2, 2, 2128, 2130, 7, 380, 2, 2, 2129, 2122, 3, 2, 2, 2, 2129, 2124, 3, 2, 2, 2, 2129, 2126, 3, 2, 2, 2, 2129, 2127, 3, 2, 2, 2, 2129, 2128, 3, 2, 2, 2, 2130, 339, 3, 2, 2, 2, 2131, 2132, 9, 39, 2, 2, 2132, 341, 3, 2, 2, 2, 2133, 2134, 9, 40, 2, 2, 2134, 343, 3, 2, 2, 2, 2135, 2150, 5, 286, 144, 2, 2136, 2150, 5, 346, 174, 2, 2137, 2150, 5, 348, 175, 2, 2138, 2140, 7, 399, 2, 2, 2139, 2138, 3, 2, 2, 2, 2139, 2140, 3, 2, 2, 2, 2140, 2141, 3, 2, 2, 2, 2141, 2150, 5, 350, 176, 2, 2142, 2150, 5, 352, 177, 2, 2143, 2150, 7, 409, 2, 2, 2144, 2150, 7, 410, 2, 2, 2145, 2147, 7, 300, 2, 2, 2146, 2145, 3, 2, 2, 2, 2146, 2147, 3, 2, 2, 2, 2147, 2148, 3, 2, 2, 2, 2148, 2150, 7, 301, 2, 2, 2149, 2135, 3, 2, 2, 2, 2149, 2136, 3, 2, 2, 2, 2149, 2137, 3, 2, 2, 2, 2149, 2139, 3, 2, 2, 2, 2149, 2142, 3, 2, 2, 2, 2149, 2143, 3, 2, 2, 2, 2149, 2144, 3, 2, 2, 2, 2149, 2146, 3, 2, 2, 2, 2150, 345, 3, 2, 2, 2, 2151, 2152, 5, 356, 179, 2, 2152, 2153, 5, 348, 175, 2, 2153, 347, 3, 2, 2, 2, 2154, 2155, 7, 407, 2, 2, 2155, 349, 3, 2, 2, 2, 2156, 2157, 7, 408, 2, 2, 2157, 351, 3, 2, 2, 2, 2158, 2159, 9, 41, 2, 2, 2159, 353, 3, 2, 2, 2, 2160, 2161, 9, 42, 2, 2, 2161, 355, 3, 2, 2, 2, 2162, 2163, 9, 43, 2, 2, 2163, 357, 3, 2, 2, 2, 2164, 2165, 9, 44, 2, 2, 2165, 359, 3, 2, 2, 2, 2166, 2167, 9, 45, 2, 2, 2167, 361, 3, 2, 2, 2, 2168, 2169, 9, 46, 2, 2, 2169, 363, 3, 2, 2, 2, 2170, 2171, 9, 47, 2, 2, 2171, 365, 3, 2, 2, 2, 2172, 2173, 9, 48, 2, 2, 2173, 367, 3, 2, 2, 2, 252, 376, 379, 381, 396, 414, 418, 427, 432, 439, 446, 450, 459, 471, 474, 481, 489, 494, 497, 504, 512, 516, 528, 536, 540, 562, 567, 571, 575, 579, 588, 593, 597, 601, 605, 608, 612, 617, 623, 628, 633, 636, 640, 648, 656, 660, 664, 668, 672, 676, 680, 684, 688, 690, 700, 708, 732, 739, 745, 748, 751, 761, 764, 772, 784, 808, 821, 826, 830, 838, 842, 850, 860, 864, 870, 874, 878, 881, 890, 894, 901, 904, 914, 922, 930, 934, 949, 968, 979, 983, 990, 995, 1001, 1005, 1012, 1016, 1020, 1024, 1032, 1036, 1041, 1047, 1053, 1056, 1060, 1071, 1080, 1094, 1106, 1121, 1124, 1128, 1131, 1133, 1138, 1142, 1145, 1149, 1158, 1167, 1177, 1182, 1194, 1197, 1200, 1203, 1209, 1213, 1221, 1224, 1229, 1232, 1234, 1248, 1259, 1264, 1272, 1275, 1278, 1283, 1285, 1287, 1292, 1295, 1299, 1302, 1305, 1317, 1324, 1335, 1364, 1386, 1404, 1409, 1421, 1434, 1446, 1458, 1463, 1490, 1498, 1502, 1505, 1508, 1515, 1518, 1521, 1524, 1527, 1530, 1535, 1538, 1547, 1552, 1556, 1561, 1570, 1589, 1597, 1605, 1609, 1613, 1623, 1649, 1657, 1669, 1691, 1693, 1704, 1707, 1709, 1713, 1717, 1724, 1733, 1739, 1752, 1759, 1764, 1770, 1777, 1779, 1782, 1794, 1799, 1802, 1808, 1810, 1816, 1839, 1841, 1849, 1853, 1862, 1866, 1882, 1891, 1915, 1922, 1925, 1935, 1944, 1950, 1956, 1964, 1969, 1973, 1980, 1985, 1993, 1997, 2000, 2004, 2007, 2011, 2020, 2023, 2034, 2040, 2056, 2075, 2082, 2085, 2090, 2096, 2104, 2120, 2129, 2139, 2146, 2149] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 412, 2220, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 7, 4, 383, 10, 4, 12, 4, 14, 4, 386, 11, 4, 3, 5, 3, 5, 5, 5, 390, 10, 5, 3, 5, 3, 5, 5, 5, 394, 10, 5, 3, 5, 3, 5, 5, 5, 398, 10, 5, 3, 5, 3, 5, 5, 5, 402, 10, 5, 3, 5, 3, 5, 5, 5, 406, 10, 5, 3, 5, 3, 5, 5, 5, 410, 10, 5, 3, 5, 3, 5, 5, 5, 414, 10, 5, 3, 5, 3, 5, 5, 5, 418, 10, 5, 3, 5, 3, 5, 5, 5, 422, 10, 5, 3, 5, 3, 5, 5, 5, 426, 10, 5, 3, 5, 3, 5, 5, 5, 430, 10, 5, 3, 5, 3, 5, 5, 5, 434, 10, 5, 5, 5, 436, 10, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 454, 10, 7, 3, 8, 3, 8, 5, 8, 458, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 467, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 472, 10, 10, 3, 11, 3, 11, 3, 11, 7, 11, 477, 10, 11, 12, 11, 14, 11, 480, 11, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 490, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 497, 10, 14, 12, 14, 14, 14, 500, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 511, 10, 15, 3, 15, 5, 15, 514, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 521, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 529, 10, 15, 3, 15, 3, 15, 3, 15, 5, 15, 534, 10, 15, 3, 15, 5, 15, 537, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 544, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 552, 10, 18, 3, 19, 3, 19, 5, 19, 556, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 568, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 576, 10, 21, 3, 21, 3, 21, 5, 21, 580, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 602, 10, 21, 3, 22, 6, 22, 605, 10, 22, 13, 22, 14, 22, 606, 3, 23, 3, 23, 5, 23, 611, 10, 23, 3, 24, 3, 24, 5, 24, 615, 10, 24, 3, 24, 3, 24, 5, 24, 619, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 626, 10, 24, 12, 24, 14, 24, 629, 11, 24, 3, 24, 3, 24, 5, 24, 633, 10, 24, 3, 24, 3, 24, 5, 24, 637, 10, 24, 3, 24, 3, 24, 5, 24, 641, 10, 24, 3, 24, 3, 24, 5, 24, 645, 10, 24, 3, 24, 5, 24, 648, 10, 24, 3, 24, 3, 24, 5, 24, 652, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 657, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 663, 10, 25, 3, 26, 3, 26, 3, 26, 5, 26, 668, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 673, 10, 27, 3, 27, 5, 27, 676, 10, 27, 3, 28, 3, 28, 5, 28, 680, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 686, 10, 29, 12, 29, 14, 29, 689, 11, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 5, 30, 696, 10, 30, 3, 30, 3, 30, 5, 30, 700, 10, 30, 3, 30, 3, 30, 5, 30, 704, 10, 30, 3, 30, 3, 30, 5, 30, 708, 10, 30, 3, 30, 3, 30, 5, 30, 712, 10, 30, 3, 30, 3, 30, 5, 30, 716, 10, 30, 3, 30, 3, 30, 5, 30, 720, 10, 30, 3, 30, 3, 30, 5, 30, 724, 10, 30, 3, 30, 3, 30, 5, 30, 728, 10, 30, 5, 30, 730, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 740, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 748, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 770, 10, 36, 12, 36, 14, 36, 773, 11, 36, 3, 36, 3, 36, 3, 37, 3, 37, 5, 37, 779, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 785, 10, 37, 3, 37, 5, 37, 788, 10, 37, 3, 37, 5, 37, 791, 10, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 801, 10, 39, 3, 39, 5, 39, 804, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 812, 10, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 5, 44, 824, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 846, 10, 48, 12, 48, 14, 48, 849, 11, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 859, 10, 49, 12, 49, 14, 49, 862, 11, 49, 3, 49, 3, 49, 5, 49, 866, 10, 49, 3, 50, 3, 50, 5, 50, 870, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 876, 10, 51, 12, 51, 14, 51, 879, 11, 51, 3, 51, 5, 51, 882, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 888, 10, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 5, 54, 898, 10, 54, 3, 54, 3, 54, 5, 54, 902, 10, 54, 3, 54, 3, 54, 3, 55, 3, 55, 5, 55, 908, 10, 55, 3, 55, 3, 55, 5, 55, 912, 10, 55, 3, 55, 3, 55, 5, 55, 916, 10, 55, 3, 55, 5, 55, 919, 10, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 928, 10, 56, 3, 56, 3, 56, 5, 56, 932, 10, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 939, 10, 56, 3, 56, 5, 56, 942, 10, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 950, 10, 57, 12, 57, 14, 57, 953, 11, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 5, 59, 960, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 968, 10, 59, 3, 60, 3, 60, 5, 60, 972, 10, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 987, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 1006, 10, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 1017, 10, 68, 3, 68, 3, 68, 5, 68, 1021, 10, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 1028, 10, 68, 3, 69, 3, 69, 3, 69, 5, 69, 1033, 10, 69, 3, 69, 3, 69, 3, 70, 3, 70, 5, 70, 1039, 10, 70, 3, 70, 3, 70, 5, 70, 1043, 10, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 5, 71, 1050, 10, 71, 3, 71, 3, 71, 5, 71, 1054, 10, 71, 3, 72, 3, 72, 5, 72, 1058, 10, 72, 3, 72, 3, 72, 5, 72, 1062, 10, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 5, 73, 1070, 10, 73, 3, 73, 3, 73, 5, 73, 1074, 10, 73, 3, 73, 3, 73, 3, 74, 5, 74, 1079, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1085, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 5, 75, 1091, 10, 75, 3, 75, 5, 75, 1094, 10, 75, 3, 75, 3, 75, 5, 75, 1098, 10, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 1107, 10, 77, 12, 77, 14, 77, 1110, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 1116, 10, 78, 12, 78, 14, 78, 1119, 11, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 6, 79, 1130, 10, 79, 13, 79, 14, 79, 1131, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 6, 80, 1142, 10, 80, 13, 80, 14, 80, 1143, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 1159, 10, 81, 3, 81, 5, 81, 1162, 10, 81, 3, 81, 3, 81, 5, 81, 1166, 10, 81, 3, 81, 5, 81, 1169, 10, 81, 5, 81, 1171, 10, 81, 3, 81, 3, 81, 3, 81, 5, 81, 1176, 10, 81, 3, 81, 3, 81, 5, 81, 1180, 10, 81, 3, 81, 5, 81, 1183, 10, 81, 7, 81, 1185, 10, 81, 12, 81, 14, 81, 1188, 11, 81, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 1194, 10, 82, 12, 82, 14, 82, 1197, 11, 82, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 1203, 10, 83, 12, 83, 14, 83, 1206, 11, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 7, 84, 1213, 10, 84, 12, 84, 14, 84, 1216, 11, 84, 3, 84, 3, 84, 5, 84, 1220, 10, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 5, 86, 1232, 10, 86, 3, 86, 5, 86, 1235, 10, 86, 3, 86, 5, 86, 1238, 10, 86, 3, 86, 5, 86, 1241, 10, 86, 3, 86, 3, 86, 3, 86, 3, 86, 5, 86, 1247, 10, 86, 3, 87, 3, 87, 5, 87, 1251, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 1257, 10, 87, 12, 87, 14, 87, 1260, 11, 87, 5, 87, 1262, 10, 87, 3, 88, 3, 88, 3, 88, 5, 88, 1267, 10, 88, 3, 88, 5, 88, 1270, 10, 88, 5, 88, 1272, 10, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 1286, 10, 89, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 7, 91, 1295, 10, 91, 12, 91, 14, 91, 1298, 11, 91, 3, 91, 3, 91, 5, 91, 1302, 10, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 1310, 10, 91, 3, 91, 5, 91, 1313, 10, 91, 3, 91, 5, 91, 1316, 10, 91, 3, 91, 3, 91, 3, 91, 5, 91, 1321, 10, 91, 7, 91, 1323, 10, 91, 12, 91, 14, 91, 1326, 11, 91, 3, 92, 3, 92, 5, 92, 1330, 10, 92, 3, 93, 5, 93, 1333, 10, 93, 3, 93, 3, 93, 5, 93, 1337, 10, 93, 3, 93, 5, 93, 1340, 10, 93, 3, 93, 5, 93, 1343, 10, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 7, 93, 1353, 10, 93, 12, 93, 14, 93, 1356, 11, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 1362, 10, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 1373, 10, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 7, 98, 1398, 10, 98, 12, 98, 14, 98, 1401, 11, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 1422, 10, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 7, 103, 1438, 10, 103, 12, 103, 14, 103, 1441, 11, 103, 3, 103, 3, 103, 5, 103, 1445, 10, 103, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 7, 105, 1455, 10, 105, 12, 105, 14, 105, 1458, 11, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 7, 106, 1468, 10, 106, 12, 106, 14, 106, 1471, 11, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 7, 106, 1480, 10, 106, 12, 106, 14, 106, 1483, 11, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 7, 106, 1492, 10, 106, 12, 106, 14, 106, 1495, 11, 106, 3, 106, 3, 106, 5, 106, 1499, 10, 106, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 7, 113, 1524, 10, 113, 12, 113, 14, 113, 1527, 11, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 5, 115, 1534, 10, 115, 3, 115, 3, 115, 5, 115, 1538, 10, 115, 3, 115, 5, 115, 1541, 10, 115, 3, 115, 5, 115, 1544, 10, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 5, 116, 1551, 10, 116, 3, 116, 5, 116, 1554, 10, 116, 3, 116, 5, 116, 1557, 10, 116, 3, 116, 5, 116, 1560, 10, 116, 3, 116, 5, 116, 1563, 10, 116, 3, 116, 5, 116, 1566, 10, 116, 3, 116, 3, 116, 3, 116, 5, 116, 1571, 10, 116, 3, 116, 5, 116, 1574, 10, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 7, 117, 1581, 10, 117, 12, 117, 14, 117, 1584, 11, 117, 3, 118, 3, 118, 5, 118, 1588, 10, 118, 3, 118, 3, 118, 5, 118, 1592, 10, 118, 3, 119, 3, 119, 3, 119, 5, 119, 1597, 10, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 7, 120, 1604, 10, 120, 12, 120, 14, 120, 1607, 11, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 5, 121, 1625, 10, 121, 3, 122, 3, 122, 3, 122, 3, 122, 7, 122, 1631, 10, 122, 12, 122, 14, 122, 1634, 11, 122, 3, 123, 3, 123, 3, 123, 6, 123, 1639, 10, 123, 13, 123, 14, 123, 1640, 3, 123, 3, 123, 5, 123, 1645, 10, 123, 3, 124, 3, 124, 5, 124, 1649, 10, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 5, 125, 1659, 10, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 1685, 10, 126, 3, 127, 3, 127, 3, 127, 3, 127, 7, 127, 1691, 10, 127, 12, 127, 14, 127, 1694, 11, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 5, 128, 1705, 10, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 5, 132, 1727, 10, 132, 5, 132, 1729, 10, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 5, 132, 1740, 10, 132, 3, 132, 7, 132, 1743, 10, 132, 12, 132, 14, 132, 1746, 11, 132, 3, 133, 5, 133, 1749, 10, 133, 3, 133, 3, 133, 5, 133, 1753, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1760, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 7, 133, 1767, 10, 133, 12, 133, 14, 133, 1770, 11, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1775, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1788, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1795, 10, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1800, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1806, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1813, 10, 133, 5, 133, 1815, 10, 133, 3, 134, 5, 134, 1818, 10, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 7, 134, 1828, 10, 134, 12, 134, 14, 134, 1831, 11, 134, 3, 134, 3, 134, 5, 134, 1835, 10, 134, 3, 134, 5, 134, 1838, 10, 134, 3, 134, 3, 134, 3, 134, 3, 134, 5, 134, 1844, 10, 134, 5, 134, 1846, 10, 134, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 1852, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 7, 135, 1875, 10, 135, 12, 135, 14, 135, 1878, 11, 135, 3, 136, 3, 136, 3, 136, 6, 136, 1883, 10, 136, 13, 136, 14, 136, 1884, 3, 136, 3, 136, 5, 136, 1889, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 6, 136, 1896, 10, 136, 13, 136, 14, 136, 1897, 3, 136, 3, 136, 5, 136, 1902, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1918, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1927, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1951, 10, 136, 3, 136, 3, 136, 3, 136, 7, 136, 1956, 10, 136, 12, 136, 14, 136, 1959, 11, 136, 5, 136, 1961, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 1971, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 7, 136, 1978, 10, 136, 12, 136, 14, 136, 1981, 11, 136, 3, 137, 3, 137, 3, 137, 5, 137, 1986, 10, 137, 3, 138, 3, 138, 3, 138, 3, 138, 5, 138, 1992, 10, 138, 3, 139, 3, 139, 3, 140, 3, 140, 3, 141, 3, 141, 5, 141, 2000, 10, 141, 3, 142, 3, 142, 3, 142, 5, 142, 2005, 10, 142, 3, 143, 3, 143, 5, 143, 2009, 10, 143, 3, 144, 3, 144, 3, 144, 6, 144, 2014, 10, 144, 13, 144, 14, 144, 2015, 3, 145, 3, 145, 3, 145, 5, 145, 2021, 10, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 5, 147, 2029, 10, 147, 3, 147, 3, 147, 5, 147, 2033, 10, 147, 3, 148, 5, 148, 2036, 10, 148, 3, 148, 3, 148, 5, 148, 2040, 10, 148, 3, 149, 5, 149, 2043, 10, 149, 3, 149, 3, 149, 5, 149, 2047, 10, 149, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 6, 151, 2054, 10, 151, 13, 151, 14, 151, 2055, 3, 151, 5, 151, 2059, 10, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 7, 153, 2068, 10, 153, 12, 153, 14, 153, 2071, 11, 153, 3, 154, 3, 154, 3, 154, 5, 154, 2076, 10, 154, 3, 155, 3, 155, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 160, 3, 160, 3, 161, 3, 161, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 7, 163, 2100, 10, 163, 12, 163, 14, 163, 2103, 11, 163, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 7, 167, 2119, 10, 167, 12, 167, 14, 167, 2122, 11, 167, 3, 167, 3, 167, 3, 168, 3, 168, 5, 168, 2128, 10, 168, 3, 168, 5, 168, 2131, 10, 168, 3, 169, 3, 169, 3, 169, 5, 169, 2136, 10, 169, 3, 170, 3, 170, 3, 170, 3, 170, 5, 170, 2142, 10, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 5, 171, 2150, 10, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 5, 172, 2166, 10, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 5, 173, 2175, 10, 173, 3, 174, 3, 174, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 5, 176, 2185, 10, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 5, 176, 2192, 10, 176, 3, 176, 5, 176, 2195, 10, 176, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 179, 3, 179, 3, 180, 3, 180, 3, 181, 3, 181, 3, 182, 3, 182, 3, 183, 3, 183, 3, 184, 3, 184, 3, 185, 3, 185, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 2101, 2, 7, 160, 180, 262, 268, 270, 188, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 180, 2, 182, 2, 184, 2, 186, 2, 188, 2, 190, 2, 192, 2, 194, 2, 196, 2, 198, 2, 200, 2, 202, 2, 204, 2, 206, 2, 208, 2, 210, 2, 212, 2, 214, 2, 216, 2, 218, 2, 220, 2, 222, 2, 224, 2, 226, 2, 228, 2, 230, 2, 232, 2, 234, 2, 236, 2, 238, 2, 240, 2, 242, 2, 244, 2, 246, 2, 248, 2, 250, 2, 252, 2, 254, 2, 256, 2, 258, 2, 260, 2, 262, 2, 264, 2, 266, 2, 268, 2, 270, 2, 272, 2, 274, 2, 276, 2, 278, 2, 280, 2, 282, 2, 284, 2, 286, 2, 288, 2, 290, 2, 292, 2, 294, 2, 296, 2, 298, 2, 300, 2, 302, 2, 304, 2, 306, 2, 308, 2, 310, 2, 312, 2, 314, 2, 316, 2, 318, 2, 320, 2, 322, 2, 324, 2, 326, 2, 328, 2, 330, 2, 332, 2, 334, 2, 336, 2, 338, 2, 340, 2, 342, 2, 344, 2, 346, 2, 348, 2, 350, 2, 352, 2, 354, 2, 356, 2, 358, 2, 360, 2, 362, 2, 364, 2, 366, 2, 368, 2, 370, 2, 372, 2, 2, 49, 4, 2, 32, 32, 236, 236, 5, 2, 18, 18, 40, 40, 70, 70, 6, 2, 15, 15, 28, 28, 67, 67, 169, 169, 4, 2, 14, 14, 27, 27, 4, 2, 254, 254, 265, 265, 4, 2, 168, 168, 346, 346, 4, 2, 6, 6, 120, 120, 3, 2, 110, 114, 5, 2, 197, 197, 227, 227, 301, 301, 13, 2, 12, 12, 148, 148, 154, 154, 193, 194, 206, 206, 228, 228, 270, 271, 337, 337, 349, 349, 351, 351, 366, 367, 4, 2, 371, 371, 373, 373, 6, 2, 230, 231, 238, 238, 252, 252, 302, 302, 4, 2, 186, 186, 295, 295, 4, 2, 43, 43, 266, 266, 5, 2, 23, 23, 98, 98, 180, 180, 5, 2, 43, 43, 96, 96, 266, 266, 5, 2, 55, 55, 92, 92, 172, 172, 5, 2, 68, 68, 109, 109, 128, 128, 4, 2, 13, 13, 125, 125, 4, 2, 95, 95, 274, 274, 5, 2, 245, 245, 272, 272, 356, 356, 6, 2, 255, 255, 267, 267, 281, 281, 325, 325, 5, 2, 25, 25, 59, 59, 158, 158, 7, 2, 26, 26, 141, 142, 147, 147, 153, 153, 304, 304, 4, 2, 223, 223, 328, 328, 5, 2, 59, 59, 138, 138, 158, 158, 4, 2, 10, 10, 32, 32, 4, 2, 47, 47, 75, 75, 6, 2, 251, 251, 301, 301, 354, 354, 358, 358, 4, 2, 188, 188, 342, 342, 4, 2, 180, 180, 184, 184, 4, 2, 379, 379, 399, 400, 6, 2, 34, 34, 397, 397, 401, 401, 404, 404, 4, 2, 399, 400, 402, 402, 3, 2, 399, 400, 3, 2, 408, 409, 4, 2, 408, 408, 411, 411, 6, 2, 34, 34, 397, 397, 399, 401, 403, 404, 5, 2, 300, 300, 378, 379, 399, 400, 4, 2, 251, 251, 354, 354, 4, 2, 180, 180, 237, 237, 12, 2, 80, 80, 82, 82, 116, 116, 173, 173, 229, 229, 263, 263, 291, 291, 294, 294, 331, 331, 374, 374, 18, 2, 16, 16, 29, 30, 38, 38, 60, 60, 80, 83, 87, 88, 116, 116, 132, 132, 173, 174, 177, 177, 229, 229, 263, 263, 291, 291, 294, 294, 331, 331, 374, 374, 8, 2, 180, 180, 198, 198, 237, 237, 280, 280, 353, 353, 397, 397, 30, 2, 61, 61, 79, 79, 116, 116, 173, 173, 179, 179, 186, 186, 190, 190, 204, 205, 211, 211, 213, 213, 220, 220, 227, 227, 260, 260, 263, 263, 277, 277, 281, 281, 291, 291, 294, 294, 312, 312, 318, 319, 322, 322, 325, 325, 331, 331, 340, 341, 349, 350, 355, 355, 360, 360, 374, 374, 7, 2, 179, 243, 245, 318, 320, 341, 343, 352, 354, 374, 5, 2, 6, 37, 39, 173, 175, 178, 2, 2412, 2, 374, 3, 2, 2, 2, 4, 377, 3, 2, 2, 2, 6, 384, 3, 2, 2, 2, 8, 435, 3, 2, 2, 2, 10, 437, 3, 2, 2, 2, 12, 453, 3, 2, 2, 2, 14, 457, 3, 2, 2, 2, 16, 459, 3, 2, 2, 2, 18, 462, 3, 2, 2, 2, 20, 473, 3, 2, 2, 2, 22, 481, 3, 2, 2, 2, 24, 489, 3, 2, 2, 2, 26, 491, 3, 2, 2, 2, 28, 536, 3, 2, 2, 2, 30, 538, 3, 2, 2, 2, 32, 545, 3, 2, 2, 2, 34, 549, 3, 2, 2, 2, 36, 553, 3, 2, 2, 2, 38, 557, 3, 2, 2, 2, 40, 601, 3, 2, 2, 2, 42, 604, 3, 2, 2, 2, 44, 610, 3, 2, 2, 2, 46, 612, 3, 2, 2, 2, 48, 653, 3, 2, 2, 2, 50, 667, 3, 2, 2, 2, 52, 669, 3, 2, 2, 2, 54, 679, 3, 2, 2, 2, 56, 681, 3, 2, 2, 2, 58, 729, 3, 2, 2, 2, 60, 731, 3, 2, 2, 2, 62, 735, 3, 2, 2, 2, 64, 743, 3, 2, 2, 2, 66, 751, 3, 2, 2, 2, 68, 755, 3, 2, 2, 2, 70, 762, 3, 2, 2, 2, 72, 790, 3, 2, 2, 2, 74, 792, 3, 2, 2, 2, 76, 795, 3, 2, 2, 2, 78, 805, 3, 2, 2, 2, 80, 807, 3, 2, 2, 2, 82, 813, 3, 2, 2, 2, 84, 815, 3, 2, 2, 2, 86, 823, 3, 2, 2, 2, 88, 831, 3, 2, 2, 2, 90, 833, 3, 2, 2, 2, 92, 837, 3, 2, 2, 2, 94, 841, 3, 2, 2, 2, 96, 865, 3, 2, 2, 2, 98, 869, 3, 2, 2, 2, 100, 871, 3, 2, 2, 2, 102, 887, 3, 2, 2, 2, 104, 889, 3, 2, 2, 2, 106, 894, 3, 2, 2, 2, 108, 905, 3, 2, 2, 2, 110, 923, 3, 2, 2, 2, 112, 943, 3, 2, 2, 2, 114, 954, 3, 2, 2, 2, 116, 956, 3, 2, 2, 2, 118, 969, 3, 2, 2, 2, 120, 976, 3, 2, 2, 2, 122, 979, 3, 2, 2, 2, 124, 988, 3, 2, 2, 2, 126, 992, 3, 2, 2, 2, 128, 996, 3, 2, 2, 2, 130, 999, 3, 2, 2, 2, 132, 1007, 3, 2, 2, 2, 134, 1012, 3, 2, 2, 2, 136, 1029, 3, 2, 2, 2, 138, 1036, 3, 2, 2, 2, 140, 1046, 3, 2, 2, 2, 142, 1055, 3, 2, 2, 2, 144, 1065, 3, 2, 2, 2, 146, 1084, 3, 2, 2, 2, 148, 1086, 3, 2, 2, 2, 150, 1099, 3, 2, 2, 2, 152, 1102, 3, 2, 2, 2, 154, 1111, 3, 2, 2, 2, 156, 1122, 3, 2, 2, 2, 158, 1135, 3, 2, 2, 2, 160, 1170, 3, 2, 2, 2, 162, 1189, 3, 2, 2, 2, 164, 1198, 3, 2, 2, 2, 166, 1207, 3, 2, 2, 2, 168, 1226, 3, 2, 2, 2, 170, 1246, 3, 2, 2, 2, 172, 1248, 3, 2, 2, 2, 174, 1271, 3, 2, 2, 2, 176, 1285, 3, 2, 2, 2, 178, 1287, 3, 2, 2, 2, 180, 1301, 3, 2, 2, 2, 182, 1327, 3, 2, 2, 2, 184, 1372, 3, 2, 2, 2, 186, 1374, 3, 2, 2, 2, 188, 1380, 3, 2, 2, 2, 190, 1382, 3, 2, 2, 2, 192, 1387, 3, 2, 2, 2, 194, 1392, 3, 2, 2, 2, 196, 1404, 3, 2, 2, 2, 198, 1421, 3, 2, 2, 2, 200, 1423, 3, 2, 2, 2, 202, 1425, 3, 2, 2, 2, 204, 1444, 3, 2, 2, 2, 206, 1446, 3, 2, 2, 2, 208, 1449, 3, 2, 2, 2, 210, 1498, 3, 2, 2, 2, 212, 1500, 3, 2, 2, 2, 214, 1503, 3, 2, 2, 2, 216, 1505, 3, 2, 2, 2, 218, 1512, 3, 2, 2, 2, 220, 1514, 3, 2, 2, 2, 222, 1516, 3, 2, 2, 2, 224, 1519, 3, 2, 2, 2, 226, 1528, 3, 2, 2, 2, 228, 1533, 3, 2, 2, 2, 230, 1547, 3, 2, 2, 2, 232, 1575, 3, 2, 2, 2, 234, 1585, 3, 2, 2, 2, 236, 1593, 3, 2, 2, 2, 238, 1598, 3, 2, 2, 2, 240, 1624, 3, 2, 2, 2, 242, 1626, 3, 2, 2, 2, 244, 1635, 3, 2, 2, 2, 246, 1646, 3, 2, 2, 2, 248, 1658, 3, 2, 2, 2, 250, 1684, 3, 2, 2, 2, 252, 1686, 3, 2, 2, 2, 254, 1704, 3, 2, 2, 2, 256, 1706, 3, 2, 2, 2, 258, 1711, 3, 2, 2, 2, 260, 1714, 3, 2, 2, 2, 262, 1728, 3, 2, 2, 2, 264, 1814, 3, 2, 2, 2, 266, 1845, 3, 2, 2, 2, 268, 1851, 3, 2, 2, 2, 270, 1970, 3, 2, 2, 2, 272, 1985, 3, 2, 2, 2, 274, 1991, 3, 2, 2, 2, 276, 1993, 3, 2, 2, 2, 278, 1995, 3, 2, 2, 2, 280, 1999, 3, 2, 2, 2, 282, 2001, 3, 2, 2, 2, 284, 2006, 3, 2, 2, 2, 286, 2013, 3, 2, 2, 2, 288, 2017, 3, 2, 2, 2, 290, 2022, 3, 2, 2, 2, 292, 2032, 3, 2, 2, 2, 294, 2035, 3, 2, 2, 2, 296, 2042, 3, 2, 2, 2, 298, 2048, 3, 2, 2, 2, 300, 2058, 3, 2, 2, 2, 302, 2060, 3, 2, 2, 2, 304, 2064, 3, 2, 2, 2, 306, 2075, 3, 2, 2, 2, 308, 2077, 3, 2, 2, 2, 310, 2079, 3, 2, 2, 2, 312, 2081, 3, 2, 2, 2, 314, 2086, 3, 2, 2, 2, 316, 2088, 3, 2, 2, 2, 318, 2090, 3, 2, 2, 2, 320, 2092, 3, 2, 2, 2, 322, 2094, 3, 2, 2, 2, 324, 2096, 3, 2, 2, 2, 326, 2104, 3, 2, 2, 2, 328, 2107, 3, 2, 2, 2, 330, 2111, 3, 2, 2, 2, 332, 2114, 3, 2, 2, 2, 334, 2125, 3, 2, 2, 2, 336, 2135, 3, 2, 2, 2, 338, 2141, 3, 2, 2, 2, 340, 2149, 3, 2, 2, 2, 342, 2165, 3, 2, 2, 2, 344, 2174, 3, 2, 2, 2, 346, 2176, 3, 2, 2, 2, 348, 2178, 3, 2, 2, 2, 350, 2194, 3, 2, 2, 2, 352, 2196, 3, 2, 2, 2, 354, 2199, 3, 2, 2, 2, 356, 2201, 3, 2, 2, 2, 358, 2203, 3, 2, 2, 2, 360, 2205, 3, 2, 2, 2, 362, 2207, 3, 2, 2, 2, 364, 2209, 3, 2, 2, 2, 366, 2211, 3, 2, 2, 2, 368, 2213, 3, 2, 2, 2, 370, 2215, 3, 2, 2, 2, 372, 2217, 3, 2, 2, 2, 374, 375, 5, 4, 3, 2, 375, 376, 7, 2, 2, 3, 376, 3, 3, 2, 2, 2, 377, 378, 5, 6, 4, 2, 378, 379, 7, 2, 2, 3, 379, 5, 3, 2, 2, 2, 380, 383, 5, 8, 5, 2, 381, 383, 5, 10, 6, 2, 382, 380, 3, 2, 2, 2, 382, 381, 3, 2, 2, 2, 383, 386, 3, 2, 2, 2, 384, 382, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 7, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 387, 389, 5, 12, 7, 2, 388, 390, 7, 391, 2, 2, 389, 388, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 436, 3, 2, 2, 2, 391, 393, 5, 14, 8, 2, 392, 394, 7, 391, 2, 2, 393, 392, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 436, 3, 2, 2, 2, 395, 397, 5, 16, 9, 2, 396, 398, 7, 391, 2, 2, 397, 396, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 436, 3, 2, 2, 2, 399, 401, 5, 18, 10, 2, 400, 402, 7, 391, 2, 2, 401, 400, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 436, 3, 2, 2, 2, 403, 405, 5, 24, 13, 2, 404, 406, 7, 391, 2, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 436, 3, 2, 2, 2, 407, 409, 5, 28, 15, 2, 408, 410, 7, 391, 2, 2, 409, 408, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 436, 3, 2, 2, 2, 411, 413, 5, 30, 16, 2, 412, 414, 7, 391, 2, 2, 413, 412, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 436, 3, 2, 2, 2, 415, 417, 5, 32, 17, 2, 416, 418, 7, 391, 2, 2, 417, 416, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 436, 3, 2, 2, 2, 419, 421, 5, 34, 18, 2, 420, 422, 7, 391, 2, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 436, 3, 2, 2, 2, 423, 425, 5, 36, 19, 2, 424, 426, 7, 391, 2, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 436, 3, 2, 2, 2, 427, 429, 5, 38, 20, 2, 428, 430, 7, 391, 2, 2, 429, 428, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 436, 3, 2, 2, 2, 431, 433, 5, 40, 21, 2, 432, 434, 7, 391, 2, 2, 433, 432, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 436, 3, 2, 2, 2, 435, 387, 3, 2, 2, 2, 435, 391, 3, 2, 2, 2, 435, 395, 3, 2, 2, 2, 435, 399, 3, 2, 2, 2, 435, 403, 3, 2, 2, 2, 435, 407, 3, 2, 2, 2, 435, 411, 3, 2, 2, 2, 435, 415, 3, 2, 2, 2, 435, 419, 3, 2, 2, 2, 435, 423, 3, 2, 2, 2, 435, 427, 3, 2, 2, 2, 435, 431, 3, 2, 2, 2, 436, 9, 3, 2, 2, 2, 437, 438, 7, 391, 2, 2, 438, 11, 3, 2, 2, 2, 439, 454, 5, 44, 23, 2, 440, 454, 5, 106, 54, 2, 441, 454, 5, 108, 55, 2, 442, 454, 5, 110, 56, 2, 443, 454, 5, 104, 53, 2, 444, 454, 5, 116, 59, 2, 445, 454, 5, 130, 66, 2, 446, 454, 5, 132, 67, 2, 447, 454, 5, 134, 68, 2, 448, 454, 5, 136, 69, 2, 449, 454, 5, 138, 70, 2, 450, 454, 5, 140, 71, 2, 451, 454, 5, 142, 72, 2, 452, 454, 5, 144, 73, 2, 453, 439, 3, 2, 2, 2, 453, 440, 3, 2, 2, 2, 453, 441, 3, 2, 2, 2, 453, 442, 3, 2, 2, 2, 453, 443, 3, 2, 2, 2, 453, 444, 3, 2, 2, 2, 453, 445, 3, 2, 2, 2, 453, 446, 3, 2, 2, 2, 453, 447, 3, 2, 2, 2, 453, 448, 3, 2, 2, 2, 453, 449, 3, 2, 2, 2, 453, 450, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 452, 3, 2, 2, 2, 454, 13, 3, 2, 2, 2, 455, 458, 5, 160, 81, 2, 456, 458, 5, 146, 74, 2, 457, 455, 3, 2, 2, 2, 457, 456, 3, 2, 2, 2, 458, 15, 3, 2, 2, 2, 459, 460, 9, 2, 2, 2, 460, 461, 5, 322, 162, 2, 461, 17, 3, 2, 2, 2, 462, 466, 7, 248, 2, 2, 463, 467, 5, 20, 11, 2, 464, 465, 7, 103, 2, 2, 465, 467, 7, 253, 2, 2, 466, 463, 3, 2, 2, 2, 466, 464, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 471, 3, 2, 2, 2, 468, 472, 5, 14, 8, 2, 469, 472, 5, 148, 75, 2, 470, 472, 5, 158, 80, 2, 471, 468, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 470, 3, 2, 2, 2, 472, 19, 3, 2, 2, 2, 473, 478, 5, 22, 12, 2, 474, 475, 7, 390, 2, 2, 475, 477, 5, 22, 12, 2, 476, 474, 3, 2, 2, 2, 477, 480, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 478, 479, 3, 2, 2, 2, 479, 21, 3, 2, 2, 2, 480, 478, 3, 2, 2, 2, 481, 482, 9, 3, 2, 2, 482, 23, 3, 2, 2, 2, 483, 484, 7, 163, 2, 2, 484, 485, 7, 14, 2, 2, 485, 490, 5, 314, 158, 2, 486, 487, 7, 163, 2, 2, 487, 490, 5, 316, 159, 2, 488, 490, 5, 26, 14, 2, 489, 483, 3, 2, 2, 2, 489, 486, 3, 2, 2, 2, 489, 488, 3, 2, 2, 2, 490, 25, 3, 2, 2, 2, 491, 492, 7, 163, 2, 2, 492, 493, 7, 86, 2, 2, 493, 498, 5, 324, 163, 2, 494, 495, 7, 390, 2, 2, 495, 497, 5, 324, 163, 2, 496, 494, 3, 2, 2, 2, 497, 500, 3, 2, 2, 2, 498, 496, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 27, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 501, 502, 7, 334, 2, 2, 502, 537, 9, 4, 2, 2, 503, 504, 7, 334, 2, 2, 504, 505, 7, 224, 2, 2, 505, 537, 9, 5, 2, 2, 506, 507, 7, 334, 2, 2, 507, 510, 7, 151, 2, 2, 508, 509, 9, 6, 2, 2, 509, 511, 5, 322, 162, 2, 510, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 513, 3, 2, 2, 2, 512, 514, 5, 266, 134, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 537, 3, 2, 2, 2, 515, 516, 7, 334, 2, 2, 516, 517, 7, 22, 2, 2, 517, 518, 9, 6, 2, 2, 518, 520, 5, 324, 163, 2, 519, 521, 5, 266, 134, 2, 520, 519, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 537, 3, 2, 2, 2, 522, 523, 7, 334, 2, 2, 523, 524, 7, 221, 2, 2, 524, 525, 9, 7, 2, 2, 525, 537, 5, 324, 163, 2, 526, 528, 7, 334, 2, 2, 527, 529, 7, 362, 2, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 537, 7, 53, 2, 2, 531, 533, 7, 334, 2, 2, 532, 534, 7, 255, 2, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 537, 7, 86, 2, 2, 536, 501, 3, 2, 2, 2, 536, 503, 3, 2, 2, 2, 536, 506, 3, 2, 2, 2, 536, 515, 3, 2, 2, 2, 536, 522, 3, 2, 2, 2, 536, 526, 3, 2, 2, 2, 536, 531, 3, 2, 2, 2, 537, 29, 3, 2, 2, 2, 538, 539, 7, 78, 2, 2, 539, 540, 7, 293, 2, 2, 540, 543, 5, 324, 163, 2, 541, 542, 7, 371, 2, 2, 542, 544, 5, 332, 167, 2, 543, 541, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 31, 3, 2, 2, 2, 545, 546, 7, 161, 2, 2, 546, 547, 7, 293, 2, 2, 547, 548, 5, 324, 163, 2, 548, 33, 3, 2, 2, 2, 549, 551, 7, 333, 2, 2, 550, 552, 5, 334, 168, 2, 551, 550, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 35, 3, 2, 2, 2, 553, 555, 7, 323, 2, 2, 554, 556, 5, 336, 169, 2, 555, 554, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 37, 3, 2, 2, 2, 557, 558, 9, 8, 2, 2, 558, 559, 7, 66, 2, 2, 559, 560, 5, 114, 58, 2, 560, 39, 3, 2, 2, 2, 561, 562, 7, 6, 2, 2, 562, 563, 7, 66, 2, 2, 563, 564, 7, 371, 2, 2, 564, 567, 5, 42, 22, 2, 565, 566, 7, 187, 2, 2, 566, 568, 5, 324, 163, 2, 567, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 602, 3, 2, 2, 2, 569, 570, 7, 6, 2, 2, 570, 571, 7, 45, 2, 2, 571, 572, 7, 371, 2, 2, 572, 575, 5, 42, 22, 2, 573, 574, 7, 187, 2, 2, 574, 576, 5, 324, 163, 2, 575, 573, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 578, 7, 121, 2, 2, 578, 580, 5, 324, 163, 2, 579, 577, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 602, 3, 2, 2, 2, 581, 582, 7, 6, 2, 2, 582, 583, 9, 9, 2, 2, 583, 584, 7, 371, 2, 2, 584, 585, 5, 42, 22, 2, 585, 586, 7, 121, 2, 2, 586, 587, 5, 324, 163, 2, 587, 602, 3, 2, 2, 2, 588, 589, 7, 6, 2, 2, 589, 590, 7, 115, 2, 2, 590, 602, 5, 42, 22, 2, 591, 592, 7, 6, 2, 2, 592, 593, 7, 37, 2, 2, 593, 594, 7, 45, 2, 2, 594, 595, 7, 371, 2, 2, 595, 596, 5, 42, 22, 2, 596, 597, 7, 121, 2, 2, 597, 598, 5, 324, 163, 2, 598, 599, 7, 71, 2, 2, 599, 600, 5, 324, 163, 2, 600, 602, 3, 2, 2, 2, 601, 561, 3, 2, 2, 2, 601, 569, 3, 2, 2, 2, 601, 581, 3, 2, 2, 2, 601, 588, 3, 2, 2, 2, 601, 591, 3, 2, 2, 2, 602, 41, 3, 2, 2, 2, 603, 605, 7, 412, 2, 2, 604, 603, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 43, 3, 2, 2, 2, 608, 611, 5, 46, 24, 2, 609, 611, 5, 48, 25, 2, 610, 608, 3, 2, 2, 2, 610, 609, 3, 2, 2, 2, 611, 45, 3, 2, 2, 2, 612, 614, 7, 221, 2, 2, 613, 615, 7, 152, 2, 2, 614, 613, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 618, 7, 346, 2, 2, 617, 619, 5, 328, 165, 2, 618, 617, 3, 2, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 621, 5, 320, 161, 2, 621, 622, 7, 386, 2, 2, 622, 627, 5, 50, 26, 2, 623, 624, 7, 390, 2, 2, 624, 626, 5, 50, 26, 2, 625, 623, 3, 2, 2, 2, 626, 629, 3, 2, 2, 2, 627, 625, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 632, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 630, 631, 7, 390, 2, 2, 631, 633, 5, 84, 43, 2, 632, 630, 3, 2, 2, 2, 632, 633, 3, 2, 2, 2, 633, 636, 3, 2, 2, 2, 634, 635, 7, 390, 2, 2, 635, 637, 5, 86, 44, 2, 636, 634, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 640, 3, 2, 2, 2, 638, 639, 7, 390, 2, 2, 639, 641, 5, 90, 46, 2, 640, 638, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 644, 7, 387, 2, 2, 643, 645, 5, 74, 38, 2, 644, 643, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 647, 3, 2, 2, 2, 646, 648, 5, 92, 47, 2, 647, 646, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 651, 5, 326, 164, 2, 650, 652, 5, 100, 51, 2, 651, 650, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 47, 3, 2, 2, 2, 653, 654, 7, 221, 2, 2, 654, 656, 7, 346, 2, 2, 655, 657, 5, 328, 165, 2, 656, 655, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 659, 5, 320, 161, 2, 659, 662, 5, 326, 164, 2, 660, 661, 7, 187, 2, 2, 661, 663, 5, 160, 81, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 49, 3, 2, 2, 2, 664, 668, 5, 52, 27, 2, 665, 668, 5, 76, 39, 2, 666, 668, 5, 80, 41, 2, 667, 664, 3, 2, 2, 2, 667, 665, 3, 2, 2, 2, 667, 666, 3, 2, 2, 2, 668, 51, 3, 2, 2, 2, 669, 670, 5, 54, 28, 2, 670, 672, 5, 58, 30, 2, 671, 673, 5, 72, 37, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 675, 3, 2, 2, 2, 674, 676, 5, 74, 38, 2, 675, 674, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 53, 3, 2, 2, 2, 677, 680, 5, 324, 163, 2, 678, 680, 5, 260, 131, 2, 679, 677, 3, 2, 2, 2, 679, 678, 3, 2, 2, 2, 680, 55, 3, 2, 2, 2, 681, 682, 7, 386, 2, 2, 682, 687, 5, 54, 28, 2, 683, 684, 7, 390, 2, 2, 684, 686, 5, 54, 28, 2, 685, 683, 3, 2, 2, 2, 686, 689, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 690, 3, 2, 2, 2, 689, 687, 3, 2, 2, 2, 690, 691, 7, 387, 2, 2, 691, 57, 3, 2, 2, 2, 692, 730, 9, 10, 2, 2, 693, 695, 9, 11, 2, 2, 694, 696, 5, 60, 31, 2, 695, 694, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 730, 3, 2, 2, 2, 697, 699, 7, 350, 2, 2, 698, 700, 5, 60, 31, 2, 699, 698, 3, 2, 2, 2, 699, 700, 3, 2, 2, 2, 700, 707, 3, 2, 2, 2, 701, 703, 9, 12, 2, 2, 702, 704, 7, 284, 2, 2, 703, 702, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 706, 7, 349, 2, 2, 706, 708, 7, 178, 2, 2, 707, 701, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 730, 3, 2, 2, 2, 709, 711, 9, 13, 2, 2, 710, 712, 5, 62, 32, 2, 711, 710, 3, 2, 2, 2, 711, 712, 3, 2, 2, 2, 712, 730, 3, 2, 2, 2, 713, 715, 9, 14, 2, 2, 714, 716, 5, 66, 34, 2, 715, 714, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 730, 3, 2, 2, 2, 717, 719, 7, 79, 2, 2, 718, 720, 5, 68, 35, 2, 719, 718, 3, 2, 2, 2, 719, 720, 3, 2, 2, 2, 720, 730, 3, 2, 2, 2, 721, 723, 7, 329, 2, 2, 722, 724, 5, 70, 36, 2, 723, 722, 3, 2, 2, 2, 723, 724, 3, 2, 2, 2, 724, 730, 3, 2, 2, 2, 725, 727, 7, 117, 2, 2, 726, 728, 5, 64, 33, 2, 727, 726, 3, 2, 2, 2, 727, 728, 3, 2, 2, 2, 728, 730, 3, 2, 2, 2, 729, 692, 3, 2, 2, 2, 729, 693, 3, 2, 2, 2, 729, 697, 3, 2, 2, 2, 729, 709, 3, 2, 2, 2, 729, 713, 3, 2, 2, 2, 729, 717, 3, 2, 2, 2, 729, 721, 3, 2, 2, 2, 729, 725, 3, 2, 2, 2, 730, 59, 3, 2, 2, 2, 731, 732, 7, 386, 2, 2, 732, 733, 5, 356, 179, 2, 733, 734, 7, 387, 2, 2, 734, 61, 3, 2, 2, 2, 735, 736, 7, 386, 2, 2, 736, 739, 5, 356, 179, 2, 737, 738, 7, 390, 2, 2, 738, 740, 5, 356, 179, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 742, 7, 387, 2, 2, 742, 63, 3, 2, 2, 2, 743, 744, 7, 386, 2, 2, 744, 747, 5, 354, 178, 2, 745, 746, 7, 390, 2, 2, 746, 748, 5, 354, 178, 2, 747, 745, 3, 2, 2, 2, 747, 748, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 750, 7, 387, 2, 2, 750, 65, 3, 2, 2, 2, 751, 752, 7, 377, 2, 2, 752, 753, 5, 58, 30, 2, 753, 754, 7, 376, 2, 2, 754, 67, 3, 2, 2, 2, 755, 756, 7, 377, 2, 2, 756, 757, 5, 58, 30, 2, 757, 758, 7, 390, 2, 2, 758, 759, 5, 58, 30, 2, 759, 760, 3, 2, 2, 2, 760, 761, 7, 376, 2, 2, 761, 69, 3, 2, 2, 2, 762, 763, 7, 377, 2, 2, 763, 764, 5, 54, 28, 2, 764, 771, 5, 58, 30, 2, 765, 766, 7, 390, 2, 2, 766, 767, 5, 54, 28, 2, 767, 768, 5, 58, 30, 2, 768, 770, 3, 2, 2, 2, 769, 765, 3, 2, 2, 2, 770, 773, 3, 2, 2, 2, 771, 769, 3, 2, 2, 2, 771, 772, 3, 2, 2, 2, 772, 774, 3, 2, 2, 2, 773, 771, 3, 2, 2, 2, 774, 775, 7, 376, 2, 2, 775, 71, 3, 2, 2, 2, 776, 777, 7, 217, 2, 2, 777, 779, 5, 88, 45, 2, 778, 776, 3, 2, 2, 2, 778, 779, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 781, 7, 320, 2, 2, 781, 784, 7, 71, 2, 2, 782, 783, 7, 300, 2, 2, 783, 785, 7, 36, 2, 2, 784, 782, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 791, 3, 2, 2, 2, 786, 788, 7, 300, 2, 2, 787, 786, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 791, 7, 301, 2, 2, 790, 778, 3, 2, 2, 2, 790, 787, 3, 2, 2, 2, 791, 73, 3, 2, 2, 2, 792, 793, 7, 20, 2, 2, 793, 794, 7, 407, 2, 2, 794, 75, 3, 2, 2, 2, 795, 796, 5, 54, 28, 2, 796, 797, 5, 58, 30, 2, 797, 800, 7, 289, 2, 2, 798, 799, 7, 254, 2, 2, 799, 801, 5, 78, 40, 2, 800, 798, 3, 2, 2, 2, 800, 801, 3, 2, 2, 2, 801, 803, 3, 2, 2, 2, 802, 804, 7, 170, 2, 2, 803, 802, 3, 2, 2, 2, 803, 804, 3, 2, 2, 2, 804, 77, 3, 2, 2, 2, 805, 806, 7, 407, 2, 2, 806, 79, 3, 2, 2, 2, 807, 808, 5, 54, 28, 2, 808, 809, 7, 187, 2, 2, 809, 811, 5, 82, 42, 2, 810, 812, 5, 74, 38, 2, 811, 810, 3, 2, 2, 2, 811, 812, 3, 2, 2, 2, 812, 81, 3, 2, 2, 2, 813, 814, 5, 260, 131, 2, 814, 83, 3, 2, 2, 2, 815, 816, 7, 171, 2, 2, 816, 817, 7, 253, 2, 2, 817, 818, 5, 260, 131, 2, 818, 819, 7, 187, 2, 2, 819, 820, 5, 260, 131, 2, 820, 85, 3, 2, 2, 2, 821, 822, 7, 217, 2, 2, 822, 824, 5, 88, 45, 2, 823, 821, 3, 2, 2, 2, 823, 824, 3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 826, 7, 320, 2, 2, 826, 827, 7, 71, 2, 2, 827, 828, 5, 56, 29, 2, 828, 829, 7, 300, 2, 2, 829, 830, 7, 36, 2, 2, 830, 87, 3, 2, 2, 2, 831, 832, 5, 306, 154, 2, 832, 89, 3, 2, 2, 2, 833, 834, 7, 317, 2, 2, 834, 835, 7, 253, 2, 2, 835, 836, 7, 344, 2, 2, 836, 91, 3, 2, 2, 2, 837, 838, 7, 97, 2, 2, 838, 839, 7, 199, 2, 2, 839, 840, 5, 94, 48, 2, 840, 93, 3, 2, 2, 2, 841, 842, 7, 386, 2, 2, 842, 847, 5, 96, 49, 2, 843, 844, 7, 390, 2, 2, 844, 846, 5, 96, 49, 2, 845, 843, 3, 2, 2, 2, 846, 849, 3, 2, 2, 2, 847, 845, 3, 2, 2, 2, 847, 848, 3, 2, 2, 2, 848, 850, 3, 2, 2, 2, 849, 847, 3, 2, 2, 2, 850, 851, 7, 387, 2, 2, 851, 95, 3, 2, 2, 2, 852, 866, 5, 280, 141, 2, 853, 854, 5, 306, 154, 2, 854, 855, 7, 386, 2, 2, 855, 860, 5, 98, 50, 2, 856, 857, 7, 390, 2, 2, 857, 859, 5, 98, 50, 2, 858, 856, 3, 2, 2, 2, 859, 862, 3, 2, 2, 2, 860, 858, 3, 2, 2, 2, 860, 861, 3, 2, 2, 2, 861, 863, 3, 2, 2, 2, 862, 860, 3, 2, 2, 2, 863, 864, 7, 387, 2, 2, 864, 866, 3, 2, 2, 2, 865, 852, 3, 2, 2, 2, 865, 853, 3, 2, 2, 2, 866, 97, 3, 2, 2, 2, 867, 870, 5, 280, 141, 2, 868, 870, 5, 350, 176, 2, 869, 867, 3, 2, 2, 2, 869, 868, 3, 2, 2, 2, 870, 99, 3, 2, 2, 2, 871, 872, 7, 282, 2, 2, 872, 881, 5, 322, 162, 2, 873, 877, 7, 386, 2, 2, 874, 876, 5, 102, 52, 2, 875, 874, 3, 2, 2, 2, 876, 879, 3, 2, 2, 2, 877, 875, 3, 2, 2, 2, 877, 878, 3, 2, 2, 2, 878, 880, 3, 2, 2, 2, 879, 877, 3, 2, 2, 2, 880, 882, 7, 387, 2, 2, 881, 873, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 101, 3, 2, 2, 2, 883, 884, 9, 15, 2, 2, 884, 888, 9, 16, 2, 2, 885, 886, 9, 17, 2, 2, 886, 888, 9, 18, 2, 2, 887, 883, 3, 2, 2, 2, 887, 885, 3, 2, 2, 2, 888, 103, 3, 2, 2, 2, 889, 890, 7, 221, 2, 2, 890, 891, 7, 14, 2, 2, 891, 892, 5, 324, 163, 2, 892, 893, 5, 326, 164, 2, 893, 105, 3, 2, 2, 2, 894, 895, 7, 221, 2, 2, 895, 897, 7, 27, 2, 2, 896, 898, 5, 328, 165, 2, 897, 896, 3, 2, 2, 2, 897, 898, 3, 2, 2, 2, 898, 899, 3, 2, 2, 2, 899, 901, 5, 318, 160, 2, 900, 902, 5, 74, 38, 2, 901, 900, 3, 2, 2, 2, 901, 902, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 904, 5, 326, 164, 2, 904, 107, 3, 2, 2, 2, 905, 907, 7, 221, 2, 2, 906, 908, 7, 152, 2, 2, 907, 906, 3, 2, 2, 2, 907, 908, 3, 2, 2, 2, 908, 909, 3, 2, 2, 2, 909, 911, 7, 168, 2, 2, 910, 912, 5, 328, 165, 2, 911, 910, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 913, 3, 2, 2, 2, 913, 915, 5, 324, 163, 2, 914, 916, 5, 56, 29, 2, 915, 914, 3, 2, 2, 2, 915, 916, 3, 2, 2, 2, 916, 918, 3, 2, 2, 2, 917, 919, 5, 74, 38, 2, 918, 917, 3, 2, 2, 2, 918, 919, 3, 2, 2, 2, 919, 920, 3, 2, 2, 2, 920, 921, 7, 187, 2, 2, 921, 922, 5, 160, 81, 2, 922, 109, 3, 2, 2, 2, 923, 927, 7, 221, 2, 2, 924, 928, 7, 152, 2, 2, 925, 926, 7, 152, 2, 2, 926, 928, 7, 343, 2, 2, 927, 924, 3, 2, 2, 2, 927, 925, 3, 2, 2, 2, 927, 928, 3, 2, 2, 2, 928, 929, 3, 2, 2, 2, 929, 931, 7, 256, 2, 2, 930, 932, 5, 328, 165, 2, 931, 930, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 933, 3, 2, 2, 2, 933, 934, 5, 272, 137, 2, 934, 935, 7, 187, 2, 2, 935, 938, 5, 306, 154, 2, 936, 937, 7, 278, 2, 2, 937, 939, 9, 19, 2, 2, 938, 936, 3, 2, 2, 2, 938, 939, 3, 2, 2, 2, 939, 941, 3, 2, 2, 2, 940, 942, 5, 112, 57, 2, 941, 940, 3, 2, 2, 2, 941, 942, 3, 2, 2, 2, 942, 111, 3, 2, 2, 2, 943, 944, 7, 363, 2, 2, 944, 945, 7, 66, 2, 2, 945, 951, 5, 114, 58, 2, 946, 947, 7, 390, 2, 2, 947, 948, 7, 66, 2, 2, 948, 950, 5, 114, 58, 2, 949, 946, 3, 2, 2, 2, 950, 953, 3, 2, 2, 2, 951, 949, 3, 2, 2, 2, 951, 952, 3, 2, 2, 2, 952, 113, 3, 2, 2, 2, 953, 951, 3, 2, 2, 2, 954, 955, 7, 407, 2, 2, 955, 115, 3, 2, 2, 2, 956, 957, 7, 182, 2, 2, 957, 959, 7, 346, 2, 2, 958, 960, 5, 330, 166, 2, 959, 958, 3, 2, 2, 2, 959, 960, 3, 2, 2, 2, 960, 961, 3, 2, 2, 2, 961, 967, 5, 322, 162, 2, 962, 968, 5, 118, 60, 2, 963, 968, 5, 120, 61, 2, 964, 968, 5, 122, 62, 2, 965, 968, 5, 124, 63, 2, 966, 968, 5, 126, 64, 2, 967, 962, 3, 2, 2, 2, 967, 963, 3, 2, 2, 2, 967, 964, 3, 2, 2, 2, 967, 965, 3, 2, 2, 2, 967, 966, 3, 2, 2, 2, 968, 117, 3, 2, 2, 2, 969, 971, 7, 121, 2, 2, 970, 972, 5, 324, 163, 2, 971, 970, 3, 2, 2, 2, 971, 972, 3, 2, 2, 2, 972, 973, 3, 2, 2, 2, 973, 974, 7, 352, 2, 2, 974, 975, 5, 324, 163, 2, 975, 119, 3, 2, 2, 2, 976, 977, 7, 333, 2, 2, 977, 978, 5, 332, 167, 2, 978, 121, 3, 2, 2, 2, 979, 980, 7, 6, 2, 2, 980, 981, 7, 217, 2, 2, 981, 982, 5, 88, 45, 2, 982, 983, 7, 320, 2, 2, 983, 984, 7, 71, 2, 2, 984, 986, 5, 56, 29, 2, 985, 987, 5, 128, 65, 2, 986, 985, 3, 2, 2, 2, 986, 987, 3, 2, 2, 2, 987, 123, 3, 2, 2, 2, 988, 989, 7, 239, 2, 2, 989, 990, 7, 217, 2, 2, 990, 991, 5, 88, 45, 2, 991, 125, 3, 2, 2, 2, 992, 993, 7, 6, 2, 2, 993, 994, 7, 357, 2, 2, 994, 995, 5, 56, 29, 2, 995, 127, 3, 2, 2, 2, 996, 997, 7, 300, 2, 2, 997, 998, 7, 36, 2, 2, 998, 129, 3, 2, 2, 2, 999, 1000, 7, 182, 2, 2, 1000, 1001, 7, 168, 2, 2, 1001, 1005, 5, 324, 163, 2, 1002, 1006, 5, 118, 60, 2, 1003, 1004, 7, 187, 2, 2, 1004, 1006, 5, 160, 81, 2, 1005, 1002, 3, 2, 2, 2, 1005, 1003, 3, 2, 2, 2, 1006, 131, 3, 2, 2, 2, 1007, 1008, 7, 182, 2, 2, 1008, 1009, 7, 27, 2, 2, 1009, 1010, 5, 316, 159, 2, 1010, 1011, 5, 120, 61, 2, 1011, 133, 3, 2, 2, 2, 1012, 1016, 7, 182, 2, 2, 1013, 1017, 7, 152, 2, 2, 1014, 1015, 7, 152, 2, 2, 1015, 1017, 7, 343, 2, 2, 1016, 1013, 3, 2, 2, 2, 1016, 1014, 3, 2, 2, 2, 1016, 1017, 3, 2, 2, 2, 1017, 1018, 3, 2, 2, 2, 1018, 1020, 7, 256, 2, 2, 1019, 1021, 5, 330, 166, 2, 1020, 1019, 3, 2, 2, 2, 1020, 1021, 3, 2, 2, 2, 1021, 1022, 3, 2, 2, 2, 1022, 1023, 5, 324, 163, 2, 1023, 1024, 7, 187, 2, 2, 1024, 1027, 5, 306, 154, 2, 1025, 1026, 7, 278, 2, 2, 1026, 1028, 9, 19, 2, 2, 1027, 1025, 3, 2, 2, 2, 1027, 1028, 3, 2, 2, 2, 1028, 135, 3, 2, 2, 2, 1029, 1030, 7, 239, 2, 2, 1030, 1032, 7, 14, 2, 2, 1031, 1033, 5, 330, 166, 2, 1032, 1031, 3, 2, 2, 2, 1032, 1033, 3, 2, 2, 2, 1033, 1034, 3, 2, 2, 2, 1034, 1035, 5, 314, 158, 2, 1035, 137, 3, 2, 2, 2, 1036, 1038, 7, 239, 2, 2, 1037, 1039, 7, 152, 2, 2, 1038, 1037, 3, 2, 2, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1040, 3, 2, 2, 2, 1040, 1042, 7, 346, 2, 2, 1041, 1043, 5, 330, 166, 2, 1042, 1041, 3, 2, 2, 2, 1042, 1043, 3, 2, 2, 2, 1043, 1044, 3, 2, 2, 2, 1044, 1045, 5, 322, 162, 2, 1045, 139, 3, 2, 2, 2, 1046, 1047, 7, 239, 2, 2, 1047, 1049, 7, 27, 2, 2, 1048, 1050, 5, 330, 166, 2, 1049, 1048, 3, 2, 2, 2, 1049, 1050, 3, 2, 2, 2, 1050, 1051, 3, 2, 2, 2, 1051, 1053, 5, 316, 159, 2, 1052, 1054, 9, 20, 2, 2, 1053, 1052, 3, 2, 2, 2, 1053, 1054, 3, 2, 2, 2, 1054, 141, 3, 2, 2, 2, 1055, 1057, 7, 239, 2, 2, 1056, 1058, 7, 152, 2, 2, 1057, 1056, 3, 2, 2, 2, 1057, 1058, 3, 2, 2, 2, 1058, 1059, 3, 2, 2, 2, 1059, 1061, 7, 168, 2, 2, 1060, 1062, 5, 330, 166, 2, 1061, 1060, 3, 2, 2, 2, 1061, 1062, 3, 2, 2, 2, 1062, 1063, 3, 2, 2, 2, 1063, 1064, 5, 324, 163, 2, 1064, 143, 3, 2, 2, 2, 1065, 1069, 7, 239, 2, 2, 1066, 1070, 7, 152, 2, 2, 1067, 1068, 7, 152, 2, 2, 1068, 1070, 7, 343, 2, 2, 1069, 1066, 3, 2, 2, 2, 1069, 1067, 3, 2, 2, 2, 1069, 1070, 3, 2, 2, 2, 1070, 1071, 3, 2, 2, 2, 1071, 1073, 7, 256, 2, 2, 1072, 1074, 5, 330, 166, 2, 1073, 1072, 3, 2, 2, 2, 1073, 1074, 3, 2, 2, 2, 1074, 1075, 3, 2, 2, 2, 1075, 1076, 5, 272, 137, 2, 1076, 145, 3, 2, 2, 2, 1077, 1079, 7, 246, 2, 2, 1078, 1077, 3, 2, 2, 2, 1078, 1079, 3, 2, 2, 2, 1079, 1080, 3, 2, 2, 2, 1080, 1085, 5, 148, 75, 2, 1081, 1085, 5, 156, 79, 2, 1082, 1083, 7, 246, 2, 2, 1083, 1085, 5, 158, 80, 2, 1084, 1078, 3, 2, 2, 2, 1084, 1081, 3, 2, 2, 2, 1084, 1082, 3, 2, 2, 2, 1085, 147, 3, 2, 2, 2, 1086, 1087, 7, 269, 2, 2, 1087, 1088, 9, 21, 2, 2, 1088, 1097, 5, 322, 162, 2, 1089, 1091, 5, 150, 76, 2, 1090, 1089, 3, 2, 2, 2, 1090, 1091, 3, 2, 2, 2, 1091, 1093, 3, 2, 2, 2, 1092, 1094, 5, 56, 29, 2, 1093, 1092, 3, 2, 2, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1095, 3, 2, 2, 2, 1095, 1098, 5, 160, 81, 2, 1096, 1098, 5, 152, 77, 2, 1097, 1090, 3, 2, 2, 2, 1097, 1096, 3, 2, 2, 2, 1098, 149, 3, 2, 2, 2, 1099, 1100, 7, 313, 2, 2, 1100, 1101, 5, 332, 167, 2, 1101, 151, 3, 2, 2, 2, 1102, 1103, 7, 365, 2, 2, 1103, 1108, 5, 154, 78, 2, 1104, 1105, 7, 390, 2, 2, 1105, 1107, 5, 154, 78, 2, 1106, 1104, 3, 2, 2, 2, 1107, 1110, 3, 2, 2, 2, 1108, 1106, 3, 2, 2, 2, 1108, 1109, 3, 2, 2, 2, 1109, 153, 3, 2, 2, 2, 1110, 1108, 3, 2, 2, 2, 1111, 1112, 7, 386, 2, 2, 1112, 1117, 5, 350, 176, 2, 1113, 1114, 7, 390, 2, 2, 1114, 1116, 5, 350, 176, 2, 1115, 1113, 3, 2, 2, 2, 1116, 1119, 3, 2, 2, 2, 1117, 1115, 3, 2, 2, 2, 1117, 1118, 3, 2, 2, 2, 1118, 1120, 3, 2, 2, 2, 1119, 1117, 3, 2, 2, 2, 1120, 1121, 7, 387, 2, 2, 1121, 155, 3, 2, 2, 2, 1122, 1123, 7, 191, 2, 2, 1123, 1124, 7, 146, 2, 2, 1124, 1125, 7, 333, 2, 2, 1125, 1129, 7, 391, 2, 2, 1126, 1127, 5, 148, 75, 2, 1127, 1128, 7, 391, 2, 2, 1128, 1130, 3, 2, 2, 2, 1129, 1126, 3, 2, 2, 2, 1130, 1131, 3, 2, 2, 2, 1131, 1129, 3, 2, 2, 2, 1131, 1132, 3, 2, 2, 2, 1132, 1133, 3, 2, 2, 2, 1133, 1134, 7, 242, 2, 2, 1134, 157, 3, 2, 2, 2, 1135, 1136, 7, 146, 2, 2, 1136, 1137, 7, 333, 2, 2, 1137, 1141, 7, 191, 2, 2, 1138, 1139, 5, 148, 75, 2, 1139, 1140, 7, 391, 2, 2, 1140, 1142, 3, 2, 2, 2, 1141, 1138, 3, 2, 2, 2, 1142, 1143, 3, 2, 2, 2, 1143, 1141, 3, 2, 2, 2, 1143, 1144, 3, 2, 2, 2, 1144, 1145, 3, 2, 2, 2, 1145, 1146, 7, 242, 2, 2, 1146, 159, 3, 2, 2, 2, 1147, 1148, 8, 81, 1, 2, 1148, 1171, 5, 162, 82, 2, 1149, 1150, 5, 164, 83, 2, 1150, 1151, 5, 160, 81, 7, 1151, 1171, 3, 2, 2, 2, 1152, 1153, 7, 386, 2, 2, 1153, 1154, 5, 160, 81, 2, 1154, 1155, 7, 387, 2, 2, 1155, 1171, 3, 2, 2, 2, 1156, 1158, 5, 172, 87, 2, 1157, 1159, 5, 232, 117, 2, 1158, 1157, 3, 2, 2, 2, 1158, 1159, 3, 2, 2, 2, 1159, 1161, 3, 2, 2, 2, 1160, 1162, 5, 236, 119, 2, 1161, 1160, 3, 2, 2, 2, 1161, 1162, 3, 2, 2, 2, 1162, 1171, 3, 2, 2, 2, 1163, 1165, 5, 170, 86, 2, 1164, 1166, 5, 232, 117, 2, 1165, 1164, 3, 2, 2, 2, 1165, 1166, 3, 2, 2, 2, 1166, 1168, 3, 2, 2, 2, 1167, 1169, 5, 236, 119, 2, 1168, 1167, 3, 2, 2, 2, 1168, 1169, 3, 2, 2, 2, 1169, 1171, 3, 2, 2, 2, 1170, 1147, 3, 2, 2, 2, 1170, 1149, 3, 2, 2, 2, 1170, 1152, 3, 2, 2, 2, 1170, 1156, 3, 2, 2, 2, 1170, 1163, 3, 2, 2, 2, 1171, 1186, 3, 2, 2, 2, 1172, 1173, 12, 5, 2, 2, 1173, 1175, 9, 22, 2, 2, 1174, 1176, 7, 180, 2, 2, 1175, 1174, 3, 2, 2, 2, 1175, 1176, 3, 2, 2, 2, 1176, 1177, 3, 2, 2, 2, 1177, 1179, 5, 160, 81, 2, 1178, 1180, 5, 232, 117, 2, 1179, 1178, 3, 2, 2, 2, 1179, 1180, 3, 2, 2, 2, 1180, 1182, 3, 2, 2, 2, 1181, 1183, 5, 236, 119, 2, 1182, 1181, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 1185, 3, 2, 2, 2, 1184, 1172, 3, 2, 2, 2, 1185, 1188, 3, 2, 2, 2, 1186, 1184, 3, 2, 2, 2, 1186, 1187, 3, 2, 2, 2, 1187, 161, 3, 2, 2, 2, 1188, 1186, 3, 2, 2, 2, 1189, 1190, 7, 365, 2, 2, 1190, 1195, 5, 260, 131, 2, 1191, 1192, 7, 390, 2, 2, 1192, 1194, 5, 260, 131, 2, 1193, 1191, 3, 2, 2, 2, 1194, 1197, 3, 2, 2, 2, 1195, 1193, 3, 2, 2, 2, 1195, 1196, 3, 2, 2, 2, 1196, 163, 3, 2, 2, 2, 1197, 1195, 3, 2, 2, 2, 1198, 1199, 7, 371, 2, 2, 1199, 1204, 5, 166, 84, 2, 1200, 1201, 7, 390, 2, 2, 1201, 1203, 5, 166, 84, 2, 1202, 1200, 3, 2, 2, 2, 1203, 1206, 3, 2, 2, 2, 1204, 1202, 3, 2, 2, 2, 1204, 1205, 3, 2, 2, 2, 1205, 165, 3, 2, 2, 2, 1206, 1204, 3, 2, 2, 2, 1207, 1219, 5, 168, 85, 2, 1208, 1209, 7, 386, 2, 2, 1209, 1214, 5, 54, 28, 2, 1210, 1211, 7, 390, 2, 2, 1211, 1213, 5, 54, 28, 2, 1212, 1210, 3, 2, 2, 2, 1213, 1216, 3, 2, 2, 2, 1214, 1212, 3, 2, 2, 2, 1214, 1215, 3, 2, 2, 2, 1215, 1217, 3, 2, 2, 2, 1216, 1214, 3, 2, 2, 2, 1217, 1218, 7, 387, 2, 2, 1218, 1220, 3, 2, 2, 2, 1219, 1208, 3, 2, 2, 2, 1219, 1220, 3, 2, 2, 2, 1220, 1221, 3, 2, 2, 2, 1221, 1222, 7, 187, 2, 2, 1222, 1223, 7, 386, 2, 2, 1223, 1224, 5, 160, 81, 2, 1224, 1225, 7, 387, 2, 2, 1225, 167, 3, 2, 2, 2, 1226, 1227, 5, 306, 154, 2, 1227, 169, 3, 2, 2, 2, 1228, 1229, 5, 172, 87, 2, 1229, 1231, 5, 178, 90, 2, 1230, 1232, 5, 206, 104, 2, 1231, 1230, 3, 2, 2, 2, 1231, 1232, 3, 2, 2, 2, 1232, 1234, 3, 2, 2, 2, 1233, 1235, 5, 208, 105, 2, 1234, 1233, 3, 2, 2, 2, 1234, 1235, 3, 2, 2, 2, 1235, 1237, 3, 2, 2, 2, 1236, 1238, 5, 222, 112, 2, 1237, 1236, 3, 2, 2, 2, 1237, 1238, 3, 2, 2, 2, 1238, 1240, 3, 2, 2, 2, 1239, 1241, 5, 224, 113, 2, 1240, 1239, 3, 2, 2, 2, 1240, 1241, 3, 2, 2, 2, 1241, 1247, 3, 2, 2, 2, 1242, 1243, 5, 172, 87, 2, 1243, 1244, 5, 178, 90, 2, 1244, 1245, 5, 230, 116, 2, 1245, 1247, 3, 2, 2, 2, 1246, 1228, 3, 2, 2, 2, 1246, 1242, 3, 2, 2, 2, 1247, 171, 3, 2, 2, 2, 1248, 1250, 7, 332, 2, 2, 1249, 1251, 5, 360, 181, 2, 1250, 1249, 3, 2, 2, 2, 1250, 1251, 3, 2, 2, 2, 1251, 1261, 3, 2, 2, 2, 1252, 1262, 7, 397, 2, 2, 1253, 1258, 5, 174, 88, 2, 1254, 1255, 7, 390, 2, 2, 1255, 1257, 5, 174, 88, 2, 1256, 1254, 3, 2, 2, 2, 1257, 1260, 3, 2, 2, 2, 1258, 1256, 3, 2, 2, 2, 1258, 1259, 3, 2, 2, 2, 1259, 1262, 3, 2, 2, 2, 1260, 1258, 3, 2, 2, 2, 1261, 1252, 3, 2, 2, 2, 1261, 1253, 3, 2, 2, 2, 1262, 173, 3, 2, 2, 2, 1263, 1272, 5, 176, 89, 2, 1264, 1269, 5, 260, 131, 2, 1265, 1267, 7, 187, 2, 2, 1266, 1265, 3, 2, 2, 2, 1266, 1267, 3, 2, 2, 2, 1267, 1268, 3, 2, 2, 2, 1268, 1270, 5, 260, 131, 2, 1269, 1266, 3, 2, 2, 2, 1269, 1270, 3, 2, 2, 2, 1270, 1272, 3, 2, 2, 2, 1271, 1263, 3, 2, 2, 2, 1271, 1264, 3, 2, 2, 2, 1272, 175, 3, 2, 2, 2, 1273, 1274, 5, 270, 136, 2, 1274, 1275, 7, 311, 2, 2, 1275, 1276, 5, 228, 115, 2, 1276, 1277, 7, 187, 2, 2, 1277, 1278, 5, 306, 154, 2, 1278, 1286, 3, 2, 2, 2, 1279, 1280, 5, 270, 136, 2, 1280, 1281, 7, 311, 2, 2, 1281, 1282, 5, 298, 150, 2, 1282, 1283, 7, 187, 2, 2, 1283, 1284, 5, 306, 154, 2, 1284, 1286, 3, 2, 2, 2, 1285, 1273, 3, 2, 2, 2, 1285, 1279, 3, 2, 2, 2, 1286, 177, 3, 2, 2, 2, 1287, 1288, 7, 254, 2, 2, 1288, 1289, 5, 180, 91, 2, 1289, 179, 3, 2, 2, 2, 1290, 1291, 8, 91, 1, 2, 1291, 1296, 5, 182, 92, 2, 1292, 1293, 7, 390, 2, 2, 1293, 1295, 5, 182, 92, 2, 1294, 1292, 3, 2, 2, 2, 1295, 1298, 3, 2, 2, 2, 1296, 1294, 3, 2, 2, 2, 1296, 1297, 3, 2, 2, 2, 1297, 1302, 3, 2, 2, 2, 1298, 1296, 3, 2, 2, 2, 1299, 1302, 5, 190, 96, 2, 1300, 1302, 5, 192, 97, 2, 1301, 1290, 3, 2, 2, 2, 1301, 1299, 3, 2, 2, 2, 1301, 1300, 3, 2, 2, 2, 1302, 1324, 3, 2, 2, 2, 1303, 1304, 12, 5, 2, 2, 1304, 1305, 7, 222, 2, 2, 1305, 1306, 7, 276, 2, 2, 1306, 1323, 5, 180, 91, 6, 1307, 1309, 12, 6, 2, 2, 1308, 1310, 7, 296, 2, 2, 1309, 1308, 3, 2, 2, 2, 1309, 1310, 3, 2, 2, 2, 1310, 1312, 3, 2, 2, 2, 1311, 1313, 9, 23, 2, 2, 1312, 1311, 3, 2, 2, 2, 1312, 1313, 3, 2, 2, 2, 1313, 1315, 3, 2, 2, 2, 1314, 1316, 7, 310, 2, 2, 1315, 1314, 3, 2, 2, 2, 1315, 1316, 3, 2, 2, 2, 1316, 1317, 3, 2, 2, 2, 1317, 1318, 7, 276, 2, 2, 1318, 1320, 5, 180, 91, 2, 1319, 1321, 5, 204, 103, 2, 1320, 1319, 3, 2, 2, 2, 1320, 1321, 3, 2, 2, 2, 1321, 1323, 3, 2, 2, 2, 1322, 1303, 3, 2, 2, 2, 1322, 1307, 3, 2, 2, 2, 1323, 1326, 3, 2, 2, 2, 1324, 1322, 3, 2, 2, 2, 1324, 1325, 3, 2, 2, 2, 1325, 181, 3, 2, 2, 2, 1326, 1324, 3, 2, 2, 2, 1327, 1329, 5, 184, 93, 2, 1328, 1330, 5, 296, 149, 2, 1329, 1328, 3, 2, 2, 2, 1329, 1330, 3, 2, 2, 2, 1330, 183, 3, 2, 2, 2, 1331, 1333, 7, 346, 2, 2, 1332, 1331, 3, 2, 2, 2, 1332, 1333, 3, 2, 2, 2, 1333, 1334, 3, 2, 2, 2, 1334, 1336, 5, 322, 162, 2, 1335, 1337, 5, 186, 94, 2, 1336, 1335, 3, 2, 2, 2, 1336, 1337, 3, 2, 2, 2, 1337, 1342, 3, 2, 2, 2, 1338, 1340, 7, 187, 2, 2, 1339, 1338, 3, 2, 2, 2, 1339, 1340, 3, 2, 2, 2, 1340, 1341, 3, 2, 2, 2, 1341, 1343, 5, 278, 140, 2, 1342, 1339, 3, 2, 2, 2, 1342, 1343, 3, 2, 2, 2, 1343, 1373, 3, 2, 2, 2, 1344, 1345, 7, 279, 2, 2, 1345, 1346, 7, 346, 2, 2, 1346, 1347, 7, 386, 2, 2, 1347, 1348, 5, 272, 137, 2, 1348, 1349, 7, 386, 2, 2, 1349, 1354, 5, 274, 138, 2, 1350, 1351, 7, 390, 2, 2, 1351, 1353, 5, 274, 138, 2, 1352, 1350, 3, 2, 2, 2, 1353, 1356, 3, 2, 2, 2, 1354, 1352, 3, 2, 2, 2, 1354, 1355, 3, 2, 2, 2, 1355, 1357, 3, 2, 2, 2, 1356, 1354, 3, 2, 2, 2, 1357, 1358, 7, 387, 2, 2, 1358, 1359, 7, 387, 2, 2, 1359, 1373, 3, 2, 2, 2, 1360, 1362, 7, 279, 2, 2, 1361, 1360, 3, 2, 2, 2, 1361, 1362, 3, 2, 2, 2, 1362, 1363, 3, 2, 2, 2, 1363, 1364, 7, 386, 2, 2, 1364, 1365, 5, 160, 81, 2, 1365, 1366, 7, 387, 2, 2, 1366, 1373, 3, 2, 2, 2, 1367, 1368, 7, 359, 2, 2, 1368, 1369, 7, 386, 2, 2, 1369, 1370, 5, 260, 131, 2, 1370, 1371, 7, 387, 2, 2, 1371, 1373, 3, 2, 2, 2, 1372, 1332, 3, 2, 2, 2, 1372, 1344, 3, 2, 2, 2, 1372, 1361, 3, 2, 2, 2, 1372, 1367, 3, 2, 2, 2, 1373, 185, 3, 2, 2, 2, 1374, 1375, 7, 253, 2, 2, 1375, 1376, 7, 344, 2, 2, 1376, 1377, 7, 187, 2, 2, 1377, 1378, 7, 303, 2, 2, 1378, 1379, 5, 188, 95, 2, 1379, 187, 3, 2, 2, 2, 1380, 1381, 5, 260, 131, 2, 1381, 189, 3, 2, 2, 2, 1382, 1383, 7, 386, 2, 2, 1383, 1384, 5, 152, 77, 2, 1384, 1385, 7, 387, 2, 2, 1385, 1386, 5, 296, 149, 2, 1386, 191, 3, 2, 2, 2, 1387, 1388, 7, 346, 2, 2, 1388, 1389, 7, 386, 2, 2, 1389, 1390, 5, 194, 98, 2, 1390, 1391, 7, 387, 2, 2, 1391, 193, 3, 2, 2, 2, 1392, 1393, 5, 196, 99, 2, 1393, 1394, 7, 386, 2, 2, 1394, 1399, 5, 198, 100, 2, 1395, 1396, 7, 390, 2, 2, 1396, 1398, 5, 198, 100, 2, 1397, 1395, 3, 2, 2, 2, 1398, 1401, 3, 2, 2, 2, 1399, 1397, 3, 2, 2, 2, 1399, 1400, 3, 2, 2, 2, 1400, 1402, 3, 2, 2, 2, 1401, 1399, 3, 2, 2, 2, 1402, 1403, 7, 387, 2, 2, 1403, 195, 3, 2, 2, 2, 1404, 1405, 9, 24, 2, 2, 1405, 197, 3, 2, 2, 2, 1406, 1407, 7, 346, 2, 2, 1407, 1422, 5, 220, 111, 2, 1408, 1422, 5, 202, 102, 2, 1409, 1422, 5, 282, 142, 2, 1410, 1411, 7, 26, 2, 2, 1411, 1412, 7, 406, 2, 2, 1412, 1413, 7, 346, 2, 2, 1413, 1422, 5, 220, 111, 2, 1414, 1415, 7, 153, 2, 2, 1415, 1416, 7, 406, 2, 2, 1416, 1422, 5, 202, 102, 2, 1417, 1418, 5, 200, 101, 2, 1418, 1419, 7, 406, 2, 2, 1419, 1420, 5, 282, 142, 2, 1420, 1422, 3, 2, 2, 2, 1421, 1406, 3, 2, 2, 2, 1421, 1408, 3, 2, 2, 2, 1421, 1409, 3, 2, 2, 2, 1421, 1410, 3, 2, 2, 2, 1421, 1414, 3, 2, 2, 2, 1421, 1417, 3, 2, 2, 2, 1422, 199, 3, 2, 2, 2, 1423, 1424, 9, 25, 2, 2, 1424, 201, 3, 2, 2, 2, 1425, 1426, 7, 33, 2, 2, 1426, 1427, 7, 386, 2, 2, 1427, 1428, 5, 324, 163, 2, 1428, 1429, 7, 387, 2, 2, 1429, 203, 3, 2, 2, 2, 1430, 1431, 7, 305, 2, 2, 1431, 1445, 5, 262, 132, 2, 1432, 1433, 7, 363, 2, 2, 1433, 1434, 7, 386, 2, 2, 1434, 1439, 5, 324, 163, 2, 1435, 1436, 7, 390, 2, 2, 1436, 1438, 5, 324, 163, 2, 1437, 1435, 3, 2, 2, 2, 1438, 1441, 3, 2, 2, 2, 1439, 1437, 3, 2, 2, 2, 1439, 1440, 3, 2, 2, 2, 1440, 1442, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1442, 1443, 7, 387, 2, 2, 1443, 1445, 3, 2, 2, 2, 1444, 1430, 3, 2, 2, 2, 1444, 1432, 3, 2, 2, 2, 1445, 205, 3, 2, 2, 2, 1446, 1447, 7, 369, 2, 2, 1447, 1448, 5, 262, 132, 2, 1448, 207, 3, 2, 2, 2, 1449, 1450, 7, 259, 2, 2, 1450, 1451, 7, 199, 2, 2, 1451, 1456, 5, 210, 106, 2, 1452, 1453, 7, 390, 2, 2, 1453, 1455, 5, 210, 106, 2, 1454, 1452, 3, 2, 2, 2, 1455, 1458, 3, 2, 2, 2, 1456, 1454, 3, 2, 2, 2, 1456, 1457, 3, 2, 2, 2, 1457, 209, 3, 2, 2, 2, 1458, 1456, 3, 2, 2, 2, 1459, 1499, 5, 260, 131, 2, 1460, 1499, 5, 216, 109, 2, 1461, 1462, 7, 386, 2, 2, 1462, 1499, 7, 387, 2, 2, 1463, 1464, 7, 386, 2, 2, 1464, 1469, 5, 260, 131, 2, 1465, 1466, 7, 390, 2, 2, 1466, 1468, 5, 260, 131, 2, 1467, 1465, 3, 2, 2, 2, 1468, 1471, 3, 2, 2, 2, 1469, 1467, 3, 2, 2, 2, 1469, 1470, 3, 2, 2, 2, 1470, 1472, 3, 2, 2, 2, 1471, 1469, 3, 2, 2, 2, 1472, 1473, 7, 387, 2, 2, 1473, 1499, 3, 2, 2, 2, 1474, 1475, 5, 214, 108, 2, 1475, 1476, 7, 386, 2, 2, 1476, 1481, 5, 260, 131, 2, 1477, 1478, 7, 390, 2, 2, 1478, 1480, 5, 260, 131, 2, 1479, 1477, 3, 2, 2, 2, 1480, 1483, 3, 2, 2, 2, 1481, 1479, 3, 2, 2, 2, 1481, 1482, 3, 2, 2, 2, 1482, 1484, 3, 2, 2, 2, 1483, 1481, 3, 2, 2, 2, 1484, 1485, 7, 387, 2, 2, 1485, 1499, 3, 2, 2, 2, 1486, 1487, 5, 212, 107, 2, 1487, 1488, 7, 386, 2, 2, 1488, 1493, 5, 210, 106, 2, 1489, 1490, 7, 390, 2, 2, 1490, 1492, 5, 210, 106, 2, 1491, 1489, 3, 2, 2, 2, 1492, 1495, 3, 2, 2, 2, 1493, 1491, 3, 2, 2, 2, 1493, 1494, 3, 2, 2, 2, 1494, 1496, 3, 2, 2, 2, 1495, 1493, 3, 2, 2, 2, 1496, 1497, 7, 387, 2, 2, 1497, 1499, 3, 2, 2, 2, 1498, 1459, 3, 2, 2, 2, 1498, 1460, 3, 2, 2, 2, 1498, 1461, 3, 2, 2, 2, 1498, 1463, 3, 2, 2, 2, 1498, 1474, 3, 2, 2, 2, 1498, 1486, 3, 2, 2, 2, 1499, 211, 3, 2, 2, 2, 1500, 1501, 7, 260, 2, 2, 1501, 1502, 7, 139, 2, 2, 1502, 213, 3, 2, 2, 2, 1503, 1504, 9, 26, 2, 2, 1504, 215, 3, 2, 2, 2, 1505, 1506, 5, 218, 110, 2, 1506, 1507, 7, 386, 2, 2, 1507, 1508, 5, 220, 111, 2, 1508, 1509, 7, 390, 2, 2, 1509, 1510, 5, 282, 142, 2, 1510, 1511, 7, 387, 2, 2, 1511, 217, 3, 2, 2, 2, 1512, 1513, 9, 27, 2, 2, 1513, 219, 3, 2, 2, 2, 1514, 1515, 5, 324, 163, 2, 1515, 221, 3, 2, 2, 2, 1516, 1517, 7, 262, 2, 2, 1517, 1518, 5, 262, 132, 2, 1518, 223, 3, 2, 2, 2, 1519, 1520, 7, 370, 2, 2, 1520, 1525, 5, 226, 114, 2, 1521, 1522, 7, 390, 2, 2, 1522, 1524, 5, 226, 114, 2, 1523, 1521, 3, 2, 2, 2, 1524, 1527, 3, 2, 2, 2, 1525, 1523, 3, 2, 2, 2, 1525, 1526, 3, 2, 2, 2, 1526, 225, 3, 2, 2, 2, 1527, 1525, 3, 2, 2, 2, 1528, 1529, 5, 298, 150, 2, 1529, 1530, 7, 187, 2, 2, 1530, 1531, 5, 228, 115, 2, 1531, 227, 3, 2, 2, 2, 1532, 1534, 5, 298, 150, 2, 1533, 1532, 3, 2, 2, 2, 1533, 1534, 3, 2, 2, 2, 1534, 1535, 3, 2, 2, 2, 1535, 1537, 7, 386, 2, 2, 1536, 1538, 5, 238, 120, 2, 1537, 1536, 3, 2, 2, 2, 1537, 1538, 3, 2, 2, 2, 1538, 1540, 3, 2, 2, 2, 1539, 1541, 5, 232, 117, 2, 1540, 1539, 3, 2, 2, 2, 1540, 1541, 3, 2, 2, 2, 1541, 1543, 3, 2, 2, 2, 1542, 1544, 5, 254, 128, 2, 1543, 1542, 3, 2, 2, 2, 1543, 1544, 3, 2, 2, 2, 1544, 1545, 3, 2, 2, 2, 1545, 1546, 7, 387, 2, 2, 1546, 229, 3, 2, 2, 2, 1547, 1548, 7, 286, 2, 2, 1548, 1550, 7, 386, 2, 2, 1549, 1551, 5, 238, 120, 2, 1550, 1549, 3, 2, 2, 2, 1550, 1551, 3, 2, 2, 2, 1551, 1553, 3, 2, 2, 2, 1552, 1554, 5, 232, 117, 2, 1553, 1552, 3, 2, 2, 2, 1553, 1554, 3, 2, 2, 2, 1554, 1556, 3, 2, 2, 2, 1555, 1557, 5, 242, 122, 2, 1556, 1555, 3, 2, 2, 2, 1556, 1557, 3, 2, 2, 2, 1557, 1559, 3, 2, 2, 2, 1558, 1560, 5, 248, 125, 2, 1559, 1558, 3, 2, 2, 2, 1559, 1560, 3, 2, 2, 2, 1560, 1562, 3, 2, 2, 2, 1561, 1563, 5, 250, 126, 2, 1562, 1561, 3, 2, 2, 2, 1562, 1563, 3, 2, 2, 2, 1563, 1565, 3, 2, 2, 2, 1564, 1566, 5, 244, 123, 2, 1565, 1564, 3, 2, 2, 2, 1565, 1566, 3, 2, 2, 2, 1566, 1567, 3, 2, 2, 2, 1567, 1568, 5, 252, 127, 2, 1568, 1573, 7, 387, 2, 2, 1569, 1571, 7, 187, 2, 2, 1570, 1569, 3, 2, 2, 2, 1570, 1571, 3, 2, 2, 2, 1571, 1572, 3, 2, 2, 2, 1572, 1574, 5, 306, 154, 2, 1573, 1570, 3, 2, 2, 2, 1573, 1574, 3, 2, 2, 2, 1574, 231, 3, 2, 2, 2, 1575, 1576, 7, 308, 2, 2, 1576, 1577, 7, 199, 2, 2, 1577, 1582, 5, 234, 118, 2, 1578, 1579, 7, 390, 2, 2, 1579, 1581, 5, 234, 118, 2, 1580, 1578, 3, 2, 2, 2, 1581, 1584, 3, 2, 2, 2, 1582, 1580, 3, 2, 2, 2, 1582, 1583, 3, 2, 2, 2, 1583, 233, 3, 2, 2, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1587, 5, 260, 131, 2, 1586, 1588, 9, 28, 2, 2, 1587, 1586, 3, 2, 2, 2, 1587, 1588, 3, 2, 2, 2, 1588, 1591, 3, 2, 2, 2, 1589, 1590, 7, 89, 2, 2, 1590, 1592, 9, 29, 2, 2, 1591, 1589, 3, 2, 2, 2, 1591, 1592, 3, 2, 2, 2, 1592, 235, 3, 2, 2, 2, 1593, 1596, 7, 283, 2, 2, 1594, 1597, 7, 180, 2, 2, 1595, 1597, 5, 260, 131, 2, 1596, 1594, 3, 2, 2, 2, 1596, 1595, 3, 2, 2, 2, 1597, 237, 3, 2, 2, 2, 1598, 1599, 7, 313, 2, 2, 1599, 1600, 7, 199, 2, 2, 1600, 1605, 5, 260, 131, 2, 1601, 1602, 7, 390, 2, 2, 1602, 1604, 5, 260, 131, 2, 1603, 1601, 3, 2, 2, 2, 1604, 1607, 3, 2, 2, 2, 1605, 1603, 3, 2, 2, 2, 1605, 1606, 3, 2, 2, 2, 1606, 239, 3, 2, 2, 2, 1607, 1605, 3, 2, 2, 2, 1608, 1625, 7, 397, 2, 2, 1609, 1625, 7, 400, 2, 2, 1610, 1625, 7, 405, 2, 2, 1611, 1612, 7, 388, 2, 2, 1612, 1613, 7, 408, 2, 2, 1613, 1614, 7, 390, 2, 2, 1614, 1615, 7, 408, 2, 2, 1615, 1625, 7, 389, 2, 2, 1616, 1617, 7, 388, 2, 2, 1617, 1618, 7, 408, 2, 2, 1618, 1619, 7, 390, 2, 2, 1619, 1625, 7, 389, 2, 2, 1620, 1621, 7, 388, 2, 2, 1621, 1622, 7, 390, 2, 2, 1622, 1623, 7, 408, 2, 2, 1623, 1625, 7, 389, 2, 2, 1624, 1608, 3, 2, 2, 2, 1624, 1609, 3, 2, 2, 2, 1624, 1610, 3, 2, 2, 2, 1624, 1611, 3, 2, 2, 2, 1624, 1616, 3, 2, 2, 2, 1624, 1620, 3, 2, 2, 2, 1625, 241, 3, 2, 2, 2, 1626, 1627, 7, 287, 2, 2, 1627, 1632, 5, 174, 88, 2, 1628, 1629, 7, 390, 2, 2, 1629, 1631, 5, 174, 88, 2, 1630, 1628, 3, 2, 2, 2, 1631, 1634, 3, 2, 2, 2, 1632, 1630, 3, 2, 2, 2, 1632, 1633, 3, 2, 2, 2, 1633, 243, 3, 2, 2, 2, 1634, 1632, 3, 2, 2, 2, 1635, 1636, 7, 314, 2, 2, 1636, 1638, 7, 386, 2, 2, 1637, 1639, 5, 246, 124, 2, 1638, 1637, 3, 2, 2, 2, 1639, 1640, 3, 2, 2, 2, 1640, 1638, 3, 2, 2, 2, 1640, 1641, 3, 2, 2, 2, 1641, 1642, 3, 2, 2, 2, 1642, 1644, 7, 387, 2, 2, 1643, 1645, 5, 258, 130, 2, 1644, 1643, 3, 2, 2, 2, 1644, 1645, 3, 2, 2, 2, 1645, 245, 3, 2, 2, 2, 1646, 1648, 5, 308, 155, 2, 1647, 1649, 5, 240, 121, 2, 1648, 1647, 3, 2, 2, 2, 1648, 1649, 3, 2, 2, 2, 1649, 247, 3, 2, 2, 2, 1650, 1651, 7, 180, 2, 2, 1651, 1652, 7, 330, 2, 2, 1652, 1653, 7, 315, 2, 2, 1653, 1659, 7, 285, 2, 2, 1654, 1655, 7, 306, 2, 2, 1655, 1656, 7, 329, 2, 2, 1656, 1657, 7, 315, 2, 2, 1657, 1659, 7, 285, 2, 2, 1658, 1650, 3, 2, 2, 2, 1658, 1654, 3, 2, 2, 2, 1659, 249, 3, 2, 2, 2, 1660, 1661, 7, 8, 2, 2, 1661, 1662, 7, 285, 2, 2, 1662, 1663, 7, 336, 2, 2, 1663, 1664, 7, 100, 2, 2, 1664, 1665, 7, 75, 2, 2, 1665, 1685, 7, 329, 2, 2, 1666, 1667, 7, 8, 2, 2, 1667, 1668, 7, 285, 2, 2, 1668, 1669, 7, 336, 2, 2, 1669, 1670, 7, 352, 2, 2, 1670, 1671, 7, 297, 2, 2, 1671, 1685, 7, 329, 2, 2, 1672, 1673, 7, 8, 2, 2, 1673, 1674, 7, 285, 2, 2, 1674, 1675, 7, 336, 2, 2, 1675, 1676, 7, 352, 2, 2, 1676, 1677, 7, 75, 2, 2, 1677, 1685, 5, 308, 155, 2, 1678, 1679, 7, 8, 2, 2, 1679, 1680, 7, 285, 2, 2, 1680, 1681, 7, 336, 2, 2, 1681, 1682, 7, 352, 2, 2, 1682, 1683, 7, 47, 2, 2, 1683, 1685, 5, 308, 155, 2, 1684, 1660, 3, 2, 2, 2, 1684, 1666, 3, 2, 2, 2, 1684, 1672, 3, 2, 2, 2, 1684, 1678, 3, 2, 2, 2, 1685, 251, 3, 2, 2, 2, 1686, 1687, 7, 234, 2, 2, 1687, 1692, 5, 174, 88, 2, 1688, 1689, 7, 390, 2, 2, 1689, 1691, 5, 174, 88, 2, 1690, 1688, 3, 2, 2, 2, 1691, 1694, 3, 2, 2, 2, 1692, 1690, 3, 2, 2, 2, 1692, 1693, 3, 2, 2, 2, 1693, 253, 3, 2, 2, 2, 1694, 1692, 3, 2, 2, 2, 1695, 1696, 7, 321, 2, 2, 1696, 1697, 7, 192, 2, 2, 1697, 1698, 5, 282, 142, 2, 1698, 1699, 5, 256, 129, 2, 1699, 1705, 3, 2, 2, 2, 1700, 1701, 7, 330, 2, 2, 1701, 1702, 7, 192, 2, 2, 1702, 1703, 7, 408, 2, 2, 1703, 1705, 5, 256, 129, 2, 1704, 1695, 3, 2, 2, 2, 1704, 1700, 3, 2, 2, 2, 1705, 255, 3, 2, 2, 2, 1706, 1707, 7, 104, 2, 2, 1707, 1708, 7, 183, 2, 2, 1708, 1709, 7, 224, 2, 2, 1709, 1710, 7, 329, 2, 2, 1710, 257, 3, 2, 2, 2, 1711, 1712, 7, 372, 2, 2, 1712, 1713, 5, 282, 142, 2, 1713, 259, 3, 2, 2, 2, 1714, 1715, 5, 262, 132, 2, 1715, 261, 3, 2, 2, 2, 1716, 1717, 8, 132, 1, 2, 1717, 1718, 7, 300, 2, 2, 1718, 1729, 5, 262, 132, 8, 1719, 1720, 7, 247, 2, 2, 1720, 1721, 7, 386, 2, 2, 1721, 1722, 5, 160, 81, 2, 1722, 1723, 7, 387, 2, 2, 1723, 1729, 3, 2, 2, 2, 1724, 1726, 5, 268, 135, 2, 1725, 1727, 5, 264, 133, 2, 1726, 1725, 3, 2, 2, 2, 1726, 1727, 3, 2, 2, 2, 1727, 1729, 3, 2, 2, 2, 1728, 1716, 3, 2, 2, 2, 1728, 1719, 3, 2, 2, 2, 1728, 1724, 3, 2, 2, 2, 1729, 1744, 3, 2, 2, 2, 1730, 1731, 12, 5, 2, 2, 1731, 1732, 7, 183, 2, 2, 1732, 1743, 5, 262, 132, 6, 1733, 1734, 12, 4, 2, 2, 1734, 1735, 7, 307, 2, 2, 1735, 1743, 5, 262, 132, 5, 1736, 1737, 12, 3, 2, 2, 1737, 1739, 7, 275, 2, 2, 1738, 1740, 7, 300, 2, 2, 1739, 1738, 3, 2, 2, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1741, 3, 2, 2, 2, 1741, 1743, 9, 30, 2, 2, 1742, 1730, 3, 2, 2, 2, 1742, 1733, 3, 2, 2, 2, 1742, 1736, 3, 2, 2, 2, 1743, 1746, 3, 2, 2, 2, 1744, 1742, 3, 2, 2, 2, 1744, 1745, 3, 2, 2, 2, 1745, 263, 3, 2, 2, 2, 1746, 1744, 3, 2, 2, 2, 1747, 1749, 7, 300, 2, 2, 1748, 1747, 3, 2, 2, 2, 1748, 1749, 3, 2, 2, 2, 1749, 1750, 3, 2, 2, 2, 1750, 1752, 7, 192, 2, 2, 1751, 1753, 9, 31, 2, 2, 1752, 1751, 3, 2, 2, 2, 1752, 1753, 3, 2, 2, 2, 1753, 1754, 3, 2, 2, 2, 1754, 1755, 5, 268, 135, 2, 1755, 1756, 7, 183, 2, 2, 1756, 1757, 5, 268, 135, 2, 1757, 1815, 3, 2, 2, 2, 1758, 1760, 7, 300, 2, 2, 1759, 1758, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1761, 3, 2, 2, 2, 1761, 1762, 7, 265, 2, 2, 1762, 1763, 7, 386, 2, 2, 1763, 1768, 5, 260, 131, 2, 1764, 1765, 7, 390, 2, 2, 1765, 1767, 5, 260, 131, 2, 1766, 1764, 3, 2, 2, 2, 1767, 1770, 3, 2, 2, 2, 1768, 1766, 3, 2, 2, 2, 1768, 1769, 3, 2, 2, 2, 1769, 1771, 3, 2, 2, 2, 1770, 1768, 3, 2, 2, 2, 1771, 1772, 7, 387, 2, 2, 1772, 1815, 3, 2, 2, 2, 1773, 1775, 7, 300, 2, 2, 1774, 1773, 3, 2, 2, 2, 1774, 1775, 3, 2, 2, 2, 1775, 1776, 3, 2, 2, 2, 1776, 1777, 7, 265, 2, 2, 1777, 1778, 7, 386, 2, 2, 1778, 1779, 5, 160, 81, 2, 1779, 1780, 7, 387, 2, 2, 1780, 1815, 3, 2, 2, 2, 1781, 1782, 7, 247, 2, 2, 1782, 1783, 7, 386, 2, 2, 1783, 1784, 5, 160, 81, 2, 1784, 1785, 7, 387, 2, 2, 1785, 1815, 3, 2, 2, 2, 1786, 1788, 7, 300, 2, 2, 1787, 1786, 3, 2, 2, 2, 1787, 1788, 3, 2, 2, 2, 1788, 1789, 3, 2, 2, 2, 1789, 1790, 7, 326, 2, 2, 1790, 1815, 5, 268, 135, 2, 1791, 1815, 5, 266, 134, 2, 1792, 1794, 7, 275, 2, 2, 1793, 1795, 7, 300, 2, 2, 1794, 1793, 3, 2, 2, 2, 1794, 1795, 3, 2, 2, 2, 1795, 1796, 3, 2, 2, 2, 1796, 1815, 9, 30, 2, 2, 1797, 1799, 7, 275, 2, 2, 1798, 1800, 7, 300, 2, 2, 1799, 1798, 3, 2, 2, 2, 1799, 1800, 3, 2, 2, 2, 1800, 1801, 3, 2, 2, 2, 1801, 1802, 7, 237, 2, 2, 1802, 1803, 7, 254, 2, 2, 1803, 1815, 5, 268, 135, 2, 1804, 1806, 7, 300, 2, 2, 1805, 1804, 3, 2, 2, 2, 1805, 1806, 3, 2, 2, 2, 1806, 1807, 3, 2, 2, 2, 1807, 1808, 7, 335, 2, 2, 1808, 1809, 7, 352, 2, 2, 1809, 1812, 5, 268, 135, 2, 1810, 1811, 7, 244, 2, 2, 1811, 1813, 5, 354, 178, 2, 1812, 1810, 3, 2, 2, 2, 1812, 1813, 3, 2, 2, 2, 1813, 1815, 3, 2, 2, 2, 1814, 1748, 3, 2, 2, 2, 1814, 1759, 3, 2, 2, 2, 1814, 1774, 3, 2, 2, 2, 1814, 1781, 3, 2, 2, 2, 1814, 1787, 3, 2, 2, 2, 1814, 1791, 3, 2, 2, 2, 1814, 1792, 3, 2, 2, 2, 1814, 1797, 3, 2, 2, 2, 1814, 1805, 3, 2, 2, 2, 1815, 265, 3, 2, 2, 2, 1816, 1818, 7, 300, 2, 2, 1817, 1816, 3, 2, 2, 2, 1817, 1818, 3, 2, 2, 2, 1818, 1819, 3, 2, 2, 2, 1819, 1820, 7, 282, 2, 2, 1820, 1834, 9, 32, 2, 2, 1821, 1822, 7, 386, 2, 2, 1822, 1835, 7, 387, 2, 2, 1823, 1824, 7, 386, 2, 2, 1824, 1829, 5, 260, 131, 2, 1825, 1826, 7, 390, 2, 2, 1826, 1828, 5, 260, 131, 2, 1827, 1825, 3, 2, 2, 2, 1828, 1831, 3, 2, 2, 2, 1829, 1827, 3, 2, 2, 2, 1829, 1830, 3, 2, 2, 2, 1830, 1832, 3, 2, 2, 2, 1831, 1829, 3, 2, 2, 2, 1832, 1833, 7, 387, 2, 2, 1833, 1835, 3, 2, 2, 2, 1834, 1821, 3, 2, 2, 2, 1834, 1823, 3, 2, 2, 2, 1835, 1846, 3, 2, 2, 2, 1836, 1838, 7, 300, 2, 2, 1837, 1836, 3, 2, 2, 2, 1837, 1838, 3, 2, 2, 2, 1838, 1839, 3, 2, 2, 2, 1839, 1840, 7, 282, 2, 2, 1840, 1843, 5, 268, 135, 2, 1841, 1842, 7, 244, 2, 2, 1842, 1844, 5, 354, 178, 2, 1843, 1841, 3, 2, 2, 2, 1843, 1844, 3, 2, 2, 2, 1844, 1846, 3, 2, 2, 2, 1845, 1817, 3, 2, 2, 2, 1845, 1837, 3, 2, 2, 2, 1846, 267, 3, 2, 2, 2, 1847, 1848, 8, 135, 1, 2, 1848, 1852, 5, 270, 136, 2, 1849, 1850, 9, 33, 2, 2, 1850, 1852, 5, 268, 135, 10, 1851, 1847, 3, 2, 2, 2, 1851, 1849, 3, 2, 2, 2, 1852, 1876, 3, 2, 2, 2, 1853, 1854, 12, 9, 2, 2, 1854, 1855, 9, 34, 2, 2, 1855, 1875, 5, 268, 135, 10, 1856, 1857, 12, 8, 2, 2, 1857, 1858, 9, 35, 2, 2, 1858, 1875, 5, 268, 135, 9, 1859, 1860, 12, 7, 2, 2, 1860, 1861, 7, 381, 2, 2, 1861, 1875, 5, 268, 135, 8, 1862, 1863, 12, 6, 2, 2, 1863, 1864, 7, 382, 2, 2, 1864, 1875, 5, 268, 135, 7, 1865, 1866, 12, 5, 2, 2, 1866, 1867, 7, 380, 2, 2, 1867, 1875, 5, 268, 135, 6, 1868, 1869, 12, 4, 2, 2, 1869, 1870, 5, 342, 172, 2, 1870, 1871, 5, 268, 135, 5, 1871, 1875, 3, 2, 2, 2, 1872, 1873, 12, 3, 2, 2, 1873, 1875, 7, 412, 2, 2, 1874, 1853, 3, 2, 2, 2, 1874, 1856, 3, 2, 2, 2, 1874, 1859, 3, 2, 2, 2, 1874, 1862, 3, 2, 2, 2, 1874, 1865, 3, 2, 2, 2, 1874, 1868, 3, 2, 2, 2, 1874, 1872, 3, 2, 2, 2, 1875, 1878, 3, 2, 2, 2, 1876, 1874, 3, 2, 2, 2, 1876, 1877, 3, 2, 2, 2, 1877, 269, 3, 2, 2, 2, 1878, 1876, 3, 2, 2, 2, 1879, 1880, 8, 136, 1, 2, 1880, 1882, 7, 203, 2, 2, 1881, 1883, 5, 312, 157, 2, 1882, 1881, 3, 2, 2, 2, 1883, 1884, 3, 2, 2, 2, 1884, 1882, 3, 2, 2, 2, 1884, 1885, 3, 2, 2, 2, 1885, 1888, 3, 2, 2, 2, 1886, 1887, 7, 241, 2, 2, 1887, 1889, 5, 260, 131, 2, 1888, 1886, 3, 2, 2, 2, 1888, 1889, 3, 2, 2, 2, 1889, 1890, 3, 2, 2, 2, 1890, 1891, 7, 242, 2, 2, 1891, 1971, 3, 2, 2, 2, 1892, 1893, 7, 203, 2, 2, 1893, 1895, 5, 260, 131, 2, 1894, 1896, 5, 312, 157, 2, 1895, 1894, 3, 2, 2, 2, 1896, 1897, 3, 2, 2, 2, 1897, 1895, 3, 2, 2, 2, 1897, 1898, 3, 2, 2, 2, 1898, 1901, 3, 2, 2, 2, 1899, 1900, 7, 241, 2, 2, 1900, 1902, 5, 260, 131, 2, 1901, 1899, 3, 2, 2, 2, 1901, 1902, 3, 2, 2, 2, 1902, 1903, 3, 2, 2, 2, 1903, 1904, 7, 242, 2, 2, 1904, 1971, 3, 2, 2, 2, 1905, 1906, 7, 204, 2, 2, 1906, 1907, 7, 386, 2, 2, 1907, 1908, 5, 260, 131, 2, 1908, 1909, 7, 187, 2, 2, 1909, 1910, 5, 58, 30, 2, 1910, 1911, 7, 387, 2, 2, 1911, 1971, 3, 2, 2, 2, 1912, 1913, 7, 47, 2, 2, 1913, 1914, 7, 386, 2, 2, 1914, 1917, 5, 260, 131, 2, 1915, 1916, 7, 62, 2, 2, 1916, 1918, 7, 89, 2, 2, 1917, 1915, 3, 2, 2, 2, 1917, 1918, 3, 2, 2, 2, 1918, 1919, 3, 2, 2, 2, 1919, 1920, 7, 387, 2, 2, 1920, 1971, 3, 2, 2, 2, 1921, 1922, 7, 75, 2, 2, 1922, 1923, 7, 386, 2, 2, 1923, 1926, 5, 260, 131, 2, 1924, 1925, 7, 62, 2, 2, 1925, 1927, 7, 89, 2, 2, 1926, 1924, 3, 2, 2, 2, 1926, 1927, 3, 2, 2, 2, 1927, 1928, 3, 2, 2, 2, 1928, 1929, 7, 387, 2, 2, 1929, 1971, 3, 2, 2, 2, 1930, 1931, 7, 318, 2, 2, 1931, 1932, 7, 386, 2, 2, 1932, 1933, 5, 268, 135, 2, 1933, 1934, 7, 265, 2, 2, 1934, 1935, 5, 268, 135, 2, 1935, 1936, 7, 387, 2, 2, 1936, 1971, 3, 2, 2, 2, 1937, 1971, 5, 350, 176, 2, 1938, 1971, 7, 397, 2, 2, 1939, 1940, 5, 324, 163, 2, 1940, 1941, 7, 383, 2, 2, 1941, 1942, 7, 397, 2, 2, 1942, 1971, 3, 2, 2, 2, 1943, 1944, 7, 386, 2, 2, 1944, 1945, 5, 160, 81, 2, 1945, 1946, 7, 387, 2, 2, 1946, 1971, 3, 2, 2, 2, 1947, 1948, 5, 272, 137, 2, 1948, 1960, 7, 386, 2, 2, 1949, 1951, 5, 360, 181, 2, 1950, 1949, 3, 2, 2, 2, 1950, 1951, 3, 2, 2, 2, 1951, 1952, 3, 2, 2, 2, 1952, 1957, 5, 274, 138, 2, 1953, 1954, 7, 390, 2, 2, 1954, 1956, 5, 274, 138, 2, 1955, 1953, 3, 2, 2, 2, 1956, 1959, 3, 2, 2, 2, 1957, 1955, 3, 2, 2, 2, 1957, 1958, 3, 2, 2, 2, 1958, 1961, 3, 2, 2, 2, 1959, 1957, 3, 2, 2, 2, 1960, 1950, 3, 2, 2, 2, 1960, 1961, 3, 2, 2, 2, 1961, 1962, 3, 2, 2, 2, 1962, 1963, 7, 387, 2, 2, 1963, 1971, 3, 2, 2, 2, 1964, 1971, 5, 306, 154, 2, 1965, 1971, 5, 276, 139, 2, 1966, 1967, 7, 386, 2, 2, 1967, 1968, 5, 260, 131, 2, 1968, 1969, 7, 387, 2, 2, 1969, 1971, 3, 2, 2, 2, 1970, 1879, 3, 2, 2, 2, 1970, 1892, 3, 2, 2, 2, 1970, 1905, 3, 2, 2, 2, 1970, 1912, 3, 2, 2, 2, 1970, 1921, 3, 2, 2, 2, 1970, 1930, 3, 2, 2, 2, 1970, 1937, 3, 2, 2, 2, 1970, 1938, 3, 2, 2, 2, 1970, 1939, 3, 2, 2, 2, 1970, 1943, 3, 2, 2, 2, 1970, 1947, 3, 2, 2, 2, 1970, 1964, 3, 2, 2, 2, 1970, 1965, 3, 2, 2, 2, 1970, 1966, 3, 2, 2, 2, 1971, 1979, 3, 2, 2, 2, 1972, 1973, 12, 6, 2, 2, 1973, 1974, 7, 384, 2, 2, 1974, 1975, 5, 268, 135, 2, 1975, 1976, 7, 385, 2, 2, 1976, 1978, 3, 2, 2, 2, 1977, 1972, 3, 2, 2, 2, 1978, 1981, 3, 2, 2, 2, 1979, 1977, 3, 2, 2, 2, 1979, 1980, 3, 2, 2, 2, 1980, 271, 3, 2, 2, 2, 1981, 1979, 3, 2, 2, 2, 1982, 1986, 5, 368, 185, 2, 1983, 1986, 5, 372, 187, 2, 1984, 1986, 5, 324, 163, 2, 1985, 1982, 3, 2, 2, 2, 1985, 1983, 3, 2, 2, 2, 1985, 1984, 3, 2, 2, 2, 1986, 273, 3, 2, 2, 2, 1987, 1992, 5, 366, 184, 2, 1988, 1992, 5, 364, 183, 2, 1989, 1992, 5, 362, 182, 2, 1990, 1992, 5, 260, 131, 2, 1991, 1987, 3, 2, 2, 2, 1991, 1988, 3, 2, 2, 2, 1991, 1989, 3, 2, 2, 2, 1991, 1990, 3, 2, 2, 2, 1992, 275, 3, 2, 2, 2, 1993, 1994, 5, 324, 163, 2, 1994, 277, 3, 2, 2, 2, 1995, 1996, 5, 306, 154, 2, 1996, 279, 3, 2, 2, 2, 1997, 2000, 5, 306, 154, 2, 1998, 2000, 5, 276, 139, 2, 1999, 1997, 3, 2, 2, 2, 1999, 1998, 3, 2, 2, 2, 2000, 281, 3, 2, 2, 2, 2001, 2004, 7, 273, 2, 2, 2002, 2005, 5, 284, 143, 2, 2003, 2005, 5, 288, 145, 2, 2004, 2002, 3, 2, 2, 2, 2004, 2003, 3, 2, 2, 2, 2004, 2005, 3, 2, 2, 2, 2005, 283, 3, 2, 2, 2, 2006, 2008, 5, 286, 144, 2, 2007, 2009, 5, 290, 146, 2, 2008, 2007, 3, 2, 2, 2, 2008, 2009, 3, 2, 2, 2, 2009, 285, 3, 2, 2, 2, 2010, 2011, 5, 292, 147, 2, 2011, 2012, 5, 364, 183, 2, 2012, 2014, 3, 2, 2, 2, 2013, 2010, 3, 2, 2, 2, 2014, 2015, 3, 2, 2, 2, 2015, 2013, 3, 2, 2, 2, 2015, 2016, 3, 2, 2, 2, 2016, 287, 3, 2, 2, 2, 2017, 2020, 5, 290, 146, 2, 2018, 2021, 5, 286, 144, 2, 2019, 2021, 5, 290, 146, 2, 2020, 2018, 3, 2, 2, 2, 2020, 2019, 3, 2, 2, 2, 2020, 2021, 3, 2, 2, 2, 2021, 289, 3, 2, 2, 2, 2022, 2023, 5, 292, 147, 2, 2023, 2024, 5, 364, 183, 2, 2024, 2025, 7, 352, 2, 2, 2025, 2026, 5, 364, 183, 2, 2026, 291, 3, 2, 2, 2, 2027, 2029, 9, 36, 2, 2, 2028, 2027, 3, 2, 2, 2, 2028, 2029, 3, 2, 2, 2, 2029, 2030, 3, 2, 2, 2, 2030, 2033, 9, 37, 2, 2, 2031, 2033, 7, 407, 2, 2, 2032, 2028, 3, 2, 2, 2, 2032, 2031, 3, 2, 2, 2, 2033, 293, 3, 2, 2, 2, 2034, 2036, 7, 187, 2, 2, 2035, 2034, 3, 2, 2, 2, 2035, 2036, 3, 2, 2, 2, 2036, 2037, 3, 2, 2, 2, 2037, 2039, 5, 306, 154, 2, 2038, 2040, 5, 302, 152, 2, 2039, 2038, 3, 2, 2, 2, 2039, 2040, 3, 2, 2, 2, 2040, 295, 3, 2, 2, 2, 2041, 2043, 7, 187, 2, 2, 2042, 2041, 3, 2, 2, 2, 2042, 2043, 3, 2, 2, 2, 2043, 2044, 3, 2, 2, 2, 2044, 2046, 5, 306, 154, 2, 2045, 2047, 5, 302, 152, 2, 2046, 2045, 3, 2, 2, 2, 2046, 2047, 3, 2, 2, 2, 2047, 297, 3, 2, 2, 2, 2048, 2049, 5, 306, 154, 2, 2049, 2050, 5, 300, 151, 2, 2050, 299, 3, 2, 2, 2, 2051, 2052, 7, 290, 2, 2, 2052, 2054, 5, 306, 154, 2, 2053, 2051, 3, 2, 2, 2, 2054, 2055, 3, 2, 2, 2, 2055, 2053, 3, 2, 2, 2, 2055, 2056, 3, 2, 2, 2, 2056, 2059, 3, 2, 2, 2, 2057, 2059, 3, 2, 2, 2, 2058, 2053, 3, 2, 2, 2, 2058, 2057, 3, 2, 2, 2, 2059, 301, 3, 2, 2, 2, 2060, 2061, 7, 386, 2, 2, 2061, 2062, 5, 304, 153, 2, 2062, 2063, 7, 387, 2, 2, 2063, 303, 3, 2, 2, 2, 2064, 2069, 5, 306, 154, 2, 2065, 2066, 7, 390, 2, 2, 2066, 2068, 5, 306, 154, 2, 2067, 2065, 3, 2, 2, 2, 2068, 2071, 3, 2, 2, 2, 2069, 2067, 3, 2, 2, 2, 2069, 2070, 3, 2, 2, 2, 2070, 305, 3, 2, 2, 2, 2071, 2069, 3, 2, 2, 2, 2072, 2076, 5, 308, 155, 2, 2073, 2076, 5, 310, 156, 2, 2074, 2076, 5, 372, 187, 2, 2075, 2072, 3, 2, 2, 2, 2075, 2073, 3, 2, 2, 2, 2075, 2074, 3, 2, 2, 2, 2076, 307, 3, 2, 2, 2, 2077, 2078, 9, 38, 2, 2, 2078, 309, 3, 2, 2, 2, 2079, 2080, 7, 407, 2, 2, 2080, 311, 3, 2, 2, 2, 2081, 2082, 7, 368, 2, 2, 2082, 2083, 5, 260, 131, 2, 2083, 2084, 7, 348, 2, 2, 2084, 2085, 5, 260, 131, 2, 2085, 313, 3, 2, 2, 2, 2086, 2087, 5, 324, 163, 2, 2087, 315, 3, 2, 2, 2, 2088, 2089, 5, 324, 163, 2, 2089, 317, 3, 2, 2, 2, 2090, 2091, 5, 324, 163, 2, 2091, 319, 3, 2, 2, 2, 2092, 2093, 5, 324, 163, 2, 2093, 321, 3, 2, 2, 2, 2094, 2095, 5, 324, 163, 2, 2095, 323, 3, 2, 2, 2, 2096, 2101, 5, 306, 154, 2, 2097, 2098, 7, 383, 2, 2, 2098, 2100, 5, 306, 154, 2, 2099, 2097, 3, 2, 2, 2, 2100, 2103, 3, 2, 2, 2, 2101, 2102, 3, 2, 2, 2, 2101, 2099, 3, 2, 2, 2, 2102, 325, 3, 2, 2, 2, 2103, 2101, 3, 2, 2, 2, 2104, 2105, 7, 371, 2, 2, 2105, 2106, 5, 332, 167, 2, 2106, 327, 3, 2, 2, 2, 2107, 2108, 7, 61, 2, 2, 2108, 2109, 7, 300, 2, 2, 2109, 2110, 7, 247, 2, 2, 2110, 329, 3, 2, 2, 2, 2111, 2112, 7, 61, 2, 2, 2112, 2113, 7, 247, 2, 2, 2113, 331, 3, 2, 2, 2, 2114, 2115, 7, 386, 2, 2, 2115, 2120, 5, 334, 168, 2, 2116, 2117, 7, 390, 2, 2, 2117, 2119, 5, 334, 168, 2, 2118, 2116, 3, 2, 2, 2, 2119, 2122, 3, 2, 2, 2, 2120, 2118, 3, 2, 2, 2, 2120, 2121, 3, 2, 2, 2, 2121, 2123, 3, 2, 2, 2, 2122, 2120, 3, 2, 2, 2, 2123, 2124, 7, 387, 2, 2, 2124, 333, 3, 2, 2, 2, 2125, 2130, 5, 336, 169, 2, 2126, 2128, 7, 375, 2, 2, 2127, 2126, 3, 2, 2, 2, 2127, 2128, 3, 2, 2, 2, 2128, 2129, 3, 2, 2, 2, 2129, 2131, 5, 338, 170, 2, 2130, 2127, 3, 2, 2, 2, 2130, 2131, 3, 2, 2, 2, 2131, 335, 3, 2, 2, 2, 2132, 2136, 5, 306, 154, 2, 2133, 2136, 5, 276, 139, 2, 2134, 2136, 7, 407, 2, 2, 2135, 2132, 3, 2, 2, 2, 2135, 2133, 3, 2, 2, 2, 2135, 2134, 3, 2, 2, 2, 2136, 337, 3, 2, 2, 2, 2137, 2142, 7, 408, 2, 2, 2138, 2142, 7, 409, 2, 2, 2139, 2142, 5, 358, 180, 2, 2140, 2142, 7, 407, 2, 2, 2141, 2137, 3, 2, 2, 2, 2141, 2138, 3, 2, 2, 2, 2141, 2139, 3, 2, 2, 2, 2141, 2140, 3, 2, 2, 2, 2142, 339, 3, 2, 2, 2, 2143, 2150, 7, 183, 2, 2, 2144, 2145, 7, 381, 2, 2, 2145, 2150, 7, 381, 2, 2, 2146, 2150, 7, 307, 2, 2, 2147, 2148, 7, 380, 2, 2, 2148, 2150, 7, 380, 2, 2, 2149, 2143, 3, 2, 2, 2, 2149, 2144, 3, 2, 2, 2, 2149, 2146, 3, 2, 2, 2, 2149, 2147, 3, 2, 2, 2, 2150, 341, 3, 2, 2, 2, 2151, 2166, 7, 375, 2, 2, 2152, 2166, 7, 376, 2, 2, 2153, 2166, 7, 377, 2, 2, 2154, 2155, 7, 377, 2, 2, 2155, 2166, 7, 375, 2, 2, 2156, 2157, 7, 376, 2, 2, 2157, 2166, 7, 375, 2, 2, 2158, 2159, 7, 377, 2, 2, 2159, 2166, 7, 376, 2, 2, 2160, 2161, 7, 378, 2, 2, 2161, 2166, 7, 375, 2, 2, 2162, 2163, 7, 377, 2, 2, 2163, 2164, 7, 375, 2, 2, 2164, 2166, 7, 376, 2, 2, 2165, 2151, 3, 2, 2, 2, 2165, 2152, 3, 2, 2, 2, 2165, 2153, 3, 2, 2, 2, 2165, 2154, 3, 2, 2, 2, 2165, 2156, 3, 2, 2, 2, 2165, 2158, 3, 2, 2, 2, 2165, 2160, 3, 2, 2, 2, 2165, 2162, 3, 2, 2, 2, 2166, 343, 3, 2, 2, 2, 2167, 2168, 7, 377, 2, 2, 2168, 2175, 7, 377, 2, 2, 2169, 2170, 7, 376, 2, 2, 2170, 2175, 7, 376, 2, 2, 2171, 2175, 7, 381, 2, 2, 2172, 2175, 7, 382, 2, 2, 2173, 2175, 7, 380, 2, 2, 2174, 2167, 3, 2, 2, 2, 2174, 2169, 3, 2, 2, 2, 2174, 2171, 3, 2, 2, 2, 2174, 2172, 3, 2, 2, 2, 2174, 2173, 3, 2, 2, 2, 2175, 345, 3, 2, 2, 2, 2176, 2177, 9, 39, 2, 2, 2177, 347, 3, 2, 2, 2, 2178, 2179, 9, 40, 2, 2, 2179, 349, 3, 2, 2, 2, 2180, 2195, 5, 282, 142, 2, 2181, 2195, 5, 352, 177, 2, 2182, 2195, 5, 354, 178, 2, 2183, 2185, 7, 399, 2, 2, 2184, 2183, 3, 2, 2, 2, 2184, 2185, 3, 2, 2, 2, 2185, 2186, 3, 2, 2, 2, 2186, 2195, 5, 356, 179, 2, 2187, 2195, 5, 358, 180, 2, 2188, 2195, 7, 409, 2, 2, 2189, 2195, 7, 410, 2, 2, 2190, 2192, 7, 300, 2, 2, 2191, 2190, 3, 2, 2, 2, 2191, 2192, 3, 2, 2, 2, 2192, 2193, 3, 2, 2, 2, 2193, 2195, 7, 301, 2, 2, 2194, 2180, 3, 2, 2, 2, 2194, 2181, 3, 2, 2, 2, 2194, 2182, 3, 2, 2, 2, 2194, 2184, 3, 2, 2, 2, 2194, 2187, 3, 2, 2, 2, 2194, 2188, 3, 2, 2, 2, 2194, 2189, 3, 2, 2, 2, 2194, 2191, 3, 2, 2, 2, 2195, 351, 3, 2, 2, 2, 2196, 2197, 5, 362, 182, 2, 2197, 2198, 5, 354, 178, 2, 2198, 353, 3, 2, 2, 2, 2199, 2200, 7, 407, 2, 2, 2200, 355, 3, 2, 2, 2, 2201, 2202, 7, 408, 2, 2, 2202, 357, 3, 2, 2, 2, 2203, 2204, 9, 41, 2, 2, 2204, 359, 3, 2, 2, 2, 2205, 2206, 9, 42, 2, 2, 2206, 361, 3, 2, 2, 2, 2207, 2208, 9, 43, 2, 2, 2208, 363, 3, 2, 2, 2, 2209, 2210, 9, 44, 2, 2, 2210, 365, 3, 2, 2, 2, 2211, 2212, 9, 45, 2, 2, 2212, 367, 3, 2, 2, 2, 2213, 2214, 9, 46, 2, 2, 2214, 369, 3, 2, 2, 2, 2215, 2216, 9, 47, 2, 2, 2216, 371, 3, 2, 2, 2, 2217, 2218, 9, 48, 2, 2, 2218, 373, 3, 2, 2, 2, 262, 382, 384, 389, 393, 397, 401, 405, 409, 413, 417, 421, 425, 429, 433, 435, 453, 457, 466, 471, 478, 489, 498, 510, 513, 520, 528, 533, 536, 543, 551, 555, 567, 575, 579, 601, 606, 610, 614, 618, 627, 632, 636, 640, 644, 647, 651, 656, 662, 667, 672, 675, 679, 687, 695, 699, 703, 707, 711, 715, 719, 723, 727, 729, 739, 747, 771, 778, 784, 787, 790, 800, 803, 811, 823, 847, 860, 865, 869, 877, 881, 887, 897, 901, 907, 911, 915, 918, 927, 931, 938, 941, 951, 959, 967, 971, 986, 1005, 1016, 1020, 1027, 1032, 1038, 1042, 1049, 1053, 1057, 1061, 1069, 1073, 1078, 1084, 1090, 1093, 1097, 1108, 1117, 1131, 1143, 1158, 1161, 1165, 1168, 1170, 1175, 1179, 1182, 1186, 1195, 1204, 1214, 1219, 1231, 1234, 1237, 1240, 1246, 1250, 1258, 1261, 1266, 1269, 1271, 1285, 1296, 1301, 1309, 1312, 1315, 1320, 1322, 1324, 1329, 1332, 1336, 1339, 1342, 1354, 1361, 1372, 1399, 1421, 1439, 1444, 1456, 1469, 1481, 1493, 1498, 1525, 1533, 1537, 1540, 1543, 1550, 1553, 1556, 1559, 1562, 1565, 1570, 1573, 1582, 1587, 1591, 1596, 1605, 1624, 1632, 1640, 1644, 1648, 1658, 1684, 1692, 1704, 1726, 1728, 1739, 1742, 1744, 1748, 1752, 1759, 1768, 1774, 1787, 1794, 1799, 1805, 1812, 1814, 1817, 1829, 1834, 1837, 1843, 1845, 1851, 1874, 1876, 1884, 1888, 1897, 1901, 1917, 1926, 1950, 1957, 1960, 1970, 1979, 1985, 1991, 1999, 2004, 2008, 2015, 2020, 2028, 2032, 2035, 2039, 2042, 2046, 2055, 2058, 2069, 2075, 2101, 2120, 2127, 2130, 2135, 2141, 2149, 2165, 2174, 2184, 2191, 2194] \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlParser.ts b/src/lib/flinksql/FlinkSqlParser.ts index 1a0e3b8..39f092b 100644 --- a/src/lib/flinksql/FlinkSqlParser.ts +++ b/src/lib/flinksql/FlinkSqlParser.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT import { ATN } from "antlr4ts/atn/ATN"; @@ -488,139 +488,142 @@ export class FlinkSqlParser extends Parser { public static readonly RULE_transform = 47; public static readonly RULE_transformArgument = 48; public static readonly RULE_likeDefinition = 49; - public static readonly RULE_sourceTable = 50; - public static readonly RULE_likeOption = 51; - public static readonly RULE_createCatalog = 52; - public static readonly RULE_createDatabase = 53; - public static readonly RULE_createView = 54; - public static readonly RULE_createFunction = 55; - public static readonly RULE_usingClause = 56; - public static readonly RULE_jarFileName = 57; - public static readonly RULE_alterTable = 58; - public static readonly RULE_renameDefinition = 59; - public static readonly RULE_setKeyValueDefinition = 60; - public static readonly RULE_addConstraint = 61; - public static readonly RULE_dropConstraint = 62; - public static readonly RULE_addUnique = 63; - public static readonly RULE_notForced = 64; - public static readonly RULE_alertView = 65; - public static readonly RULE_alterDatabase = 66; - public static readonly RULE_alterFunction = 67; - public static readonly RULE_dropCatalog = 68; - public static readonly RULE_dropTable = 69; - public static readonly RULE_dropDatabase = 70; - public static readonly RULE_dropView = 71; - public static readonly RULE_dropFunction = 72; - public static readonly RULE_insertStatement = 73; - public static readonly RULE_insertSimpleStatement = 74; - public static readonly RULE_insertPartitionDefinition = 75; - public static readonly RULE_valuesDefinition = 76; - public static readonly RULE_valuesRowDefinition = 77; - public static readonly RULE_insertMulStatementCompatibility = 78; - public static readonly RULE_insertMulStatement = 79; - public static readonly RULE_queryStatement = 80; - public static readonly RULE_valuesCaluse = 81; - public static readonly RULE_withClause = 82; - public static readonly RULE_withItem = 83; - public static readonly RULE_withItemName = 84; - public static readonly RULE_selectStatement = 85; - public static readonly RULE_selectClause = 86; - public static readonly RULE_projectItemDefinition = 87; - public static readonly RULE_overWindowItem = 88; - public static readonly RULE_fromClause = 89; - public static readonly RULE_tableExpression = 90; - public static readonly RULE_tableReference = 91; - public static readonly RULE_tablePrimary = 92; - public static readonly RULE_tablePath = 93; - public static readonly RULE_systemTimePeriod = 94; - public static readonly RULE_dateTimeExpression = 95; - public static readonly RULE_inlineDataValueClause = 96; - public static readonly RULE_windoTVFClause = 97; - public static readonly RULE_windowTVFExression = 98; - public static readonly RULE_windoTVFName = 99; - public static readonly RULE_windowTVFParam = 100; - public static readonly RULE_timeIntervalParamName = 101; - public static readonly RULE_columnDescriptor = 102; - public static readonly RULE_joinCondition = 103; - public static readonly RULE_whereClause = 104; - public static readonly RULE_groupByClause = 105; - public static readonly RULE_groupItemDefinition = 106; - public static readonly RULE_groupingSets = 107; - public static readonly RULE_groupingSetsNotaionName = 108; - public static readonly RULE_groupWindowFunction = 109; - public static readonly RULE_groupWindowFunctionName = 110; - public static readonly RULE_timeAttrColumn = 111; - public static readonly RULE_havingClause = 112; - public static readonly RULE_windowClause = 113; - public static readonly RULE_namedWindow = 114; - public static readonly RULE_windowSpec = 115; - public static readonly RULE_matchRecognizeClause = 116; - public static readonly RULE_orderByCaluse = 117; - public static readonly RULE_orderItemDefition = 118; - public static readonly RULE_limitClause = 119; - public static readonly RULE_partitionByClause = 120; - public static readonly RULE_quantifiers = 121; - public static readonly RULE_measuresClause = 122; - public static readonly RULE_patternDefination = 123; - public static readonly RULE_patternVariable = 124; - public static readonly RULE_outputMode = 125; - public static readonly RULE_afterMatchStrategy = 126; - public static readonly RULE_patternVariablesDefination = 127; - public static readonly RULE_windowFrame = 128; - public static readonly RULE_frameBound = 129; - public static readonly RULE_withinClause = 130; - public static readonly RULE_expression = 131; - public static readonly RULE_booleanExpression = 132; - public static readonly RULE_predicate = 133; - public static readonly RULE_likePredicate = 134; - public static readonly RULE_valueExpression = 135; - public static readonly RULE_primaryExpression = 136; - public static readonly RULE_functionName = 137; - public static readonly RULE_functionParam = 138; - public static readonly RULE_dereferenceDefinition = 139; - public static readonly RULE_correlationName = 140; - public static readonly RULE_qualifiedName = 141; - public static readonly RULE_timeIntervalExpression = 142; - public static readonly RULE_errorCapturingMultiUnitsInterval = 143; - public static readonly RULE_multiUnitsInterval = 144; - public static readonly RULE_errorCapturingUnitToUnitInterval = 145; - public static readonly RULE_unitToUnitInterval = 146; - public static readonly RULE_intervalValue = 147; - public static readonly RULE_columnAlias = 148; - public static readonly RULE_tableAlias = 149; - public static readonly RULE_errorCapturingIdentifier = 150; - public static readonly RULE_errorCapturingIdentifierExtra = 151; - public static readonly RULE_identifierList = 152; - public static readonly RULE_identifierSeq = 153; - public static readonly RULE_identifier = 154; - public static readonly RULE_unquotedIdentifier = 155; - public static readonly RULE_quotedIdentifier = 156; - public static readonly RULE_whenClause = 157; - public static readonly RULE_uid = 158; - public static readonly RULE_withOption = 159; - public static readonly RULE_ifNotExists = 160; - public static readonly RULE_ifExists = 161; - public static readonly RULE_tablePropertyList = 162; - public static readonly RULE_tableProperty = 163; - public static readonly RULE_tablePropertyKey = 164; - public static readonly RULE_tablePropertyValue = 165; - public static readonly RULE_logicalOperator = 166; - public static readonly RULE_comparisonOperator = 167; - public static readonly RULE_bitOperator = 168; - public static readonly RULE_mathOperator = 169; - public static readonly RULE_unaryOperator = 170; - public static readonly RULE_constant = 171; - public static readonly RULE_timePointLiteral = 172; - public static readonly RULE_stringLiteral = 173; - public static readonly RULE_decimalLiteral = 174; - public static readonly RULE_booleanLiteral = 175; - public static readonly RULE_setQuantifier = 176; - public static readonly RULE_timePointUnit = 177; - public static readonly RULE_timeIntervalUnit = 178; - public static readonly RULE_reservedKeywordsUsedAsFuncParam = 179; - public static readonly RULE_reservedKeywordsUsedAsFuncName = 180; - public static readonly RULE_reservedKeywords = 181; - public static readonly RULE_nonReservedKeywords = 182; + public static readonly RULE_likeOption = 50; + public static readonly RULE_createCatalog = 51; + public static readonly RULE_createDatabase = 52; + public static readonly RULE_createView = 53; + public static readonly RULE_createFunction = 54; + public static readonly RULE_usingClause = 55; + public static readonly RULE_jarFileName = 56; + public static readonly RULE_alterTable = 57; + public static readonly RULE_renameDefinition = 58; + public static readonly RULE_setKeyValueDefinition = 59; + public static readonly RULE_addConstraint = 60; + public static readonly RULE_dropConstraint = 61; + public static readonly RULE_addUnique = 62; + public static readonly RULE_notForced = 63; + public static readonly RULE_alertView = 64; + public static readonly RULE_alterDatabase = 65; + public static readonly RULE_alterFunction = 66; + public static readonly RULE_dropCatalog = 67; + public static readonly RULE_dropTable = 68; + public static readonly RULE_dropDatabase = 69; + public static readonly RULE_dropView = 70; + public static readonly RULE_dropFunction = 71; + public static readonly RULE_insertStatement = 72; + public static readonly RULE_insertSimpleStatement = 73; + public static readonly RULE_insertPartitionDefinition = 74; + public static readonly RULE_valuesDefinition = 75; + public static readonly RULE_valuesRowDefinition = 76; + public static readonly RULE_insertMulStatementCompatibility = 77; + public static readonly RULE_insertMulStatement = 78; + public static readonly RULE_queryStatement = 79; + public static readonly RULE_valuesCaluse = 80; + public static readonly RULE_withClause = 81; + public static readonly RULE_withItem = 82; + public static readonly RULE_withItemName = 83; + public static readonly RULE_selectStatement = 84; + public static readonly RULE_selectClause = 85; + public static readonly RULE_projectItemDefinition = 86; + public static readonly RULE_overWindowItem = 87; + public static readonly RULE_fromClause = 88; + public static readonly RULE_tableExpression = 89; + public static readonly RULE_tableReference = 90; + public static readonly RULE_tablePrimary = 91; + public static readonly RULE_systemTimePeriod = 92; + public static readonly RULE_dateTimeExpression = 93; + public static readonly RULE_inlineDataValueClause = 94; + public static readonly RULE_windoTVFClause = 95; + public static readonly RULE_windowTVFExression = 96; + public static readonly RULE_windoTVFName = 97; + public static readonly RULE_windowTVFParam = 98; + public static readonly RULE_timeIntervalParamName = 99; + public static readonly RULE_columnDescriptor = 100; + public static readonly RULE_joinCondition = 101; + public static readonly RULE_whereClause = 102; + public static readonly RULE_groupByClause = 103; + public static readonly RULE_groupItemDefinition = 104; + public static readonly RULE_groupingSets = 105; + public static readonly RULE_groupingSetsNotaionName = 106; + public static readonly RULE_groupWindowFunction = 107; + public static readonly RULE_groupWindowFunctionName = 108; + public static readonly RULE_timeAttrColumn = 109; + public static readonly RULE_havingClause = 110; + public static readonly RULE_windowClause = 111; + public static readonly RULE_namedWindow = 112; + public static readonly RULE_windowSpec = 113; + public static readonly RULE_matchRecognizeClause = 114; + public static readonly RULE_orderByCaluse = 115; + public static readonly RULE_orderItemDefition = 116; + public static readonly RULE_limitClause = 117; + public static readonly RULE_partitionByClause = 118; + public static readonly RULE_quantifiers = 119; + public static readonly RULE_measuresClause = 120; + public static readonly RULE_patternDefination = 121; + public static readonly RULE_patternVariable = 122; + public static readonly RULE_outputMode = 123; + public static readonly RULE_afterMatchStrategy = 124; + public static readonly RULE_patternVariablesDefination = 125; + public static readonly RULE_windowFrame = 126; + public static readonly RULE_frameBound = 127; + public static readonly RULE_withinClause = 128; + public static readonly RULE_expression = 129; + public static readonly RULE_booleanExpression = 130; + public static readonly RULE_predicate = 131; + public static readonly RULE_likePredicate = 132; + public static readonly RULE_valueExpression = 133; + public static readonly RULE_primaryExpression = 134; + public static readonly RULE_functionName = 135; + public static readonly RULE_functionParam = 136; + public static readonly RULE_dereferenceDefinition = 137; + public static readonly RULE_correlationName = 138; + public static readonly RULE_qualifiedName = 139; + public static readonly RULE_timeIntervalExpression = 140; + public static readonly RULE_errorCapturingMultiUnitsInterval = 141; + public static readonly RULE_multiUnitsInterval = 142; + public static readonly RULE_errorCapturingUnitToUnitInterval = 143; + public static readonly RULE_unitToUnitInterval = 144; + public static readonly RULE_intervalValue = 145; + public static readonly RULE_columnAlias = 146; + public static readonly RULE_tableAlias = 147; + public static readonly RULE_errorCapturingIdentifier = 148; + public static readonly RULE_errorCapturingIdentifierExtra = 149; + public static readonly RULE_identifierList = 150; + public static readonly RULE_identifierSeq = 151; + public static readonly RULE_identifier = 152; + public static readonly RULE_unquotedIdentifier = 153; + public static readonly RULE_quotedIdentifier = 154; + public static readonly RULE_whenClause = 155; + public static readonly RULE_catalogPath = 156; + public static readonly RULE_databasePath = 157; + public static readonly RULE_databasePathCreate = 158; + public static readonly RULE_tablePathCreate = 159; + public static readonly RULE_tablePath = 160; + public static readonly RULE_uid = 161; + public static readonly RULE_withOption = 162; + public static readonly RULE_ifNotExists = 163; + public static readonly RULE_ifExists = 164; + public static readonly RULE_tablePropertyList = 165; + public static readonly RULE_tableProperty = 166; + public static readonly RULE_tablePropertyKey = 167; + public static readonly RULE_tablePropertyValue = 168; + public static readonly RULE_logicalOperator = 169; + public static readonly RULE_comparisonOperator = 170; + public static readonly RULE_bitOperator = 171; + public static readonly RULE_mathOperator = 172; + public static readonly RULE_unaryOperator = 173; + public static readonly RULE_constant = 174; + public static readonly RULE_timePointLiteral = 175; + public static readonly RULE_stringLiteral = 176; + public static readonly RULE_decimalLiteral = 177; + public static readonly RULE_booleanLiteral = 178; + public static readonly RULE_setQuantifier = 179; + public static readonly RULE_timePointUnit = 180; + public static readonly RULE_timeIntervalUnit = 181; + public static readonly RULE_reservedKeywordsUsedAsFuncParam = 182; + public static readonly RULE_reservedKeywordsUsedAsFuncName = 183; + public static readonly RULE_reservedKeywords = 184; + public static readonly RULE_nonReservedKeywords = 185; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "program", "statement", "sqlStatements", "sqlStatement", "emptyStatement", @@ -635,38 +638,39 @@ export class FlinkSqlParser extends Parser { "metadataKey", "computedColumnDefinition", "computedColumnExpression", "watermarkDefinition", "tableConstraint", "constraintName", "selfDefinitionClause", "partitionDefinition", "transformList", "transform", "transformArgument", - "likeDefinition", "sourceTable", "likeOption", "createCatalog", "createDatabase", - "createView", "createFunction", "usingClause", "jarFileName", "alterTable", - "renameDefinition", "setKeyValueDefinition", "addConstraint", "dropConstraint", - "addUnique", "notForced", "alertView", "alterDatabase", "alterFunction", - "dropCatalog", "dropTable", "dropDatabase", "dropView", "dropFunction", - "insertStatement", "insertSimpleStatement", "insertPartitionDefinition", - "valuesDefinition", "valuesRowDefinition", "insertMulStatementCompatibility", - "insertMulStatement", "queryStatement", "valuesCaluse", "withClause", - "withItem", "withItemName", "selectStatement", "selectClause", "projectItemDefinition", - "overWindowItem", "fromClause", "tableExpression", "tableReference", "tablePrimary", - "tablePath", "systemTimePeriod", "dateTimeExpression", "inlineDataValueClause", - "windoTVFClause", "windowTVFExression", "windoTVFName", "windowTVFParam", - "timeIntervalParamName", "columnDescriptor", "joinCondition", "whereClause", - "groupByClause", "groupItemDefinition", "groupingSets", "groupingSetsNotaionName", - "groupWindowFunction", "groupWindowFunctionName", "timeAttrColumn", "havingClause", - "windowClause", "namedWindow", "windowSpec", "matchRecognizeClause", "orderByCaluse", - "orderItemDefition", "limitClause", "partitionByClause", "quantifiers", - "measuresClause", "patternDefination", "patternVariable", "outputMode", - "afterMatchStrategy", "patternVariablesDefination", "windowFrame", "frameBound", - "withinClause", "expression", "booleanExpression", "predicate", "likePredicate", - "valueExpression", "primaryExpression", "functionName", "functionParam", - "dereferenceDefinition", "correlationName", "qualifiedName", "timeIntervalExpression", - "errorCapturingMultiUnitsInterval", "multiUnitsInterval", "errorCapturingUnitToUnitInterval", - "unitToUnitInterval", "intervalValue", "columnAlias", "tableAlias", "errorCapturingIdentifier", + "likeDefinition", "likeOption", "createCatalog", "createDatabase", "createView", + "createFunction", "usingClause", "jarFileName", "alterTable", "renameDefinition", + "setKeyValueDefinition", "addConstraint", "dropConstraint", "addUnique", + "notForced", "alertView", "alterDatabase", "alterFunction", "dropCatalog", + "dropTable", "dropDatabase", "dropView", "dropFunction", "insertStatement", + "insertSimpleStatement", "insertPartitionDefinition", "valuesDefinition", + "valuesRowDefinition", "insertMulStatementCompatibility", "insertMulStatement", + "queryStatement", "valuesCaluse", "withClause", "withItem", "withItemName", + "selectStatement", "selectClause", "projectItemDefinition", "overWindowItem", + "fromClause", "tableExpression", "tableReference", "tablePrimary", "systemTimePeriod", + "dateTimeExpression", "inlineDataValueClause", "windoTVFClause", "windowTVFExression", + "windoTVFName", "windowTVFParam", "timeIntervalParamName", "columnDescriptor", + "joinCondition", "whereClause", "groupByClause", "groupItemDefinition", + "groupingSets", "groupingSetsNotaionName", "groupWindowFunction", "groupWindowFunctionName", + "timeAttrColumn", "havingClause", "windowClause", "namedWindow", "windowSpec", + "matchRecognizeClause", "orderByCaluse", "orderItemDefition", "limitClause", + "partitionByClause", "quantifiers", "measuresClause", "patternDefination", + "patternVariable", "outputMode", "afterMatchStrategy", "patternVariablesDefination", + "windowFrame", "frameBound", "withinClause", "expression", "booleanExpression", + "predicate", "likePredicate", "valueExpression", "primaryExpression", + "functionName", "functionParam", "dereferenceDefinition", "correlationName", + "qualifiedName", "timeIntervalExpression", "errorCapturingMultiUnitsInterval", + "multiUnitsInterval", "errorCapturingUnitToUnitInterval", "unitToUnitInterval", + "intervalValue", "columnAlias", "tableAlias", "errorCapturingIdentifier", "errorCapturingIdentifierExtra", "identifierList", "identifierSeq", "identifier", - "unquotedIdentifier", "quotedIdentifier", "whenClause", "uid", "withOption", - "ifNotExists", "ifExists", "tablePropertyList", "tableProperty", "tablePropertyKey", - "tablePropertyValue", "logicalOperator", "comparisonOperator", "bitOperator", - "mathOperator", "unaryOperator", "constant", "timePointLiteral", "stringLiteral", - "decimalLiteral", "booleanLiteral", "setQuantifier", "timePointUnit", - "timeIntervalUnit", "reservedKeywordsUsedAsFuncParam", "reservedKeywordsUsedAsFuncName", - "reservedKeywords", "nonReservedKeywords", + "unquotedIdentifier", "quotedIdentifier", "whenClause", "catalogPath", + "databasePath", "databasePathCreate", "tablePathCreate", "tablePath", + "uid", "withOption", "ifNotExists", "ifExists", "tablePropertyList", "tableProperty", + "tablePropertyKey", "tablePropertyValue", "logicalOperator", "comparisonOperator", + "bitOperator", "mathOperator", "unaryOperator", "constant", "timePointLiteral", + "stringLiteral", "decimalLiteral", "booleanLiteral", "setQuantifier", + "timePointUnit", "timeIntervalUnit", "reservedKeywordsUsedAsFuncParam", + "reservedKeywordsUsedAsFuncName", "reservedKeywords", "nonReservedKeywords", ]; private static readonly _LITERAL_NAMES: Array = [ @@ -842,9 +846,9 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 366; + this.state = 372; this.statement(); - this.state = 367; + this.state = 373; this.match(FlinkSqlParser.EOF); } } @@ -869,9 +873,9 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 369; + this.state = 375; this.sqlStatements(); - this.state = 370; + this.state = 376; this.match(FlinkSqlParser.EOF); } } @@ -897,12 +901,12 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 379; + this.state = 382; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.KW_ADD || _la === FlinkSqlParser.KW_DESC || _la === FlinkSqlParser.KW_LOAD || _la === FlinkSqlParser.KW_REMOVE || ((((_la - 159)) & ~0x1F) === 0 && ((1 << (_la - 159)) & ((1 << (FlinkSqlParser.KW_UNLOAD - 159)) | (1 << (FlinkSqlParser.KW_USE - 159)) | (1 << (FlinkSqlParser.KW_ALTER - 159)) | (1 << (FlinkSqlParser.KW_BEGIN - 159)))) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & ((1 << (FlinkSqlParser.KW_CREATE - 219)) | (1 << (FlinkSqlParser.KW_DESCRIBE - 219)) | (1 << (FlinkSqlParser.KW_DROP - 219)) | (1 << (FlinkSqlParser.KW_EXECUTE - 219)) | (1 << (FlinkSqlParser.KW_EXPLAIN - 219)))) !== 0) || _la === FlinkSqlParser.KW_INSERT || ((((_la - 321)) & ~0x1F) === 0 && ((1 << (_la - 321)) & ((1 << (FlinkSqlParser.KW_RESET - 321)) | (1 << (FlinkSqlParser.KW_SELECT - 321)) | (1 << (FlinkSqlParser.KW_SET - 321)) | (1 << (FlinkSqlParser.KW_SHOW - 321)))) !== 0) || ((((_la - 363)) & ~0x1F) === 0 && ((1 << (_la - 363)) & ((1 << (FlinkSqlParser.KW_VALUES - 363)) | (1 << (FlinkSqlParser.KW_WITH - 363)) | (1 << (FlinkSqlParser.LR_BRACKET - 363)) | (1 << (FlinkSqlParser.SEMICOLON - 363)))) !== 0)) { { - this.state = 377; + this.state = 380; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_ADD: @@ -927,23 +931,13 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_WITH: case FlinkSqlParser.LR_BRACKET: { - this.state = 372; + this.state = 378; this.sqlStatement(); - this.state = 374; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 0, this._ctx) ) { - case 1: - { - this.state = 373; - this.match(FlinkSqlParser.SEMICOLON); - } - break; - } } break; case FlinkSqlParser.SEMICOLON: { - this.state = 376; + this.state = 379; this.emptyStatement(); } break; @@ -951,7 +945,7 @@ export class FlinkSqlParser extends Parser { throw new NoViableAltException(this); } } - this.state = 381; + this.state = 384; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -976,102 +970,222 @@ export class FlinkSqlParser extends Parser { let _localctx: SqlStatementContext = new SqlStatementContext(this._ctx, this.state); this.enterRule(_localctx, 6, FlinkSqlParser.RULE_sqlStatement); try { - this.state = 394; + this.state = 433; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 3, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 14, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 382; + this.state = 385; this.ddlStatement(); + this.state = 387; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 2, this._ctx) ) { + case 1: + { + this.state = 386; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 383; + this.state = 389; this.dmlStatement(); + this.state = 391; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 3, this._ctx) ) { + case 1: + { + this.state = 390; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 384; + this.state = 393; this.describeStatement(); + this.state = 395; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { + case 1: + { + this.state = 394; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 385; + this.state = 397; this.explainStatement(); + this.state = 399; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 5, this._ctx) ) { + case 1: + { + this.state = 398; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 386; + this.state = 401; this.useStatement(); + this.state = 403; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 6, this._ctx) ) { + case 1: + { + this.state = 402; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 387; + this.state = 405; this.showStatememt(); + this.state = 407; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { + case 1: + { + this.state = 406; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 388; + this.state = 409; this.loadStatement(); + this.state = 411; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 8, this._ctx) ) { + case 1: + { + this.state = 410; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 389; + this.state = 413; this.unloadStatememt(); + this.state = 415; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 9, this._ctx) ) { + case 1: + { + this.state = 414; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 390; + this.state = 417; this.setStatememt(); + this.state = 419; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { + case 1: + { + this.state = 418; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 10: this.enterOuterAlt(_localctx, 10); { - this.state = 391; + this.state = 421; this.resetStatememt(); + this.state = 423; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) { + case 1: + { + this.state = 422; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 11: this.enterOuterAlt(_localctx, 11); { - this.state = 392; + this.state = 425; this.jarStatememt(); + this.state = 427; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 12, this._ctx) ) { + case 1: + { + this.state = 426; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; case 12: this.enterOuterAlt(_localctx, 12); { - this.state = 393; + this.state = 429; this.dtAddStatement(); + this.state = 431; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 13, this._ctx) ) { + case 1: + { + this.state = 430; + this.match(FlinkSqlParser.SEMICOLON); + } + break; + } } break; } @@ -1097,7 +1211,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 396; + this.state = 435; this.match(FlinkSqlParser.SEMICOLON); } } @@ -1120,13 +1234,13 @@ export class FlinkSqlParser extends Parser { let _localctx: DdlStatementContext = new DdlStatementContext(this._ctx, this.state); this.enterRule(_localctx, 10, FlinkSqlParser.RULE_ddlStatement); try { - this.state = 412; + this.state = 451; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 15, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 398; + this.state = 437; this.createTable(); } break; @@ -1134,7 +1248,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 399; + this.state = 438; this.createDatabase(); } break; @@ -1142,7 +1256,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 400; + this.state = 439; this.createView(); } break; @@ -1150,7 +1264,7 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 401; + this.state = 440; this.createFunction(); } break; @@ -1158,7 +1272,7 @@ export class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 402; + this.state = 441; this.createCatalog(); } break; @@ -1166,7 +1280,7 @@ export class FlinkSqlParser extends Parser { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 403; + this.state = 442; this.alterTable(); } break; @@ -1174,7 +1288,7 @@ export class FlinkSqlParser extends Parser { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 404; + this.state = 443; this.alertView(); } break; @@ -1182,7 +1296,7 @@ export class FlinkSqlParser extends Parser { case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 405; + this.state = 444; this.alterDatabase(); } break; @@ -1190,7 +1304,7 @@ export class FlinkSqlParser extends Parser { case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 406; + this.state = 445; this.alterFunction(); } break; @@ -1198,7 +1312,7 @@ export class FlinkSqlParser extends Parser { case 10: this.enterOuterAlt(_localctx, 10); { - this.state = 407; + this.state = 446; this.dropCatalog(); } break; @@ -1206,7 +1320,7 @@ export class FlinkSqlParser extends Parser { case 11: this.enterOuterAlt(_localctx, 11); { - this.state = 408; + this.state = 447; this.dropTable(); } break; @@ -1214,7 +1328,7 @@ export class FlinkSqlParser extends Parser { case 12: this.enterOuterAlt(_localctx, 12); { - this.state = 409; + this.state = 448; this.dropDatabase(); } break; @@ -1222,7 +1336,7 @@ export class FlinkSqlParser extends Parser { case 13: this.enterOuterAlt(_localctx, 13); { - this.state = 410; + this.state = 449; this.dropView(); } break; @@ -1230,7 +1344,7 @@ export class FlinkSqlParser extends Parser { case 14: this.enterOuterAlt(_localctx, 14); { - this.state = 411; + this.state = 450; this.dropFunction(); } break; @@ -1255,7 +1369,7 @@ export class FlinkSqlParser extends Parser { let _localctx: DmlStatementContext = new DmlStatementContext(this._ctx, this.state); this.enterRule(_localctx, 12, FlinkSqlParser.RULE_dmlStatement); try { - this.state = 416; + this.state = 455; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_SELECT: @@ -1264,7 +1378,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.LR_BRACKET: this.enterOuterAlt(_localctx, 1); { - this.state = 414; + this.state = 453; this.queryStatement(0); } break; @@ -1273,7 +1387,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_INSERT: this.enterOuterAlt(_localctx, 2); { - this.state = 415; + this.state = 454; this.insertStatement(); } break; @@ -1303,7 +1417,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 418; + this.state = 457; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_DESC || _la === FlinkSqlParser.KW_DESCRIBE)) { this._errHandler.recoverInline(this); @@ -1315,8 +1429,8 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 419; - this.uid(); + this.state = 458; + this.tablePath(); } } catch (re) { @@ -1340,24 +1454,24 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 421; + this.state = 460; this.match(FlinkSqlParser.KW_EXPLAIN); - this.state = 425; + this.state = 464; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_CHANGELOG_MODE: case FlinkSqlParser.KW_ESTIMATED_COST: case FlinkSqlParser.KW_JSON_EXECUTION_PLAN: { - this.state = 422; + this.state = 461; this.explainDetails(); } break; case FlinkSqlParser.KW_PLAN: { - this.state = 423; + this.state = 462; this.match(FlinkSqlParser.KW_PLAN); - this.state = 424; + this.state = 463; this.match(FlinkSqlParser.KW_FOR); } break; @@ -1373,26 +1487,26 @@ export class FlinkSqlParser extends Parser { default: break; } - this.state = 430; + this.state = 469; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 18, this._ctx) ) { case 1: { - this.state = 427; + this.state = 466; this.dmlStatement(); } break; case 2: { - this.state = 428; + this.state = 467; this.insertSimpleStatement(); } break; case 3: { - this.state = 429; + this.state = 468; this.insertMulStatement(); } break; @@ -1421,21 +1535,21 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 432; + this.state = 471; this.explainDetail(); - this.state = 437; + this.state = 476; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 433; + this.state = 472; this.match(FlinkSqlParser.COMMA); - this.state = 434; + this.state = 473; this.explainDetail(); } } - this.state = 439; + this.state = 478; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1463,7 +1577,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 440; + this.state = 479; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CHANGELOG_MODE || _la === FlinkSqlParser.KW_ESTIMATED_COST || _la === FlinkSqlParser.KW_JSON_EXECUTION_PLAN)) { this._errHandler.recoverInline(this); @@ -1496,33 +1610,35 @@ export class FlinkSqlParser extends Parser { let _localctx: UseStatementContext = new UseStatementContext(this._ctx, this.state); this.enterRule(_localctx, 22, FlinkSqlParser.RULE_useStatement); try { - this.state = 448; + this.state = 487; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 442; + this.state = 481; this.match(FlinkSqlParser.KW_USE); - this.state = 444; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 9, this._ctx) ) { - case 1: - { - this.state = 443; - this.match(FlinkSqlParser.KW_CATALOG); - } - break; - } - this.state = 446; - this.uid(); + this.state = 482; + this.match(FlinkSqlParser.KW_CATALOG); + this.state = 483; + this.catalogPath(); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 447; + this.state = 484; + this.match(FlinkSqlParser.KW_USE); + this.state = 485; + this.databasePath(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 486; this.useModuleStatement(); } break; @@ -1550,25 +1666,25 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 450; + this.state = 489; this.match(FlinkSqlParser.KW_USE); - this.state = 451; + this.state = 490; this.match(FlinkSqlParser.KW_MODULES); - this.state = 452; + this.state = 491; this.uid(); - this.state = 457; + this.state = 496; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 453; + this.state = 492; this.match(FlinkSqlParser.COMMA); - this.state = 454; + this.state = 493; this.uid(); } } - this.state = 459; + this.state = 498; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1594,15 +1710,15 @@ export class FlinkSqlParser extends Parser { this.enterRule(_localctx, 26, FlinkSqlParser.RULE_showStatememt); let _la: number; try { - this.state = 495; + this.state = 534; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 17, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 27, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 460; + this.state = 499; this.match(FlinkSqlParser.KW_SHOW); - this.state = 461; + this.state = 500; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CATALOGS || _la === FlinkSqlParser.KW_DATABASES || _la === FlinkSqlParser.KW_JARS || _la === FlinkSqlParser.KW_VIEWS)) { this._errHandler.recoverInline(this); @@ -1620,11 +1736,11 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 462; + this.state = 501; this.match(FlinkSqlParser.KW_SHOW); - this.state = 463; + this.state = 502; this.match(FlinkSqlParser.KW_CURRENT); - this.state = 464; + this.state = 503; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CATALOG || _la === FlinkSqlParser.KW_DATABASE)) { this._errHandler.recoverInline(this); @@ -1642,16 +1758,16 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 465; + this.state = 504; this.match(FlinkSqlParser.KW_SHOW); - this.state = 466; + this.state = 505; this.match(FlinkSqlParser.KW_TABLES); - this.state = 469; + this.state = 508; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_FROM || _la === FlinkSqlParser.KW_IN) { { - this.state = 467; + this.state = 506; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_FROM || _la === FlinkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); @@ -1663,17 +1779,17 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 468; - this.uid(); + this.state = 507; + this.tablePath(); } } - this.state = 472; + this.state = 511; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LIKE || _la === FlinkSqlParser.KW_NOT) { { - this.state = 471; + this.state = 510; this.likePredicate(); } } @@ -1684,11 +1800,11 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 474; + this.state = 513; this.match(FlinkSqlParser.KW_SHOW); - this.state = 475; + this.state = 514; this.match(FlinkSqlParser.KW_COLUMNS); - this.state = 476; + this.state = 515; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_FROM || _la === FlinkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); @@ -1700,14 +1816,14 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 477; + this.state = 516; this.uid(); - this.state = 479; + this.state = 518; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LIKE || _la === FlinkSqlParser.KW_NOT) { { - this.state = 478; + this.state = 517; this.likePredicate(); } } @@ -1718,11 +1834,11 @@ export class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 481; + this.state = 520; this.match(FlinkSqlParser.KW_SHOW); - this.state = 482; + this.state = 521; this.match(FlinkSqlParser.KW_CREATE); - this.state = 483; + this.state = 522; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_VIEW || _la === FlinkSqlParser.KW_TABLE)) { this._errHandler.recoverInline(this); @@ -1734,7 +1850,7 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 484; + this.state = 523; this.uid(); } break; @@ -1742,19 +1858,19 @@ export class FlinkSqlParser extends Parser { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 485; + this.state = 524; this.match(FlinkSqlParser.KW_SHOW); - this.state = 487; + this.state = 526; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_USER) { { - this.state = 486; + this.state = 525; this.match(FlinkSqlParser.KW_USER); } } - this.state = 489; + this.state = 528; this.match(FlinkSqlParser.KW_FUNCTIONS); } break; @@ -1762,19 +1878,19 @@ export class FlinkSqlParser extends Parser { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 490; + this.state = 529; this.match(FlinkSqlParser.KW_SHOW); - this.state = 492; + this.state = 531; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_FULL) { { - this.state = 491; + this.state = 530; this.match(FlinkSqlParser.KW_FULL); } } - this.state = 494; + this.state = 533; this.match(FlinkSqlParser.KW_MODULES); } break; @@ -1801,20 +1917,20 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 497; + this.state = 536; this.match(FlinkSqlParser.KW_LOAD); - this.state = 498; + this.state = 537; this.match(FlinkSqlParser.KW_MODULE); - this.state = 499; + this.state = 538; this.uid(); - this.state = 502; + this.state = 541; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 18, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 28, this._ctx) ) { case 1: { - this.state = 500; + this.state = 539; this.match(FlinkSqlParser.KW_WITH); - this.state = 501; + this.state = 540; this.tablePropertyList(); } break; @@ -1842,11 +1958,11 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 504; + this.state = 543; this.match(FlinkSqlParser.KW_UNLOAD); - this.state = 505; + this.state = 544; this.match(FlinkSqlParser.KW_MODULE); - this.state = 506; + this.state = 545; this.uid(); } } @@ -1871,14 +1987,14 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 508; + this.state = 547; this.match(FlinkSqlParser.KW_SET); - this.state = 510; + this.state = 549; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 19, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 29, this._ctx) ) { case 1: { - this.state = 509; + this.state = 548; this.tableProperty(); } break; @@ -1906,14 +2022,14 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 512; + this.state = 551; this.match(FlinkSqlParser.KW_RESET); - this.state = 514; + this.state = 553; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 513; + this.state = 552; this.tablePropertyKey(); } break; @@ -1942,7 +2058,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 516; + this.state = 555; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ADD || _la === FlinkSqlParser.KW_REMOVE)) { this._errHandler.recoverInline(this); @@ -1954,9 +2070,9 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 517; + this.state = 556; this.match(FlinkSqlParser.KW_JAR); - this.state = 518; + this.state = 557; this.jarFileName(); } } @@ -1980,28 +2096,28 @@ export class FlinkSqlParser extends Parser { this.enterRule(_localctx, 38, FlinkSqlParser.RULE_dtAddStatement); let _la: number; try { - this.state = 560; + this.state = 599; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 34, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 520; + this.state = 559; this.match(FlinkSqlParser.KW_ADD); - this.state = 521; + this.state = 560; this.match(FlinkSqlParser.KW_JAR); - this.state = 522; + this.state = 561; this.match(FlinkSqlParser.KW_WITH); - this.state = 523; + this.state = 562; this.dtFilePath(); - this.state = 526; + this.state = 565; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 524; + this.state = 563; this.match(FlinkSqlParser.KW_AS); - this.state = 525; + this.state = 564; this.uid(); } } @@ -2012,34 +2128,34 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 528; + this.state = 567; this.match(FlinkSqlParser.KW_ADD); - this.state = 529; + this.state = 568; this.match(FlinkSqlParser.KW_FILE); - this.state = 530; + this.state = 569; this.match(FlinkSqlParser.KW_WITH); - this.state = 531; + this.state = 570; this.dtFilePath(); - this.state = 534; + this.state = 573; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 532; + this.state = 571; this.match(FlinkSqlParser.KW_AS); - this.state = 533; + this.state = 572; this.uid(); } } - this.state = 538; + this.state = 577; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_RENAME) { { - this.state = 536; + this.state = 575; this.match(FlinkSqlParser.KW_RENAME); - this.state = 537; + this.state = 576; this.uid(); } } @@ -2050,9 +2166,9 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 540; + this.state = 579; this.match(FlinkSqlParser.KW_ADD); - this.state = 541; + this.state = 580; _la = this._input.LA(1); if (!(((((_la - 108)) & ~0x1F) === 0 && ((1 << (_la - 108)) & ((1 << (FlinkSqlParser.KW_PYTHON_FILES - 108)) | (1 << (FlinkSqlParser.KW_PYTHON_REQUIREMENTS - 108)) | (1 << (FlinkSqlParser.KW_PYTHON_DEPENDENCIES - 108)) | (1 << (FlinkSqlParser.KW_PYTHON_JAR - 108)) | (1 << (FlinkSqlParser.KW_PYTHON_ARCHIVES - 108)))) !== 0))) { this._errHandler.recoverInline(this); @@ -2064,13 +2180,13 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 542; + this.state = 581; this.match(FlinkSqlParser.KW_WITH); - this.state = 543; + this.state = 582; this.dtFilePath(); - this.state = 544; + this.state = 583; this.match(FlinkSqlParser.KW_RENAME); - this.state = 545; + this.state = 584; this.uid(); } break; @@ -2078,11 +2194,11 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 547; + this.state = 586; this.match(FlinkSqlParser.KW_ADD); - this.state = 548; + this.state = 587; this.match(FlinkSqlParser.KW_PYTHON_PARAMETER); - this.state = 549; + this.state = 588; this.dtFilePath(); } break; @@ -2090,23 +2206,23 @@ export class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 550; + this.state = 589; this.match(FlinkSqlParser.KW_ADD); - this.state = 551; + this.state = 590; this.match(FlinkSqlParser.KW_ENGINE); - this.state = 552; + this.state = 591; this.match(FlinkSqlParser.KW_FILE); - this.state = 553; + this.state = 592; this.match(FlinkSqlParser.KW_WITH); - this.state = 554; + this.state = 593; this.dtFilePath(); - this.state = 555; + this.state = 594; this.match(FlinkSqlParser.KW_RENAME); - this.state = 556; + this.state = 595; this.uid(); - this.state = 557; + this.state = 596; this.match(FlinkSqlParser.KW_KEY); - this.state = 558; + this.state = 597; this.uid(); } break; @@ -2134,17 +2250,17 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 563; + this.state = 602; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 562; + this.state = 601; this.match(FlinkSqlParser.SLASH_TEXT); } } - this.state = 565; + this.state = 604; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.SLASH_TEXT); @@ -2171,19 +2287,19 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 569; + this.state = 608; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 26, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 36, this._ctx) ) { case 1: { - this.state = 567; + this.state = 606; this.simpleCreateTable(); } break; case 2: { - this.state = 568; + this.state = 607; this.createTableAsSelect(); } break; @@ -2213,120 +2329,120 @@ export class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 571; + this.state = 610; this.match(FlinkSqlParser.KW_CREATE); - this.state = 573; + this.state = 612; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_TEMPORARY) { { - this.state = 572; + this.state = 611; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 575; + this.state = 614; this.match(FlinkSqlParser.KW_TABLE); - this.state = 577; + this.state = 616; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 28, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 38, this._ctx) ) { case 1: { - this.state = 576; + this.state = 615; this.ifNotExists(); } break; } - this.state = 579; - this.sourceTable(); - this.state = 580; + this.state = 618; + this.tablePathCreate(); + this.state = 619; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 581; + this.state = 620; this.columnOptionDefinition(); - this.state = 586; + this.state = 625; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 29, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 39, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 582; + this.state = 621; this.match(FlinkSqlParser.COMMA); - this.state = 583; + this.state = 622; this.columnOptionDefinition(); } } } - this.state = 588; + this.state = 627; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 29, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 39, this._ctx); } - this.state = 591; + this.state = 630; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 30, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 40, this._ctx) ) { case 1: { - this.state = 589; + this.state = 628; this.match(FlinkSqlParser.COMMA); - this.state = 590; + this.state = 629; this.watermarkDefinition(); } break; } - this.state = 595; + this.state = 634; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 31, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 41, this._ctx) ) { case 1: { - this.state = 593; + this.state = 632; this.match(FlinkSqlParser.COMMA); - this.state = 594; + this.state = 633; this.tableConstraint(); } break; } - this.state = 599; + this.state = 638; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.COMMA) { { - this.state = 597; + this.state = 636; this.match(FlinkSqlParser.COMMA); - this.state = 598; + this.state = 637; this.selfDefinitionClause(); } } - this.state = 601; + this.state = 640; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 603; + this.state = 642; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_COMMENT) { { - this.state = 602; + this.state = 641; this.commentSpec(); } } - this.state = 606; + this.state = 645; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_PARTITIONED) { { - this.state = 605; + this.state = 644; this.partitionDefinition(); } } - this.state = 608; + this.state = 647; this.withOption(); - this.state = 610; + this.state = 649; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LIKE) { { - this.state = 609; + this.state = 648; this.likeDefinition(); } } @@ -2355,32 +2471,32 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 612; + this.state = 651; this.match(FlinkSqlParser.KW_CREATE); - this.state = 613; + this.state = 652; this.match(FlinkSqlParser.KW_TABLE); - this.state = 615; + this.state = 654; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 36, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 46, this._ctx) ) { case 1: { - this.state = 614; + this.state = 653; this.ifNotExists(); } break; } - this.state = 617; - this.sourceTable(); - this.state = 618; + this.state = 656; + this.tablePathCreate(); + this.state = 657; this.withOption(); - this.state = 621; + this.state = 660; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 619; + this.state = 658; this.match(FlinkSqlParser.KW_AS); - this.state = 620; + this.state = 659; this.queryStatement(0); } } @@ -2406,13 +2522,13 @@ export class FlinkSqlParser extends Parser { let _localctx: ColumnOptionDefinitionContext = new ColumnOptionDefinitionContext(this._ctx, this.state); this.enterRule(_localctx, 48, FlinkSqlParser.RULE_columnOptionDefinition); try { - this.state = 626; + this.state = 665; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 38, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 48, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 623; + this.state = 662; this.physicalColumnDefinition(); } break; @@ -2420,7 +2536,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 624; + this.state = 663; this.metadataColumnDefinition(); } break; @@ -2428,7 +2544,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 625; + this.state = 664; this.computedColumnDefinition(); } break; @@ -2456,26 +2572,26 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 628; + this.state = 667; this.columnName(); - this.state = 629; + this.state = 668; this.columnType(); - this.state = 631; + this.state = 670; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_CONSTRAINT || ((((_la - 298)) & ~0x1F) === 0 && ((1 << (_la - 298)) & ((1 << (FlinkSqlParser.KW_NOT - 298)) | (1 << (FlinkSqlParser.KW_NULL - 298)) | (1 << (FlinkSqlParser.KW_PRIMARY - 298)))) !== 0)) { { - this.state = 630; + this.state = 669; this.columnConstraint(); } } - this.state = 634; + this.state = 673; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_COMMENT) { { - this.state = 633; + this.state = 672; this.commentSpec(); } } @@ -2501,13 +2617,13 @@ export class FlinkSqlParser extends Parser { let _localctx: ColumnNameContext = new ColumnNameContext(this._ctx, this.state); this.enterRule(_localctx, 52, FlinkSqlParser.RULE_columnName); try { - this.state = 638; + this.state = 677; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 41, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 51, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 636; + this.state = 675; this.uid(); } break; @@ -2515,7 +2631,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 637; + this.state = 676; this.expression(); } break; @@ -2543,27 +2659,27 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 640; + this.state = 679; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 641; + this.state = 680; this.columnName(); - this.state = 646; + this.state = 685; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 642; + this.state = 681; this.match(FlinkSqlParser.COMMA); - this.state = 643; + this.state = 682; this.columnName(); } } - this.state = 648; + this.state = 687; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 649; + this.state = 688; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2587,7 +2703,7 @@ export class FlinkSqlParser extends Parser { this.enterRule(_localctx, 56, FlinkSqlParser.RULE_columnType); let _la: number; try { - this.state = 688; + this.state = 727; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_BOOLEAN: @@ -2595,7 +2711,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_NULL: this.enterOuterAlt(_localctx, 1); { - this.state = 651; + this.state = 690; _localctx._typeName = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_BOOLEAN || _la === FlinkSqlParser.KW_DATE || _la === FlinkSqlParser.KW_NULL)) { @@ -2626,7 +2742,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_VARCHAR: this.enterOuterAlt(_localctx, 2); { - this.state = 652; + this.state = 691; _localctx._typeName = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_BYTES || _la === FlinkSqlParser.KW_STRING || _la === FlinkSqlParser.KW_TIMESTAMP_LTZ || ((((_la - 191)) & ~0x1F) === 0 && ((1 << (_la - 191)) & ((1 << (FlinkSqlParser.KW_BIGINT - 191)) | (1 << (FlinkSqlParser.KW_BINARY - 191)) | (1 << (FlinkSqlParser.KW_CHAR - 191)))) !== 0) || _la === FlinkSqlParser.KW_DATETIME || _la === FlinkSqlParser.KW_INT || _la === FlinkSqlParser.KW_INTEGER || ((((_la - 335)) & ~0x1F) === 0 && ((1 << (_la - 335)) & ((1 << (FlinkSqlParser.KW_SMALLINT - 335)) | (1 << (FlinkSqlParser.KW_TIME - 335)) | (1 << (FlinkSqlParser.KW_TINYINT - 335)) | (1 << (FlinkSqlParser.KW_VARBINARY - 335)) | (1 << (FlinkSqlParser.KW_VARCHAR - 335)))) !== 0))) { @@ -2639,12 +2755,12 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 654; + this.state = 693; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 653; + this.state = 692; this.lengthOneDimension(); } } @@ -2654,24 +2770,24 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_TIMESTAMP: this.enterOuterAlt(_localctx, 3); { - this.state = 656; + this.state = 695; _localctx._typeName = this.match(FlinkSqlParser.KW_TIMESTAMP); - this.state = 658; + this.state = 697; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 657; + this.state = 696; this.lengthOneDimension(); } } - this.state = 666; + this.state = 705; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_WITH || _la === FlinkSqlParser.KW_WITHOUT) { { - this.state = 660; + this.state = 699; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_WITH || _la === FlinkSqlParser.KW_WITHOUT)) { this._errHandler.recoverInline(this); @@ -2683,19 +2799,19 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 662; + this.state = 701; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LOCAL) { { - this.state = 661; + this.state = 700; this.match(FlinkSqlParser.KW_LOCAL); } } - this.state = 664; + this.state = 703; this.match(FlinkSqlParser.KW_TIME); - this.state = 665; + this.state = 704; this.match(FlinkSqlParser.KW_ZONE); } } @@ -2709,7 +2825,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_NUMERIC: this.enterOuterAlt(_localctx, 4); { - this.state = 668; + this.state = 707; _localctx._typeName = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 228)) & ~0x1F) === 0 && ((1 << (_la - 228)) & ((1 << (FlinkSqlParser.KW_DEC - 228)) | (1 << (FlinkSqlParser.KW_DECIMAL - 228)) | (1 << (FlinkSqlParser.KW_DOUBLE - 228)) | (1 << (FlinkSqlParser.KW_FLOAT - 228)))) !== 0) || _la === FlinkSqlParser.KW_NUMERIC)) { @@ -2722,12 +2838,12 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 670; + this.state = 709; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 669; + this.state = 708; this.lengthTwoOptionalDimension(); } } @@ -2738,7 +2854,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_MULTISET: this.enterOuterAlt(_localctx, 5); { - this.state = 672; + this.state = 711; _localctx._type = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ARRAY || _la === FlinkSqlParser.KW_MULTISET)) { @@ -2751,12 +2867,12 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 674; + this.state = 713; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LESS_SYMBOL) { { - this.state = 673; + this.state = 712; this.lengthOneTypeDimension(); } } @@ -2766,14 +2882,14 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_MAP: this.enterOuterAlt(_localctx, 6); { - this.state = 676; + this.state = 715; _localctx._type = this.match(FlinkSqlParser.KW_MAP); - this.state = 678; + this.state = 717; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LESS_SYMBOL) { { - this.state = 677; + this.state = 716; this.mapTypeDimension(); } } @@ -2783,14 +2899,14 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_ROW: this.enterOuterAlt(_localctx, 7); { - this.state = 680; + this.state = 719; _localctx._type = this.match(FlinkSqlParser.KW_ROW); - this.state = 682; + this.state = 721; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LESS_SYMBOL) { { - this.state = 681; + this.state = 720; this.rowTypeDimension(); } } @@ -2800,14 +2916,14 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_RAW: this.enterOuterAlt(_localctx, 8); { - this.state = 684; + this.state = 723; _localctx._type = this.match(FlinkSqlParser.KW_RAW); - this.state = 686; + this.state = 725; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 685; + this.state = 724; this.lengthTwoStringDimension(); } } @@ -2839,11 +2955,11 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 690; + this.state = 729; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 691; + this.state = 730; this.decimalLiteral(); - this.state = 692; + this.state = 731; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2869,23 +2985,23 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 694; + this.state = 733; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 695; + this.state = 734; this.decimalLiteral(); - this.state = 698; + this.state = 737; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.COMMA) { { - this.state = 696; + this.state = 735; this.match(FlinkSqlParser.COMMA); - this.state = 697; + this.state = 736; this.decimalLiteral(); } } - this.state = 700; + this.state = 739; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2911,23 +3027,23 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 702; + this.state = 741; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 703; + this.state = 742; this.stringLiteral(); - this.state = 706; + this.state = 745; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.COMMA) { { - this.state = 704; + this.state = 743; this.match(FlinkSqlParser.COMMA); - this.state = 705; + this.state = 744; this.stringLiteral(); } } - this.state = 708; + this.state = 747; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2952,11 +3068,11 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 710; + this.state = 749; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 711; + this.state = 750; this.columnType(); - this.state = 712; + this.state = 751; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -2981,17 +3097,17 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 714; + this.state = 753; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 715; + this.state = 754; this.columnType(); { - this.state = 716; + this.state = 755; this.match(FlinkSqlParser.COMMA); - this.state = 717; + this.state = 756; this.columnType(); } - this.state = 719; + this.state = 758; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3017,31 +3133,31 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 721; + this.state = 760; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 722; + this.state = 761; this.columnName(); - this.state = 723; + this.state = 762; this.columnType(); - this.state = 730; + this.state = 769; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 724; + this.state = 763; this.match(FlinkSqlParser.COMMA); - this.state = 725; + this.state = 764; this.columnName(); - this.state = 726; + this.state = 765; this.columnType(); } } - this.state = 732; + this.state = 771; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 733; + this.state = 772; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3065,37 +3181,37 @@ export class FlinkSqlParser extends Parser { this.enterRule(_localctx, 70, FlinkSqlParser.RULE_columnConstraint); let _la: number; try { - this.state = 749; + this.state = 788; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_CONSTRAINT: case FlinkSqlParser.KW_PRIMARY: this.enterOuterAlt(_localctx, 1); { - this.state = 737; + this.state = 776; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_CONSTRAINT) { { - this.state = 735; + this.state = 774; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 736; + this.state = 775; this.constraintName(); } } - this.state = 739; + this.state = 778; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 740; + this.state = 779; this.match(FlinkSqlParser.KW_KEY); - this.state = 743; + this.state = 782; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 741; + this.state = 780; this.match(FlinkSqlParser.KW_NOT); - this.state = 742; + this.state = 781; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -3106,17 +3222,17 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_NULL: this.enterOuterAlt(_localctx, 2); { - this.state = 746; + this.state = 785; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 745; + this.state = 784; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 748; + this.state = 787; this.match(FlinkSqlParser.KW_NULL); } break; @@ -3145,9 +3261,9 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 751; + this.state = 790; this.match(FlinkSqlParser.KW_COMMENT); - this.state = 752; + this.state = 791; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3173,30 +3289,30 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 754; + this.state = 793; this.columnName(); - this.state = 755; + this.state = 794; this.columnType(); - this.state = 756; + this.state = 795; this.match(FlinkSqlParser.KW_METADATA); - this.state = 759; + this.state = 798; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_FROM) { { - this.state = 757; + this.state = 796; this.match(FlinkSqlParser.KW_FROM); - this.state = 758; + this.state = 797; this.metadataKey(); } } - this.state = 762; + this.state = 801; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_VIRTUAL) { { - this.state = 761; + this.state = 800; this.match(FlinkSqlParser.KW_VIRTUAL); } } @@ -3224,7 +3340,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 764; + this.state = 803; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3250,18 +3366,18 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 766; + this.state = 805; this.columnName(); - this.state = 767; + this.state = 806; this.match(FlinkSqlParser.KW_AS); - this.state = 768; + this.state = 807; this.computedColumnExpression(); - this.state = 770; + this.state = 809; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_COMMENT) { { - this.state = 769; + this.state = 808; this.commentSpec(); } } @@ -3289,7 +3405,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 772; + this.state = 811; this.expression(); } } @@ -3314,15 +3430,15 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 774; + this.state = 813; this.match(FlinkSqlParser.KW_WATERMARK); - this.state = 775; + this.state = 814; this.match(FlinkSqlParser.KW_FOR); - this.state = 776; + this.state = 815; this.expression(); - this.state = 777; + this.state = 816; this.match(FlinkSqlParser.KW_AS); - this.state = 778; + this.state = 817; this.expression(); } } @@ -3348,27 +3464,27 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 782; + this.state = 821; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_CONSTRAINT) { { - this.state = 780; + this.state = 819; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 781; + this.state = 820; this.constraintName(); } } - this.state = 784; + this.state = 823; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 785; + this.state = 824; this.match(FlinkSqlParser.KW_KEY); - this.state = 786; + this.state = 825; this.columnNameList(); - this.state = 787; + this.state = 826; this.match(FlinkSqlParser.KW_NOT); - this.state = 788; + this.state = 827; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -3393,7 +3509,7 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 790; + this.state = 829; this.identifier(); } } @@ -3418,11 +3534,11 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 792; + this.state = 831; this.match(FlinkSqlParser.KW_PERIOD); - this.state = 793; + this.state = 832; this.match(FlinkSqlParser.KW_FOR); - this.state = 794; + this.state = 833; this.match(FlinkSqlParser.KW_SYSTEM_TIME); } } @@ -3447,11 +3563,11 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 796; + this.state = 835; this.match(FlinkSqlParser.KW_PARTITIONED); - this.state = 797; + this.state = 836; this.match(FlinkSqlParser.KW_BY); - this.state = 798; + this.state = 837; this.transformList(); } } @@ -3477,27 +3593,27 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 800; + this.state = 839; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 801; + this.state = 840; this.transform(); - this.state = 806; + this.state = 845; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 802; + this.state = 841; this.match(FlinkSqlParser.COMMA); - this.state = 803; + this.state = 842; this.transform(); } } - this.state = 808; + this.state = 847; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 809; + this.state = 848; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3521,14 +3637,14 @@ export class FlinkSqlParser extends Parser { this.enterRule(_localctx, 94, FlinkSqlParser.RULE_transform); let _la: number; try { - this.state = 824; + this.state = 863; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 66, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 76, this._ctx) ) { case 1: _localctx = new IdentityTransformContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 811; + this.state = 850; this.qualifiedName(); } break; @@ -3537,29 +3653,29 @@ export class FlinkSqlParser extends Parser { _localctx = new ApplyTransformContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 812; + this.state = 851; (_localctx as ApplyTransformContext)._transformName = this.identifier(); - this.state = 813; + this.state = 852; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 814; + this.state = 853; this.transformArgument(); - this.state = 819; + this.state = 858; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 815; + this.state = 854; this.match(FlinkSqlParser.COMMA); - this.state = 816; + this.state = 855; this.transformArgument(); } } - this.state = 821; + this.state = 860; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 822; + this.state = 861; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3584,13 +3700,13 @@ export class FlinkSqlParser extends Parser { let _localctx: TransformArgumentContext = new TransformArgumentContext(this._ctx, this.state); this.enterRule(_localctx, 96, FlinkSqlParser.RULE_transformArgument); try { - this.state = 828; + this.state = 867; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 67, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 77, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 826; + this.state = 865; this.qualifiedName(); } break; @@ -3598,7 +3714,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 827; + this.state = 866; this.constant(); } break; @@ -3626,32 +3742,32 @@ export class FlinkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 830; + this.state = 869; this.match(FlinkSqlParser.KW_LIKE); - this.state = 831; - this.sourceTable(); - this.state = 840; + this.state = 870; + this.tablePath(); + this.state = 879; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 69, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 79, this._ctx) ) { case 1: { - this.state = 832; + this.state = 871; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 836; + this.state = 875; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.KW_EXCLUDING || _la === FlinkSqlParser.KW_OVERWRITING || _la === FlinkSqlParser.KW_INCLUDING) { { { - this.state = 833; + this.state = 872; this.likeOption(); } } - this.state = 838; + this.state = 877; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 839; + this.state = 878; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3673,44 +3789,19 @@ export class FlinkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public sourceTable(): SourceTableContext { - let _localctx: SourceTableContext = new SourceTableContext(this._ctx, this.state); - this.enterRule(_localctx, 100, FlinkSqlParser.RULE_sourceTable); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 842; - this.uid(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) public likeOption(): LikeOptionContext { let _localctx: LikeOptionContext = new LikeOptionContext(this._ctx, this.state); - this.enterRule(_localctx, 102, FlinkSqlParser.RULE_likeOption); + this.enterRule(_localctx, 100, FlinkSqlParser.RULE_likeOption); let _la: number; try { - this.state = 848; + this.state = 885; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 70, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 80, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { { - this.state = 844; + this.state = 881; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_EXCLUDING || _la === FlinkSqlParser.KW_INCLUDING)) { this._errHandler.recoverInline(this); @@ -3722,7 +3813,7 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 845; + this.state = 882; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CONSTRAINTS || _la === FlinkSqlParser.KW_PARTITIONS || _la === FlinkSqlParser.KW_ALL)) { this._errHandler.recoverInline(this); @@ -3742,7 +3833,7 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 2); { { - this.state = 846; + this.state = 883; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_EXCLUDING || _la === FlinkSqlParser.KW_OVERWRITING || _la === FlinkSqlParser.KW_INCLUDING)) { this._errHandler.recoverInline(this); @@ -3754,7 +3845,7 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 847; + this.state = 884; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_GENERATED || _la === FlinkSqlParser.KW_OPTIONS || _la === FlinkSqlParser.KW_WATERMARKS)) { this._errHandler.recoverInline(this); @@ -3788,17 +3879,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public createCatalog(): CreateCatalogContext { let _localctx: CreateCatalogContext = new CreateCatalogContext(this._ctx, this.state); - this.enterRule(_localctx, 104, FlinkSqlParser.RULE_createCatalog); + this.enterRule(_localctx, 102, FlinkSqlParser.RULE_createCatalog); try { this.enterOuterAlt(_localctx, 1); { - this.state = 850; + this.state = 887; this.match(FlinkSqlParser.KW_CREATE); - this.state = 851; + this.state = 888; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 852; + this.state = 889; this.uid(); - this.state = 853; + this.state = 890; this.withOption(); } } @@ -3819,38 +3910,38 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public createDatabase(): CreateDatabaseContext { let _localctx: CreateDatabaseContext = new CreateDatabaseContext(this._ctx, this.state); - this.enterRule(_localctx, 106, FlinkSqlParser.RULE_createDatabase); + this.enterRule(_localctx, 104, FlinkSqlParser.RULE_createDatabase); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 855; + this.state = 892; this.match(FlinkSqlParser.KW_CREATE); - this.state = 856; + this.state = 893; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 858; + this.state = 895; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 71, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 81, this._ctx) ) { case 1: { - this.state = 857; + this.state = 894; this.ifNotExists(); } break; } - this.state = 860; - this.uid(); - this.state = 862; + this.state = 897; + this.databasePathCreate(); + this.state = 899; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_COMMENT) { { - this.state = 861; + this.state = 898; this.commentSpec(); } } - this.state = 864; + this.state = 901; this.withOption(); } } @@ -3871,60 +3962,60 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public createView(): CreateViewContext { let _localctx: CreateViewContext = new CreateViewContext(this._ctx, this.state); - this.enterRule(_localctx, 108, FlinkSqlParser.RULE_createView); + this.enterRule(_localctx, 106, FlinkSqlParser.RULE_createView); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 866; + this.state = 903; this.match(FlinkSqlParser.KW_CREATE); - this.state = 868; + this.state = 905; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_TEMPORARY) { { - this.state = 867; + this.state = 904; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 870; + this.state = 907; this.match(FlinkSqlParser.KW_VIEW); - this.state = 872; + this.state = 909; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 74, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 84, this._ctx) ) { case 1: { - this.state = 871; + this.state = 908; this.ifNotExists(); } break; } - this.state = 874; + this.state = 911; this.uid(); - this.state = 876; + this.state = 913; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 875; + this.state = 912; this.columnNameList(); } } - this.state = 879; + this.state = 916; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_COMMENT) { { - this.state = 878; + this.state = 915; this.commentSpec(); } } - this.state = 881; + this.state = 918; this.match(FlinkSqlParser.KW_AS); - this.state = 882; + this.state = 919; this.queryStatement(0); } } @@ -3945,58 +4036,58 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public createFunction(): CreateFunctionContext { let _localctx: CreateFunctionContext = new CreateFunctionContext(this._ctx, this.state); - this.enterRule(_localctx, 110, FlinkSqlParser.RULE_createFunction); + this.enterRule(_localctx, 108, FlinkSqlParser.RULE_createFunction); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 884; + this.state = 921; this.match(FlinkSqlParser.KW_CREATE); - this.state = 888; + this.state = 925; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 77, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 87, this._ctx) ) { case 1: { - this.state = 885; + this.state = 922; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 886; + this.state = 923; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 887; + this.state = 924; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 890; + this.state = 927; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 892; + this.state = 929; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 78, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 88, this._ctx) ) { case 1: { - this.state = 891; + this.state = 928; this.ifNotExists(); } break; } - this.state = 894; - this.uid(); - this.state = 895; + this.state = 931; + this.functionName(); + this.state = 932; this.match(FlinkSqlParser.KW_AS); - this.state = 896; + this.state = 933; this.identifier(); - this.state = 899; + this.state = 936; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LANGUAGE) { { - this.state = 897; + this.state = 934; this.match(FlinkSqlParser.KW_LANGUAGE); - this.state = 898; + this.state = 935; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_JAVA || _la === FlinkSqlParser.KW_PYTHON || _la === FlinkSqlParser.KW_SCALA)) { this._errHandler.recoverInline(this); @@ -4011,12 +4102,12 @@ export class FlinkSqlParser extends Parser { } } - this.state = 902; + this.state = 939; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_USING) { { - this.state = 901; + this.state = 938; this.usingClause(); } } @@ -4040,32 +4131,32 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public usingClause(): UsingClauseContext { let _localctx: UsingClauseContext = new UsingClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 112, FlinkSqlParser.RULE_usingClause); + this.enterRule(_localctx, 110, FlinkSqlParser.RULE_usingClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 904; + this.state = 941; this.match(FlinkSqlParser.KW_USING); - this.state = 905; + this.state = 942; this.match(FlinkSqlParser.KW_JAR); - this.state = 906; + this.state = 943; this.jarFileName(); - this.state = 912; + this.state = 949; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 907; + this.state = 944; this.match(FlinkSqlParser.COMMA); - this.state = 908; + this.state = 945; this.match(FlinkSqlParser.KW_JAR); - this.state = 909; + this.state = 946; this.jarFileName(); } } - this.state = 914; + this.state = 951; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4088,11 +4179,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public jarFileName(): JarFileNameContext { let _localctx: JarFileNameContext = new JarFileNameContext(this._ctx, this.state); - this.enterRule(_localctx, 114, FlinkSqlParser.RULE_jarFileName); + this.enterRule(_localctx, 112, FlinkSqlParser.RULE_jarFileName); try { this.enterOuterAlt(_localctx, 1); { - this.state = 915; + this.state = 952; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -4113,60 +4204,60 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public alterTable(): AlterTableContext { let _localctx: AlterTableContext = new AlterTableContext(this._ctx, this.state); - this.enterRule(_localctx, 116, FlinkSqlParser.RULE_alterTable); + this.enterRule(_localctx, 114, FlinkSqlParser.RULE_alterTable); try { this.enterOuterAlt(_localctx, 1); { - this.state = 917; + this.state = 954; this.match(FlinkSqlParser.KW_ALTER); - this.state = 918; + this.state = 955; this.match(FlinkSqlParser.KW_TABLE); - this.state = 920; + this.state = 957; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 82, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 92, this._ctx) ) { case 1: { - this.state = 919; + this.state = 956; this.ifExists(); } break; } - this.state = 922; - this.uid(); - this.state = 928; + this.state = 959; + this.tablePath(); + this.state = 965; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 83, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 93, this._ctx) ) { case 1: { - this.state = 923; + this.state = 960; this.renameDefinition(); } break; case 2: { - this.state = 924; + this.state = 961; this.setKeyValueDefinition(); } break; case 3: { - this.state = 925; + this.state = 962; this.addConstraint(); } break; case 4: { - this.state = 926; + this.state = 963; this.dropConstraint(); } break; case 5: { - this.state = 927; + this.state = 964; this.addUnique(); } break; @@ -4190,26 +4281,26 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public renameDefinition(): RenameDefinitionContext { let _localctx: RenameDefinitionContext = new RenameDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 118, FlinkSqlParser.RULE_renameDefinition); + this.enterRule(_localctx, 116, FlinkSqlParser.RULE_renameDefinition); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 930; + this.state = 967; this.match(FlinkSqlParser.KW_RENAME); - this.state = 932; + this.state = 969; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << FlinkSqlParser.KW_ADD) | (1 << FlinkSqlParser.KW_ADMIN) | (1 << FlinkSqlParser.KW_AFTER) | (1 << FlinkSqlParser.KW_ANALYZE) | (1 << FlinkSqlParser.KW_ASC) | (1 << FlinkSqlParser.KW_BEFORE) | (1 << FlinkSqlParser.KW_BYTES) | (1 << FlinkSqlParser.KW_CASCADE) | (1 << FlinkSqlParser.KW_CATALOG) | (1 << FlinkSqlParser.KW_CATALOGS) | (1 << FlinkSqlParser.KW_CENTURY) | (1 << FlinkSqlParser.KW_CHAIN) | (1 << FlinkSqlParser.KW_CHANGELOG_MODE) | (1 << FlinkSqlParser.KW_CHARACTERS) | (1 << FlinkSqlParser.KW_COMMENT) | (1 << FlinkSqlParser.KW_COMPACT) | (1 << FlinkSqlParser.KW_COLUMNS) | (1 << FlinkSqlParser.KW_CONSTRAINTS) | (1 << FlinkSqlParser.KW_CONSTRUCTOR) | (1 << FlinkSqlParser.KW_CUMULATE) | (1 << FlinkSqlParser.KW_DATA) | (1 << FlinkSqlParser.KW_DATABASE) | (1 << FlinkSqlParser.KW_DATABASES) | (1 << FlinkSqlParser.KW_DAYS) | (1 << FlinkSqlParser.KW_DECADE) | (1 << FlinkSqlParser.KW_DEFINED) | (1 << FlinkSqlParser.KW_DESC) | (1 << FlinkSqlParser.KW_DESCRIPTOR))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.KW_DIV - 32)) | (1 << (FlinkSqlParser.KW_ENCODING - 32)) | (1 << (FlinkSqlParser.KW_ENFORCED - 32)) | (1 << (FlinkSqlParser.KW_ENGINE - 32)) | (1 << (FlinkSqlParser.KW_ERROR - 32)) | (1 << (FlinkSqlParser.KW_ESTIMATED_COST - 32)) | (1 << (FlinkSqlParser.KW_EXCEPTION - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDE - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDING - 32)) | (1 << (FlinkSqlParser.KW_EXTENDED - 32)) | (1 << (FlinkSqlParser.KW_FILE - 32)) | (1 << (FlinkSqlParser.KW_FINAL - 32)) | (1 << (FlinkSqlParser.KW_FIRST - 32)) | (1 << (FlinkSqlParser.KW_FOLLOWING - 32)) | (1 << (FlinkSqlParser.KW_FORMAT - 32)) | (1 << (FlinkSqlParser.KW_FORTRAN - 32)) | (1 << (FlinkSqlParser.KW_FOUND - 32)) | (1 << (FlinkSqlParser.KW_FRAC_SECOND - 32)) | (1 << (FlinkSqlParser.KW_FUNCTIONS - 32)) | (1 << (FlinkSqlParser.KW_GENERAL - 32)) | (1 << (FlinkSqlParser.KW_GENERATED - 32)) | (1 << (FlinkSqlParser.KW_GO - 32)) | (1 << (FlinkSqlParser.KW_GOTO - 32)) | (1 << (FlinkSqlParser.KW_GRANTED - 32)) | (1 << (FlinkSqlParser.KW_HOP - 32)) | (1 << (FlinkSqlParser.KW_HOURS - 32)) | (1 << (FlinkSqlParser.KW_IF - 32)) | (1 << (FlinkSqlParser.KW_IGNORE - 32)) | (1 << (FlinkSqlParser.KW_INCREMENT - 32)) | (1 << (FlinkSqlParser.KW_INPUT - 32)) | (1 << (FlinkSqlParser.KW_INVOKER - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.KW_JAR - 64)) | (1 << (FlinkSqlParser.KW_JARS - 64)) | (1 << (FlinkSqlParser.KW_JAVA - 64)) | (1 << (FlinkSqlParser.KW_JSON - 64)) | (1 << (FlinkSqlParser.KW_JSON_EXECUTION_PLAN - 64)) | (1 << (FlinkSqlParser.KW_KEY - 64)) | (1 << (FlinkSqlParser.KW_KEY_MEMBER - 64)) | (1 << (FlinkSqlParser.KW_KEY_TYPE - 64)) | (1 << (FlinkSqlParser.KW_LABEL - 64)) | (1 << (FlinkSqlParser.KW_LAST - 64)) | (1 << (FlinkSqlParser.KW_LENGTH - 64)) | (1 << (FlinkSqlParser.KW_LEVEL - 64)) | (1 << (FlinkSqlParser.KW_LOAD - 64)) | (1 << (FlinkSqlParser.KW_MAP - 64)) | (1 << (FlinkSqlParser.KW_MICROSECOND - 64)) | (1 << (FlinkSqlParser.KW_MILLENNIUM - 64)) | (1 << (FlinkSqlParser.KW_MILLISECOND - 64)) | (1 << (FlinkSqlParser.KW_MINUTES - 64)) | (1 << (FlinkSqlParser.KW_MINVALUE - 64)) | (1 << (FlinkSqlParser.KW_MODIFY - 64)) | (1 << (FlinkSqlParser.KW_MODULES - 64)) | (1 << (FlinkSqlParser.KW_MONTHS - 64)) | (1 << (FlinkSqlParser.KW_NANOSECOND - 64)) | (1 << (FlinkSqlParser.KW_NULLS - 64)) | (1 << (FlinkSqlParser.KW_NUMBER - 64)) | (1 << (FlinkSqlParser.KW_OPTION - 64)) | (1 << (FlinkSqlParser.KW_OPTIONS - 64)) | (1 << (FlinkSqlParser.KW_ORDERING - 64)) | (1 << (FlinkSqlParser.KW_OUTPUT - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITE - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITING - 64)) | (1 << (FlinkSqlParser.KW_PARTITIONED - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (FlinkSqlParser.KW_PARTITIONS - 96)) | (1 << (FlinkSqlParser.KW_PASSING - 96)) | (1 << (FlinkSqlParser.KW_PAST - 96)) | (1 << (FlinkSqlParser.KW_PATH - 96)) | (1 << (FlinkSqlParser.KW_PLACING - 96)) | (1 << (FlinkSqlParser.KW_PLAN - 96)) | (1 << (FlinkSqlParser.KW_PRECEDING - 96)) | (1 << (FlinkSqlParser.KW_PRESERVE - 96)) | (1 << (FlinkSqlParser.KW_PRIOR - 96)) | (1 << (FlinkSqlParser.KW_PRIVILEGES - 96)) | (1 << (FlinkSqlParser.KW_PUBLIC - 96)) | (1 << (FlinkSqlParser.KW_PYTHON - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_FILES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_REQUIREMENTS - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_DEPENDENCIES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_JAR - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_ARCHIVES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_PARAMETER - 96)) | (1 << (FlinkSqlParser.KW_QUARTER - 96)) | (1 << (FlinkSqlParser.KW_RAW - 96)) | (1 << (FlinkSqlParser.KW_READ - 96)) | (1 << (FlinkSqlParser.KW_RELATIVE - 96)) | (1 << (FlinkSqlParser.KW_REMOVE - 96)) | (1 << (FlinkSqlParser.KW_RENAME - 96)) | (1 << (FlinkSqlParser.KW_REPLACE - 96)) | (1 << (FlinkSqlParser.KW_RESPECT - 96)) | (1 << (FlinkSqlParser.KW_RESTART - 96)) | (1 << (FlinkSqlParser.KW_RESTRICT - 96)) | (1 << (FlinkSqlParser.KW_ROLE - 96)) | (1 << (FlinkSqlParser.KW_ROW_COUNT - 96)) | (1 << (FlinkSqlParser.KW_SCALA - 96)) | (1 << (FlinkSqlParser.KW_SCALAR - 96)))) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & ((1 << (FlinkSqlParser.KW_SCALE - 128)) | (1 << (FlinkSqlParser.KW_SCHEMA - 128)) | (1 << (FlinkSqlParser.KW_SECONDS - 128)) | (1 << (FlinkSqlParser.KW_SECTION - 128)) | (1 << (FlinkSqlParser.KW_SECURITY - 128)) | (1 << (FlinkSqlParser.KW_SELF - 128)) | (1 << (FlinkSqlParser.KW_SERVER - 128)) | (1 << (FlinkSqlParser.KW_SERVER_NAME - 128)) | (1 << (FlinkSqlParser.KW_SESSION - 128)) | (1 << (FlinkSqlParser.KW_SETS - 128)) | (1 << (FlinkSqlParser.KW_SIMPLE - 128)) | (1 << (FlinkSqlParser.KW_SIZE - 128)) | (1 << (FlinkSqlParser.KW_SLIDE - 128)) | (1 << (FlinkSqlParser.KW_SOURCE - 128)) | (1 << (FlinkSqlParser.KW_SPACE - 128)) | (1 << (FlinkSqlParser.KW_STATE - 128)) | (1 << (FlinkSqlParser.KW_STATEMENT - 128)) | (1 << (FlinkSqlParser.KW_STEP - 128)) | (1 << (FlinkSqlParser.KW_STRING - 128)) | (1 << (FlinkSqlParser.KW_STRUCTURE - 128)) | (1 << (FlinkSqlParser.KW_STYLE - 128)) | (1 << (FlinkSqlParser.KW_TABLES - 128)) | (1 << (FlinkSqlParser.KW_TEMPORARY - 128)) | (1 << (FlinkSqlParser.KW_TIMECOL - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMP_LTZ - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPADD - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPDIFF - 128)) | (1 << (FlinkSqlParser.KW_TRANSFORM - 128)) | (1 << (FlinkSqlParser.KW_TUMBLE - 128)) | (1 << (FlinkSqlParser.KW_TYPE - 128)) | (1 << (FlinkSqlParser.KW_UNDER - 128)) | (1 << (FlinkSqlParser.KW_UNLOAD - 128)))) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & ((1 << (FlinkSqlParser.KW_USAGE - 160)) | (1 << (FlinkSqlParser.KW_USE - 160)) | (1 << (FlinkSqlParser.KW_UTF16 - 160)) | (1 << (FlinkSqlParser.KW_UTF32 - 160)) | (1 << (FlinkSqlParser.KW_UTF8 - 160)) | (1 << (FlinkSqlParser.KW_VERSION - 160)) | (1 << (FlinkSqlParser.KW_VIEW - 160)) | (1 << (FlinkSqlParser.KW_VIEWS - 160)) | (1 << (FlinkSqlParser.KW_VIRTUAL - 160)) | (1 << (FlinkSqlParser.KW_WATERMARK - 160)) | (1 << (FlinkSqlParser.KW_WATERMARKS - 160)) | (1 << (FlinkSqlParser.KW_WEEK - 160)) | (1 << (FlinkSqlParser.KW_WORK - 160)) | (1 << (FlinkSqlParser.KW_WRAPPER - 160)) | (1 << (FlinkSqlParser.KW_YEARS - 160)) | (1 << (FlinkSqlParser.KW_ZONE - 160)))) !== 0) || ((((_la - 405)) & ~0x1F) === 0 && ((1 << (_la - 405)) & ((1 << (FlinkSqlParser.STRING_LITERAL - 405)) | (1 << (FlinkSqlParser.DIG_LITERAL - 405)) | (1 << (FlinkSqlParser.ID_LITERAL - 405)))) !== 0)) { { - this.state = 931; + this.state = 968; this.uid(); } } - this.state = 934; + this.state = 971; this.match(FlinkSqlParser.KW_TO); - this.state = 935; + this.state = 972; this.uid(); } } @@ -4230,13 +4321,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public setKeyValueDefinition(): SetKeyValueDefinitionContext { let _localctx: SetKeyValueDefinitionContext = new SetKeyValueDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 120, FlinkSqlParser.RULE_setKeyValueDefinition); + this.enterRule(_localctx, 118, FlinkSqlParser.RULE_setKeyValueDefinition); try { this.enterOuterAlt(_localctx, 1); { - this.state = 937; + this.state = 974; this.match(FlinkSqlParser.KW_SET); - this.state = 938; + this.state = 975; this.tablePropertyList(); } } @@ -4257,29 +4348,29 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public addConstraint(): AddConstraintContext { let _localctx: AddConstraintContext = new AddConstraintContext(this._ctx, this.state); - this.enterRule(_localctx, 122, FlinkSqlParser.RULE_addConstraint); + this.enterRule(_localctx, 120, FlinkSqlParser.RULE_addConstraint); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 940; + this.state = 977; this.match(FlinkSqlParser.KW_ADD); - this.state = 941; + this.state = 978; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 942; + this.state = 979; this.constraintName(); - this.state = 943; + this.state = 980; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 944; + this.state = 981; this.match(FlinkSqlParser.KW_KEY); - this.state = 945; + this.state = 982; this.columnNameList(); - this.state = 947; + this.state = 984; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 946; + this.state = 983; this.notForced(); } } @@ -4303,15 +4394,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dropConstraint(): DropConstraintContext { let _localctx: DropConstraintContext = new DropConstraintContext(this._ctx, this.state); - this.enterRule(_localctx, 124, FlinkSqlParser.RULE_dropConstraint); + this.enterRule(_localctx, 122, FlinkSqlParser.RULE_dropConstraint); try { this.enterOuterAlt(_localctx, 1); { - this.state = 949; + this.state = 986; this.match(FlinkSqlParser.KW_DROP); - this.state = 950; + this.state = 987; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 951; + this.state = 988; this.constraintName(); } } @@ -4332,15 +4423,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public addUnique(): AddUniqueContext { let _localctx: AddUniqueContext = new AddUniqueContext(this._ctx, this.state); - this.enterRule(_localctx, 126, FlinkSqlParser.RULE_addUnique); + this.enterRule(_localctx, 124, FlinkSqlParser.RULE_addUnique); try { this.enterOuterAlt(_localctx, 1); { - this.state = 953; + this.state = 990; this.match(FlinkSqlParser.KW_ADD); - this.state = 954; + this.state = 991; this.match(FlinkSqlParser.KW_UNIQUE); - this.state = 955; + this.state = 992; this.columnNameList(); } } @@ -4361,13 +4452,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public notForced(): NotForcedContext { let _localctx: NotForcedContext = new NotForcedContext(this._ctx, this.state); - this.enterRule(_localctx, 128, FlinkSqlParser.RULE_notForced); + this.enterRule(_localctx, 126, FlinkSqlParser.RULE_notForced); try { this.enterOuterAlt(_localctx, 1); { - this.state = 957; + this.state = 994; this.match(FlinkSqlParser.KW_NOT); - this.state = 958; + this.state = 995; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -4388,30 +4479,30 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public alertView(): AlertViewContext { let _localctx: AlertViewContext = new AlertViewContext(this._ctx, this.state); - this.enterRule(_localctx, 130, FlinkSqlParser.RULE_alertView); + this.enterRule(_localctx, 128, FlinkSqlParser.RULE_alertView); try { this.enterOuterAlt(_localctx, 1); { - this.state = 960; + this.state = 997; this.match(FlinkSqlParser.KW_ALTER); - this.state = 961; + this.state = 998; this.match(FlinkSqlParser.KW_VIEW); - this.state = 962; + this.state = 999; this.uid(); - this.state = 966; + this.state = 1003; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_RENAME: { - this.state = 963; + this.state = 1000; this.renameDefinition(); } break; case FlinkSqlParser.KW_AS: { - this.state = 964; + this.state = 1001; this.match(FlinkSqlParser.KW_AS); - this.state = 965; + this.state = 1002; this.queryStatement(0); } break; @@ -4437,17 +4528,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public alterDatabase(): AlterDatabaseContext { let _localctx: AlterDatabaseContext = new AlterDatabaseContext(this._ctx, this.state); - this.enterRule(_localctx, 132, FlinkSqlParser.RULE_alterDatabase); + this.enterRule(_localctx, 130, FlinkSqlParser.RULE_alterDatabase); try { this.enterOuterAlt(_localctx, 1); { - this.state = 968; + this.state = 1005; this.match(FlinkSqlParser.KW_ALTER); - this.state = 969; + this.state = 1006; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 970; - this.uid(); - this.state = 971; + this.state = 1007; + this.databasePath(); + this.state = 1008; this.setKeyValueDefinition(); } } @@ -4468,58 +4559,58 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public alterFunction(): AlterFunctionContext { let _localctx: AlterFunctionContext = new AlterFunctionContext(this._ctx, this.state); - this.enterRule(_localctx, 134, FlinkSqlParser.RULE_alterFunction); + this.enterRule(_localctx, 132, FlinkSqlParser.RULE_alterFunction); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 973; + this.state = 1010; this.match(FlinkSqlParser.KW_ALTER); - this.state = 977; + this.state = 1014; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 87, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 97, this._ctx) ) { case 1: { - this.state = 974; + this.state = 1011; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 975; + this.state = 1012; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 976; + this.state = 1013; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 979; + this.state = 1016; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 981; + this.state = 1018; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 88, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 98, this._ctx) ) { case 1: { - this.state = 980; + this.state = 1017; this.ifExists(); } break; } - this.state = 983; + this.state = 1020; this.uid(); - this.state = 984; + this.state = 1021; this.match(FlinkSqlParser.KW_AS); - this.state = 985; + this.state = 1022; this.identifier(); - this.state = 988; + this.state = 1025; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LANGUAGE) { { - this.state = 986; + this.state = 1023; this.match(FlinkSqlParser.KW_LANGUAGE); - this.state = 987; + this.state = 1024; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_JAVA || _la === FlinkSqlParser.KW_PYTHON || _la === FlinkSqlParser.KW_SCALA)) { this._errHandler.recoverInline(this); @@ -4553,26 +4644,26 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dropCatalog(): DropCatalogContext { let _localctx: DropCatalogContext = new DropCatalogContext(this._ctx, this.state); - this.enterRule(_localctx, 136, FlinkSqlParser.RULE_dropCatalog); + this.enterRule(_localctx, 134, FlinkSqlParser.RULE_dropCatalog); try { this.enterOuterAlt(_localctx, 1); { - this.state = 990; + this.state = 1027; this.match(FlinkSqlParser.KW_DROP); - this.state = 991; + this.state = 1028; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 993; + this.state = 1030; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 90, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 100, this._ctx) ) { case 1: { - this.state = 992; + this.state = 1029; this.ifExists(); } break; } - this.state = 995; - this.uid(); + this.state = 1032; + this.catalogPath(); } } catch (re) { @@ -4592,37 +4683,37 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dropTable(): DropTableContext { let _localctx: DropTableContext = new DropTableContext(this._ctx, this.state); - this.enterRule(_localctx, 138, FlinkSqlParser.RULE_dropTable); + this.enterRule(_localctx, 136, FlinkSqlParser.RULE_dropTable); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 997; + this.state = 1034; this.match(FlinkSqlParser.KW_DROP); - this.state = 999; + this.state = 1036; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_TEMPORARY) { { - this.state = 998; + this.state = 1035; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 1001; + this.state = 1038; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1003; + this.state = 1040; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 92, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 102, this._ctx) ) { case 1: { - this.state = 1002; + this.state = 1039; this.ifExists(); } break; } - this.state = 1005; - this.uid(); + this.state = 1042; + this.tablePath(); } } catch (re) { @@ -4642,33 +4733,33 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dropDatabase(): DropDatabaseContext { let _localctx: DropDatabaseContext = new DropDatabaseContext(this._ctx, this.state); - this.enterRule(_localctx, 140, FlinkSqlParser.RULE_dropDatabase); + this.enterRule(_localctx, 138, FlinkSqlParser.RULE_dropDatabase); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1007; + this.state = 1044; this.match(FlinkSqlParser.KW_DROP); - this.state = 1008; + this.state = 1045; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 1010; + this.state = 1047; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 93, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 103, this._ctx) ) { case 1: { - this.state = 1009; + this.state = 1046; this.ifExists(); } break; } - this.state = 1012; - this.uid(); - this.state = 1014; + this.state = 1049; + this.databasePath(); + this.state = 1051; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_CASCADE || _la === FlinkSqlParser.KW_RESTRICT) { { - this.state = 1013; + this.state = 1050; _localctx._dropType = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CASCADE || _la === FlinkSqlParser.KW_RESTRICT)) { @@ -4703,36 +4794,36 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dropView(): DropViewContext { let _localctx: DropViewContext = new DropViewContext(this._ctx, this.state); - this.enterRule(_localctx, 142, FlinkSqlParser.RULE_dropView); + this.enterRule(_localctx, 140, FlinkSqlParser.RULE_dropView); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1016; + this.state = 1053; this.match(FlinkSqlParser.KW_DROP); - this.state = 1018; + this.state = 1055; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_TEMPORARY) { { - this.state = 1017; + this.state = 1054; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 1020; + this.state = 1057; this.match(FlinkSqlParser.KW_VIEW); - this.state = 1022; + this.state = 1059; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 96, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 106, this._ctx) ) { case 1: { - this.state = 1021; + this.state = 1058; this.ifExists(); } break; } - this.state = 1024; + this.state = 1061; this.uid(); } } @@ -4753,45 +4844,45 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dropFunction(): DropFunctionContext { let _localctx: DropFunctionContext = new DropFunctionContext(this._ctx, this.state); - this.enterRule(_localctx, 144, FlinkSqlParser.RULE_dropFunction); + this.enterRule(_localctx, 142, FlinkSqlParser.RULE_dropFunction); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1026; + this.state = 1063; this.match(FlinkSqlParser.KW_DROP); - this.state = 1030; + this.state = 1067; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 97, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 107, this._ctx) ) { case 1: { - this.state = 1027; + this.state = 1064; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 1028; + this.state = 1065; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 1029; + this.state = 1066; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 1032; + this.state = 1069; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 1034; + this.state = 1071; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 98, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 108, this._ctx) ) { case 1: { - this.state = 1033; + this.state = 1070; this.ifExists(); } break; } - this.state = 1036; - this.uid(); + this.state = 1073; + this.functionName(); } } catch (re) { @@ -4811,27 +4902,27 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public insertStatement(): InsertStatementContext { let _localctx: InsertStatementContext = new InsertStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 146, FlinkSqlParser.RULE_insertStatement); + this.enterRule(_localctx, 144, FlinkSqlParser.RULE_insertStatement); let _la: number; try { - this.state = 1045; + this.state = 1082; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 100, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 110, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { { - this.state = 1039; + this.state = 1076; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_EXECUTE) { { - this.state = 1038; + this.state = 1075; this.match(FlinkSqlParser.KW_EXECUTE); } } - this.state = 1041; + this.state = 1078; this.insertSimpleStatement(); } } @@ -4840,7 +4931,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1042; + this.state = 1079; this.insertMulStatementCompatibility(); } break; @@ -4849,9 +4940,9 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 3); { { - this.state = 1043; + this.state = 1080; this.match(FlinkSqlParser.KW_EXECUTE); - this.state = 1044; + this.state = 1081; this.insertMulStatement(); } } @@ -4875,14 +4966,14 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public insertSimpleStatement(): InsertSimpleStatementContext { let _localctx: InsertSimpleStatementContext = new InsertSimpleStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 148, FlinkSqlParser.RULE_insertSimpleStatement); + this.enterRule(_localctx, 146, FlinkSqlParser.RULE_insertSimpleStatement); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1047; + this.state = 1084; this.match(FlinkSqlParser.KW_INSERT); - this.state = 1048; + this.state = 1085; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_OVERWRITE || _la === FlinkSqlParser.KW_INTO)) { this._errHandler.recoverInline(this); @@ -4894,41 +4985,41 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1049; - this.uid(); - this.state = 1058; + this.state = 1086; + this.tablePath(); + this.state = 1095; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 103, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 113, this._ctx) ) { case 1: { - this.state = 1051; + this.state = 1088; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_PARTITION) { { - this.state = 1050; + this.state = 1087; this.insertPartitionDefinition(); } } - this.state = 1054; + this.state = 1091; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 102, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 112, this._ctx) ) { case 1: { - this.state = 1053; + this.state = 1090; this.columnNameList(); } break; } - this.state = 1056; + this.state = 1093; this.queryStatement(0); } break; case 2: { - this.state = 1057; + this.state = 1094; this.valuesDefinition(); } break; @@ -4952,13 +5043,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public insertPartitionDefinition(): InsertPartitionDefinitionContext { let _localctx: InsertPartitionDefinitionContext = new InsertPartitionDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 150, FlinkSqlParser.RULE_insertPartitionDefinition); + this.enterRule(_localctx, 148, FlinkSqlParser.RULE_insertPartitionDefinition); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1060; + this.state = 1097; this.match(FlinkSqlParser.KW_PARTITION); - this.state = 1061; + this.state = 1098; this.tablePropertyList(); } } @@ -4979,28 +5070,28 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public valuesDefinition(): ValuesDefinitionContext { let _localctx: ValuesDefinitionContext = new ValuesDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 152, FlinkSqlParser.RULE_valuesDefinition); + this.enterRule(_localctx, 150, FlinkSqlParser.RULE_valuesDefinition); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1063; + this.state = 1100; this.match(FlinkSqlParser.KW_VALUES); - this.state = 1064; + this.state = 1101; this.valuesRowDefinition(); - this.state = 1069; + this.state = 1106; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1065; + this.state = 1102; this.match(FlinkSqlParser.COMMA); - this.state = 1066; + this.state = 1103; this.valuesRowDefinition(); } } - this.state = 1071; + this.state = 1108; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5023,32 +5114,32 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public valuesRowDefinition(): ValuesRowDefinitionContext { let _localctx: ValuesRowDefinitionContext = new ValuesRowDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 154, FlinkSqlParser.RULE_valuesRowDefinition); + this.enterRule(_localctx, 152, FlinkSqlParser.RULE_valuesRowDefinition); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1072; + this.state = 1109; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1073; + this.state = 1110; this.constant(); - this.state = 1078; + this.state = 1115; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1074; + this.state = 1111; this.match(FlinkSqlParser.COMMA); - this.state = 1075; + this.state = 1112; this.constant(); } } - this.state = 1080; + this.state = 1117; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1081; + this.state = 1118; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5069,36 +5160,36 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public insertMulStatementCompatibility(): InsertMulStatementCompatibilityContext { let _localctx: InsertMulStatementCompatibilityContext = new InsertMulStatementCompatibilityContext(this._ctx, this.state); - this.enterRule(_localctx, 156, FlinkSqlParser.RULE_insertMulStatementCompatibility); + this.enterRule(_localctx, 154, FlinkSqlParser.RULE_insertMulStatementCompatibility); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1083; + this.state = 1120; this.match(FlinkSqlParser.KW_BEGIN); - this.state = 1084; + this.state = 1121; this.match(FlinkSqlParser.KW_STATEMENT); - this.state = 1085; + this.state = 1122; this.match(FlinkSqlParser.KW_SET); - this.state = 1086; + this.state = 1123; this.match(FlinkSqlParser.SEMICOLON); - this.state = 1090; + this.state = 1127; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1087; + this.state = 1124; this.insertSimpleStatement(); - this.state = 1088; + this.state = 1125; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1092; + this.state = 1129; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.KW_INSERT); - this.state = 1094; + this.state = 1131; this.match(FlinkSqlParser.KW_END); } } @@ -5119,34 +5210,34 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public insertMulStatement(): InsertMulStatementContext { let _localctx: InsertMulStatementContext = new InsertMulStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 158, FlinkSqlParser.RULE_insertMulStatement); + this.enterRule(_localctx, 156, FlinkSqlParser.RULE_insertMulStatement); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1096; + this.state = 1133; this.match(FlinkSqlParser.KW_STATEMENT); - this.state = 1097; + this.state = 1134; this.match(FlinkSqlParser.KW_SET); - this.state = 1098; + this.state = 1135; this.match(FlinkSqlParser.KW_BEGIN); - this.state = 1102; + this.state = 1139; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1099; + this.state = 1136; this.insertSimpleStatement(); - this.state = 1100; + this.state = 1137; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1104; + this.state = 1141; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.KW_INSERT); - this.state = 1106; + this.state = 1143; this.match(FlinkSqlParser.KW_END); } } @@ -5177,63 +5268,63 @@ export class FlinkSqlParser extends Parser { let _parentState: number = this.state; let _localctx: QueryStatementContext = new QueryStatementContext(this._ctx, _parentState); let _prevctx: QueryStatementContext = _localctx; - let _startState: number = 160; - this.enterRecursionRule(_localctx, 160, FlinkSqlParser.RULE_queryStatement, _p); + let _startState: number = 158; + this.enterRecursionRule(_localctx, 158, FlinkSqlParser.RULE_queryStatement, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1131; + this.state = 1168; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 112, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 122, this._ctx) ) { case 1: { - this.state = 1109; + this.state = 1146; this.valuesCaluse(); } break; case 2: { - this.state = 1110; + this.state = 1147; this.withClause(); - this.state = 1111; + this.state = 1148; this.queryStatement(5); } break; case 3: { - this.state = 1113; + this.state = 1150; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1114; + this.state = 1151; this.queryStatement(0); - this.state = 1115; + this.state = 1152; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: { - this.state = 1117; + this.state = 1154; this.selectClause(); - this.state = 1119; + this.state = 1156; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 108, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 118, this._ctx) ) { case 1: { - this.state = 1118; + this.state = 1155; this.orderByCaluse(); } break; } - this.state = 1122; + this.state = 1159; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 109, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 119, this._ctx) ) { case 1: { - this.state = 1121; + this.state = 1158; this.limitClause(); } break; @@ -5243,24 +5334,24 @@ export class FlinkSqlParser extends Parser { case 5: { - this.state = 1124; + this.state = 1161; this.selectStatement(); - this.state = 1126; + this.state = 1163; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 110, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 120, this._ctx) ) { case 1: { - this.state = 1125; + this.state = 1162; this.orderByCaluse(); } break; } - this.state = 1129; + this.state = 1166; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 111, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 121, this._ctx) ) { case 1: { - this.state = 1128; + this.state = 1165; this.limitClause(); } break; @@ -5269,9 +5360,9 @@ export class FlinkSqlParser extends Parser { break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 1147; + this.state = 1184; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 116, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 126, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -5283,11 +5374,11 @@ export class FlinkSqlParser extends Parser { _localctx = new QueryStatementContext(_parentctx, _parentState); _localctx._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_queryStatement); - this.state = 1133; + this.state = 1170; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1134; + this.state = 1171; _localctx._operator = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_EXCEPT || _la === FlinkSqlParser.KW_INTERSECT || _la === FlinkSqlParser.KW_UNION)) { @@ -5300,34 +5391,34 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1136; + this.state = 1173; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ALL) { { - this.state = 1135; + this.state = 1172; this.match(FlinkSqlParser.KW_ALL); } } - this.state = 1138; + this.state = 1175; _localctx._right = this.queryStatement(0); - this.state = 1140; + this.state = 1177; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 114, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 124, this._ctx) ) { case 1: { - this.state = 1139; + this.state = 1176; this.orderByCaluse(); } break; } - this.state = 1143; + this.state = 1180; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 115, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 125, this._ctx) ) { case 1: { - this.state = 1142; + this.state = 1179; this.limitClause(); } break; @@ -5335,9 +5426,9 @@ export class FlinkSqlParser extends Parser { } } } - this.state = 1149; + this.state = 1186; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 116, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 126, this._ctx); } } } @@ -5358,32 +5449,32 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public valuesCaluse(): ValuesCaluseContext { let _localctx: ValuesCaluseContext = new ValuesCaluseContext(this._ctx, this.state); - this.enterRule(_localctx, 162, FlinkSqlParser.RULE_valuesCaluse); + this.enterRule(_localctx, 160, FlinkSqlParser.RULE_valuesCaluse); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1150; + this.state = 1187; this.match(FlinkSqlParser.KW_VALUES); - this.state = 1151; + this.state = 1188; this.expression(); - this.state = 1156; + this.state = 1193; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 117, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 127, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1152; + this.state = 1189; this.match(FlinkSqlParser.COMMA); - this.state = 1153; + this.state = 1190; this.expression(); } } } - this.state = 1158; + this.state = 1195; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 117, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 127, this._ctx); } } } @@ -5404,28 +5495,28 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public withClause(): WithClauseContext { let _localctx: WithClauseContext = new WithClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 164, FlinkSqlParser.RULE_withClause); + this.enterRule(_localctx, 162, FlinkSqlParser.RULE_withClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1159; + this.state = 1196; this.match(FlinkSqlParser.KW_WITH); - this.state = 1160; + this.state = 1197; this.withItem(); - this.state = 1165; + this.state = 1202; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1161; + this.state = 1198; this.match(FlinkSqlParser.COMMA); - this.state = 1162; + this.state = 1199; this.withItem(); } } - this.state = 1167; + this.state = 1204; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5448,50 +5539,50 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public withItem(): WithItemContext { let _localctx: WithItemContext = new WithItemContext(this._ctx, this.state); - this.enterRule(_localctx, 166, FlinkSqlParser.RULE_withItem); + this.enterRule(_localctx, 164, FlinkSqlParser.RULE_withItem); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1168; + this.state = 1205; this.withItemName(); - this.state = 1180; + this.state = 1217; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 1169; + this.state = 1206; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1170; + this.state = 1207; this.columnName(); - this.state = 1175; + this.state = 1212; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1171; + this.state = 1208; this.match(FlinkSqlParser.COMMA); - this.state = 1172; + this.state = 1209; this.columnName(); } } - this.state = 1177; + this.state = 1214; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1178; + this.state = 1215; this.match(FlinkSqlParser.RR_BRACKET); } } - this.state = 1182; + this.state = 1219; this.match(FlinkSqlParser.KW_AS); - this.state = 1183; + this.state = 1220; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1184; + this.state = 1221; this.queryStatement(0); - this.state = 1185; + this.state = 1222; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5512,11 +5603,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public withItemName(): WithItemNameContext { let _localctx: WithItemNameContext = new WithItemNameContext(this._ctx, this.state); - this.enterRule(_localctx, 168, FlinkSqlParser.RULE_withItemName); + this.enterRule(_localctx, 166, FlinkSqlParser.RULE_withItemName); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1187; + this.state = 1224; this.identifier(); } } @@ -5537,54 +5628,54 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public selectStatement(): SelectStatementContext { let _localctx: SelectStatementContext = new SelectStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 170, FlinkSqlParser.RULE_selectStatement); + this.enterRule(_localctx, 168, FlinkSqlParser.RULE_selectStatement); try { - this.state = 1207; + this.state = 1244; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 125, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 135, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1189; + this.state = 1226; this.selectClause(); - this.state = 1190; + this.state = 1227; this.fromClause(); - this.state = 1192; + this.state = 1229; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 121, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 131, this._ctx) ) { case 1: { - this.state = 1191; + this.state = 1228; this.whereClause(); } break; } - this.state = 1195; + this.state = 1232; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 122, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 132, this._ctx) ) { case 1: { - this.state = 1194; + this.state = 1231; this.groupByClause(); } break; } - this.state = 1198; + this.state = 1235; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 123, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 133, this._ctx) ) { case 1: { - this.state = 1197; + this.state = 1234; this.havingClause(); } break; } - this.state = 1201; + this.state = 1238; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 124, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 134, this._ctx) ) { case 1: { - this.state = 1200; + this.state = 1237; this.windowClause(); } break; @@ -5595,11 +5686,11 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1203; + this.state = 1240; this.selectClause(); - this.state = 1204; + this.state = 1241; this.fromClause(); - this.state = 1205; + this.state = 1242; this.matchRecognizeClause(); } break; @@ -5622,55 +5713,55 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public selectClause(): SelectClauseContext { let _localctx: SelectClauseContext = new SelectClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 172, FlinkSqlParser.RULE_selectClause); + this.enterRule(_localctx, 170, FlinkSqlParser.RULE_selectClause); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1209; + this.state = 1246; this.match(FlinkSqlParser.KW_SELECT); - this.state = 1211; + this.state = 1248; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ALL || _la === FlinkSqlParser.KW_DISTINCT) { { - this.state = 1210; + this.state = 1247; this.setQuantifier(); } } - this.state = 1222; + this.state = 1259; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 128, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 138, this._ctx) ) { case 1: { - this.state = 1213; + this.state = 1250; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; case 2: { - this.state = 1214; + this.state = 1251; this.projectItemDefinition(); - this.state = 1219; + this.state = 1256; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 127, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 137, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1215; + this.state = 1252; this.match(FlinkSqlParser.COMMA); - this.state = 1216; + this.state = 1253; this.projectItemDefinition(); } } } - this.state = 1221; + this.state = 1258; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 127, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 137, this._ctx); } } break; @@ -5694,16 +5785,16 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public projectItemDefinition(): ProjectItemDefinitionContext { let _localctx: ProjectItemDefinitionContext = new ProjectItemDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 174, FlinkSqlParser.RULE_projectItemDefinition); + this.enterRule(_localctx, 172, FlinkSqlParser.RULE_projectItemDefinition); let _la: number; try { - this.state = 1232; + this.state = 1269; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 131, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 141, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1224; + this.state = 1261; this.overWindowItem(); } break; @@ -5711,24 +5802,24 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1225; + this.state = 1262; this.expression(); - this.state = 1230; + this.state = 1267; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 130, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 140, this._ctx) ) { case 1: { - this.state = 1227; + this.state = 1264; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 1226; + this.state = 1263; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1229; + this.state = 1266; this.expression(); } break; @@ -5754,23 +5845,23 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public overWindowItem(): OverWindowItemContext { let _localctx: OverWindowItemContext = new OverWindowItemContext(this._ctx, this.state); - this.enterRule(_localctx, 176, FlinkSqlParser.RULE_overWindowItem); + this.enterRule(_localctx, 174, FlinkSqlParser.RULE_overWindowItem); try { - this.state = 1246; + this.state = 1283; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 132, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 142, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1234; + this.state = 1271; this.primaryExpression(0); - this.state = 1235; + this.state = 1272; this.match(FlinkSqlParser.KW_OVER); - this.state = 1236; + this.state = 1273; this.windowSpec(); - this.state = 1237; + this.state = 1274; this.match(FlinkSqlParser.KW_AS); - this.state = 1238; + this.state = 1275; this.identifier(); } break; @@ -5778,15 +5869,15 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1240; + this.state = 1277; this.primaryExpression(0); - this.state = 1241; + this.state = 1278; this.match(FlinkSqlParser.KW_OVER); - this.state = 1242; + this.state = 1279; this.errorCapturingIdentifier(); - this.state = 1243; + this.state = 1280; this.match(FlinkSqlParser.KW_AS); - this.state = 1244; + this.state = 1281; this.identifier(); } break; @@ -5809,13 +5900,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public fromClause(): FromClauseContext { let _localctx: FromClauseContext = new FromClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 178, FlinkSqlParser.RULE_fromClause); + this.enterRule(_localctx, 176, FlinkSqlParser.RULE_fromClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1248; + this.state = 1285; this.match(FlinkSqlParser.KW_FROM); - this.state = 1249; + this.state = 1286; this.tableExpression(0); } } @@ -5846,59 +5937,59 @@ export class FlinkSqlParser extends Parser { let _parentState: number = this.state; let _localctx: TableExpressionContext = new TableExpressionContext(this._ctx, _parentState); let _prevctx: TableExpressionContext = _localctx; - let _startState: number = 180; - this.enterRecursionRule(_localctx, 180, FlinkSqlParser.RULE_tableExpression, _p); + let _startState: number = 178; + this.enterRecursionRule(_localctx, 178, FlinkSqlParser.RULE_tableExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1262; + this.state = 1299; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 134, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 144, this._ctx) ) { case 1: { - this.state = 1252; + this.state = 1289; this.tableReference(); - this.state = 1257; + this.state = 1294; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 133, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 143, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1253; + this.state = 1290; this.match(FlinkSqlParser.COMMA); - this.state = 1254; + this.state = 1291; this.tableReference(); } } } - this.state = 1259; + this.state = 1296; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 133, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 143, this._ctx); } } break; case 2: { - this.state = 1260; + this.state = 1297; this.inlineDataValueClause(); } break; case 3: { - this.state = 1261; + this.state = 1298; this.windoTVFClause(); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 1285; + this.state = 1322; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 140, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 150, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -5906,22 +5997,22 @@ export class FlinkSqlParser extends Parser { } _prevctx = _localctx; { - this.state = 1283; + this.state = 1320; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 139, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 149, this._ctx) ) { case 1: { _localctx = new TableExpressionContext(_parentctx, _parentState); this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1264; + this.state = 1301; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1265; + this.state = 1302; this.match(FlinkSqlParser.KW_CROSS); - this.state = 1266; + this.state = 1303; this.match(FlinkSqlParser.KW_JOIN); - this.state = 1267; + this.state = 1304; this.tableExpression(4); } break; @@ -5930,26 +6021,26 @@ export class FlinkSqlParser extends Parser { { _localctx = new TableExpressionContext(_parentctx, _parentState); this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1268; + this.state = 1305; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1270; + this.state = 1307; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NATURAL) { { - this.state = 1269; + this.state = 1306; this.match(FlinkSqlParser.KW_NATURAL); } } - this.state = 1273; + this.state = 1310; this._errHandler.sync(this); _la = this._input.LA(1); if (((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & ((1 << (FlinkSqlParser.KW_FULL - 253)) | (1 << (FlinkSqlParser.KW_INNER - 253)) | (1 << (FlinkSqlParser.KW_LEFT - 253)))) !== 0) || _la === FlinkSqlParser.KW_RIGHT) { { - this.state = 1272; + this.state = 1309; _la = this._input.LA(1); if (!(((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & ((1 << (FlinkSqlParser.KW_FULL - 253)) | (1 << (FlinkSqlParser.KW_INNER - 253)) | (1 << (FlinkSqlParser.KW_LEFT - 253)))) !== 0) || _la === FlinkSqlParser.KW_RIGHT)) { this._errHandler.recoverInline(this); @@ -5964,26 +6055,26 @@ export class FlinkSqlParser extends Parser { } } - this.state = 1276; + this.state = 1313; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_OUTER) { { - this.state = 1275; + this.state = 1312; this.match(FlinkSqlParser.KW_OUTER); } } - this.state = 1278; + this.state = 1315; this.match(FlinkSqlParser.KW_JOIN); - this.state = 1279; + this.state = 1316; this.tableExpression(0); - this.state = 1281; + this.state = 1318; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 138, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 148, this._ctx) ) { case 1: { - this.state = 1280; + this.state = 1317; this.joinCondition(); } break; @@ -5993,9 +6084,9 @@ export class FlinkSqlParser extends Parser { } } } - this.state = 1287; + this.state = 1324; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 140, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 150, this._ctx); } } } @@ -6016,18 +6107,18 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableReference(): TableReferenceContext { let _localctx: TableReferenceContext = new TableReferenceContext(this._ctx, this.state); - this.enterRule(_localctx, 182, FlinkSqlParser.RULE_tableReference); + this.enterRule(_localctx, 180, FlinkSqlParser.RULE_tableReference); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1288; + this.state = 1325; this.tablePrimary(); - this.state = 1290; + this.state = 1327; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 141, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 151, this._ctx) ) { case 1: { - this.state = 1289; + this.state = 1326; this.tableAlias(); } break; @@ -6051,53 +6142,53 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePrimary(): TablePrimaryContext { let _localctx: TablePrimaryContext = new TablePrimaryContext(this._ctx, this.state); - this.enterRule(_localctx, 184, FlinkSqlParser.RULE_tablePrimary); + this.enterRule(_localctx, 182, FlinkSqlParser.RULE_tablePrimary); let _la: number; try { - this.state = 1333; + this.state = 1370; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 148, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 158, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1293; + this.state = 1330; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_TABLE) { { - this.state = 1292; + this.state = 1329; this.match(FlinkSqlParser.KW_TABLE); } } - this.state = 1295; + this.state = 1332; this.tablePath(); - this.state = 1297; + this.state = 1334; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 143, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 153, this._ctx) ) { case 1: { - this.state = 1296; + this.state = 1333; this.systemTimePeriod(); } break; } - this.state = 1303; + this.state = 1340; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 145, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 155, this._ctx) ) { case 1: { - this.state = 1300; + this.state = 1337; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 1299; + this.state = 1336; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1302; + this.state = 1339; this.correlationName(); } break; @@ -6108,37 +6199,37 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1305; + this.state = 1342; this.match(FlinkSqlParser.KW_LATERAL); - this.state = 1306; + this.state = 1343; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1307; + this.state = 1344; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1308; + this.state = 1345; this.functionName(); - this.state = 1309; + this.state = 1346; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1310; + this.state = 1347; this.functionParam(); - this.state = 1315; + this.state = 1352; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1311; + this.state = 1348; this.match(FlinkSqlParser.COMMA); - this.state = 1312; + this.state = 1349; this.functionParam(); } } - this.state = 1317; + this.state = 1354; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1318; + this.state = 1355; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1319; + this.state = 1356; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6146,21 +6237,21 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1322; + this.state = 1359; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_LATERAL) { { - this.state = 1321; + this.state = 1358; this.match(FlinkSqlParser.KW_LATERAL); } } - this.state = 1324; + this.state = 1361; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1325; + this.state = 1362; this.queryStatement(0); - this.state = 1326; + this.state = 1363; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6168,13 +6259,13 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1328; + this.state = 1365; this.match(FlinkSqlParser.KW_UNNEST); - this.state = 1329; + this.state = 1366; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1330; + this.state = 1367; this.expression(); - this.state = 1331; + this.state = 1368; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6195,46 +6286,21 @@ export class FlinkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tablePath(): TablePathContext { - let _localctx: TablePathContext = new TablePathContext(this._ctx, this.state); - this.enterRule(_localctx, 186, FlinkSqlParser.RULE_tablePath); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 1335; - this.uid(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) public systemTimePeriod(): SystemTimePeriodContext { let _localctx: SystemTimePeriodContext = new SystemTimePeriodContext(this._ctx, this.state); - this.enterRule(_localctx, 188, FlinkSqlParser.RULE_systemTimePeriod); + this.enterRule(_localctx, 184, FlinkSqlParser.RULE_systemTimePeriod); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1337; + this.state = 1372; this.match(FlinkSqlParser.KW_FOR); - this.state = 1338; + this.state = 1373; this.match(FlinkSqlParser.KW_SYSTEM_TIME); - this.state = 1339; + this.state = 1374; this.match(FlinkSqlParser.KW_AS); - this.state = 1340; + this.state = 1375; this.match(FlinkSqlParser.KW_OF); - this.state = 1341; + this.state = 1376; this.dateTimeExpression(); } } @@ -6255,11 +6321,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dateTimeExpression(): DateTimeExpressionContext { let _localctx: DateTimeExpressionContext = new DateTimeExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 190, FlinkSqlParser.RULE_dateTimeExpression); + this.enterRule(_localctx, 186, FlinkSqlParser.RULE_dateTimeExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1343; + this.state = 1378; this.expression(); } } @@ -6280,17 +6346,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public inlineDataValueClause(): InlineDataValueClauseContext { let _localctx: InlineDataValueClauseContext = new InlineDataValueClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 192, FlinkSqlParser.RULE_inlineDataValueClause); + this.enterRule(_localctx, 188, FlinkSqlParser.RULE_inlineDataValueClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1345; + this.state = 1380; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1346; + this.state = 1381; this.valuesDefinition(); - this.state = 1347; + this.state = 1382; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1348; + this.state = 1383; this.tableAlias(); } } @@ -6311,17 +6377,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windoTVFClause(): WindoTVFClauseContext { let _localctx: WindoTVFClauseContext = new WindoTVFClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 194, FlinkSqlParser.RULE_windoTVFClause); + this.enterRule(_localctx, 190, FlinkSqlParser.RULE_windoTVFClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1350; + this.state = 1385; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1351; + this.state = 1386; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1352; + this.state = 1387; this.windowTVFExression(); - this.state = 1353; + this.state = 1388; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6342,34 +6408,34 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windowTVFExression(): WindowTVFExressionContext { let _localctx: WindowTVFExressionContext = new WindowTVFExressionContext(this._ctx, this.state); - this.enterRule(_localctx, 196, FlinkSqlParser.RULE_windowTVFExression); + this.enterRule(_localctx, 192, FlinkSqlParser.RULE_windowTVFExression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1355; + this.state = 1390; this.windoTVFName(); - this.state = 1356; + this.state = 1391; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1357; + this.state = 1392; this.windowTVFParam(); - this.state = 1362; + this.state = 1397; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1358; + this.state = 1393; this.match(FlinkSqlParser.COMMA); - this.state = 1359; + this.state = 1394; this.windowTVFParam(); } } - this.state = 1364; + this.state = 1399; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1365; + this.state = 1400; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6390,12 +6456,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windoTVFName(): WindoTVFNameContext { let _localctx: WindoTVFNameContext = new WindoTVFNameContext(this._ctx, this.state); - this.enterRule(_localctx, 198, FlinkSqlParser.RULE_windoTVFName); + this.enterRule(_localctx, 194, FlinkSqlParser.RULE_windoTVFName); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1367; + this.state = 1402; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CUMULATE || _la === FlinkSqlParser.KW_HOP || _la === FlinkSqlParser.KW_TUMBLE)) { this._errHandler.recoverInline(this); @@ -6426,17 +6492,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windowTVFParam(): WindowTVFParamContext { let _localctx: WindowTVFParamContext = new WindowTVFParamContext(this._ctx, this.state); - this.enterRule(_localctx, 200, FlinkSqlParser.RULE_windowTVFParam); + this.enterRule(_localctx, 196, FlinkSqlParser.RULE_windowTVFParam); try { - this.state = 1384; + this.state = 1419; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 150, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 160, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1369; + this.state = 1404; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1370; + this.state = 1405; this.timeAttrColumn(); } break; @@ -6444,7 +6510,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1371; + this.state = 1406; this.columnDescriptor(); } break; @@ -6452,7 +6518,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1372; + this.state = 1407; this.timeIntervalExpression(); } break; @@ -6460,13 +6526,13 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1373; + this.state = 1408; this.match(FlinkSqlParser.KW_DATA); - this.state = 1374; + this.state = 1409; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1375; + this.state = 1410; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1376; + this.state = 1411; this.timeAttrColumn(); } break; @@ -6474,11 +6540,11 @@ export class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 1377; + this.state = 1412; this.match(FlinkSqlParser.KW_TIMECOL); - this.state = 1378; + this.state = 1413; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1379; + this.state = 1414; this.columnDescriptor(); } break; @@ -6486,11 +6552,11 @@ export class FlinkSqlParser extends Parser { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 1380; + this.state = 1415; this.timeIntervalParamName(); - this.state = 1381; + this.state = 1416; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1382; + this.state = 1417; this.timeIntervalExpression(); } break; @@ -6513,12 +6579,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public timeIntervalParamName(): TimeIntervalParamNameContext { let _localctx: TimeIntervalParamNameContext = new TimeIntervalParamNameContext(this._ctx, this.state); - this.enterRule(_localctx, 202, FlinkSqlParser.RULE_timeIntervalParamName); + this.enterRule(_localctx, 198, FlinkSqlParser.RULE_timeIntervalParamName); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1386; + this.state = 1421; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_DATA || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & ((1 << (FlinkSqlParser.KW_SIZE - 139)) | (1 << (FlinkSqlParser.KW_SLIDE - 139)) | (1 << (FlinkSqlParser.KW_STEP - 139)) | (1 << (FlinkSqlParser.KW_TIMECOL - 139)))) !== 0) || _la === FlinkSqlParser.KW_OFFSET)) { this._errHandler.recoverInline(this); @@ -6549,17 +6615,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public columnDescriptor(): ColumnDescriptorContext { let _localctx: ColumnDescriptorContext = new ColumnDescriptorContext(this._ctx, this.state); - this.enterRule(_localctx, 204, FlinkSqlParser.RULE_columnDescriptor); + this.enterRule(_localctx, 200, FlinkSqlParser.RULE_columnDescriptor); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1388; + this.state = 1423; this.match(FlinkSqlParser.KW_DESCRIPTOR); - this.state = 1389; + this.state = 1424; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1390; + this.state = 1425; this.uid(); - this.state = 1391; + this.state = 1426; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6580,47 +6646,47 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public joinCondition(): JoinConditionContext { let _localctx: JoinConditionContext = new JoinConditionContext(this._ctx, this.state); - this.enterRule(_localctx, 206, FlinkSqlParser.RULE_joinCondition); + this.enterRule(_localctx, 202, FlinkSqlParser.RULE_joinCondition); let _la: number; try { - this.state = 1407; + this.state = 1442; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_ON: this.enterOuterAlt(_localctx, 1); { - this.state = 1393; + this.state = 1428; this.match(FlinkSqlParser.KW_ON); - this.state = 1394; + this.state = 1429; this.booleanExpression(0); } break; case FlinkSqlParser.KW_USING: this.enterOuterAlt(_localctx, 2); { - this.state = 1395; + this.state = 1430; this.match(FlinkSqlParser.KW_USING); - this.state = 1396; + this.state = 1431; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1397; + this.state = 1432; this.uid(); - this.state = 1402; + this.state = 1437; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1398; + this.state = 1433; this.match(FlinkSqlParser.COMMA); - this.state = 1399; + this.state = 1434; this.uid(); } } - this.state = 1404; + this.state = 1439; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1405; + this.state = 1440; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6645,13 +6711,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public whereClause(): WhereClauseContext { let _localctx: WhereClauseContext = new WhereClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 208, FlinkSqlParser.RULE_whereClause); + this.enterRule(_localctx, 204, FlinkSqlParser.RULE_whereClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1409; + this.state = 1444; this.match(FlinkSqlParser.KW_WHERE); - this.state = 1410; + this.state = 1445; this.booleanExpression(0); } } @@ -6672,34 +6738,34 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupByClause(): GroupByClauseContext { let _localctx: GroupByClauseContext = new GroupByClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 210, FlinkSqlParser.RULE_groupByClause); + this.enterRule(_localctx, 206, FlinkSqlParser.RULE_groupByClause); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1412; + this.state = 1447; this.match(FlinkSqlParser.KW_GROUP); - this.state = 1413; + this.state = 1448; this.match(FlinkSqlParser.KW_BY); - this.state = 1414; + this.state = 1449; this.groupItemDefinition(); - this.state = 1419; + this.state = 1454; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 153, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 163, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1415; + this.state = 1450; this.match(FlinkSqlParser.COMMA); - this.state = 1416; + this.state = 1451; this.groupItemDefinition(); } } } - this.state = 1421; + this.state = 1456; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 153, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 163, this._ctx); } } } @@ -6720,16 +6786,16 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupItemDefinition(): GroupItemDefinitionContext { let _localctx: GroupItemDefinitionContext = new GroupItemDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 212, FlinkSqlParser.RULE_groupItemDefinition); + this.enterRule(_localctx, 208, FlinkSqlParser.RULE_groupItemDefinition); let _la: number; try { - this.state = 1461; + this.state = 1496; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 157, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 167, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1422; + this.state = 1457; this.expression(); } break; @@ -6737,7 +6803,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1423; + this.state = 1458; this.groupWindowFunction(); } break; @@ -6745,9 +6811,9 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1424; + this.state = 1459; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1425; + this.state = 1460; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6755,27 +6821,27 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1426; + this.state = 1461; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1427; + this.state = 1462; this.expression(); - this.state = 1432; + this.state = 1467; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1428; + this.state = 1463; this.match(FlinkSqlParser.COMMA); - this.state = 1429; + this.state = 1464; this.expression(); } } - this.state = 1434; + this.state = 1469; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1435; + this.state = 1470; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6783,29 +6849,29 @@ export class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 1437; + this.state = 1472; this.groupingSetsNotaionName(); - this.state = 1438; + this.state = 1473; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1439; + this.state = 1474; this.expression(); - this.state = 1444; + this.state = 1479; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1440; + this.state = 1475; this.match(FlinkSqlParser.COMMA); - this.state = 1441; + this.state = 1476; this.expression(); } } - this.state = 1446; + this.state = 1481; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1447; + this.state = 1482; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6813,29 +6879,29 @@ export class FlinkSqlParser extends Parser { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 1449; + this.state = 1484; this.groupingSets(); - this.state = 1450; + this.state = 1485; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1451; + this.state = 1486; this.groupItemDefinition(); - this.state = 1456; + this.state = 1491; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1452; + this.state = 1487; this.match(FlinkSqlParser.COMMA); - this.state = 1453; + this.state = 1488; this.groupItemDefinition(); } } - this.state = 1458; + this.state = 1493; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1459; + this.state = 1494; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6858,13 +6924,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupingSets(): GroupingSetsContext { let _localctx: GroupingSetsContext = new GroupingSetsContext(this._ctx, this.state); - this.enterRule(_localctx, 214, FlinkSqlParser.RULE_groupingSets); + this.enterRule(_localctx, 210, FlinkSqlParser.RULE_groupingSets); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1463; + this.state = 1498; this.match(FlinkSqlParser.KW_GROUPING); - this.state = 1464; + this.state = 1499; this.match(FlinkSqlParser.KW_SETS); } } @@ -6885,12 +6951,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupingSetsNotaionName(): GroupingSetsNotaionNameContext { let _localctx: GroupingSetsNotaionNameContext = new GroupingSetsNotaionNameContext(this._ctx, this.state); - this.enterRule(_localctx, 216, FlinkSqlParser.RULE_groupingSetsNotaionName); + this.enterRule(_localctx, 212, FlinkSqlParser.RULE_groupingSetsNotaionName); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1466; + this.state = 1501; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_CUBE || _la === FlinkSqlParser.KW_ROLLUP)) { this._errHandler.recoverInline(this); @@ -6921,21 +6987,21 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupWindowFunction(): GroupWindowFunctionContext { let _localctx: GroupWindowFunctionContext = new GroupWindowFunctionContext(this._ctx, this.state); - this.enterRule(_localctx, 218, FlinkSqlParser.RULE_groupWindowFunction); + this.enterRule(_localctx, 214, FlinkSqlParser.RULE_groupWindowFunction); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1468; + this.state = 1503; this.groupWindowFunctionName(); - this.state = 1469; + this.state = 1504; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1470; + this.state = 1505; this.timeAttrColumn(); - this.state = 1471; + this.state = 1506; this.match(FlinkSqlParser.COMMA); - this.state = 1472; + this.state = 1507; this.timeIntervalExpression(); - this.state = 1473; + this.state = 1508; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6956,12 +7022,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public groupWindowFunctionName(): GroupWindowFunctionNameContext { let _localctx: GroupWindowFunctionNameContext = new GroupWindowFunctionNameContext(this._ctx, this.state); - this.enterRule(_localctx, 220, FlinkSqlParser.RULE_groupWindowFunctionName); + this.enterRule(_localctx, 216, FlinkSqlParser.RULE_groupWindowFunctionName); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1475; + this.state = 1510; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_HOP || _la === FlinkSqlParser.KW_SESSION || _la === FlinkSqlParser.KW_TUMBLE)) { this._errHandler.recoverInline(this); @@ -6992,11 +7058,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public timeAttrColumn(): TimeAttrColumnContext { let _localctx: TimeAttrColumnContext = new TimeAttrColumnContext(this._ctx, this.state); - this.enterRule(_localctx, 222, FlinkSqlParser.RULE_timeAttrColumn); + this.enterRule(_localctx, 218, FlinkSqlParser.RULE_timeAttrColumn); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1477; + this.state = 1512; this.uid(); } } @@ -7017,13 +7083,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public havingClause(): HavingClauseContext { let _localctx: HavingClauseContext = new HavingClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 224, FlinkSqlParser.RULE_havingClause); + this.enterRule(_localctx, 220, FlinkSqlParser.RULE_havingClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1479; + this.state = 1514; this.match(FlinkSqlParser.KW_HAVING); - this.state = 1480; + this.state = 1515; this.booleanExpression(0); } } @@ -7044,32 +7110,32 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windowClause(): WindowClauseContext { let _localctx: WindowClauseContext = new WindowClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 226, FlinkSqlParser.RULE_windowClause); + this.enterRule(_localctx, 222, FlinkSqlParser.RULE_windowClause); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1482; + this.state = 1517; this.match(FlinkSqlParser.KW_WINDOW); - this.state = 1483; + this.state = 1518; this.namedWindow(); - this.state = 1488; + this.state = 1523; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 158, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 168, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1484; + this.state = 1519; this.match(FlinkSqlParser.COMMA); - this.state = 1485; + this.state = 1520; this.namedWindow(); } } } - this.state = 1490; + this.state = 1525; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 158, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 168, this._ctx); } } } @@ -7090,15 +7156,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public namedWindow(): NamedWindowContext { let _localctx: NamedWindowContext = new NamedWindowContext(this._ctx, this.state); - this.enterRule(_localctx, 228, FlinkSqlParser.RULE_namedWindow); + this.enterRule(_localctx, 224, FlinkSqlParser.RULE_namedWindow); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1491; + this.state = 1526; _localctx._name = this.errorCapturingIdentifier(); - this.state = 1492; + this.state = 1527; this.match(FlinkSqlParser.KW_AS); - this.state = 1493; + this.state = 1528; this.windowSpec(); } } @@ -7119,54 +7185,54 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windowSpec(): WindowSpecContext { let _localctx: WindowSpecContext = new WindowSpecContext(this._ctx, this.state); - this.enterRule(_localctx, 230, FlinkSqlParser.RULE_windowSpec); + this.enterRule(_localctx, 226, FlinkSqlParser.RULE_windowSpec); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1496; + this.state = 1531; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << FlinkSqlParser.KW_ADD) | (1 << FlinkSqlParser.KW_ADMIN) | (1 << FlinkSqlParser.KW_AFTER) | (1 << FlinkSqlParser.KW_ANALYZE) | (1 << FlinkSqlParser.KW_ASC) | (1 << FlinkSqlParser.KW_BEFORE) | (1 << FlinkSqlParser.KW_BYTES) | (1 << FlinkSqlParser.KW_CASCADE) | (1 << FlinkSqlParser.KW_CATALOG) | (1 << FlinkSqlParser.KW_CATALOGS) | (1 << FlinkSqlParser.KW_CENTURY) | (1 << FlinkSqlParser.KW_CHAIN) | (1 << FlinkSqlParser.KW_CHANGELOG_MODE) | (1 << FlinkSqlParser.KW_CHARACTERS) | (1 << FlinkSqlParser.KW_COMMENT) | (1 << FlinkSqlParser.KW_COMPACT) | (1 << FlinkSqlParser.KW_COLUMNS) | (1 << FlinkSqlParser.KW_CONSTRAINTS) | (1 << FlinkSqlParser.KW_CONSTRUCTOR) | (1 << FlinkSqlParser.KW_CUMULATE) | (1 << FlinkSqlParser.KW_DATA) | (1 << FlinkSqlParser.KW_DATABASE) | (1 << FlinkSqlParser.KW_DATABASES) | (1 << FlinkSqlParser.KW_DAYS) | (1 << FlinkSqlParser.KW_DECADE) | (1 << FlinkSqlParser.KW_DEFINED) | (1 << FlinkSqlParser.KW_DESC) | (1 << FlinkSqlParser.KW_DESCRIPTOR))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.KW_DIV - 32)) | (1 << (FlinkSqlParser.KW_ENCODING - 32)) | (1 << (FlinkSqlParser.KW_ENFORCED - 32)) | (1 << (FlinkSqlParser.KW_ENGINE - 32)) | (1 << (FlinkSqlParser.KW_ERROR - 32)) | (1 << (FlinkSqlParser.KW_ESTIMATED_COST - 32)) | (1 << (FlinkSqlParser.KW_EXCEPTION - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDE - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDING - 32)) | (1 << (FlinkSqlParser.KW_EXTENDED - 32)) | (1 << (FlinkSqlParser.KW_FILE - 32)) | (1 << (FlinkSqlParser.KW_FINAL - 32)) | (1 << (FlinkSqlParser.KW_FIRST - 32)) | (1 << (FlinkSqlParser.KW_FOLLOWING - 32)) | (1 << (FlinkSqlParser.KW_FORMAT - 32)) | (1 << (FlinkSqlParser.KW_FORTRAN - 32)) | (1 << (FlinkSqlParser.KW_FOUND - 32)) | (1 << (FlinkSqlParser.KW_FRAC_SECOND - 32)) | (1 << (FlinkSqlParser.KW_FUNCTIONS - 32)) | (1 << (FlinkSqlParser.KW_GENERAL - 32)) | (1 << (FlinkSqlParser.KW_GENERATED - 32)) | (1 << (FlinkSqlParser.KW_GO - 32)) | (1 << (FlinkSqlParser.KW_GOTO - 32)) | (1 << (FlinkSqlParser.KW_GRANTED - 32)) | (1 << (FlinkSqlParser.KW_HOP - 32)) | (1 << (FlinkSqlParser.KW_HOURS - 32)) | (1 << (FlinkSqlParser.KW_IF - 32)) | (1 << (FlinkSqlParser.KW_IGNORE - 32)) | (1 << (FlinkSqlParser.KW_INCREMENT - 32)) | (1 << (FlinkSqlParser.KW_INPUT - 32)) | (1 << (FlinkSqlParser.KW_INVOKER - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.KW_JAR - 64)) | (1 << (FlinkSqlParser.KW_JARS - 64)) | (1 << (FlinkSqlParser.KW_JAVA - 64)) | (1 << (FlinkSqlParser.KW_JSON - 64)) | (1 << (FlinkSqlParser.KW_JSON_EXECUTION_PLAN - 64)) | (1 << (FlinkSqlParser.KW_KEY - 64)) | (1 << (FlinkSqlParser.KW_KEY_MEMBER - 64)) | (1 << (FlinkSqlParser.KW_KEY_TYPE - 64)) | (1 << (FlinkSqlParser.KW_LABEL - 64)) | (1 << (FlinkSqlParser.KW_LAST - 64)) | (1 << (FlinkSqlParser.KW_LENGTH - 64)) | (1 << (FlinkSqlParser.KW_LEVEL - 64)) | (1 << (FlinkSqlParser.KW_LOAD - 64)) | (1 << (FlinkSqlParser.KW_MAP - 64)) | (1 << (FlinkSqlParser.KW_MICROSECOND - 64)) | (1 << (FlinkSqlParser.KW_MILLENNIUM - 64)) | (1 << (FlinkSqlParser.KW_MILLISECOND - 64)) | (1 << (FlinkSqlParser.KW_MINUTES - 64)) | (1 << (FlinkSqlParser.KW_MINVALUE - 64)) | (1 << (FlinkSqlParser.KW_MODIFY - 64)) | (1 << (FlinkSqlParser.KW_MODULES - 64)) | (1 << (FlinkSqlParser.KW_MONTHS - 64)) | (1 << (FlinkSqlParser.KW_NANOSECOND - 64)) | (1 << (FlinkSqlParser.KW_NULLS - 64)) | (1 << (FlinkSqlParser.KW_NUMBER - 64)) | (1 << (FlinkSqlParser.KW_OPTION - 64)) | (1 << (FlinkSqlParser.KW_OPTIONS - 64)) | (1 << (FlinkSqlParser.KW_ORDERING - 64)) | (1 << (FlinkSqlParser.KW_OUTPUT - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITE - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITING - 64)) | (1 << (FlinkSqlParser.KW_PARTITIONED - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (FlinkSqlParser.KW_PARTITIONS - 96)) | (1 << (FlinkSqlParser.KW_PASSING - 96)) | (1 << (FlinkSqlParser.KW_PAST - 96)) | (1 << (FlinkSqlParser.KW_PATH - 96)) | (1 << (FlinkSqlParser.KW_PLACING - 96)) | (1 << (FlinkSqlParser.KW_PLAN - 96)) | (1 << (FlinkSqlParser.KW_PRECEDING - 96)) | (1 << (FlinkSqlParser.KW_PRESERVE - 96)) | (1 << (FlinkSqlParser.KW_PRIOR - 96)) | (1 << (FlinkSqlParser.KW_PRIVILEGES - 96)) | (1 << (FlinkSqlParser.KW_PUBLIC - 96)) | (1 << (FlinkSqlParser.KW_PYTHON - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_FILES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_REQUIREMENTS - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_DEPENDENCIES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_JAR - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_ARCHIVES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_PARAMETER - 96)) | (1 << (FlinkSqlParser.KW_QUARTER - 96)) | (1 << (FlinkSqlParser.KW_RAW - 96)) | (1 << (FlinkSqlParser.KW_READ - 96)) | (1 << (FlinkSqlParser.KW_RELATIVE - 96)) | (1 << (FlinkSqlParser.KW_REMOVE - 96)) | (1 << (FlinkSqlParser.KW_RENAME - 96)) | (1 << (FlinkSqlParser.KW_REPLACE - 96)) | (1 << (FlinkSqlParser.KW_RESPECT - 96)) | (1 << (FlinkSqlParser.KW_RESTART - 96)) | (1 << (FlinkSqlParser.KW_RESTRICT - 96)) | (1 << (FlinkSqlParser.KW_ROLE - 96)) | (1 << (FlinkSqlParser.KW_ROW_COUNT - 96)) | (1 << (FlinkSqlParser.KW_SCALA - 96)) | (1 << (FlinkSqlParser.KW_SCALAR - 96)))) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & ((1 << (FlinkSqlParser.KW_SCALE - 128)) | (1 << (FlinkSqlParser.KW_SCHEMA - 128)) | (1 << (FlinkSqlParser.KW_SECONDS - 128)) | (1 << (FlinkSqlParser.KW_SECTION - 128)) | (1 << (FlinkSqlParser.KW_SECURITY - 128)) | (1 << (FlinkSqlParser.KW_SELF - 128)) | (1 << (FlinkSqlParser.KW_SERVER - 128)) | (1 << (FlinkSqlParser.KW_SERVER_NAME - 128)) | (1 << (FlinkSqlParser.KW_SESSION - 128)) | (1 << (FlinkSqlParser.KW_SETS - 128)) | (1 << (FlinkSqlParser.KW_SIMPLE - 128)) | (1 << (FlinkSqlParser.KW_SIZE - 128)) | (1 << (FlinkSqlParser.KW_SLIDE - 128)) | (1 << (FlinkSqlParser.KW_SOURCE - 128)) | (1 << (FlinkSqlParser.KW_SPACE - 128)) | (1 << (FlinkSqlParser.KW_STATE - 128)) | (1 << (FlinkSqlParser.KW_STATEMENT - 128)) | (1 << (FlinkSqlParser.KW_STEP - 128)) | (1 << (FlinkSqlParser.KW_STRING - 128)) | (1 << (FlinkSqlParser.KW_STRUCTURE - 128)) | (1 << (FlinkSqlParser.KW_STYLE - 128)) | (1 << (FlinkSqlParser.KW_TABLES - 128)) | (1 << (FlinkSqlParser.KW_TEMPORARY - 128)) | (1 << (FlinkSqlParser.KW_TIMECOL - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMP_LTZ - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPADD - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPDIFF - 128)) | (1 << (FlinkSqlParser.KW_TRANSFORM - 128)) | (1 << (FlinkSqlParser.KW_TUMBLE - 128)) | (1 << (FlinkSqlParser.KW_TYPE - 128)) | (1 << (FlinkSqlParser.KW_UNDER - 128)) | (1 << (FlinkSqlParser.KW_UNLOAD - 128)))) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & ((1 << (FlinkSqlParser.KW_USAGE - 160)) | (1 << (FlinkSqlParser.KW_USE - 160)) | (1 << (FlinkSqlParser.KW_UTF16 - 160)) | (1 << (FlinkSqlParser.KW_UTF32 - 160)) | (1 << (FlinkSqlParser.KW_UTF8 - 160)) | (1 << (FlinkSqlParser.KW_VERSION - 160)) | (1 << (FlinkSqlParser.KW_VIEW - 160)) | (1 << (FlinkSqlParser.KW_VIEWS - 160)) | (1 << (FlinkSqlParser.KW_VIRTUAL - 160)) | (1 << (FlinkSqlParser.KW_WATERMARK - 160)) | (1 << (FlinkSqlParser.KW_WATERMARKS - 160)) | (1 << (FlinkSqlParser.KW_WEEK - 160)) | (1 << (FlinkSqlParser.KW_WORK - 160)) | (1 << (FlinkSqlParser.KW_WRAPPER - 160)) | (1 << (FlinkSqlParser.KW_YEARS - 160)) | (1 << (FlinkSqlParser.KW_ZONE - 160)))) !== 0) || ((((_la - 405)) & ~0x1F) === 0 && ((1 << (_la - 405)) & ((1 << (FlinkSqlParser.STRING_LITERAL - 405)) | (1 << (FlinkSqlParser.DIG_LITERAL - 405)) | (1 << (FlinkSqlParser.ID_LITERAL - 405)))) !== 0)) { { - this.state = 1495; + this.state = 1530; _localctx._name = this.errorCapturingIdentifier(); } } - this.state = 1498; + this.state = 1533; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1500; + this.state = 1535; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_PARTITION) { { - this.state = 1499; + this.state = 1534; this.partitionByClause(); } } - this.state = 1503; + this.state = 1538; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ORDER) { { - this.state = 1502; + this.state = 1537; this.orderByCaluse(); } } - this.state = 1506; + this.state = 1541; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_RANGE || _la === FlinkSqlParser.KW_ROWS) { { - this.state = 1505; + this.state = 1540; this.windowFrame(); } } - this.state = 1508; + this.state = 1543; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -7187,95 +7253,95 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public matchRecognizeClause(): MatchRecognizeClauseContext { let _localctx: MatchRecognizeClauseContext = new MatchRecognizeClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 232, FlinkSqlParser.RULE_matchRecognizeClause); + this.enterRule(_localctx, 228, FlinkSqlParser.RULE_matchRecognizeClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1510; + this.state = 1545; this.match(FlinkSqlParser.KW_MATCH_RECOGNIZE); - this.state = 1511; + this.state = 1546; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1513; + this.state = 1548; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_PARTITION) { { - this.state = 1512; + this.state = 1547; this.partitionByClause(); } } - this.state = 1516; + this.state = 1551; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ORDER) { { - this.state = 1515; + this.state = 1550; this.orderByCaluse(); } } - this.state = 1519; + this.state = 1554; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_MEASURES) { { - this.state = 1518; + this.state = 1553; this.measuresClause(); } } - this.state = 1522; + this.state = 1557; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ALL || _la === FlinkSqlParser.KW_ONE) { { - this.state = 1521; + this.state = 1556; this.outputMode(); } } - this.state = 1525; + this.state = 1560; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AFTER) { { - this.state = 1524; + this.state = 1559; this.afterMatchStrategy(); } } - this.state = 1528; + this.state = 1563; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_PATTERN) { { - this.state = 1527; + this.state = 1562; this.patternDefination(); } } - this.state = 1530; + this.state = 1565; this.patternVariablesDefination(); - this.state = 1531; + this.state = 1566; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1536; + this.state = 1571; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 170, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 180, this._ctx) ) { case 1: { - this.state = 1533; + this.state = 1568; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 1532; + this.state = 1567; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1535; + this.state = 1570; this.identifier(); } break; @@ -7299,34 +7365,34 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public orderByCaluse(): OrderByCaluseContext { let _localctx: OrderByCaluseContext = new OrderByCaluseContext(this._ctx, this.state); - this.enterRule(_localctx, 234, FlinkSqlParser.RULE_orderByCaluse); + this.enterRule(_localctx, 230, FlinkSqlParser.RULE_orderByCaluse); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1538; + this.state = 1573; this.match(FlinkSqlParser.KW_ORDER); - this.state = 1539; + this.state = 1574; this.match(FlinkSqlParser.KW_BY); - this.state = 1540; + this.state = 1575; this.orderItemDefition(); - this.state = 1545; + this.state = 1580; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 171, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 181, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1541; + this.state = 1576; this.match(FlinkSqlParser.COMMA); - this.state = 1542; + this.state = 1577; this.orderItemDefition(); } } } - this.state = 1547; + this.state = 1582; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 171, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 181, this._ctx); } } } @@ -7347,19 +7413,19 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public orderItemDefition(): OrderItemDefitionContext { let _localctx: OrderItemDefitionContext = new OrderItemDefitionContext(this._ctx, this.state); - this.enterRule(_localctx, 236, FlinkSqlParser.RULE_orderItemDefition); + this.enterRule(_localctx, 232, FlinkSqlParser.RULE_orderItemDefition); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1548; + this.state = 1583; this.expression(); - this.state = 1550; + this.state = 1585; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 172, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 182, this._ctx) ) { case 1: { - this.state = 1549; + this.state = 1584; _localctx._ordering = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ASC || _la === FlinkSqlParser.KW_DESC)) { @@ -7375,14 +7441,14 @@ export class FlinkSqlParser extends Parser { } break; } - this.state = 1554; + this.state = 1589; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 173, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 183, this._ctx) ) { case 1: { - this.state = 1552; + this.state = 1587; this.match(FlinkSqlParser.KW_NULLS); - this.state = 1553; + this.state = 1588; _localctx._nullOrder = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_FIRST || _la === FlinkSqlParser.KW_LAST)) { @@ -7417,18 +7483,18 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public limitClause(): LimitClauseContext { let _localctx: LimitClauseContext = new LimitClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 238, FlinkSqlParser.RULE_limitClause); + this.enterRule(_localctx, 234, FlinkSqlParser.RULE_limitClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1556; + this.state = 1591; this.match(FlinkSqlParser.KW_LIMIT); - this.state = 1559; + this.state = 1594; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_ALL: { - this.state = 1557; + this.state = 1592; this.match(FlinkSqlParser.KW_ALL); } break; @@ -7650,7 +7716,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.BIT_STRING: case FlinkSqlParser.ID_LITERAL: { - this.state = 1558; + this.state = 1593; _localctx._limit = this.expression(); } break; @@ -7676,30 +7742,30 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public partitionByClause(): PartitionByClauseContext { let _localctx: PartitionByClauseContext = new PartitionByClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 240, FlinkSqlParser.RULE_partitionByClause); + this.enterRule(_localctx, 236, FlinkSqlParser.RULE_partitionByClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1561; + this.state = 1596; this.match(FlinkSqlParser.KW_PARTITION); - this.state = 1562; + this.state = 1597; this.match(FlinkSqlParser.KW_BY); - this.state = 1563; + this.state = 1598; this.expression(); - this.state = 1568; + this.state = 1603; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1564; + this.state = 1599; this.match(FlinkSqlParser.COMMA); - this.state = 1565; + this.state = 1600; this.expression(); } } - this.state = 1570; + this.state = 1605; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7722,16 +7788,16 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public quantifiers(): QuantifiersContext { let _localctx: QuantifiersContext = new QuantifiersContext(this._ctx, this.state); - this.enterRule(_localctx, 242, FlinkSqlParser.RULE_quantifiers); + this.enterRule(_localctx, 238, FlinkSqlParser.RULE_quantifiers); try { - this.state = 1587; + this.state = 1622; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 176, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 186, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { { - this.state = 1571; + this.state = 1606; this.match(FlinkSqlParser.ASTERISK_SIGN); } } @@ -7741,7 +7807,7 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 2); { { - this.state = 1572; + this.state = 1607; this.match(FlinkSqlParser.ADD_SIGN); } } @@ -7751,7 +7817,7 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 3); { { - this.state = 1573; + this.state = 1608; this.match(FlinkSqlParser.QUESTION_MARK_SIGN); } } @@ -7761,15 +7827,15 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 4); { { - this.state = 1574; + this.state = 1609; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1575; + this.state = 1610; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1576; + this.state = 1611; this.match(FlinkSqlParser.COMMA); - this.state = 1577; + this.state = 1612; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1578; + this.state = 1613; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7779,13 +7845,13 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 5); { { - this.state = 1579; + this.state = 1614; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1580; + this.state = 1615; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1581; + this.state = 1616; this.match(FlinkSqlParser.COMMA); - this.state = 1582; + this.state = 1617; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7795,13 +7861,13 @@ export class FlinkSqlParser extends Parser { this.enterOuterAlt(_localctx, 6); { { - this.state = 1583; + this.state = 1618; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1584; + this.state = 1619; this.match(FlinkSqlParser.COMMA); - this.state = 1585; + this.state = 1620; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1586; + this.state = 1621; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7825,28 +7891,28 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public measuresClause(): MeasuresClauseContext { let _localctx: MeasuresClauseContext = new MeasuresClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 244, FlinkSqlParser.RULE_measuresClause); + this.enterRule(_localctx, 240, FlinkSqlParser.RULE_measuresClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1589; + this.state = 1624; this.match(FlinkSqlParser.KW_MEASURES); - this.state = 1590; + this.state = 1625; this.projectItemDefinition(); - this.state = 1595; + this.state = 1630; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1591; + this.state = 1626; this.match(FlinkSqlParser.COMMA); - this.state = 1592; + this.state = 1627; this.projectItemDefinition(); } } - this.state = 1597; + this.state = 1632; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7869,37 +7935,37 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public patternDefination(): PatternDefinationContext { let _localctx: PatternDefinationContext = new PatternDefinationContext(this._ctx, this.state); - this.enterRule(_localctx, 246, FlinkSqlParser.RULE_patternDefination); + this.enterRule(_localctx, 242, FlinkSqlParser.RULE_patternDefination); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1598; + this.state = 1633; this.match(FlinkSqlParser.KW_PATTERN); - this.state = 1599; + this.state = 1634; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1601; + this.state = 1636; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1600; + this.state = 1635; this.patternVariable(); } } - this.state = 1603; + this.state = 1638; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.DIG_LITERAL || _la === FlinkSqlParser.ID_LITERAL); - this.state = 1605; + this.state = 1640; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1607; + this.state = 1642; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_WITHIN) { { - this.state = 1606; + this.state = 1641; this.withinClause(); } } @@ -7923,19 +7989,19 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public patternVariable(): PatternVariableContext { let _localctx: PatternVariableContext = new PatternVariableContext(this._ctx, this.state); - this.enterRule(_localctx, 248, FlinkSqlParser.RULE_patternVariable); + this.enterRule(_localctx, 244, FlinkSqlParser.RULE_patternVariable); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1609; + this.state = 1644; this.unquotedIdentifier(); - this.state = 1611; + this.state = 1646; this._errHandler.sync(this); _la = this._input.LA(1); if (((((_la - 386)) & ~0x1F) === 0 && ((1 << (_la - 386)) & ((1 << (FlinkSqlParser.LB_BRACKET - 386)) | (1 << (FlinkSqlParser.ASTERISK_SIGN - 386)) | (1 << (FlinkSqlParser.ADD_SIGN - 386)) | (1 << (FlinkSqlParser.QUESTION_MARK_SIGN - 386)))) !== 0)) { { - this.state = 1610; + this.state = 1645; this.quantifiers(); } } @@ -7959,34 +8025,34 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public outputMode(): OutputModeContext { let _localctx: OutputModeContext = new OutputModeContext(this._ctx, this.state); - this.enterRule(_localctx, 250, FlinkSqlParser.RULE_outputMode); + this.enterRule(_localctx, 246, FlinkSqlParser.RULE_outputMode); try { - this.state = 1621; + this.state = 1656; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_ALL: this.enterOuterAlt(_localctx, 1); { - this.state = 1613; + this.state = 1648; this.match(FlinkSqlParser.KW_ALL); - this.state = 1614; + this.state = 1649; this.match(FlinkSqlParser.KW_ROWS); - this.state = 1615; + this.state = 1650; this.match(FlinkSqlParser.KW_PER); - this.state = 1616; + this.state = 1651; this.match(FlinkSqlParser.KW_MATCH); } break; case FlinkSqlParser.KW_ONE: this.enterOuterAlt(_localctx, 2); { - this.state = 1617; + this.state = 1652; this.match(FlinkSqlParser.KW_ONE); - this.state = 1618; + this.state = 1653; this.match(FlinkSqlParser.KW_ROW); - this.state = 1619; + this.state = 1654; this.match(FlinkSqlParser.KW_PER); - this.state = 1620; + this.state = 1655; this.match(FlinkSqlParser.KW_MATCH); } break; @@ -8011,25 +8077,25 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public afterMatchStrategy(): AfterMatchStrategyContext { let _localctx: AfterMatchStrategyContext = new AfterMatchStrategyContext(this._ctx, this.state); - this.enterRule(_localctx, 252, FlinkSqlParser.RULE_afterMatchStrategy); + this.enterRule(_localctx, 248, FlinkSqlParser.RULE_afterMatchStrategy); try { - this.state = 1647; + this.state = 1682; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 182, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 192, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1623; + this.state = 1658; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1624; + this.state = 1659; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1625; + this.state = 1660; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1626; + this.state = 1661; this.match(FlinkSqlParser.KW_PAST); - this.state = 1627; + this.state = 1662; this.match(FlinkSqlParser.KW_LAST); - this.state = 1628; + this.state = 1663; this.match(FlinkSqlParser.KW_ROW); } break; @@ -8037,17 +8103,17 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1629; + this.state = 1664; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1630; + this.state = 1665; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1631; + this.state = 1666; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1632; + this.state = 1667; this.match(FlinkSqlParser.KW_TO); - this.state = 1633; + this.state = 1668; this.match(FlinkSqlParser.KW_NEXT); - this.state = 1634; + this.state = 1669; this.match(FlinkSqlParser.KW_ROW); } break; @@ -8055,17 +8121,17 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1635; + this.state = 1670; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1636; + this.state = 1671; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1637; + this.state = 1672; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1638; + this.state = 1673; this.match(FlinkSqlParser.KW_TO); - this.state = 1639; + this.state = 1674; this.match(FlinkSqlParser.KW_LAST); - this.state = 1640; + this.state = 1675; this.unquotedIdentifier(); } break; @@ -8073,17 +8139,17 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1641; + this.state = 1676; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1642; + this.state = 1677; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1643; + this.state = 1678; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1644; + this.state = 1679; this.match(FlinkSqlParser.KW_TO); - this.state = 1645; + this.state = 1680; this.match(FlinkSqlParser.KW_FIRST); - this.state = 1646; + this.state = 1681; this.unquotedIdentifier(); } break; @@ -8106,28 +8172,28 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public patternVariablesDefination(): PatternVariablesDefinationContext { let _localctx: PatternVariablesDefinationContext = new PatternVariablesDefinationContext(this._ctx, this.state); - this.enterRule(_localctx, 254, FlinkSqlParser.RULE_patternVariablesDefination); + this.enterRule(_localctx, 250, FlinkSqlParser.RULE_patternVariablesDefination); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1649; + this.state = 1684; this.match(FlinkSqlParser.KW_DEFINE); - this.state = 1650; + this.state = 1685; this.projectItemDefinition(); - this.state = 1655; + this.state = 1690; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1651; + this.state = 1686; this.match(FlinkSqlParser.COMMA); - this.state = 1652; + this.state = 1687; this.projectItemDefinition(); } } - this.state = 1657; + this.state = 1692; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -8150,34 +8216,34 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public windowFrame(): WindowFrameContext { let _localctx: WindowFrameContext = new WindowFrameContext(this._ctx, this.state); - this.enterRule(_localctx, 256, FlinkSqlParser.RULE_windowFrame); + this.enterRule(_localctx, 252, FlinkSqlParser.RULE_windowFrame); try { - this.state = 1667; + this.state = 1702; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_RANGE: this.enterOuterAlt(_localctx, 1); { - this.state = 1658; + this.state = 1693; this.match(FlinkSqlParser.KW_RANGE); - this.state = 1659; + this.state = 1694; this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1660; + this.state = 1695; this.timeIntervalExpression(); - this.state = 1661; + this.state = 1696; this.frameBound(); } break; case FlinkSqlParser.KW_ROWS: this.enterOuterAlt(_localctx, 2); { - this.state = 1663; + this.state = 1698; this.match(FlinkSqlParser.KW_ROWS); - this.state = 1664; + this.state = 1699; this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1665; + this.state = 1700; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1666; + this.state = 1701; this.frameBound(); } break; @@ -8202,17 +8268,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public frameBound(): FrameBoundContext { let _localctx: FrameBoundContext = new FrameBoundContext(this._ctx, this.state); - this.enterRule(_localctx, 258, FlinkSqlParser.RULE_frameBound); + this.enterRule(_localctx, 254, FlinkSqlParser.RULE_frameBound); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1669; + this.state = 1704; this.match(FlinkSqlParser.KW_PRECEDING); - this.state = 1670; + this.state = 1705; this.match(FlinkSqlParser.KW_AND); - this.state = 1671; + this.state = 1706; this.match(FlinkSqlParser.KW_CURRENT); - this.state = 1672; + this.state = 1707; this.match(FlinkSqlParser.KW_ROW); } } @@ -8233,13 +8299,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public withinClause(): WithinClauseContext { let _localctx: WithinClauseContext = new WithinClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 260, FlinkSqlParser.RULE_withinClause); + this.enterRule(_localctx, 256, FlinkSqlParser.RULE_withinClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1674; + this.state = 1709; this.match(FlinkSqlParser.KW_WITHIN); - this.state = 1675; + this.state = 1710; this.timeIntervalExpression(); } } @@ -8260,11 +8326,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 262, FlinkSqlParser.RULE_expression); + this.enterRule(_localctx, 258, FlinkSqlParser.RULE_expression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1677; + this.state = 1712; this.booleanExpression(0); } } @@ -8295,25 +8361,25 @@ export class FlinkSqlParser extends Parser { let _parentState: number = this.state; let _localctx: BooleanExpressionContext = new BooleanExpressionContext(this._ctx, _parentState); let _prevctx: BooleanExpressionContext = _localctx; - let _startState: number = 264; - this.enterRecursionRule(_localctx, 264, FlinkSqlParser.RULE_booleanExpression, _p); + let _startState: number = 260; + this.enterRecursionRule(_localctx, 260, FlinkSqlParser.RULE_booleanExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1691; + this.state = 1726; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 186, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 196, this._ctx) ) { case 1: { _localctx = new LogicalNotContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1680; + this.state = 1715; this.match(FlinkSqlParser.KW_NOT); - this.state = 1681; + this.state = 1716; this.booleanExpression(6); } break; @@ -8323,13 +8389,13 @@ export class FlinkSqlParser extends Parser { _localctx = new ExistsContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1682; + this.state = 1717; this.match(FlinkSqlParser.KW_EXISTS); - this.state = 1683; + this.state = 1718; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1684; + this.state = 1719; this.queryStatement(0); - this.state = 1685; + this.state = 1720; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8339,14 +8405,14 @@ export class FlinkSqlParser extends Parser { _localctx = new PredicatedContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1687; + this.state = 1722; this.valueExpression(0); - this.state = 1689; + this.state = 1724; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 185, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 195, this._ctx) ) { case 1: { - this.state = 1688; + this.state = 1723; this.predicate(); } break; @@ -8355,9 +8421,9 @@ export class FlinkSqlParser extends Parser { break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 1707; + this.state = 1742; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 189, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 199, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -8365,21 +8431,21 @@ export class FlinkSqlParser extends Parser { } _prevctx = _localctx; { - this.state = 1705; + this.state = 1740; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 188, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 198, this._ctx) ) { case 1: { _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); (_localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1693; + this.state = 1728; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1694; + this.state = 1729; (_localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_AND); - this.state = 1695; + this.state = 1730; (_localctx as LogicalBinaryContext)._right = this.booleanExpression(4); } break; @@ -8389,13 +8455,13 @@ export class FlinkSqlParser extends Parser { _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); (_localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1696; + this.state = 1731; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1697; + this.state = 1732; (_localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_OR); - this.state = 1698; + this.state = 1733; (_localctx as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -8404,23 +8470,23 @@ export class FlinkSqlParser extends Parser { { _localctx = new LogicalNestedContext(new BooleanExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1699; + this.state = 1734; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1700; + this.state = 1735; this.match(FlinkSqlParser.KW_IS); - this.state = 1702; + this.state = 1737; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 1701; + this.state = 1736; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1704; + this.state = 1739; (_localctx as LogicalNestedContext)._kind = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_FALSE || _la === FlinkSqlParser.KW_NULL || _la === FlinkSqlParser.KW_TRUE || _la === FlinkSqlParser.KW_UNKNOWN)) { @@ -8438,9 +8504,9 @@ export class FlinkSqlParser extends Parser { } } } - this.state = 1709; + this.state = 1744; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 189, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 199, this._ctx); } } } @@ -8461,33 +8527,33 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public predicate(): PredicateContext { let _localctx: PredicateContext = new PredicateContext(this._ctx, this.state); - this.enterRule(_localctx, 266, FlinkSqlParser.RULE_predicate); + this.enterRule(_localctx, 262, FlinkSqlParser.RULE_predicate); let _la: number; try { - this.state = 1777; + this.state = 1812; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 200, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 210, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1711; + this.state = 1746; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 1710; + this.state = 1745; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1713; + this.state = 1748; _localctx._kind = this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1715; + this.state = 1750; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ASYMMETRIC || _la === FlinkSqlParser.KW_SYMMETRIC) { { - this.state = 1714; + this.state = 1749; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ASYMMETRIC || _la === FlinkSqlParser.KW_SYMMETRIC)) { this._errHandler.recoverInline(this); @@ -8502,11 +8568,11 @@ export class FlinkSqlParser extends Parser { } } - this.state = 1717; + this.state = 1752; _localctx._lower = this.valueExpression(0); - this.state = 1718; + this.state = 1753; this.match(FlinkSqlParser.KW_AND); - this.state = 1719; + this.state = 1754; _localctx._upper = this.valueExpression(0); } break; @@ -8514,114 +8580,6 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1722; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === FlinkSqlParser.KW_NOT) { - { - this.state = 1721; - this.match(FlinkSqlParser.KW_NOT); - } - } - - this.state = 1724; - _localctx._kind = this.match(FlinkSqlParser.KW_IN); - this.state = 1725; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1726; - this.expression(); - this.state = 1731; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === FlinkSqlParser.COMMA) { - { - { - this.state = 1727; - this.match(FlinkSqlParser.COMMA); - this.state = 1728; - this.expression(); - } - } - this.state = 1733; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1734; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 1737; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === FlinkSqlParser.KW_NOT) { - { - this.state = 1736; - this.match(FlinkSqlParser.KW_NOT); - } - } - - this.state = 1739; - _localctx._kind = this.match(FlinkSqlParser.KW_IN); - this.state = 1740; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1741; - this.queryStatement(0); - this.state = 1742; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 1744; - _localctx._kind = this.match(FlinkSqlParser.KW_EXISTS); - this.state = 1745; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1746; - this.queryStatement(0); - this.state = 1747; - this.match(FlinkSqlParser.RR_BRACKET); - } - break; - - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 1750; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === FlinkSqlParser.KW_NOT) { - { - this.state = 1749; - this.match(FlinkSqlParser.KW_NOT); - } - } - - this.state = 1752; - _localctx._kind = this.match(FlinkSqlParser.KW_RLIKE); - this.state = 1753; - _localctx._pattern = this.valueExpression(0); - } - break; - - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 1754; - this.likePredicate(); - } - break; - - case 7: - this.enterOuterAlt(_localctx, 7); - { - this.state = 1755; - this.match(FlinkSqlParser.KW_IS); this.state = 1757; this._errHandler.sync(this); _la = this._input.LA(1); @@ -8633,6 +8591,114 @@ export class FlinkSqlParser extends Parser { } this.state = 1759; + _localctx._kind = this.match(FlinkSqlParser.KW_IN); + this.state = 1760; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1761; + this.expression(); + this.state = 1766; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === FlinkSqlParser.COMMA) { + { + { + this.state = 1762; + this.match(FlinkSqlParser.COMMA); + this.state = 1763; + this.expression(); + } + } + this.state = 1768; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1769; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 1772; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === FlinkSqlParser.KW_NOT) { + { + this.state = 1771; + this.match(FlinkSqlParser.KW_NOT); + } + } + + this.state = 1774; + _localctx._kind = this.match(FlinkSqlParser.KW_IN); + this.state = 1775; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1776; + this.queryStatement(0); + this.state = 1777; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 1779; + _localctx._kind = this.match(FlinkSqlParser.KW_EXISTS); + this.state = 1780; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1781; + this.queryStatement(0); + this.state = 1782; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 1785; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === FlinkSqlParser.KW_NOT) { + { + this.state = 1784; + this.match(FlinkSqlParser.KW_NOT); + } + } + + this.state = 1787; + _localctx._kind = this.match(FlinkSqlParser.KW_RLIKE); + this.state = 1788; + _localctx._pattern = this.valueExpression(0); + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 1789; + this.likePredicate(); + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 1790; + this.match(FlinkSqlParser.KW_IS); + this.state = 1792; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === FlinkSqlParser.KW_NOT) { + { + this.state = 1791; + this.match(FlinkSqlParser.KW_NOT); + } + } + + this.state = 1794; _localctx._kind = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_FALSE || _la === FlinkSqlParser.KW_NULL || _la === FlinkSqlParser.KW_TRUE || _la === FlinkSqlParser.KW_UNKNOWN)) { @@ -8651,23 +8717,23 @@ export class FlinkSqlParser extends Parser { case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 1760; + this.state = 1795; this.match(FlinkSqlParser.KW_IS); - this.state = 1762; + this.state = 1797; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 1761; + this.state = 1796; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1764; + this.state = 1799; _localctx._kind = this.match(FlinkSqlParser.KW_DISTINCT); - this.state = 1765; + this.state = 1800; this.match(FlinkSqlParser.KW_FROM); - this.state = 1766; + this.state = 1801; _localctx._right = this.valueExpression(0); } break; @@ -8675,30 +8741,30 @@ export class FlinkSqlParser extends Parser { case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 1768; + this.state = 1803; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 1767; + this.state = 1802; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1770; + this.state = 1805; _localctx._kind = this.match(FlinkSqlParser.KW_SIMILAR); - this.state = 1771; + this.state = 1806; this.match(FlinkSqlParser.KW_TO); - this.state = 1772; + this.state = 1807; _localctx._right = this.valueExpression(0); - this.state = 1775; + this.state = 1810; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 199, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 209, this._ctx) ) { case 1: { - this.state = 1773; + this.state = 1808; this.match(FlinkSqlParser.KW_ESCAPE); - this.state = 1774; + this.state = 1809; this.stringLiteral(); } break; @@ -8724,28 +8790,28 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public likePredicate(): LikePredicateContext { let _localctx: LikePredicateContext = new LikePredicateContext(this._ctx, this.state); - this.enterRule(_localctx, 268, FlinkSqlParser.RULE_likePredicate); + this.enterRule(_localctx, 264, FlinkSqlParser.RULE_likePredicate); let _la: number; try { - this.state = 1808; + this.state = 1843; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 206, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 216, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1780; + this.state = 1815; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 1779; + this.state = 1814; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1782; + this.state = 1817; _localctx._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1783; + this.state = 1818; _localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ALL || _la === FlinkSqlParser.KW_ANY)) { @@ -8758,41 +8824,41 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1797; + this.state = 1832; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 203, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 213, this._ctx) ) { case 1: { - this.state = 1784; + this.state = 1819; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1785; + this.state = 1820; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1786; + this.state = 1821; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1787; + this.state = 1822; this.expression(); - this.state = 1792; + this.state = 1827; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1788; + this.state = 1823; this.match(FlinkSqlParser.COMMA); - this.state = 1789; + this.state = 1824; this.expression(); } } - this.state = 1794; + this.state = 1829; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1795; + this.state = 1830; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8803,28 +8869,28 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1800; + this.state = 1835; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 1799; + this.state = 1834; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1802; + this.state = 1837; _localctx._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1803; + this.state = 1838; _localctx._pattern = this.valueExpression(0); - this.state = 1806; + this.state = 1841; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 205, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 215, this._ctx) ) { case 1: { - this.state = 1804; + this.state = 1839; this.match(FlinkSqlParser.KW_ESCAPE); - this.state = 1805; + this.state = 1840; this.stringLiteral(); } break; @@ -8860,23 +8926,23 @@ export class FlinkSqlParser extends Parser { let _parentState: number = this.state; let _localctx: ValueExpressionContext = new ValueExpressionContext(this._ctx, _parentState); let _prevctx: ValueExpressionContext = _localctx; - let _startState: number = 270; - this.enterRecursionRule(_localctx, 270, FlinkSqlParser.RULE_valueExpression, _p); + let _startState: number = 266; + this.enterRecursionRule(_localctx, 266, FlinkSqlParser.RULE_valueExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1814; + this.state = 1849; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 207, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 217, this._ctx) ) { case 1: { _localctx = new ValueExpressionDefaultContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1811; + this.state = 1846; this.primaryExpression(0); } break; @@ -8886,7 +8952,7 @@ export class FlinkSqlParser extends Parser { _localctx = new ArithmeticUnaryContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1812; + this.state = 1847; (_localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 377)) & ~0x1F) === 0 && ((1 << (_la - 377)) & ((1 << (FlinkSqlParser.BIT_NOT_OP - 377)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 377)) | (1 << (FlinkSqlParser.ADD_SIGN - 377)))) !== 0))) { @@ -8899,15 +8965,15 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1813; + this.state = 1848; this.valueExpression(8); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 1839; + this.state = 1874; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 209, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 219, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -8915,19 +8981,19 @@ export class FlinkSqlParser extends Parser { } _prevctx = _localctx; { - this.state = 1837; + this.state = 1872; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 208, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 218, this._ctx) ) { case 1: { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1816; + this.state = 1851; if (!(this.precpred(this._ctx, 7))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 7)"); } - this.state = 1817; + this.state = 1852; (_localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_DIV || ((((_la - 395)) & ~0x1F) === 0 && ((1 << (_la - 395)) & ((1 << (FlinkSqlParser.ASTERISK_SIGN - 395)) | (1 << (FlinkSqlParser.PENCENT_SIGN - 395)) | (1 << (FlinkSqlParser.SLASH_SIGN - 395)))) !== 0))) { @@ -8940,7 +9006,7 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1818; + this.state = 1853; (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(8); } break; @@ -8950,11 +9016,11 @@ export class FlinkSqlParser extends Parser { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1819; + this.state = 1854; if (!(this.precpred(this._ctx, 6))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 1820; + this.state = 1855; (_localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & ((1 << (FlinkSqlParser.HYPNEN_SIGN - 397)) | (1 << (FlinkSqlParser.ADD_SIGN - 397)) | (1 << (FlinkSqlParser.DOUBLE_VERTICAL_SIGN - 397)))) !== 0))) { @@ -8967,7 +9033,7 @@ export class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1821; + this.state = 1856; (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(7); } break; @@ -8977,13 +9043,13 @@ export class FlinkSqlParser extends Parser { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1822; + this.state = 1857; if (!(this.precpred(this._ctx, 5))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 1823; + this.state = 1858; (_localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 1824; + this.state = 1859; (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(6); } break; @@ -8993,13 +9059,13 @@ export class FlinkSqlParser extends Parser { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1825; + this.state = 1860; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1826; + this.state = 1861; (_localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_XOR_OP); - this.state = 1827; + this.state = 1862; (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(5); } break; @@ -9009,13 +9075,13 @@ export class FlinkSqlParser extends Parser { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1828; + this.state = 1863; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1829; + this.state = 1864; (_localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 1830; + this.state = 1865; (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -9025,13 +9091,13 @@ export class FlinkSqlParser extends Parser { _localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ComparisonContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1831; + this.state = 1866; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1832; + this.state = 1867; this.comparisonOperator(); - this.state = 1833; + this.state = 1868; (_localctx as ComparisonContext)._right = this.valueExpression(3); } break; @@ -9041,20 +9107,20 @@ export class FlinkSqlParser extends Parser { _localctx = new ArithmeticBinaryAlternateContext(new ValueExpressionContext(_parentctx, _parentState)); (_localctx as ArithmeticBinaryAlternateContext)._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1835; + this.state = 1870; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1836; + this.state = 1871; (_localctx as ArithmeticBinaryAlternateContext)._right = this.match(FlinkSqlParser.SLASH_TEXT); } break; } } } - this.state = 1841; + this.state = 1876; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 209, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 219, this._ctx); } } } @@ -9085,51 +9151,51 @@ export class FlinkSqlParser extends Parser { let _parentState: number = this.state; let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, _parentState); let _prevctx: PrimaryExpressionContext = _localctx; - let _startState: number = 272; - this.enterRecursionRule(_localctx, 272, FlinkSqlParser.RULE_primaryExpression, _p); + let _startState: number = 268; + this.enterRecursionRule(_localctx, 268, FlinkSqlParser.RULE_primaryExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1933; + this.state = 1968; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 219, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 229, this._ctx) ) { case 1: { _localctx = new SearchedCaseContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1843; + this.state = 1878; this.match(FlinkSqlParser.KW_CASE); - this.state = 1845; + this.state = 1880; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1844; + this.state = 1879; this.whenClause(); } } - this.state = 1847; + this.state = 1882; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.KW_WHEN); - this.state = 1851; + this.state = 1886; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ELSE) { { - this.state = 1849; + this.state = 1884; this.match(FlinkSqlParser.KW_ELSE); - this.state = 1850; + this.state = 1885; (_localctx as SearchedCaseContext)._elseExpression = this.expression(); } } - this.state = 1853; + this.state = 1888; this.match(FlinkSqlParser.KW_END); } break; @@ -9139,37 +9205,37 @@ export class FlinkSqlParser extends Parser { _localctx = new SimpleCaseContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1855; + this.state = 1890; this.match(FlinkSqlParser.KW_CASE); - this.state = 1856; + this.state = 1891; (_localctx as SimpleCaseContext)._value = this.expression(); - this.state = 1858; + this.state = 1893; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1857; + this.state = 1892; this.whenClause(); } } - this.state = 1860; + this.state = 1895; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.KW_WHEN); - this.state = 1864; + this.state = 1899; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_ELSE) { { - this.state = 1862; + this.state = 1897; this.match(FlinkSqlParser.KW_ELSE); - this.state = 1863; + this.state = 1898; (_localctx as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 1866; + this.state = 1901; this.match(FlinkSqlParser.KW_END); } break; @@ -9179,17 +9245,17 @@ export class FlinkSqlParser extends Parser { _localctx = new CastContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1868; + this.state = 1903; this.match(FlinkSqlParser.KW_CAST); - this.state = 1869; + this.state = 1904; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1870; + this.state = 1905; this.expression(); - this.state = 1871; + this.state = 1906; this.match(FlinkSqlParser.KW_AS); - this.state = 1872; + this.state = 1907; this.columnType(); - this.state = 1873; + this.state = 1908; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9199,25 +9265,25 @@ export class FlinkSqlParser extends Parser { _localctx = new FirstContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1875; + this.state = 1910; this.match(FlinkSqlParser.KW_FIRST); - this.state = 1876; + this.state = 1911; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1877; + this.state = 1912; this.expression(); - this.state = 1880; + this.state = 1915; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_IGNORE) { { - this.state = 1878; + this.state = 1913; this.match(FlinkSqlParser.KW_IGNORE); - this.state = 1879; + this.state = 1914; this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1882; + this.state = 1917; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9227,25 +9293,25 @@ export class FlinkSqlParser extends Parser { _localctx = new LastContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1884; + this.state = 1919; this.match(FlinkSqlParser.KW_LAST); - this.state = 1885; + this.state = 1920; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1886; + this.state = 1921; this.expression(); - this.state = 1889; + this.state = 1924; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_IGNORE) { { - this.state = 1887; + this.state = 1922; this.match(FlinkSqlParser.KW_IGNORE); - this.state = 1888; + this.state = 1923; this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1891; + this.state = 1926; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9255,17 +9321,17 @@ export class FlinkSqlParser extends Parser { _localctx = new PositionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1893; + this.state = 1928; this.match(FlinkSqlParser.KW_POSITION); - this.state = 1894; + this.state = 1929; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1895; + this.state = 1930; (_localctx as PositionContext)._substr = this.valueExpression(0); - this.state = 1896; + this.state = 1931; this.match(FlinkSqlParser.KW_IN); - this.state = 1897; + this.state = 1932; (_localctx as PositionContext)._str = this.valueExpression(0); - this.state = 1898; + this.state = 1933; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9275,7 +9341,7 @@ export class FlinkSqlParser extends Parser { _localctx = new ConstantDefaultContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1900; + this.state = 1935; this.constant(); } break; @@ -9285,7 +9351,7 @@ export class FlinkSqlParser extends Parser { _localctx = new StarContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1901; + this.state = 1936; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9295,11 +9361,11 @@ export class FlinkSqlParser extends Parser { _localctx = new StarContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1902; + this.state = 1937; this.uid(); - this.state = 1903; + this.state = 1938; this.match(FlinkSqlParser.DOT); - this.state = 1904; + this.state = 1939; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9309,11 +9375,11 @@ export class FlinkSqlParser extends Parser { _localctx = new SubqueryExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1906; + this.state = 1941; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1907; + this.state = 1942; this.queryStatement(0); - this.state = 1908; + this.state = 1943; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9323,47 +9389,47 @@ export class FlinkSqlParser extends Parser { _localctx = new FunctionCallContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1910; + this.state = 1945; this.functionName(); - this.state = 1911; + this.state = 1946; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1923; + this.state = 1958; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << FlinkSqlParser.KW_ADD) | (1 << FlinkSqlParser.KW_ADMIN) | (1 << FlinkSqlParser.KW_AFTER) | (1 << FlinkSqlParser.KW_ANALYZE) | (1 << FlinkSqlParser.KW_ASC) | (1 << FlinkSqlParser.KW_BEFORE) | (1 << FlinkSqlParser.KW_BYTES) | (1 << FlinkSqlParser.KW_CASCADE) | (1 << FlinkSqlParser.KW_CATALOG) | (1 << FlinkSqlParser.KW_CATALOGS) | (1 << FlinkSqlParser.KW_CENTURY) | (1 << FlinkSqlParser.KW_CHAIN) | (1 << FlinkSqlParser.KW_CHANGELOG_MODE) | (1 << FlinkSqlParser.KW_CHARACTERS) | (1 << FlinkSqlParser.KW_COMMENT) | (1 << FlinkSqlParser.KW_COMPACT) | (1 << FlinkSqlParser.KW_COLUMNS) | (1 << FlinkSqlParser.KW_CONSTRAINTS) | (1 << FlinkSqlParser.KW_CONSTRUCTOR) | (1 << FlinkSqlParser.KW_CUMULATE) | (1 << FlinkSqlParser.KW_DATA) | (1 << FlinkSqlParser.KW_DATABASE) | (1 << FlinkSqlParser.KW_DATABASES) | (1 << FlinkSqlParser.KW_DAYS) | (1 << FlinkSqlParser.KW_DECADE) | (1 << FlinkSqlParser.KW_DEFINED) | (1 << FlinkSqlParser.KW_DESC) | (1 << FlinkSqlParser.KW_DESCRIPTOR))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.KW_DIV - 32)) | (1 << (FlinkSqlParser.KW_ENCODING - 32)) | (1 << (FlinkSqlParser.KW_ENFORCED - 32)) | (1 << (FlinkSqlParser.KW_ENGINE - 32)) | (1 << (FlinkSqlParser.KW_EPOCH - 32)) | (1 << (FlinkSqlParser.KW_ERROR - 32)) | (1 << (FlinkSqlParser.KW_ESTIMATED_COST - 32)) | (1 << (FlinkSqlParser.KW_EXCEPTION - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDE - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDING - 32)) | (1 << (FlinkSqlParser.KW_EXTENDED - 32)) | (1 << (FlinkSqlParser.KW_FILE - 32)) | (1 << (FlinkSqlParser.KW_FINAL - 32)) | (1 << (FlinkSqlParser.KW_FIRST - 32)) | (1 << (FlinkSqlParser.KW_FOLLOWING - 32)) | (1 << (FlinkSqlParser.KW_FORMAT - 32)) | (1 << (FlinkSqlParser.KW_FORTRAN - 32)) | (1 << (FlinkSqlParser.KW_FOUND - 32)) | (1 << (FlinkSqlParser.KW_FRAC_SECOND - 32)) | (1 << (FlinkSqlParser.KW_FUNCTIONS - 32)) | (1 << (FlinkSqlParser.KW_GENERAL - 32)) | (1 << (FlinkSqlParser.KW_GENERATED - 32)) | (1 << (FlinkSqlParser.KW_GO - 32)) | (1 << (FlinkSqlParser.KW_GOTO - 32)) | (1 << (FlinkSqlParser.KW_GRANTED - 32)) | (1 << (FlinkSqlParser.KW_HOP - 32)) | (1 << (FlinkSqlParser.KW_HOURS - 32)) | (1 << (FlinkSqlParser.KW_IF - 32)) | (1 << (FlinkSqlParser.KW_IGNORE - 32)) | (1 << (FlinkSqlParser.KW_INCREMENT - 32)) | (1 << (FlinkSqlParser.KW_INPUT - 32)) | (1 << (FlinkSqlParser.KW_INVOKER - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.KW_JAR - 64)) | (1 << (FlinkSqlParser.KW_JARS - 64)) | (1 << (FlinkSqlParser.KW_JAVA - 64)) | (1 << (FlinkSqlParser.KW_JSON - 64)) | (1 << (FlinkSqlParser.KW_JSON_EXECUTION_PLAN - 64)) | (1 << (FlinkSqlParser.KW_KEY - 64)) | (1 << (FlinkSqlParser.KW_KEY_MEMBER - 64)) | (1 << (FlinkSqlParser.KW_KEY_TYPE - 64)) | (1 << (FlinkSqlParser.KW_LABEL - 64)) | (1 << (FlinkSqlParser.KW_LAST - 64)) | (1 << (FlinkSqlParser.KW_LENGTH - 64)) | (1 << (FlinkSqlParser.KW_LEVEL - 64)) | (1 << (FlinkSqlParser.KW_LOAD - 64)) | (1 << (FlinkSqlParser.KW_MAP - 64)) | (1 << (FlinkSqlParser.KW_MICROSECOND - 64)) | (1 << (FlinkSqlParser.KW_MILLENNIUM - 64)) | (1 << (FlinkSqlParser.KW_MILLISECOND - 64)) | (1 << (FlinkSqlParser.KW_MINUTES - 64)) | (1 << (FlinkSqlParser.KW_MINVALUE - 64)) | (1 << (FlinkSqlParser.KW_MODIFY - 64)) | (1 << (FlinkSqlParser.KW_MODULES - 64)) | (1 << (FlinkSqlParser.KW_MONTHS - 64)) | (1 << (FlinkSqlParser.KW_NANOSECOND - 64)) | (1 << (FlinkSqlParser.KW_NULLS - 64)) | (1 << (FlinkSqlParser.KW_NUMBER - 64)) | (1 << (FlinkSqlParser.KW_OPTION - 64)) | (1 << (FlinkSqlParser.KW_OPTIONS - 64)) | (1 << (FlinkSqlParser.KW_ORDERING - 64)) | (1 << (FlinkSqlParser.KW_OUTPUT - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITE - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITING - 64)) | (1 << (FlinkSqlParser.KW_PARTITIONED - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (FlinkSqlParser.KW_PARTITIONS - 96)) | (1 << (FlinkSqlParser.KW_PASSING - 96)) | (1 << (FlinkSqlParser.KW_PAST - 96)) | (1 << (FlinkSqlParser.KW_PATH - 96)) | (1 << (FlinkSqlParser.KW_PLACING - 96)) | (1 << (FlinkSqlParser.KW_PLAN - 96)) | (1 << (FlinkSqlParser.KW_PRECEDING - 96)) | (1 << (FlinkSqlParser.KW_PRESERVE - 96)) | (1 << (FlinkSqlParser.KW_PRIOR - 96)) | (1 << (FlinkSqlParser.KW_PRIVILEGES - 96)) | (1 << (FlinkSqlParser.KW_PUBLIC - 96)) | (1 << (FlinkSqlParser.KW_PYTHON - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_FILES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_REQUIREMENTS - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_DEPENDENCIES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_JAR - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_ARCHIVES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_PARAMETER - 96)) | (1 << (FlinkSqlParser.KW_QUARTER - 96)) | (1 << (FlinkSqlParser.KW_RAW - 96)) | (1 << (FlinkSqlParser.KW_READ - 96)) | (1 << (FlinkSqlParser.KW_RELATIVE - 96)) | (1 << (FlinkSqlParser.KW_REMOVE - 96)) | (1 << (FlinkSqlParser.KW_RENAME - 96)) | (1 << (FlinkSqlParser.KW_REPLACE - 96)) | (1 << (FlinkSqlParser.KW_RESPECT - 96)) | (1 << (FlinkSqlParser.KW_RESTART - 96)) | (1 << (FlinkSqlParser.KW_RESTRICT - 96)) | (1 << (FlinkSqlParser.KW_ROLE - 96)) | (1 << (FlinkSqlParser.KW_ROW_COUNT - 96)) | (1 << (FlinkSqlParser.KW_SCALA - 96)) | (1 << (FlinkSqlParser.KW_SCALAR - 96)))) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & ((1 << (FlinkSqlParser.KW_SCALE - 128)) | (1 << (FlinkSqlParser.KW_SCHEMA - 128)) | (1 << (FlinkSqlParser.KW_SECONDS - 128)) | (1 << (FlinkSqlParser.KW_SECTION - 128)) | (1 << (FlinkSqlParser.KW_SECURITY - 128)) | (1 << (FlinkSqlParser.KW_SELF - 128)) | (1 << (FlinkSqlParser.KW_SERVER - 128)) | (1 << (FlinkSqlParser.KW_SERVER_NAME - 128)) | (1 << (FlinkSqlParser.KW_SESSION - 128)) | (1 << (FlinkSqlParser.KW_SETS - 128)) | (1 << (FlinkSqlParser.KW_SIMPLE - 128)) | (1 << (FlinkSqlParser.KW_SIZE - 128)) | (1 << (FlinkSqlParser.KW_SLIDE - 128)) | (1 << (FlinkSqlParser.KW_SOURCE - 128)) | (1 << (FlinkSqlParser.KW_SPACE - 128)) | (1 << (FlinkSqlParser.KW_STATE - 128)) | (1 << (FlinkSqlParser.KW_STATEMENT - 128)) | (1 << (FlinkSqlParser.KW_STEP - 128)) | (1 << (FlinkSqlParser.KW_STRING - 128)) | (1 << (FlinkSqlParser.KW_STRUCTURE - 128)) | (1 << (FlinkSqlParser.KW_STYLE - 128)) | (1 << (FlinkSqlParser.KW_TABLES - 128)) | (1 << (FlinkSqlParser.KW_TEMPORARY - 128)) | (1 << (FlinkSqlParser.KW_TIMECOL - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMP_LTZ - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPADD - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPDIFF - 128)) | (1 << (FlinkSqlParser.KW_TRANSFORM - 128)) | (1 << (FlinkSqlParser.KW_TUMBLE - 128)) | (1 << (FlinkSqlParser.KW_TYPE - 128)) | (1 << (FlinkSqlParser.KW_UNDER - 128)) | (1 << (FlinkSqlParser.KW_UNLOAD - 128)))) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & ((1 << (FlinkSqlParser.KW_USAGE - 160)) | (1 << (FlinkSqlParser.KW_USE - 160)) | (1 << (FlinkSqlParser.KW_UTF16 - 160)) | (1 << (FlinkSqlParser.KW_UTF32 - 160)) | (1 << (FlinkSqlParser.KW_UTF8 - 160)) | (1 << (FlinkSqlParser.KW_VERSION - 160)) | (1 << (FlinkSqlParser.KW_VIEW - 160)) | (1 << (FlinkSqlParser.KW_VIEWS - 160)) | (1 << (FlinkSqlParser.KW_VIRTUAL - 160)) | (1 << (FlinkSqlParser.KW_WATERMARK - 160)) | (1 << (FlinkSqlParser.KW_WATERMARKS - 160)) | (1 << (FlinkSqlParser.KW_WEEK - 160)) | (1 << (FlinkSqlParser.KW_WEEKS - 160)) | (1 << (FlinkSqlParser.KW_WORK - 160)) | (1 << (FlinkSqlParser.KW_WRAPPER - 160)) | (1 << (FlinkSqlParser.KW_YEARS - 160)) | (1 << (FlinkSqlParser.KW_ZONE - 160)) | (1 << (FlinkSqlParser.KW_ABS - 160)) | (1 << (FlinkSqlParser.KW_ALL - 160)) | (1 << (FlinkSqlParser.KW_ARRAY - 160)) | (1 << (FlinkSqlParser.KW_AVG - 160)))) !== 0) || ((((_la - 196)) & ~0x1F) === 0 && ((1 << (_la - 196)) & ((1 << (FlinkSqlParser.KW_BOTH - 196)) | (1 << (FlinkSqlParser.KW_CASE - 196)) | (1 << (FlinkSqlParser.KW_CAST - 196)) | (1 << (FlinkSqlParser.KW_CEIL - 196)) | (1 << (FlinkSqlParser.KW_COALESCE - 196)) | (1 << (FlinkSqlParser.KW_COLLECT - 196)) | (1 << (FlinkSqlParser.KW_COUNT - 196)) | (1 << (FlinkSqlParser.KW_DATE - 196)) | (1 << (FlinkSqlParser.KW_DAY - 196)))) !== 0) || ((((_la - 235)) & ~0x1F) === 0 && ((1 << (_la - 235)) & ((1 << (FlinkSqlParser.KW_DISTINCT - 235)) | (1 << (FlinkSqlParser.KW_EXISTS - 235)) | (1 << (FlinkSqlParser.KW_FALSE - 235)) | (1 << (FlinkSqlParser.KW_GROUPING - 235)) | (1 << (FlinkSqlParser.KW_HOUR - 235)))) !== 0) || ((((_la - 271)) & ~0x1F) === 0 && ((1 << (_la - 271)) & ((1 << (FlinkSqlParser.KW_INTERVAL - 271)) | (1 << (FlinkSqlParser.KW_LAG - 271)) | (1 << (FlinkSqlParser.KW_LEADING - 271)) | (1 << (FlinkSqlParser.KW_LEFT - 271)) | (1 << (FlinkSqlParser.KW_MINUTE - 271)) | (1 << (FlinkSqlParser.KW_MONTH - 271)) | (1 << (FlinkSqlParser.KW_NOT - 271)) | (1 << (FlinkSqlParser.KW_NULL - 271)))) !== 0) || ((((_la - 310)) & ~0x1F) === 0 && ((1 << (_la - 310)) & ((1 << (FlinkSqlParser.KW_OVERLAY - 310)) | (1 << (FlinkSqlParser.KW_POSITION - 310)) | (1 << (FlinkSqlParser.KW_POWER - 310)) | (1 << (FlinkSqlParser.KW_RANK - 310)) | (1 << (FlinkSqlParser.KW_RIGHT - 310)) | (1 << (FlinkSqlParser.KW_SECOND - 310)) | (1 << (FlinkSqlParser.KW_SUBSTRING - 310)) | (1 << (FlinkSqlParser.KW_SUM - 310)))) !== 0) || ((((_la - 347)) & ~0x1F) === 0 && ((1 << (_la - 347)) & ((1 << (FlinkSqlParser.KW_TIME - 347)) | (1 << (FlinkSqlParser.KW_TIMESTAMP - 347)) | (1 << (FlinkSqlParser.KW_TRAILING - 347)) | (1 << (FlinkSqlParser.KW_TRUE - 347)) | (1 << (FlinkSqlParser.KW_TRUNCATE - 347)) | (1 << (FlinkSqlParser.KW_UPPER - 347)) | (1 << (FlinkSqlParser.KW_YEAR - 347)) | (1 << (FlinkSqlParser.BIT_NOT_OP - 347)))) !== 0) || ((((_la - 384)) & ~0x1F) === 0 && ((1 << (_la - 384)) & ((1 << (FlinkSqlParser.LR_BRACKET - 384)) | (1 << (FlinkSqlParser.ASTERISK_SIGN - 384)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 384)) | (1 << (FlinkSqlParser.ADD_SIGN - 384)) | (1 << (FlinkSqlParser.STRING_LITERAL - 384)) | (1 << (FlinkSqlParser.DIG_LITERAL - 384)) | (1 << (FlinkSqlParser.REAL_LITERAL - 384)) | (1 << (FlinkSqlParser.BIT_STRING - 384)) | (1 << (FlinkSqlParser.ID_LITERAL - 384)))) !== 0)) { { - this.state = 1913; + this.state = 1948; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 216, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 226, this._ctx) ) { case 1: { - this.state = 1912; + this.state = 1947; this.setQuantifier(); } break; } - this.state = 1915; + this.state = 1950; this.functionParam(); - this.state = 1920; + this.state = 1955; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 1916; + this.state = 1951; this.match(FlinkSqlParser.COMMA); - this.state = 1917; + this.state = 1952; this.functionParam(); } } - this.state = 1922; + this.state = 1957; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 1925; + this.state = 1960; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9373,7 +9439,7 @@ export class FlinkSqlParser extends Parser { _localctx = new ColumnReferenceContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1927; + this.state = 1962; this.identifier(); } break; @@ -9383,7 +9449,7 @@ export class FlinkSqlParser extends Parser { _localctx = new DereferenceContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1928; + this.state = 1963; this.dereferenceDefinition(); } break; @@ -9393,19 +9459,19 @@ export class FlinkSqlParser extends Parser { _localctx = new ParenthesizedExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 1929; + this.state = 1964; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1930; + this.state = 1965; this.expression(); - this.state = 1931; + this.state = 1966; this.match(FlinkSqlParser.RR_BRACKET); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 1942; + this.state = 1977; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 220, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 230, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -9417,22 +9483,22 @@ export class FlinkSqlParser extends Parser { _localctx = new SubscriptContext(new PrimaryExpressionContext(_parentctx, _parentState)); (_localctx as SubscriptContext)._value = _prevctx; this.pushNewRecursionContext(_localctx, _startState, FlinkSqlParser.RULE_primaryExpression); - this.state = 1935; + this.state = 1970; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1936; + this.state = 1971; this.match(FlinkSqlParser.LS_BRACKET); - this.state = 1937; + this.state = 1972; (_localctx as SubscriptContext)._index = this.valueExpression(0); - this.state = 1938; + this.state = 1973; this.match(FlinkSqlParser.RS_BRACKET); } } } - this.state = 1944; + this.state = 1979; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 220, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 230, this._ctx); } } } @@ -9453,15 +9519,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public functionName(): FunctionNameContext { let _localctx: FunctionNameContext = new FunctionNameContext(this._ctx, this.state); - this.enterRule(_localctx, 274, FlinkSqlParser.RULE_functionName); + this.enterRule(_localctx, 270, FlinkSqlParser.RULE_functionName); try { - this.state = 1948; + this.state = 1983; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 221, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 231, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1945; + this.state = 1980; this.reservedKeywordsUsedAsFuncName(); } break; @@ -9469,7 +9535,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1946; + this.state = 1981; this.nonReservedKeywords(); } break; @@ -9477,7 +9543,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1947; + this.state = 1982; this.uid(); } break; @@ -9500,15 +9566,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public functionParam(): FunctionParamContext { let _localctx: FunctionParamContext = new FunctionParamContext(this._ctx, this.state); - this.enterRule(_localctx, 276, FlinkSqlParser.RULE_functionParam); + this.enterRule(_localctx, 272, FlinkSqlParser.RULE_functionParam); try { - this.state = 1954; + this.state = 1989; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 222, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 232, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1950; + this.state = 1985; this.reservedKeywordsUsedAsFuncParam(); } break; @@ -9516,7 +9582,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1951; + this.state = 1986; this.timeIntervalUnit(); } break; @@ -9524,7 +9590,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1952; + this.state = 1987; this.timePointUnit(); } break; @@ -9532,7 +9598,7 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1953; + this.state = 1988; this.expression(); } break; @@ -9555,11 +9621,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public dereferenceDefinition(): DereferenceDefinitionContext { let _localctx: DereferenceDefinitionContext = new DereferenceDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 278, FlinkSqlParser.RULE_dereferenceDefinition); + this.enterRule(_localctx, 274, FlinkSqlParser.RULE_dereferenceDefinition); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1956; + this.state = 1991; this.uid(); } } @@ -9580,11 +9646,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public correlationName(): CorrelationNameContext { let _localctx: CorrelationNameContext = new CorrelationNameContext(this._ctx, this.state); - this.enterRule(_localctx, 280, FlinkSqlParser.RULE_correlationName); + this.enterRule(_localctx, 276, FlinkSqlParser.RULE_correlationName); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1958; + this.state = 1993; this.identifier(); } } @@ -9605,15 +9671,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public qualifiedName(): QualifiedNameContext { let _localctx: QualifiedNameContext = new QualifiedNameContext(this._ctx, this.state); - this.enterRule(_localctx, 282, FlinkSqlParser.RULE_qualifiedName); + this.enterRule(_localctx, 278, FlinkSqlParser.RULE_qualifiedName); try { - this.state = 1962; + this.state = 1997; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 223, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 233, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1960; + this.state = 1995; this.identifier(); } break; @@ -9621,7 +9687,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1961; + this.state = 1996; this.dereferenceDefinition(); } break; @@ -9644,25 +9710,25 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public timeIntervalExpression(): TimeIntervalExpressionContext { let _localctx: TimeIntervalExpressionContext = new TimeIntervalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 284, FlinkSqlParser.RULE_timeIntervalExpression); + this.enterRule(_localctx, 280, FlinkSqlParser.RULE_timeIntervalExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1964; + this.state = 1999; this.match(FlinkSqlParser.KW_INTERVAL); - this.state = 1967; + this.state = 2002; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 224, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 234, this._ctx) ) { case 1: { - this.state = 1965; + this.state = 2000; this.errorCapturingMultiUnitsInterval(); } break; case 2: { - this.state = 1966; + this.state = 2001; this.errorCapturingUnitToUnitInterval(); } break; @@ -9686,18 +9752,18 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { let _localctx: ErrorCapturingMultiUnitsIntervalContext = new ErrorCapturingMultiUnitsIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 286, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); + this.enterRule(_localctx, 282, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1969; + this.state = 2004; this.multiUnitsInterval(); - this.state = 1971; + this.state = 2006; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 225, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 235, this._ctx) ) { case 1: { - this.state = 1970; + this.state = 2005; this.unitToUnitInterval(); } break; @@ -9721,12 +9787,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public multiUnitsInterval(): MultiUnitsIntervalContext { let _localctx: MultiUnitsIntervalContext = new MultiUnitsIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 288, FlinkSqlParser.RULE_multiUnitsInterval); + this.enterRule(_localctx, 284, FlinkSqlParser.RULE_multiUnitsInterval); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1976; + this.state = 2011; this._errHandler.sync(this); _alt = 1; do { @@ -9734,9 +9800,9 @@ export class FlinkSqlParser extends Parser { case 1: { { - this.state = 1973; + this.state = 2008; this.intervalValue(); - this.state = 1974; + this.state = 2009; this.timeIntervalUnit(); } } @@ -9744,9 +9810,9 @@ export class FlinkSqlParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 1978; + this.state = 2013; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 226, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 236, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } @@ -9767,25 +9833,25 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { let _localctx: ErrorCapturingUnitToUnitIntervalContext = new ErrorCapturingUnitToUnitIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 290, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); + this.enterRule(_localctx, 286, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1980; + this.state = 2015; _localctx._body = this.unitToUnitInterval(); - this.state = 1983; + this.state = 2018; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 227, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 237, this._ctx) ) { case 1: { - this.state = 1981; + this.state = 2016; _localctx._error1 = this.multiUnitsInterval(); } break; case 2: { - this.state = 1982; + this.state = 2017; _localctx._error2 = this.unitToUnitInterval(); } break; @@ -9809,17 +9875,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public unitToUnitInterval(): UnitToUnitIntervalContext { let _localctx: UnitToUnitIntervalContext = new UnitToUnitIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 292, FlinkSqlParser.RULE_unitToUnitInterval); + this.enterRule(_localctx, 288, FlinkSqlParser.RULE_unitToUnitInterval); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1985; + this.state = 2020; _localctx._value = this.intervalValue(); - this.state = 1986; + this.state = 2021; _localctx._from = this.timeIntervalUnit(); - this.state = 1987; + this.state = 2022; this.match(FlinkSqlParser.KW_TO); - this.state = 1988; + this.state = 2023; _localctx._to = this.timeIntervalUnit(); } } @@ -9840,10 +9906,10 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public intervalValue(): IntervalValueContext { let _localctx: IntervalValueContext = new IntervalValueContext(this._ctx, this.state); - this.enterRule(_localctx, 294, FlinkSqlParser.RULE_intervalValue); + this.enterRule(_localctx, 290, FlinkSqlParser.RULE_intervalValue); let _la: number; try { - this.state = 1995; + this.state = 2030; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.HYPNEN_SIGN: @@ -9852,12 +9918,12 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.REAL_LITERAL: this.enterOuterAlt(_localctx, 1); { - this.state = 1991; + this.state = 2026; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.HYPNEN_SIGN || _la === FlinkSqlParser.ADD_SIGN) { { - this.state = 1990; + this.state = 2025; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.HYPNEN_SIGN || _la === FlinkSqlParser.ADD_SIGN)) { this._errHandler.recoverInline(this); @@ -9872,7 +9938,7 @@ export class FlinkSqlParser extends Parser { } } - this.state = 1993; + this.state = 2028; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.DIG_LITERAL || _la === FlinkSqlParser.REAL_LITERAL)) { this._errHandler.recoverInline(this); @@ -9889,7 +9955,7 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.STRING_LITERAL: this.enterOuterAlt(_localctx, 2); { - this.state = 1994; + this.state = 2029; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -9914,29 +9980,29 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public columnAlias(): ColumnAliasContext { let _localctx: ColumnAliasContext = new ColumnAliasContext(this._ctx, this.state); - this.enterRule(_localctx, 296, FlinkSqlParser.RULE_columnAlias); + this.enterRule(_localctx, 292, FlinkSqlParser.RULE_columnAlias); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1998; + this.state = 2033; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 1997; + this.state = 2032; this.match(FlinkSqlParser.KW_AS); } } - this.state = 2000; + this.state = 2035; this.identifier(); - this.state = 2002; + this.state = 2037; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.LR_BRACKET) { { - this.state = 2001; + this.state = 2036; this.identifierList(); } } @@ -9960,29 +10026,29 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableAlias(): TableAliasContext { let _localctx: TableAliasContext = new TableAliasContext(this._ctx, this.state); - this.enterRule(_localctx, 298, FlinkSqlParser.RULE_tableAlias); + this.enterRule(_localctx, 294, FlinkSqlParser.RULE_tableAlias); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2005; + this.state = 2040; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_AS) { { - this.state = 2004; + this.state = 2039; this.match(FlinkSqlParser.KW_AS); } } - this.state = 2007; + this.state = 2042; this.identifier(); - this.state = 2009; + this.state = 2044; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 233, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 243, this._ctx) ) { case 1: { - this.state = 2008; + this.state = 2043; this.identifierList(); } break; @@ -10006,13 +10072,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { let _localctx: ErrorCapturingIdentifierContext = new ErrorCapturingIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 300, FlinkSqlParser.RULE_errorCapturingIdentifier); + this.enterRule(_localctx, 296, FlinkSqlParser.RULE_errorCapturingIdentifier); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2011; + this.state = 2046; this.identifier(); - this.state = 2012; + this.state = 2047; this.errorCapturingIdentifierExtra(); } } @@ -10033,29 +10099,29 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingIdentifierExtra(): ErrorCapturingIdentifierExtraContext { let _localctx: ErrorCapturingIdentifierExtraContext = new ErrorCapturingIdentifierExtraContext(this._ctx, this.state); - this.enterRule(_localctx, 302, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); + this.enterRule(_localctx, 298, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); let _la: number; try { - this.state = 2021; + this.state = 2056; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_MINUS: _localctx = new ErrorIdentContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 2016; + this.state = 2051; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 2014; + this.state = 2049; this.match(FlinkSqlParser.KW_MINUS); - this.state = 2015; + this.state = 2050; this.identifier(); } } - this.state = 2018; + this.state = 2053; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === FlinkSqlParser.KW_MINUS); @@ -10090,15 +10156,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public identifierList(): IdentifierListContext { let _localctx: IdentifierListContext = new IdentifierListContext(this._ctx, this.state); - this.enterRule(_localctx, 304, FlinkSqlParser.RULE_identifierList); + this.enterRule(_localctx, 300, FlinkSqlParser.RULE_identifierList); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2023; + this.state = 2058; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 2024; + this.state = 2059; this.identifierSeq(); - this.state = 2025; + this.state = 2060; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -10119,26 +10185,26 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public identifierSeq(): IdentifierSeqContext { let _localctx: IdentifierSeqContext = new IdentifierSeqContext(this._ctx, this.state); - this.enterRule(_localctx, 306, FlinkSqlParser.RULE_identifierSeq); + this.enterRule(_localctx, 302, FlinkSqlParser.RULE_identifierSeq); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2027; + this.state = 2062; this.identifier(); - this.state = 2032; + this.state = 2067; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 2028; + this.state = 2063; this.match(FlinkSqlParser.COMMA); - this.state = 2029; + this.state = 2064; this.identifier(); } } - this.state = 2034; + this.state = 2069; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -10161,9 +10227,9 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public identifier(): IdentifierContext { let _localctx: IdentifierContext = new IdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 308, FlinkSqlParser.RULE_identifier); + this.enterRule(_localctx, 304, FlinkSqlParser.RULE_identifier); try { - this.state = 2038; + this.state = 2073; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.DIG_LITERAL: @@ -10171,7 +10237,7 @@ export class FlinkSqlParser extends Parser { _localctx = new UnquotedIdentifierAlternativeContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 2035; + this.state = 2070; this.unquotedIdentifier(); } break; @@ -10179,7 +10245,7 @@ export class FlinkSqlParser extends Parser { _localctx = new QuotedIdentifierAlternativeContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 2036; + this.state = 2071; this.quotedIdentifier(); } break; @@ -10357,7 +10423,7 @@ export class FlinkSqlParser extends Parser { _localctx = new NonReservedKeywordsAlternativeContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 2037; + this.state = 2072; this.nonReservedKeywords(); } break; @@ -10382,12 +10448,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public unquotedIdentifier(): UnquotedIdentifierContext { let _localctx: UnquotedIdentifierContext = new UnquotedIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 310, FlinkSqlParser.RULE_unquotedIdentifier); + this.enterRule(_localctx, 306, FlinkSqlParser.RULE_unquotedIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2040; + this.state = 2075; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.DIG_LITERAL || _la === FlinkSqlParser.ID_LITERAL)) { this._errHandler.recoverInline(this); @@ -10418,11 +10484,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public quotedIdentifier(): QuotedIdentifierContext { let _localctx: QuotedIdentifierContext = new QuotedIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 312, FlinkSqlParser.RULE_quotedIdentifier); + this.enterRule(_localctx, 308, FlinkSqlParser.RULE_quotedIdentifier); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2042; + this.state = 2077; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -10443,17 +10509,17 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public whenClause(): WhenClauseContext { let _localctx: WhenClauseContext = new WhenClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 314, FlinkSqlParser.RULE_whenClause); + this.enterRule(_localctx, 310, FlinkSqlParser.RULE_whenClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2044; + this.state = 2079; this.match(FlinkSqlParser.KW_WHEN); - this.state = 2045; + this.state = 2080; _localctx._condition = this.expression(); - this.state = 2046; + this.state = 2081; this.match(FlinkSqlParser.KW_THEN); - this.state = 2047; + this.state = 2082; _localctx._result = this.expression(); } } @@ -10472,32 +10538,157 @@ export class FlinkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) + public catalogPath(): CatalogPathContext { + let _localctx: CatalogPathContext = new CatalogPathContext(this._ctx, this.state); + this.enterRule(_localctx, 312, FlinkSqlParser.RULE_catalogPath); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2084; + this.uid(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public databasePath(): DatabasePathContext { + let _localctx: DatabasePathContext = new DatabasePathContext(this._ctx, this.state); + this.enterRule(_localctx, 314, FlinkSqlParser.RULE_databasePath); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2086; + this.uid(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public databasePathCreate(): DatabasePathCreateContext { + let _localctx: DatabasePathCreateContext = new DatabasePathCreateContext(this._ctx, this.state); + this.enterRule(_localctx, 316, FlinkSqlParser.RULE_databasePathCreate); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2088; + this.uid(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public tablePathCreate(): TablePathCreateContext { + let _localctx: TablePathCreateContext = new TablePathCreateContext(this._ctx, this.state); + this.enterRule(_localctx, 318, FlinkSqlParser.RULE_tablePathCreate); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2090; + this.uid(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public tablePath(): TablePathContext { + let _localctx: TablePathContext = new TablePathContext(this._ctx, this.state); + this.enterRule(_localctx, 320, FlinkSqlParser.RULE_tablePath); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2092; + this.uid(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) public uid(): UidContext { let _localctx: UidContext = new UidContext(this._ctx, this.state); - this.enterRule(_localctx, 316, FlinkSqlParser.RULE_uid); + this.enterRule(_localctx, 322, FlinkSqlParser.RULE_uid); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2049; + this.state = 2094; this.identifier(); - this.state = 2054; + this.state = 2099; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 238, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 248, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 2050; + this.state = 2095; this.match(FlinkSqlParser.DOT); - this.state = 2051; + this.state = 2096; this.identifier(); } } } - this.state = 2056; + this.state = 2101; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 238, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 248, this._ctx); } } } @@ -10518,13 +10709,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public withOption(): WithOptionContext { let _localctx: WithOptionContext = new WithOptionContext(this._ctx, this.state); - this.enterRule(_localctx, 318, FlinkSqlParser.RULE_withOption); + this.enterRule(_localctx, 324, FlinkSqlParser.RULE_withOption); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2057; + this.state = 2102; this.match(FlinkSqlParser.KW_WITH); - this.state = 2058; + this.state = 2103; this.tablePropertyList(); } } @@ -10545,15 +10736,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public ifNotExists(): IfNotExistsContext { let _localctx: IfNotExistsContext = new IfNotExistsContext(this._ctx, this.state); - this.enterRule(_localctx, 320, FlinkSqlParser.RULE_ifNotExists); + this.enterRule(_localctx, 326, FlinkSqlParser.RULE_ifNotExists); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2060; + this.state = 2105; this.match(FlinkSqlParser.KW_IF); - this.state = 2061; + this.state = 2106; this.match(FlinkSqlParser.KW_NOT); - this.state = 2062; + this.state = 2107; this.match(FlinkSqlParser.KW_EXISTS); } } @@ -10574,13 +10765,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public ifExists(): IfExistsContext { let _localctx: IfExistsContext = new IfExistsContext(this._ctx, this.state); - this.enterRule(_localctx, 322, FlinkSqlParser.RULE_ifExists); + this.enterRule(_localctx, 328, FlinkSqlParser.RULE_ifExists); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2064; + this.state = 2109; this.match(FlinkSqlParser.KW_IF); - this.state = 2065; + this.state = 2110; this.match(FlinkSqlParser.KW_EXISTS); } } @@ -10601,32 +10792,32 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyList(): TablePropertyListContext { let _localctx: TablePropertyListContext = new TablePropertyListContext(this._ctx, this.state); - this.enterRule(_localctx, 324, FlinkSqlParser.RULE_tablePropertyList); + this.enterRule(_localctx, 330, FlinkSqlParser.RULE_tablePropertyList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2067; + this.state = 2112; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 2068; + this.state = 2113; this.tableProperty(); - this.state = 2073; + this.state = 2118; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === FlinkSqlParser.COMMA) { { { - this.state = 2069; + this.state = 2114; this.match(FlinkSqlParser.COMMA); - this.state = 2070; + this.state = 2115; this.tableProperty(); } } - this.state = 2075; + this.state = 2120; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 2076; + this.state = 2121; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -10647,29 +10838,29 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableProperty(): TablePropertyContext { let _localctx: TablePropertyContext = new TablePropertyContext(this._ctx, this.state); - this.enterRule(_localctx, 326, FlinkSqlParser.RULE_tableProperty); + this.enterRule(_localctx, 332, FlinkSqlParser.RULE_tableProperty); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2078; + this.state = 2123; _localctx._key = this.tablePropertyKey(); - this.state = 2083; + this.state = 2128; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_FALSE || _la === FlinkSqlParser.KW_TRUE || _la === FlinkSqlParser.EQUAL_SYMBOL || ((((_la - 405)) & ~0x1F) === 0 && ((1 << (_la - 405)) & ((1 << (FlinkSqlParser.STRING_LITERAL - 405)) | (1 << (FlinkSqlParser.DIG_LITERAL - 405)) | (1 << (FlinkSqlParser.REAL_LITERAL - 405)))) !== 0)) { { - this.state = 2080; + this.state = 2125; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.EQUAL_SYMBOL) { { - this.state = 2079; + this.state = 2124; this.match(FlinkSqlParser.EQUAL_SYMBOL); } } - this.state = 2082; + this.state = 2127; _localctx._value = this.tablePropertyValue(); } } @@ -10693,15 +10884,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyKey(): TablePropertyKeyContext { let _localctx: TablePropertyKeyContext = new TablePropertyKeyContext(this._ctx, this.state); - this.enterRule(_localctx, 328, FlinkSqlParser.RULE_tablePropertyKey); + this.enterRule(_localctx, 334, FlinkSqlParser.RULE_tablePropertyKey); try { - this.state = 2088; + this.state = 2133; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 242, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 252, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 2085; + this.state = 2130; this.identifier(); } break; @@ -10709,7 +10900,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 2086; + this.state = 2131; this.dereferenceDefinition(); } break; @@ -10717,7 +10908,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 2087; + this.state = 2132; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10740,22 +10931,22 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyValue(): TablePropertyValueContext { let _localctx: TablePropertyValueContext = new TablePropertyValueContext(this._ctx, this.state); - this.enterRule(_localctx, 330, FlinkSqlParser.RULE_tablePropertyValue); + this.enterRule(_localctx, 336, FlinkSqlParser.RULE_tablePropertyValue); try { - this.state = 2094; + this.state = 2139; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.DIG_LITERAL: this.enterOuterAlt(_localctx, 1); { - this.state = 2090; + this.state = 2135; this.match(FlinkSqlParser.DIG_LITERAL); } break; case FlinkSqlParser.REAL_LITERAL: this.enterOuterAlt(_localctx, 2); { - this.state = 2091; + this.state = 2136; this.match(FlinkSqlParser.REAL_LITERAL); } break; @@ -10763,14 +10954,14 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_TRUE: this.enterOuterAlt(_localctx, 3); { - this.state = 2092; + this.state = 2137; this.booleanLiteral(); } break; case FlinkSqlParser.STRING_LITERAL: this.enterOuterAlt(_localctx, 4); { - this.state = 2093; + this.state = 2138; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10795,40 +10986,40 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public logicalOperator(): LogicalOperatorContext { let _localctx: LogicalOperatorContext = new LogicalOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 332, FlinkSqlParser.RULE_logicalOperator); + this.enterRule(_localctx, 338, FlinkSqlParser.RULE_logicalOperator); try { - this.state = 2102; + this.state = 2147; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_AND: this.enterOuterAlt(_localctx, 1); { - this.state = 2096; + this.state = 2141; this.match(FlinkSqlParser.KW_AND); } break; case FlinkSqlParser.BIT_AND_OP: this.enterOuterAlt(_localctx, 2); { - this.state = 2097; + this.state = 2142; this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 2098; + this.state = 2143; this.match(FlinkSqlParser.BIT_AND_OP); } break; case FlinkSqlParser.KW_OR: this.enterOuterAlt(_localctx, 3); { - this.state = 2099; + this.state = 2144; this.match(FlinkSqlParser.KW_OR); } break; case FlinkSqlParser.BIT_OR_OP: this.enterOuterAlt(_localctx, 4); { - this.state = 2100; + this.state = 2145; this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 2101; + this.state = 2146; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -10853,15 +11044,15 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public comparisonOperator(): ComparisonOperatorContext { let _localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 334, FlinkSqlParser.RULE_comparisonOperator); + this.enterRule(_localctx, 340, FlinkSqlParser.RULE_comparisonOperator); try { - this.state = 2118; + this.state = 2163; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 245, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 255, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 2104; + this.state = 2149; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; @@ -10869,7 +11060,7 @@ export class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 2105; + this.state = 2150; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -10877,7 +11068,7 @@ export class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 2106; + this.state = 2151; this.match(FlinkSqlParser.LESS_SYMBOL); } break; @@ -10885,9 +11076,9 @@ export class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 2107; + this.state = 2152; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2108; + this.state = 2153; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; @@ -10895,9 +11086,9 @@ export class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 2109; + this.state = 2154; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2110; + this.state = 2155; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; @@ -10905,9 +11096,9 @@ export class FlinkSqlParser extends Parser { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 2111; + this.state = 2156; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2112; + this.state = 2157; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -10915,9 +11106,9 @@ export class FlinkSqlParser extends Parser { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 2113; + this.state = 2158; this.match(FlinkSqlParser.EXCLAMATION_SYMBOL); - this.state = 2114; + this.state = 2159; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; @@ -10925,11 +11116,11 @@ export class FlinkSqlParser extends Parser { case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 2115; + this.state = 2160; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2116; + this.state = 2161; this.match(FlinkSqlParser.EQUAL_SYMBOL); - this.state = 2117; + this.state = 2162; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -10952,47 +11143,47 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public bitOperator(): BitOperatorContext { let _localctx: BitOperatorContext = new BitOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 336, FlinkSqlParser.RULE_bitOperator); + this.enterRule(_localctx, 342, FlinkSqlParser.RULE_bitOperator); try { - this.state = 2127; + this.state = 2172; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.LESS_SYMBOL: this.enterOuterAlt(_localctx, 1); { - this.state = 2120; + this.state = 2165; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2121; + this.state = 2166; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case FlinkSqlParser.GREATER_SYMBOL: this.enterOuterAlt(_localctx, 2); { - this.state = 2122; + this.state = 2167; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2123; + this.state = 2168; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case FlinkSqlParser.BIT_AND_OP: this.enterOuterAlt(_localctx, 3); { - this.state = 2124; + this.state = 2169; this.match(FlinkSqlParser.BIT_AND_OP); } break; case FlinkSqlParser.BIT_XOR_OP: this.enterOuterAlt(_localctx, 4); { - this.state = 2125; + this.state = 2170; this.match(FlinkSqlParser.BIT_XOR_OP); } break; case FlinkSqlParser.BIT_OR_OP: this.enterOuterAlt(_localctx, 5); { - this.state = 2126; + this.state = 2171; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -11017,12 +11208,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public mathOperator(): MathOperatorContext { let _localctx: MathOperatorContext = new MathOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 338, FlinkSqlParser.RULE_mathOperator); + this.enterRule(_localctx, 344, FlinkSqlParser.RULE_mathOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2129; + this.state = 2174; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_DIV || ((((_la - 395)) & ~0x1F) === 0 && ((1 << (_la - 395)) & ((1 << (FlinkSqlParser.ASTERISK_SIGN - 395)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 395)) | (1 << (FlinkSqlParser.ADD_SIGN - 395)) | (1 << (FlinkSqlParser.PENCENT_SIGN - 395)) | (1 << (FlinkSqlParser.DOUBLE_HYPNEN_SIGN - 395)) | (1 << (FlinkSqlParser.SLASH_SIGN - 395)))) !== 0))) { this._errHandler.recoverInline(this); @@ -11053,12 +11244,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public unaryOperator(): UnaryOperatorContext { let _localctx: UnaryOperatorContext = new UnaryOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 340, FlinkSqlParser.RULE_unaryOperator); + this.enterRule(_localctx, 346, FlinkSqlParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2131; + this.state = 2176; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_NOT || ((((_la - 376)) & ~0x1F) === 0 && ((1 << (_la - 376)) & ((1 << (FlinkSqlParser.EXCLAMATION_SYMBOL - 376)) | (1 << (FlinkSqlParser.BIT_NOT_OP - 376)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 376)) | (1 << (FlinkSqlParser.ADD_SIGN - 376)))) !== 0))) { this._errHandler.recoverInline(this); @@ -11089,16 +11280,16 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public constant(): ConstantContext { let _localctx: ConstantContext = new ConstantContext(this._ctx, this.state); - this.enterRule(_localctx, 342, FlinkSqlParser.RULE_constant); + this.enterRule(_localctx, 348, FlinkSqlParser.RULE_constant); let _la: number; try { - this.state = 2147; + this.state = 2192; this._errHandler.sync(this); switch (this._input.LA(1)) { case FlinkSqlParser.KW_INTERVAL: this.enterOuterAlt(_localctx, 1); { - this.state = 2133; + this.state = 2178; this.timeIntervalExpression(); } break; @@ -11114,14 +11305,14 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_YEAR: this.enterOuterAlt(_localctx, 2); { - this.state = 2134; + this.state = 2179; this.timePointLiteral(); } break; case FlinkSqlParser.STRING_LITERAL: this.enterOuterAlt(_localctx, 3); { - this.state = 2135; + this.state = 2180; this.stringLiteral(); } break; @@ -11129,17 +11320,17 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.DIG_LITERAL: this.enterOuterAlt(_localctx, 4); { - this.state = 2137; + this.state = 2182; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.HYPNEN_SIGN) { { - this.state = 2136; + this.state = 2181; this.match(FlinkSqlParser.HYPNEN_SIGN); } } - this.state = 2139; + this.state = 2184; this.decimalLiteral(); } break; @@ -11147,21 +11338,21 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_TRUE: this.enterOuterAlt(_localctx, 5); { - this.state = 2140; + this.state = 2185; this.booleanLiteral(); } break; case FlinkSqlParser.REAL_LITERAL: this.enterOuterAlt(_localctx, 6); { - this.state = 2141; + this.state = 2186; this.match(FlinkSqlParser.REAL_LITERAL); } break; case FlinkSqlParser.BIT_STRING: this.enterOuterAlt(_localctx, 7); { - this.state = 2142; + this.state = 2187; this.match(FlinkSqlParser.BIT_STRING); } break; @@ -11169,17 +11360,17 @@ export class FlinkSqlParser extends Parser { case FlinkSqlParser.KW_NULL: this.enterOuterAlt(_localctx, 8); { - this.state = 2144; + this.state = 2189; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === FlinkSqlParser.KW_NOT) { { - this.state = 2143; + this.state = 2188; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 2146; + this.state = 2191; this.match(FlinkSqlParser.KW_NULL); } break; @@ -11204,13 +11395,13 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public timePointLiteral(): TimePointLiteralContext { let _localctx: TimePointLiteralContext = new TimePointLiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 344, FlinkSqlParser.RULE_timePointLiteral); + this.enterRule(_localctx, 350, FlinkSqlParser.RULE_timePointLiteral); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2149; + this.state = 2194; this.timePointUnit(); - this.state = 2150; + this.state = 2195; this.stringLiteral(); } } @@ -11231,11 +11422,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public stringLiteral(): StringLiteralContext { let _localctx: StringLiteralContext = new StringLiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 346, FlinkSqlParser.RULE_stringLiteral); + this.enterRule(_localctx, 352, FlinkSqlParser.RULE_stringLiteral); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2152; + this.state = 2197; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -11256,11 +11447,11 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public decimalLiteral(): DecimalLiteralContext { let _localctx: DecimalLiteralContext = new DecimalLiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 348, FlinkSqlParser.RULE_decimalLiteral); + this.enterRule(_localctx, 354, FlinkSqlParser.RULE_decimalLiteral); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2154; + this.state = 2199; this.match(FlinkSqlParser.DIG_LITERAL); } } @@ -11281,12 +11472,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public booleanLiteral(): BooleanLiteralContext { let _localctx: BooleanLiteralContext = new BooleanLiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 350, FlinkSqlParser.RULE_booleanLiteral); + this.enterRule(_localctx, 356, FlinkSqlParser.RULE_booleanLiteral); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2156; + this.state = 2201; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_FALSE || _la === FlinkSqlParser.KW_TRUE)) { this._errHandler.recoverInline(this); @@ -11317,12 +11508,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public setQuantifier(): SetQuantifierContext { let _localctx: SetQuantifierContext = new SetQuantifierContext(this._ctx, this.state); - this.enterRule(_localctx, 352, FlinkSqlParser.RULE_setQuantifier); + this.enterRule(_localctx, 358, FlinkSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2158; + this.state = 2203; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ALL || _la === FlinkSqlParser.KW_DISTINCT)) { this._errHandler.recoverInline(this); @@ -11353,12 +11544,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public timePointUnit(): TimePointUnitContext { let _localctx: TimePointUnitContext = new TimePointUnitContext(this._ctx, this.state); - this.enterRule(_localctx, 354, FlinkSqlParser.RULE_timePointUnit); + this.enterRule(_localctx, 360, FlinkSqlParser.RULE_timePointUnit); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2160; + this.state = 2205; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_MICROSECOND || _la === FlinkSqlParser.KW_MILLISECOND || _la === FlinkSqlParser.KW_QUARTER || _la === FlinkSqlParser.KW_WEEK || _la === FlinkSqlParser.KW_DAY || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & ((1 << (FlinkSqlParser.KW_HOUR - 261)) | (1 << (FlinkSqlParser.KW_MINUTE - 261)) | (1 << (FlinkSqlParser.KW_MONTH - 261)))) !== 0) || _la === FlinkSqlParser.KW_SECOND || _la === FlinkSqlParser.KW_YEAR)) { this._errHandler.recoverInline(this); @@ -11389,12 +11580,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public timeIntervalUnit(): TimeIntervalUnitContext { let _localctx: TimeIntervalUnitContext = new TimeIntervalUnitContext(this._ctx, this.state); - this.enterRule(_localctx, 356, FlinkSqlParser.RULE_timeIntervalUnit); + this.enterRule(_localctx, 362, FlinkSqlParser.RULE_timeIntervalUnit); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2162; + this.state = 2207; _la = this._input.LA(1); if (!(((((_la - 14)) & ~0x1F) === 0 && ((1 << (_la - 14)) & ((1 << (FlinkSqlParser.KW_CENTURY - 14)) | (1 << (FlinkSqlParser.KW_DAYS - 14)) | (1 << (FlinkSqlParser.KW_DECADE - 14)) | (1 << (FlinkSqlParser.KW_EPOCH - 14)))) !== 0) || ((((_la - 58)) & ~0x1F) === 0 && ((1 << (_la - 58)) & ((1 << (FlinkSqlParser.KW_HOURS - 58)) | (1 << (FlinkSqlParser.KW_MICROSECOND - 58)) | (1 << (FlinkSqlParser.KW_MILLENNIUM - 58)) | (1 << (FlinkSqlParser.KW_MILLISECOND - 58)) | (1 << (FlinkSqlParser.KW_MINUTES - 58)) | (1 << (FlinkSqlParser.KW_MONTHS - 58)) | (1 << (FlinkSqlParser.KW_NANOSECOND - 58)))) !== 0) || _la === FlinkSqlParser.KW_QUARTER || _la === FlinkSqlParser.KW_SECONDS || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & ((1 << (FlinkSqlParser.KW_WEEK - 171)) | (1 << (FlinkSqlParser.KW_WEEKS - 171)) | (1 << (FlinkSqlParser.KW_YEARS - 171)))) !== 0) || _la === FlinkSqlParser.KW_DAY || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & ((1 << (FlinkSqlParser.KW_HOUR - 261)) | (1 << (FlinkSqlParser.KW_MINUTE - 261)) | (1 << (FlinkSqlParser.KW_MONTH - 261)))) !== 0) || _la === FlinkSqlParser.KW_SECOND || _la === FlinkSqlParser.KW_YEAR)) { this._errHandler.recoverInline(this); @@ -11425,12 +11616,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public reservedKeywordsUsedAsFuncParam(): ReservedKeywordsUsedAsFuncParamContext { let _localctx: ReservedKeywordsUsedAsFuncParamContext = new ReservedKeywordsUsedAsFuncParamContext(this._ctx, this.state); - this.enterRule(_localctx, 358, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncParam); + this.enterRule(_localctx, 364, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncParam); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2164; + this.state = 2209; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_ALL || _la === FlinkSqlParser.KW_BOTH || _la === FlinkSqlParser.KW_DISTINCT || _la === FlinkSqlParser.KW_LEADING || _la === FlinkSqlParser.KW_TRAILING || _la === FlinkSqlParser.ASTERISK_SIGN)) { this._errHandler.recoverInline(this); @@ -11461,12 +11652,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public reservedKeywordsUsedAsFuncName(): ReservedKeywordsUsedAsFuncNameContext { let _localctx: ReservedKeywordsUsedAsFuncNameContext = new ReservedKeywordsUsedAsFuncNameContext(this._ctx, this.state); - this.enterRule(_localctx, 360, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncName); + this.enterRule(_localctx, 366, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncName); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2166; + this.state = 2211; _la = this._input.LA(1); if (!(_la === FlinkSqlParser.KW_IF || _la === FlinkSqlParser.KW_MAP || _la === FlinkSqlParser.KW_QUARTER || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & ((1 << (FlinkSqlParser.KW_WEEK - 171)) | (1 << (FlinkSqlParser.KW_ABS - 171)) | (1 << (FlinkSqlParser.KW_ARRAY - 171)) | (1 << (FlinkSqlParser.KW_AVG - 171)) | (1 << (FlinkSqlParser.KW_CAST - 171)))) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & ((1 << (FlinkSqlParser.KW_CEIL - 203)) | (1 << (FlinkSqlParser.KW_COALESCE - 203)) | (1 << (FlinkSqlParser.KW_COLLECT - 203)) | (1 << (FlinkSqlParser.KW_COUNT - 203)) | (1 << (FlinkSqlParser.KW_DATE - 203)))) !== 0) || ((((_la - 258)) & ~0x1F) === 0 && ((1 << (_la - 258)) & ((1 << (FlinkSqlParser.KW_GROUPING - 258)) | (1 << (FlinkSqlParser.KW_HOUR - 258)) | (1 << (FlinkSqlParser.KW_LAG - 258)) | (1 << (FlinkSqlParser.KW_LEFT - 258)) | (1 << (FlinkSqlParser.KW_MINUTE - 258)))) !== 0) || ((((_la - 292)) & ~0x1F) === 0 && ((1 << (_la - 292)) & ((1 << (FlinkSqlParser.KW_MONTH - 292)) | (1 << (FlinkSqlParser.KW_OVERLAY - 292)) | (1 << (FlinkSqlParser.KW_POSITION - 292)) | (1 << (FlinkSqlParser.KW_POWER - 292)) | (1 << (FlinkSqlParser.KW_RANK - 292)) | (1 << (FlinkSqlParser.KW_RIGHT - 292)))) !== 0) || ((((_la - 329)) & ~0x1F) === 0 && ((1 << (_la - 329)) & ((1 << (FlinkSqlParser.KW_SECOND - 329)) | (1 << (FlinkSqlParser.KW_SUBSTRING - 329)) | (1 << (FlinkSqlParser.KW_SUM - 329)) | (1 << (FlinkSqlParser.KW_TIME - 329)) | (1 << (FlinkSqlParser.KW_TIMESTAMP - 329)) | (1 << (FlinkSqlParser.KW_TRUNCATE - 329)) | (1 << (FlinkSqlParser.KW_UPPER - 329)))) !== 0) || _la === FlinkSqlParser.KW_YEAR)) { this._errHandler.recoverInline(this); @@ -11497,12 +11688,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public reservedKeywords(): ReservedKeywordsContext { let _localctx: ReservedKeywordsContext = new ReservedKeywordsContext(this._ctx, this.state); - this.enterRule(_localctx, 362, FlinkSqlParser.RULE_reservedKeywords); + this.enterRule(_localctx, 368, FlinkSqlParser.RULE_reservedKeywords); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2168; + this.state = 2213; _la = this._input.LA(1); if (!(((((_la - 177)) & ~0x1F) === 0 && ((1 << (_la - 177)) & ((1 << (FlinkSqlParser.KW_ABS - 177)) | (1 << (FlinkSqlParser.KW_ALL - 177)) | (1 << (FlinkSqlParser.KW_ALLOW - 177)) | (1 << (FlinkSqlParser.KW_ALTER - 177)) | (1 << (FlinkSqlParser.KW_AND - 177)) | (1 << (FlinkSqlParser.KW_ANY - 177)) | (1 << (FlinkSqlParser.KW_ARE - 177)) | (1 << (FlinkSqlParser.KW_ARRAY - 177)) | (1 << (FlinkSqlParser.KW_AS - 177)) | (1 << (FlinkSqlParser.KW_ASYMMETRIC - 177)) | (1 << (FlinkSqlParser.KW_AT - 177)) | (1 << (FlinkSqlParser.KW_AVG - 177)) | (1 << (FlinkSqlParser.KW_BEGIN - 177)) | (1 << (FlinkSqlParser.KW_BETWEEN - 177)) | (1 << (FlinkSqlParser.KW_BIGINT - 177)) | (1 << (FlinkSqlParser.KW_BINARY - 177)) | (1 << (FlinkSqlParser.KW_BIT - 177)) | (1 << (FlinkSqlParser.KW_BLOB - 177)) | (1 << (FlinkSqlParser.KW_BOOLEAN - 177)) | (1 << (FlinkSqlParser.KW_BOTH - 177)) | (1 << (FlinkSqlParser.KW_BY - 177)) | (1 << (FlinkSqlParser.KW_CALL - 177)) | (1 << (FlinkSqlParser.KW_CALLED - 177)) | (1 << (FlinkSqlParser.KW_CASCADED - 177)) | (1 << (FlinkSqlParser.KW_CASE - 177)) | (1 << (FlinkSqlParser.KW_CAST - 177)) | (1 << (FlinkSqlParser.KW_CEIL - 177)) | (1 << (FlinkSqlParser.KW_CHAR - 177)) | (1 << (FlinkSqlParser.KW_CHARACTER - 177)) | (1 << (FlinkSqlParser.KW_CHECK - 177)) | (1 << (FlinkSqlParser.KW_CLOB - 177)) | (1 << (FlinkSqlParser.KW_CLOSE - 177)))) !== 0) || ((((_la - 209)) & ~0x1F) === 0 && ((1 << (_la - 209)) & ((1 << (FlinkSqlParser.KW_COALESCE - 209)) | (1 << (FlinkSqlParser.KW_COLLATE - 209)) | (1 << (FlinkSqlParser.KW_COLLECT - 209)) | (1 << (FlinkSqlParser.KW_COLUMN - 209)) | (1 << (FlinkSqlParser.KW_COMMIT - 209)) | (1 << (FlinkSqlParser.KW_CONNECT - 209)) | (1 << (FlinkSqlParser.KW_CONSTRAINT - 209)) | (1 << (FlinkSqlParser.KW_CONTAINS - 209)) | (1 << (FlinkSqlParser.KW_CONVERT - 209)) | (1 << (FlinkSqlParser.KW_COUNT - 209)) | (1 << (FlinkSqlParser.KW_CREATE - 209)) | (1 << (FlinkSqlParser.KW_CROSS - 209)) | (1 << (FlinkSqlParser.KW_CUBE - 209)) | (1 << (FlinkSqlParser.KW_CURRENT - 209)) | (1 << (FlinkSqlParser.KW_CURSOR - 209)) | (1 << (FlinkSqlParser.KW_CYCLE - 209)) | (1 << (FlinkSqlParser.KW_DATE - 209)) | (1 << (FlinkSqlParser.KW_DATETIME - 209)) | (1 << (FlinkSqlParser.KW_DAY - 209)) | (1 << (FlinkSqlParser.KW_DEC - 209)) | (1 << (FlinkSqlParser.KW_DECIMAL - 209)) | (1 << (FlinkSqlParser.KW_DECLARE - 209)) | (1 << (FlinkSqlParser.KW_DEFAULT - 209)) | (1 << (FlinkSqlParser.KW_DEFINE - 209)) | (1 << (FlinkSqlParser.KW_DELETE - 209)) | (1 << (FlinkSqlParser.KW_DESCRIBE - 209)) | (1 << (FlinkSqlParser.KW_DISTINCT - 209)) | (1 << (FlinkSqlParser.KW_DOUBLE - 209)) | (1 << (FlinkSqlParser.KW_DROP - 209)) | (1 << (FlinkSqlParser.KW_EACH - 209)) | (1 << (FlinkSqlParser.KW_ELSE - 209)) | (1 << (FlinkSqlParser.KW_END - 209)))) !== 0) || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & ((1 << (FlinkSqlParser.KW_EQUALS - 241)) | (1 << (FlinkSqlParser.KW_EXCEPT - 241)) | (1 << (FlinkSqlParser.KW_EXECUTE - 241)) | (1 << (FlinkSqlParser.KW_EXISTS - 241)) | (1 << (FlinkSqlParser.KW_EXPLAIN - 241)) | (1 << (FlinkSqlParser.KW_EXTERNAL - 241)) | (1 << (FlinkSqlParser.KW_EXTRACT - 241)) | (1 << (FlinkSqlParser.KW_FALSE - 241)) | (1 << (FlinkSqlParser.KW_FLOAT - 241)) | (1 << (FlinkSqlParser.KW_FOR - 241)) | (1 << (FlinkSqlParser.KW_FROM - 241)) | (1 << (FlinkSqlParser.KW_FULL - 241)) | (1 << (FlinkSqlParser.KW_FUNCTION - 241)) | (1 << (FlinkSqlParser.KW_GLOBAL - 241)) | (1 << (FlinkSqlParser.KW_GRANT - 241)) | (1 << (FlinkSqlParser.KW_GROUP - 241)) | (1 << (FlinkSqlParser.KW_GROUPING - 241)) | (1 << (FlinkSqlParser.KW_GROUPS - 241)) | (1 << (FlinkSqlParser.KW_HAVING - 241)) | (1 << (FlinkSqlParser.KW_HOUR - 241)) | (1 << (FlinkSqlParser.KW_IMPORT - 241)) | (1 << (FlinkSqlParser.KW_IN - 241)) | (1 << (FlinkSqlParser.KW_INCLUDING - 241)) | (1 << (FlinkSqlParser.KW_INNER - 241)) | (1 << (FlinkSqlParser.KW_INOUT - 241)) | (1 << (FlinkSqlParser.KW_INSERT - 241)) | (1 << (FlinkSqlParser.KW_INT - 241)) | (1 << (FlinkSqlParser.KW_INTEGER - 241)) | (1 << (FlinkSqlParser.KW_INTERSECT - 241)) | (1 << (FlinkSqlParser.KW_INTERVAL - 241)) | (1 << (FlinkSqlParser.KW_INTO - 241)))) !== 0) || ((((_la - 273)) & ~0x1F) === 0 && ((1 << (_la - 273)) & ((1 << (FlinkSqlParser.KW_IS - 273)) | (1 << (FlinkSqlParser.KW_JOIN - 273)) | (1 << (FlinkSqlParser.KW_LAG - 273)) | (1 << (FlinkSqlParser.KW_LANGUAGE - 273)) | (1 << (FlinkSqlParser.KW_LATERAL - 273)) | (1 << (FlinkSqlParser.KW_LEADING - 273)) | (1 << (FlinkSqlParser.KW_LEFT - 273)) | (1 << (FlinkSqlParser.KW_LIKE - 273)) | (1 << (FlinkSqlParser.KW_LIMIT - 273)) | (1 << (FlinkSqlParser.KW_LOCAL - 273)) | (1 << (FlinkSqlParser.KW_MATCH - 273)) | (1 << (FlinkSqlParser.KW_MATCH_RECOGNIZE - 273)) | (1 << (FlinkSqlParser.KW_MEASURES - 273)) | (1 << (FlinkSqlParser.KW_MERGE - 273)) | (1 << (FlinkSqlParser.KW_METADATA - 273)) | (1 << (FlinkSqlParser.KW_MINUS - 273)) | (1 << (FlinkSqlParser.KW_MINUTE - 273)) | (1 << (FlinkSqlParser.KW_MODIFIES - 273)) | (1 << (FlinkSqlParser.KW_MODULE - 273)) | (1 << (FlinkSqlParser.KW_MONTH - 273)) | (1 << (FlinkSqlParser.KW_MULTISET - 273)) | (1 << (FlinkSqlParser.KW_NATURAL - 273)) | (1 << (FlinkSqlParser.KW_NEXT - 273)) | (1 << (FlinkSqlParser.KW_NO - 273)) | (1 << (FlinkSqlParser.KW_NONE - 273)) | (1 << (FlinkSqlParser.KW_NOT - 273)) | (1 << (FlinkSqlParser.KW_NULL - 273)) | (1 << (FlinkSqlParser.KW_NUMERIC - 273)) | (1 << (FlinkSqlParser.KW_OF - 273)) | (1 << (FlinkSqlParser.KW_OFFSET - 273)) | (1 << (FlinkSqlParser.KW_ON - 273)) | (1 << (FlinkSqlParser.KW_ONE - 273)))) !== 0) || ((((_la - 305)) & ~0x1F) === 0 && ((1 << (_la - 305)) & ((1 << (FlinkSqlParser.KW_OR - 305)) | (1 << (FlinkSqlParser.KW_ORDER - 305)) | (1 << (FlinkSqlParser.KW_OUT - 305)) | (1 << (FlinkSqlParser.KW_OUTER - 305)) | (1 << (FlinkSqlParser.KW_OVER - 305)) | (1 << (FlinkSqlParser.KW_OVERLAY - 305)) | (1 << (FlinkSqlParser.KW_PARTITION - 305)) | (1 << (FlinkSqlParser.KW_PATTERN - 305)) | (1 << (FlinkSqlParser.KW_PER - 305)) | (1 << (FlinkSqlParser.KW_PERCENT - 305)) | (1 << (FlinkSqlParser.KW_PERIOD - 305)) | (1 << (FlinkSqlParser.KW_POSITION - 305)) | (1 << (FlinkSqlParser.KW_PRIMARY - 305)) | (1 << (FlinkSqlParser.KW_RANGE - 305)) | (1 << (FlinkSqlParser.KW_RANK - 305)) | (1 << (FlinkSqlParser.KW_RESET - 305)) | (1 << (FlinkSqlParser.KW_REVOKE - 305)) | (1 << (FlinkSqlParser.KW_RIGHT - 305)) | (1 << (FlinkSqlParser.KW_RLIKE - 305)) | (1 << (FlinkSqlParser.KW_ROLLBACK - 305)) | (1 << (FlinkSqlParser.KW_ROLLUP - 305)) | (1 << (FlinkSqlParser.KW_ROW - 305)) | (1 << (FlinkSqlParser.KW_ROWS - 305)) | (1 << (FlinkSqlParser.KW_SECOND - 305)) | (1 << (FlinkSqlParser.KW_SELECT - 305)) | (1 << (FlinkSqlParser.KW_SET - 305)) | (1 << (FlinkSqlParser.KW_SHOW - 305)) | (1 << (FlinkSqlParser.KW_SIMILAR - 305)) | (1 << (FlinkSqlParser.KW_SKIP - 305)) | (1 << (FlinkSqlParser.KW_SMALLINT - 305)) | (1 << (FlinkSqlParser.KW_START - 305)))) !== 0) || ((((_la - 337)) & ~0x1F) === 0 && ((1 << (_la - 337)) & ((1 << (FlinkSqlParser.KW_STATIC - 337)) | (1 << (FlinkSqlParser.KW_SUBSTRING - 337)) | (1 << (FlinkSqlParser.KW_SUM - 337)) | (1 << (FlinkSqlParser.KW_SYSTEM - 337)) | (1 << (FlinkSqlParser.KW_SYSTEM_TIME - 337)) | (1 << (FlinkSqlParser.KW_SYSTEM_USER - 337)) | (1 << (FlinkSqlParser.KW_TABLE - 337)) | (1 << (FlinkSqlParser.KW_TABLESAMPLE - 337)) | (1 << (FlinkSqlParser.KW_THEN - 337)) | (1 << (FlinkSqlParser.KW_TIME - 337)) | (1 << (FlinkSqlParser.KW_TIMESTAMP - 337)) | (1 << (FlinkSqlParser.KW_TINYINT - 337)) | (1 << (FlinkSqlParser.KW_TO - 337)) | (1 << (FlinkSqlParser.KW_TRUE - 337)) | (1 << (FlinkSqlParser.KW_TRUNCATE - 337)) | (1 << (FlinkSqlParser.KW_UNION - 337)) | (1 << (FlinkSqlParser.KW_UNIQUE - 337)) | (1 << (FlinkSqlParser.KW_UNKNOWN - 337)) | (1 << (FlinkSqlParser.KW_UNNEST - 337)) | (1 << (FlinkSqlParser.KW_UPPER - 337)) | (1 << (FlinkSqlParser.KW_UPSERT - 337)) | (1 << (FlinkSqlParser.KW_USER - 337)) | (1 << (FlinkSqlParser.KW_USING - 337)) | (1 << (FlinkSqlParser.KW_VALUE - 337)) | (1 << (FlinkSqlParser.KW_VALUES - 337)) | (1 << (FlinkSqlParser.KW_VARBINARY - 337)) | (1 << (FlinkSqlParser.KW_VARCHAR - 337)) | (1 << (FlinkSqlParser.KW_WHEN - 337)) | (1 << (FlinkSqlParser.KW_WHERE - 337)) | (1 << (FlinkSqlParser.KW_WINDOW - 337)))) !== 0) || ((((_la - 369)) & ~0x1F) === 0 && ((1 << (_la - 369)) & ((1 << (FlinkSqlParser.KW_WITH - 369)) | (1 << (FlinkSqlParser.KW_WITHIN - 369)) | (1 << (FlinkSqlParser.KW_WITHOUT - 369)) | (1 << (FlinkSqlParser.KW_YEAR - 369)))) !== 0))) { this._errHandler.recoverInline(this); @@ -11533,12 +11724,12 @@ export class FlinkSqlParser extends Parser { // @RuleVersion(0) public nonReservedKeywords(): NonReservedKeywordsContext { let _localctx: NonReservedKeywordsContext = new NonReservedKeywordsContext(this._ctx, this.state); - this.enterRule(_localctx, 364, FlinkSqlParser.RULE_nonReservedKeywords); + this.enterRule(_localctx, 370, FlinkSqlParser.RULE_nonReservedKeywords); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2170; + this.state = 2215; _la = this._input.LA(1); if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << FlinkSqlParser.KW_ADD) | (1 << FlinkSqlParser.KW_ADMIN) | (1 << FlinkSqlParser.KW_AFTER) | (1 << FlinkSqlParser.KW_ANALYZE) | (1 << FlinkSqlParser.KW_ASC) | (1 << FlinkSqlParser.KW_BEFORE) | (1 << FlinkSqlParser.KW_BYTES) | (1 << FlinkSqlParser.KW_CASCADE) | (1 << FlinkSqlParser.KW_CATALOG) | (1 << FlinkSqlParser.KW_CATALOGS) | (1 << FlinkSqlParser.KW_CENTURY) | (1 << FlinkSqlParser.KW_CHAIN) | (1 << FlinkSqlParser.KW_CHANGELOG_MODE) | (1 << FlinkSqlParser.KW_CHARACTERS) | (1 << FlinkSqlParser.KW_COMMENT) | (1 << FlinkSqlParser.KW_COMPACT) | (1 << FlinkSqlParser.KW_COLUMNS) | (1 << FlinkSqlParser.KW_CONSTRAINTS) | (1 << FlinkSqlParser.KW_CONSTRUCTOR) | (1 << FlinkSqlParser.KW_CUMULATE) | (1 << FlinkSqlParser.KW_DATA) | (1 << FlinkSqlParser.KW_DATABASE) | (1 << FlinkSqlParser.KW_DATABASES) | (1 << FlinkSqlParser.KW_DAYS) | (1 << FlinkSqlParser.KW_DECADE) | (1 << FlinkSqlParser.KW_DEFINED) | (1 << FlinkSqlParser.KW_DESC) | (1 << FlinkSqlParser.KW_DESCRIPTOR))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.KW_DIV - 32)) | (1 << (FlinkSqlParser.KW_ENCODING - 32)) | (1 << (FlinkSqlParser.KW_ENFORCED - 32)) | (1 << (FlinkSqlParser.KW_ENGINE - 32)) | (1 << (FlinkSqlParser.KW_ERROR - 32)) | (1 << (FlinkSqlParser.KW_ESTIMATED_COST - 32)) | (1 << (FlinkSqlParser.KW_EXCEPTION - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDE - 32)) | (1 << (FlinkSqlParser.KW_EXCLUDING - 32)) | (1 << (FlinkSqlParser.KW_EXTENDED - 32)) | (1 << (FlinkSqlParser.KW_FILE - 32)) | (1 << (FlinkSqlParser.KW_FINAL - 32)) | (1 << (FlinkSqlParser.KW_FIRST - 32)) | (1 << (FlinkSqlParser.KW_FOLLOWING - 32)) | (1 << (FlinkSqlParser.KW_FORMAT - 32)) | (1 << (FlinkSqlParser.KW_FORTRAN - 32)) | (1 << (FlinkSqlParser.KW_FOUND - 32)) | (1 << (FlinkSqlParser.KW_FRAC_SECOND - 32)) | (1 << (FlinkSqlParser.KW_FUNCTIONS - 32)) | (1 << (FlinkSqlParser.KW_GENERAL - 32)) | (1 << (FlinkSqlParser.KW_GENERATED - 32)) | (1 << (FlinkSqlParser.KW_GO - 32)) | (1 << (FlinkSqlParser.KW_GOTO - 32)) | (1 << (FlinkSqlParser.KW_GRANTED - 32)) | (1 << (FlinkSqlParser.KW_HOP - 32)) | (1 << (FlinkSqlParser.KW_HOURS - 32)) | (1 << (FlinkSqlParser.KW_IF - 32)) | (1 << (FlinkSqlParser.KW_IGNORE - 32)) | (1 << (FlinkSqlParser.KW_INCREMENT - 32)) | (1 << (FlinkSqlParser.KW_INPUT - 32)) | (1 << (FlinkSqlParser.KW_INVOKER - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.KW_JAR - 64)) | (1 << (FlinkSqlParser.KW_JARS - 64)) | (1 << (FlinkSqlParser.KW_JAVA - 64)) | (1 << (FlinkSqlParser.KW_JSON - 64)) | (1 << (FlinkSqlParser.KW_JSON_EXECUTION_PLAN - 64)) | (1 << (FlinkSqlParser.KW_KEY - 64)) | (1 << (FlinkSqlParser.KW_KEY_MEMBER - 64)) | (1 << (FlinkSqlParser.KW_KEY_TYPE - 64)) | (1 << (FlinkSqlParser.KW_LABEL - 64)) | (1 << (FlinkSqlParser.KW_LAST - 64)) | (1 << (FlinkSqlParser.KW_LENGTH - 64)) | (1 << (FlinkSqlParser.KW_LEVEL - 64)) | (1 << (FlinkSqlParser.KW_LOAD - 64)) | (1 << (FlinkSqlParser.KW_MAP - 64)) | (1 << (FlinkSqlParser.KW_MICROSECOND - 64)) | (1 << (FlinkSqlParser.KW_MILLENNIUM - 64)) | (1 << (FlinkSqlParser.KW_MILLISECOND - 64)) | (1 << (FlinkSqlParser.KW_MINUTES - 64)) | (1 << (FlinkSqlParser.KW_MINVALUE - 64)) | (1 << (FlinkSqlParser.KW_MODIFY - 64)) | (1 << (FlinkSqlParser.KW_MODULES - 64)) | (1 << (FlinkSqlParser.KW_MONTHS - 64)) | (1 << (FlinkSqlParser.KW_NANOSECOND - 64)) | (1 << (FlinkSqlParser.KW_NULLS - 64)) | (1 << (FlinkSqlParser.KW_NUMBER - 64)) | (1 << (FlinkSqlParser.KW_OPTION - 64)) | (1 << (FlinkSqlParser.KW_OPTIONS - 64)) | (1 << (FlinkSqlParser.KW_ORDERING - 64)) | (1 << (FlinkSqlParser.KW_OUTPUT - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITE - 64)) | (1 << (FlinkSqlParser.KW_OVERWRITING - 64)) | (1 << (FlinkSqlParser.KW_PARTITIONED - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (FlinkSqlParser.KW_PARTITIONS - 96)) | (1 << (FlinkSqlParser.KW_PASSING - 96)) | (1 << (FlinkSqlParser.KW_PAST - 96)) | (1 << (FlinkSqlParser.KW_PATH - 96)) | (1 << (FlinkSqlParser.KW_PLACING - 96)) | (1 << (FlinkSqlParser.KW_PLAN - 96)) | (1 << (FlinkSqlParser.KW_PRECEDING - 96)) | (1 << (FlinkSqlParser.KW_PRESERVE - 96)) | (1 << (FlinkSqlParser.KW_PRIOR - 96)) | (1 << (FlinkSqlParser.KW_PRIVILEGES - 96)) | (1 << (FlinkSqlParser.KW_PUBLIC - 96)) | (1 << (FlinkSqlParser.KW_PYTHON - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_FILES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_REQUIREMENTS - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_DEPENDENCIES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_JAR - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_ARCHIVES - 96)) | (1 << (FlinkSqlParser.KW_PYTHON_PARAMETER - 96)) | (1 << (FlinkSqlParser.KW_QUARTER - 96)) | (1 << (FlinkSqlParser.KW_RAW - 96)) | (1 << (FlinkSqlParser.KW_READ - 96)) | (1 << (FlinkSqlParser.KW_RELATIVE - 96)) | (1 << (FlinkSqlParser.KW_REMOVE - 96)) | (1 << (FlinkSqlParser.KW_RENAME - 96)) | (1 << (FlinkSqlParser.KW_REPLACE - 96)) | (1 << (FlinkSqlParser.KW_RESPECT - 96)) | (1 << (FlinkSqlParser.KW_RESTART - 96)) | (1 << (FlinkSqlParser.KW_RESTRICT - 96)) | (1 << (FlinkSqlParser.KW_ROLE - 96)) | (1 << (FlinkSqlParser.KW_ROW_COUNT - 96)) | (1 << (FlinkSqlParser.KW_SCALA - 96)) | (1 << (FlinkSqlParser.KW_SCALAR - 96)))) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & ((1 << (FlinkSqlParser.KW_SCALE - 128)) | (1 << (FlinkSqlParser.KW_SCHEMA - 128)) | (1 << (FlinkSqlParser.KW_SECONDS - 128)) | (1 << (FlinkSqlParser.KW_SECTION - 128)) | (1 << (FlinkSqlParser.KW_SECURITY - 128)) | (1 << (FlinkSqlParser.KW_SELF - 128)) | (1 << (FlinkSqlParser.KW_SERVER - 128)) | (1 << (FlinkSqlParser.KW_SERVER_NAME - 128)) | (1 << (FlinkSqlParser.KW_SESSION - 128)) | (1 << (FlinkSqlParser.KW_SETS - 128)) | (1 << (FlinkSqlParser.KW_SIMPLE - 128)) | (1 << (FlinkSqlParser.KW_SIZE - 128)) | (1 << (FlinkSqlParser.KW_SLIDE - 128)) | (1 << (FlinkSqlParser.KW_SOURCE - 128)) | (1 << (FlinkSqlParser.KW_SPACE - 128)) | (1 << (FlinkSqlParser.KW_STATE - 128)) | (1 << (FlinkSqlParser.KW_STATEMENT - 128)) | (1 << (FlinkSqlParser.KW_STEP - 128)) | (1 << (FlinkSqlParser.KW_STRING - 128)) | (1 << (FlinkSqlParser.KW_STRUCTURE - 128)) | (1 << (FlinkSqlParser.KW_STYLE - 128)) | (1 << (FlinkSqlParser.KW_TABLES - 128)) | (1 << (FlinkSqlParser.KW_TEMPORARY - 128)) | (1 << (FlinkSqlParser.KW_TIMECOL - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMP_LTZ - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPADD - 128)) | (1 << (FlinkSqlParser.KW_TIMESTAMPDIFF - 128)) | (1 << (FlinkSqlParser.KW_TRANSFORM - 128)) | (1 << (FlinkSqlParser.KW_TUMBLE - 128)) | (1 << (FlinkSqlParser.KW_TYPE - 128)) | (1 << (FlinkSqlParser.KW_UNDER - 128)) | (1 << (FlinkSqlParser.KW_UNLOAD - 128)))) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & ((1 << (FlinkSqlParser.KW_USAGE - 160)) | (1 << (FlinkSqlParser.KW_USE - 160)) | (1 << (FlinkSqlParser.KW_UTF16 - 160)) | (1 << (FlinkSqlParser.KW_UTF32 - 160)) | (1 << (FlinkSqlParser.KW_UTF8 - 160)) | (1 << (FlinkSqlParser.KW_VERSION - 160)) | (1 << (FlinkSqlParser.KW_VIEW - 160)) | (1 << (FlinkSqlParser.KW_VIEWS - 160)) | (1 << (FlinkSqlParser.KW_VIRTUAL - 160)) | (1 << (FlinkSqlParser.KW_WATERMARK - 160)) | (1 << (FlinkSqlParser.KW_WATERMARKS - 160)) | (1 << (FlinkSqlParser.KW_WEEK - 160)) | (1 << (FlinkSqlParser.KW_WORK - 160)) | (1 << (FlinkSqlParser.KW_WRAPPER - 160)) | (1 << (FlinkSqlParser.KW_YEARS - 160)) | (1 << (FlinkSqlParser.KW_ZONE - 160)))) !== 0))) { this._errHandler.recoverInline(this); @@ -11569,19 +11760,19 @@ export class FlinkSqlParser extends Parser { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 80: + case 79: return this.queryStatement_sempred(_localctx as QueryStatementContext, predIndex); - case 90: + case 89: return this.tableExpression_sempred(_localctx as TableExpressionContext, predIndex); - case 132: + case 130: return this.booleanExpression_sempred(_localctx as BooleanExpressionContext, predIndex); - case 135: + case 133: return this.valueExpression_sempred(_localctx as ValueExpressionContext, predIndex); - case 136: + case 134: return this.primaryExpression_sempred(_localctx as PrimaryExpressionContext, predIndex); } return true; @@ -11649,9 +11840,9 @@ export class FlinkSqlParser extends Parser { return true; } - private static readonly _serializedATNSegments: number = 4; + private static readonly _serializedATNSegments: number = 5; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\u019C\u087F\x04" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\u019C\u08AC\x04" + "\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04" + "\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r" + "\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12" + @@ -11680,1182 +11871,1212 @@ export class FlinkSqlParser extends Parser { "\x04\xAA\t\xAA\x04\xAB\t\xAB\x04\xAC\t\xAC\x04\xAD\t\xAD\x04\xAE\t\xAE" + "\x04\xAF\t\xAF\x04\xB0\t\xB0\x04\xB1\t\xB1\x04\xB2\t\xB2\x04\xB3\t\xB3" + "\x04\xB4\t\xB4\x04\xB5\t\xB5\x04\xB6\t\xB6\x04\xB7\t\xB7\x04\xB8\t\xB8" + - "\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x05\x04" + - "\u0179\n\x04\x03\x04\x07\x04\u017C\n\x04\f\x04\x0E\x04\u017F\v\x04\x03" + - "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03" + - "\x05\x03\x05\x03\x05\x05\x05\u018D\n\x05\x03\x06\x03\x06\x03\x07\x03\x07" + + "\x04\xB9\t\xB9\x04\xBA\t\xBA\x04\xBB\t\xBB\x03\x02\x03\x02\x03\x02\x03" + + "\x03\x03\x03\x03\x03\x03\x04\x03\x04\x07\x04\u017F\n\x04\f\x04\x0E\x04" + + "\u0182\v\x04\x03\x05\x03\x05\x05\x05\u0186\n\x05\x03\x05\x03\x05\x05\x05" + + "\u018A\n\x05\x03\x05\x03\x05\x05\x05\u018E\n\x05\x03\x05\x03\x05\x05\x05" + + "\u0192\n\x05\x03\x05\x03\x05\x05\x05\u0196\n\x05\x03\x05\x03\x05\x05\x05" + + "\u019A\n\x05\x03\x05\x03\x05\x05\x05\u019E\n\x05\x03\x05\x03\x05\x05\x05" + + "\u01A2\n\x05\x03\x05\x03\x05\x05\x05\u01A6\n\x05\x03\x05\x03\x05\x05\x05" + + "\u01AA\n\x05\x03\x05\x03\x05\x05\x05\u01AE\n\x05\x03\x05\x03\x05\x05\x05" + + "\u01B2\n\x05\x05\x05\u01B4\n\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07" + "\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07" + - "\x03\x07\x03\x07\x03\x07\x05\x07\u019F\n\x07\x03\b\x03\b\x05\b\u01A3\n" + - "\b\x03\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x05\n\u01AC\n\n\x03\n\x03" + - "\n\x03\n\x05\n\u01B1\n\n\x03\v\x03\v\x03\v\x07\v\u01B6\n\v\f\v\x0E\v\u01B9" + - "\v\v\x03\f\x03\f\x03\r\x03\r\x05\r\u01BF\n\r\x03\r\x03\r\x05\r\u01C3\n" + - "\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x07\x0E\u01CA\n\x0E\f\x0E\x0E" + - "\x0E\u01CD\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x05\x0F\u01D8\n\x0F\x03\x0F\x05\x0F\u01DB\n\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x05\x0F\u01E2\n\x0F\x03\x0F\x03\x0F\x03" + - "\x0F\x03\x0F\x03\x0F\x03\x0F\x05\x0F\u01EA\n\x0F\x03\x0F\x03\x0F\x03\x0F" + - "\x05\x0F\u01EF\n\x0F\x03\x0F\x05\x0F\u01F2\n\x0F\x03\x10\x03\x10\x03\x10" + - "\x03\x10\x03\x10\x05\x10\u01F9\n\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03" + - "\x12\x03\x12\x05\x12\u0201\n\x12\x03\x13\x03\x13\x05\x13\u0205\n\x13\x03" + - "\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x05\x15\u0211\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x05\x15\u0219\n\x15\x03\x15\x03\x15\x05\x15\u021D\n\x15\x03\x15\x03\x15" + + "\x03\x07\x03\x07\x05\x07\u01C6\n\x07\x03\b\x03\b\x05\b\u01CA\n\b\x03\t" + + "\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x05\n\u01D3\n\n\x03\n\x03\n\x03\n" + + "\x05\n\u01D8\n\n\x03\v\x03\v\x03\v\x07\v\u01DD\n\v\f\v\x0E\v\u01E0\v\v" + + "\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r\u01EA\n\r\x03\x0E" + + "\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x07\x0E\u01F1\n\x0E\f\x0E\x0E\x0E\u01F4" + + "\v\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F" + + "\x03\x0F\x05\x0F\u01FF\n\x0F\x03\x0F\x05\x0F\u0202\n\x0F\x03\x0F\x03\x0F" + + "\x03\x0F\x03\x0F\x03\x0F\x05\x0F\u0209\n\x0F\x03\x0F\x03\x0F\x03\x0F\x03" + + "\x0F\x03\x0F\x03\x0F\x05\x0F\u0211\n\x0F\x03\x0F\x03\x0F\x03\x0F\x05\x0F" + + "\u0216\n\x0F\x03\x0F\x05\x0F\u0219\n\x0F\x03\x10\x03\x10\x03\x10\x03\x10" + + "\x03\x10\x05\x10\u0220\n\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03" + + "\x12\x05\x12\u0228\n\x12\x03\x13\x03\x13\x05\x13\u022C\n\x13\x03\x14\x03" + + "\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05" + + "\x15\u0238\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15" + + "\u0240\n\x15\x03\x15\x03\x15\x05\x15\u0244\n\x15\x03\x15\x03\x15\x03\x15" + "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x05\x15\u0233\n\x15\x03\x16\x06\x16\u0236\n\x16\r\x16\x0E\x16\u0237\x03" + - "\x17\x03\x17\x05\x17\u023C\n\x17\x03\x18\x03\x18\x05\x18\u0240\n\x18\x03" + - "\x18\x03\x18\x05\x18\u0244\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x07\x18\u024B\n\x18\f\x18\x0E\x18\u024E\v\x18\x03\x18\x03\x18\x05\x18" + - "\u0252\n\x18\x03\x18\x03\x18\x05\x18\u0256\n\x18\x03\x18\x03\x18\x05\x18" + - "\u025A\n\x18\x03\x18\x03\x18\x05\x18\u025E\n\x18\x03\x18\x05\x18\u0261" + - "\n\x18\x03\x18\x03\x18\x05\x18\u0265\n\x18\x03\x19\x03\x19\x03\x19\x05" + - "\x19\u026A\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u0270\n\x19\x03" + - "\x1A\x03\x1A\x03\x1A\x05\x1A\u0275\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B" + - "\u027A\n\x1B\x03\x1B\x05\x1B\u027D\n\x1B\x03\x1C\x03\x1C\x05\x1C\u0281" + - "\n\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x07\x1D\u0287\n\x1D\f\x1D\x0E\x1D" + - "\u028A\v\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u0291\n\x1E" + - "\x03\x1E\x03\x1E\x05\x1E\u0295\n\x1E\x03\x1E\x03\x1E\x05\x1E\u0299\n\x1E" + - "\x03\x1E\x03\x1E\x05\x1E\u029D\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02A1\n\x1E" + - "\x03\x1E\x03\x1E\x05\x1E\u02A5\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02A9\n\x1E" + - "\x03\x1E\x03\x1E\x05\x1E\u02AD\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02B1\n\x1E" + - "\x05\x1E\u02B3\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03" + - " \x05 \u02BD\n \x03 \x03 \x03!\x03!\x03!\x03!\x05!\u02C5\n!\x03!\x03!" + - "\x03\"\x03\"\x03\"\x03\"\x03#\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$" + - "\x03$\x03$\x03$\x03$\x03$\x07$\u02DB\n$\f$\x0E$\u02DE\v$\x03$\x03$\x03" + - "%\x03%\x05%\u02E4\n%\x03%\x03%\x03%\x03%\x05%\u02EA\n%\x03%\x05%\u02ED" + - "\n%\x03%\x05%\u02F0\n%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x05" + - "\'\u02FA\n\'\x03\'\x05\'\u02FD\n\'\x03(\x03(\x03)\x03)\x03)\x03)\x05)" + - "\u0305\n)\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x03+\x03,\x03,\x05,\u0311" + - "\n,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x03-\x03.\x03.\x03.\x03.\x03/\x03" + - "/\x03/\x03/\x030\x030\x030\x030\x070\u0327\n0\f0\x0E0\u032A\v0\x030\x03" + - "0\x031\x031\x031\x031\x031\x031\x071\u0334\n1\f1\x0E1\u0337\v1\x031\x03" + - "1\x051\u033B\n1\x032\x032\x052\u033F\n2\x033\x033\x033\x033\x073\u0345" + - "\n3\f3\x0E3\u0348\v3\x033\x053\u034B\n3\x034\x034\x035\x035\x035\x035" + - "\x055\u0353\n5\x036\x036\x036\x036\x036\x037\x037\x037\x057\u035D\n7\x03" + - "7\x037\x057\u0361\n7\x037\x037\x038\x038\x058\u0367\n8\x038\x038\x058" + - "\u036B\n8\x038\x038\x058\u036F\n8\x038\x058\u0372\n8\x038\x038\x038\x03" + - "9\x039\x039\x039\x059\u037B\n9\x039\x039\x059\u037F\n9\x039\x039\x039" + - "\x039\x039\x059\u0386\n9\x039\x059\u0389\n9\x03:\x03:\x03:\x03:\x03:\x03" + - ":\x07:\u0391\n:\f:\x0E:\u0394\v:\x03;\x03;\x03<\x03<\x03<\x05<\u039B\n" + - "<\x03<\x03<\x03<\x03<\x03<\x03<\x05<\u03A3\n<\x03=\x03=\x05=\u03A7\n=" + - "\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x05" + - "?\u03B6\n?\x03@\x03@\x03@\x03@\x03A\x03A\x03A\x03A\x03B\x03B\x03B\x03" + - "C\x03C\x03C\x03C\x03C\x03C\x05C\u03C9\nC\x03D\x03D\x03D\x03D\x03D\x03" + - "E\x03E\x03E\x03E\x05E\u03D4\nE\x03E\x03E\x05E\u03D8\nE\x03E\x03E\x03E" + - "\x03E\x03E\x05E\u03DF\nE\x03F\x03F\x03F\x05F\u03E4\nF\x03F\x03F\x03G\x03" + - "G\x05G\u03EA\nG\x03G\x03G\x05G\u03EE\nG\x03G\x03G\x03H\x03H\x03H\x05H" + - "\u03F5\nH\x03H\x03H\x05H\u03F9\nH\x03I\x03I\x05I\u03FD\nI\x03I\x03I\x05" + - "I\u0401\nI\x03I\x03I\x03J\x03J\x03J\x03J\x05J\u0409\nJ\x03J\x03J\x05J" + - "\u040D\nJ\x03J\x03J\x03K\x05K\u0412\nK\x03K\x03K\x03K\x03K\x05K\u0418" + - "\nK\x03L\x03L\x03L\x03L\x05L\u041E\nL\x03L\x05L\u0421\nL\x03L\x03L\x05" + - "L\u0425\nL\x03M\x03M\x03M\x03N\x03N\x03N\x03N\x07N\u042E\nN\fN\x0EN\u0431" + - "\vN\x03O\x03O\x03O\x03O\x07O\u0437\nO\fO\x0EO\u043A\vO\x03O\x03O\x03P" + - "\x03P\x03P\x03P\x03P\x03P\x03P\x06P\u0445\nP\rP\x0EP\u0446\x03P\x03P\x03" + - "Q\x03Q\x03Q\x03Q\x03Q\x03Q\x06Q\u0451\nQ\rQ\x0EQ\u0452\x03Q\x03Q\x03R" + - "\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x05R\u0462\nR\x03R" + - "\x05R\u0465\nR\x03R\x03R\x05R\u0469\nR\x03R\x05R\u046C\nR\x05R\u046E\n" + - "R\x03R\x03R\x03R\x05R\u0473\nR\x03R\x03R\x05R\u0477\nR\x03R\x05R\u047A" + - "\nR\x07R\u047C\nR\fR\x0ER\u047F\vR\x03S\x03S\x03S\x03S\x07S\u0485\nS\f" + - "S\x0ES\u0488\vS\x03T\x03T\x03T\x03T\x07T\u048E\nT\fT\x0ET\u0491\vT\x03" + - "U\x03U\x03U\x03U\x03U\x07U\u0498\nU\fU\x0EU\u049B\vU\x03U\x03U\x05U\u049F" + - "\nU\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03W\x03W\x03W\x05W\u04AB\nW\x03" + - "W\x05W\u04AE\nW\x03W\x05W\u04B1\nW\x03W\x05W\u04B4\nW\x03W\x03W\x03W\x03" + - "W\x05W\u04BA\nW\x03X\x03X\x05X\u04BE\nX\x03X\x03X\x03X\x03X\x07X\u04C4" + - "\nX\fX\x0EX\u04C7\vX\x05X\u04C9\nX\x03Y\x03Y\x03Y\x05Y\u04CE\nY\x03Y\x05" + - "Y\u04D1\nY\x05Y\u04D3\nY\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z" + - "\x03Z\x03Z\x03Z\x05Z\u04E1\nZ\x03[\x03[\x03[\x03\\\x03\\\x03\\\x03\\\x07" + - "\\\u04EA\n\\\f\\\x0E\\\u04ED\v\\\x03\\\x03\\\x05\\\u04F1\n\\\x03\\\x03" + - "\\\x03\\\x03\\\x03\\\x03\\\x05\\\u04F9\n\\\x03\\\x05\\\u04FC\n\\\x03\\" + - "\x05\\\u04FF\n\\\x03\\\x03\\\x03\\\x05\\\u0504\n\\\x07\\\u0506\n\\\f\\" + - "\x0E\\\u0509\v\\\x03]\x03]\x05]\u050D\n]\x03^\x05^\u0510\n^\x03^\x03^" + - "\x05^\u0514\n^\x03^\x05^\u0517\n^\x03^\x05^\u051A\n^\x03^\x03^\x03^\x03" + - "^\x03^\x03^\x03^\x03^\x07^\u0524\n^\f^\x0E^\u0527\v^\x03^\x03^\x03^\x03" + - "^\x05^\u052D\n^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x03^\x05^\u0538" + - "\n^\x03_\x03_\x03`\x03`\x03`\x03`\x03`\x03`\x03a\x03a\x03b\x03b\x03b\x03" + - "b\x03b\x03c\x03c\x03c\x03c\x03c\x03d\x03d\x03d\x03d\x03d\x07d\u0553\n" + - "d\fd\x0Ed\u0556\vd\x03d\x03d\x03e\x03e\x03f\x03f\x03f\x03f\x03f\x03f\x03" + - "f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x05f\u056B\nf\x03g\x03g\x03" + - "h\x03h\x03h\x03h\x03h\x03i\x03i\x03i\x03i\x03i\x03i\x03i\x07i\u057B\n" + - "i\fi\x0Ei\u057E\vi\x03i\x03i\x05i\u0582\ni\x03j\x03j\x03j\x03k\x03k\x03" + - "k\x03k\x03k\x07k\u058C\nk\fk\x0Ek\u058F\vk\x03l\x03l\x03l\x03l\x03l\x03" + - "l\x03l\x03l\x07l\u0599\nl\fl\x0El\u059C\vl\x03l\x03l\x03l\x03l\x03l\x03" + - "l\x03l\x07l\u05A5\nl\fl\x0El\u05A8\vl\x03l\x03l\x03l\x03l\x03l\x03l\x03" + - "l\x07l\u05B1\nl\fl\x0El\u05B4\vl\x03l\x03l\x05l\u05B8\nl\x03m\x03m\x03" + - "m\x03n\x03n\x03o\x03o\x03o\x03o\x03o\x03o\x03o\x03p\x03p\x03q\x03q\x03" + - "r\x03r\x03r\x03s\x03s\x03s\x03s\x07s\u05D1\ns\fs\x0Es\u05D4\vs\x03t\x03" + - "t\x03t\x03t\x03u\x05u\u05DB\nu\x03u\x03u\x05u\u05DF\nu\x03u\x05u\u05E2" + - "\nu\x03u\x05u\u05E5\nu\x03u\x03u\x03v\x03v\x03v\x05v\u05EC\nv\x03v\x05" + - "v\u05EF\nv\x03v\x05v\u05F2\nv\x03v\x05v\u05F5\nv\x03v\x05v\u05F8\nv\x03" + - "v\x05v\u05FB\nv\x03v\x03v\x03v\x05v\u0600\nv\x03v\x05v\u0603\nv\x03w\x03" + - "w\x03w\x03w\x03w\x07w\u060A\nw\fw\x0Ew\u060D\vw\x03x\x03x\x05x\u0611\n" + - "x\x03x\x03x\x05x\u0615\nx\x03y\x03y\x03y\x05y\u061A\ny\x03z\x03z\x03z" + - "\x03z\x03z\x07z\u0621\nz\fz\x0Ez\u0624\vz\x03{\x03{\x03{\x03{\x03{\x03" + - "{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x05{\u0636\n{\x03" + - "|\x03|\x03|\x03|\x07|\u063C\n|\f|\x0E|\u063F\v|\x03}\x03}\x03}\x06}\u0644" + - "\n}\r}\x0E}\u0645\x03}\x03}\x05}\u064A\n}\x03~\x03~\x05~\u064E\n~\x03" + - "\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x05\x7F\u0658" + - "\n\x7F\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80" + - "\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80" + - "\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x05\x80\u0672" + - "\n\x80\x03\x81\x03\x81\x03\x81\x03\x81\x07\x81\u0678\n\x81\f\x81\x0E\x81" + - "\u067B\v\x81\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03" + - "\x82\x03\x82\x05\x82\u0686\n\x82\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83" + - "\x03\x84\x03\x84\x03\x84\x03\x85\x03\x85\x03\x86\x03\x86\x03\x86\x03\x86" + - "\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x05\x86\u069C\n\x86\x05" + - "\x86\u069E\n\x86\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86" + - "\x03\x86\x03\x86\x05\x86\u06A9\n\x86\x03\x86\x07\x86\u06AC\n\x86\f\x86" + - "\x0E\x86\u06AF\v\x86\x03\x87\x05\x87\u06B2\n\x87\x03\x87\x03\x87\x05\x87" + - "\u06B6\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u06BD\n\x87" + - "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x07\x87\u06C4\n\x87\f\x87\x0E" + - "\x87\u06C7\v\x87\x03\x87\x03\x87\x03\x87\x05\x87\u06CC\n\x87\x03\x87\x03" + + "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15" + + "\u025A\n\x15\x03\x16\x06\x16\u025D\n\x16\r\x16\x0E\x16\u025E\x03\x17\x03" + + "\x17\x05\x17\u0263\n\x17\x03\x18\x03\x18\x05\x18\u0267\n\x18\x03\x18\x03" + + "\x18\x05\x18\u026B\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x07\x18" + + "\u0272\n\x18\f\x18\x0E\x18\u0275\v\x18\x03\x18\x03\x18\x05\x18\u0279\n" + + "\x18\x03\x18\x03\x18\x05\x18\u027D\n\x18\x03\x18\x03\x18\x05\x18\u0281" + + "\n\x18\x03\x18\x03\x18\x05\x18\u0285\n\x18\x03\x18\x05\x18\u0288\n\x18" + + "\x03\x18\x03\x18\x05\x18\u028C\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u0291" + + "\n\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u0297\n\x19\x03\x1A\x03" + + "\x1A\x03\x1A\x05\x1A\u029C\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u02A1" + + "\n\x1B\x03\x1B\x05\x1B\u02A4\n\x1B\x03\x1C\x03\x1C\x05\x1C\u02A8\n\x1C" + + "\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x07\x1D\u02AE\n\x1D\f\x1D\x0E\x1D\u02B1" + + "\v\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u02B8\n\x1E\x03" + + "\x1E\x03\x1E\x05\x1E\u02BC\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02C0\n\x1E\x03" + + "\x1E\x03\x1E\x05\x1E\u02C4\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02C8\n\x1E\x03" + + "\x1E\x03\x1E\x05\x1E\u02CC\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02D0\n\x1E\x03" + + "\x1E\x03\x1E\x05\x1E\u02D4\n\x1E\x03\x1E\x03\x1E\x05\x1E\u02D8\n\x1E\x05" + + "\x1E\u02DA\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x05" + + " \u02E4\n \x03 \x03 \x03!\x03!\x03!\x03!\x05!\u02EC\n!\x03!\x03!\x03\"" + + "\x03\"\x03\"\x03\"\x03#\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03" + + "$\x03$\x03$\x03$\x07$\u0302\n$\f$\x0E$\u0305\v$\x03$\x03$\x03%\x03%\x05" + + "%\u030B\n%\x03%\x03%\x03%\x03%\x05%\u0311\n%\x03%\x05%\u0314\n%\x03%\x05" + + "%\u0317\n%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x05\'\u0321\n" + + "\'\x03\'\x05\'\u0324\n\'\x03(\x03(\x03)\x03)\x03)\x03)\x05)\u032C\n)\x03" + + "*\x03*\x03+\x03+\x03+\x03+\x03+\x03+\x03,\x03,\x05,\u0338\n,\x03,\x03" + + ",\x03,\x03,\x03,\x03,\x03-\x03-\x03.\x03.\x03.\x03.\x03/\x03/\x03/\x03" + + "/\x030\x030\x030\x030\x070\u034E\n0\f0\x0E0\u0351\v0\x030\x030\x031\x03" + + "1\x031\x031\x031\x031\x071\u035B\n1\f1\x0E1\u035E\v1\x031\x031\x051\u0362" + + "\n1\x032\x032\x052\u0366\n2\x033\x033\x033\x033\x073\u036C\n3\f3\x0E3" + + "\u036F\v3\x033\x053\u0372\n3\x034\x034\x034\x034\x054\u0378\n4\x035\x03" + + "5\x035\x035\x035\x036\x036\x036\x056\u0382\n6\x036\x036\x056\u0386\n6" + + "\x036\x036\x037\x037\x057\u038C\n7\x037\x037\x057\u0390\n7\x037\x037\x05" + + "7\u0394\n7\x037\x057\u0397\n7\x037\x037\x037\x038\x038\x038\x038\x058" + + "\u03A0\n8\x038\x038\x058\u03A4\n8\x038\x038\x038\x038\x038\x058\u03AB" + + "\n8\x038\x058\u03AE\n8\x039\x039\x039\x039\x039\x039\x079\u03B6\n9\f9" + + "\x0E9\u03B9\v9\x03:\x03:\x03;\x03;\x03;\x05;\u03C0\n;\x03;\x03;\x03;\x03" + + ";\x03;\x03;\x05;\u03C8\n;\x03<\x03<\x05<\u03CC\n<\x03<\x03<\x03<\x03=" + + "\x03=\x03=\x03>\x03>\x03>\x03>\x03>\x03>\x03>\x05>\u03DB\n>\x03?\x03?" + + "\x03?\x03?\x03@\x03@\x03@\x03@\x03A\x03A\x03A\x03B\x03B\x03B\x03B\x03" + + "B\x03B\x05B\u03EE\nB\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03D\x03D\x05" + + "D\u03F9\nD\x03D\x03D\x05D\u03FD\nD\x03D\x03D\x03D\x03D\x03D\x05D\u0404" + + "\nD\x03E\x03E\x03E\x05E\u0409\nE\x03E\x03E\x03F\x03F\x05F\u040F\nF\x03" + + "F\x03F\x05F\u0413\nF\x03F\x03F\x03G\x03G\x03G\x05G\u041A\nG\x03G\x03G" + + "\x05G\u041E\nG\x03H\x03H\x05H\u0422\nH\x03H\x03H\x05H\u0426\nH\x03H\x03" + + "H\x03I\x03I\x03I\x03I\x05I\u042E\nI\x03I\x03I\x05I\u0432\nI\x03I\x03I" + + "\x03J\x05J\u0437\nJ\x03J\x03J\x03J\x03J\x05J\u043D\nJ\x03K\x03K\x03K\x03" + + "K\x05K\u0443\nK\x03K\x05K\u0446\nK\x03K\x03K\x05K\u044A\nK\x03L\x03L\x03" + + "L\x03M\x03M\x03M\x03M\x07M\u0453\nM\fM\x0EM\u0456\vM\x03N\x03N\x03N\x03" + + "N\x07N\u045C\nN\fN\x0EN\u045F\vN\x03N\x03N\x03O\x03O\x03O\x03O\x03O\x03" + + "O\x03O\x06O\u046A\nO\rO\x0EO\u046B\x03O\x03O\x03P\x03P\x03P\x03P\x03P" + + "\x03P\x06P\u0476\nP\rP\x0EP\u0477\x03P\x03P\x03Q\x03Q\x03Q\x03Q\x03Q\x03" + + "Q\x03Q\x03Q\x03Q\x03Q\x03Q\x05Q\u0487\nQ\x03Q\x05Q\u048A\nQ\x03Q\x03Q" + + "\x05Q\u048E\nQ\x03Q\x05Q\u0491\nQ\x05Q\u0493\nQ\x03Q\x03Q\x03Q\x05Q\u0498" + + "\nQ\x03Q\x03Q\x05Q\u049C\nQ\x03Q\x05Q\u049F\nQ\x07Q\u04A1\nQ\fQ\x0EQ\u04A4" + + "\vQ\x03R\x03R\x03R\x03R\x07R\u04AA\nR\fR\x0ER\u04AD\vR\x03S\x03S\x03S" + + "\x03S\x07S\u04B3\nS\fS\x0ES\u04B6\vS\x03T\x03T\x03T\x03T\x03T\x07T\u04BD" + + "\nT\fT\x0ET\u04C0\vT\x03T\x03T\x05T\u04C4\nT\x03T\x03T\x03T\x03T\x03T" + + "\x03U\x03U\x03V\x03V\x03V\x05V\u04D0\nV\x03V\x05V\u04D3\nV\x03V\x05V\u04D6" + + "\nV\x03V\x05V\u04D9\nV\x03V\x03V\x03V\x03V\x05V\u04DF\nV\x03W\x03W\x05" + + "W\u04E3\nW\x03W\x03W\x03W\x03W\x07W\u04E9\nW\fW\x0EW\u04EC\vW\x05W\u04EE" + + "\nW\x03X\x03X\x03X\x05X\u04F3\nX\x03X\x05X\u04F6\nX\x05X\u04F8\nX\x03" + + "Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x05Y\u0506\n" + + "Y\x03Z\x03Z\x03Z\x03[\x03[\x03[\x03[\x07[\u050F\n[\f[\x0E[\u0512\v[\x03" + + "[\x03[\x05[\u0516\n[\x03[\x03[\x03[\x03[\x03[\x03[\x05[\u051E\n[\x03[" + + "\x05[\u0521\n[\x03[\x05[\u0524\n[\x03[\x03[\x03[\x05[\u0529\n[\x07[\u052B" + + "\n[\f[\x0E[\u052E\v[\x03\\\x03\\\x05\\\u0532\n\\\x03]\x05]\u0535\n]\x03" + + "]\x03]\x05]\u0539\n]\x03]\x05]\u053C\n]\x03]\x05]\u053F\n]\x03]\x03]\x03" + + "]\x03]\x03]\x03]\x03]\x03]\x07]\u0549\n]\f]\x0E]\u054C\v]\x03]\x03]\x03" + + "]\x03]\x05]\u0552\n]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x05" + + "]\u055D\n]\x03^\x03^\x03^\x03^\x03^\x03^\x03_\x03_\x03`\x03`\x03`\x03" + + "`\x03`\x03a\x03a\x03a\x03a\x03a\x03b\x03b\x03b\x03b\x03b\x07b\u0576\n" + + "b\fb\x0Eb\u0579\vb\x03b\x03b\x03c\x03c\x03d\x03d\x03d\x03d\x03d\x03d\x03" + + "d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u058E\nd\x03e\x03e\x03" + + "f\x03f\x03f\x03f\x03f\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x07g\u059E\n" + + "g\fg\x0Eg\u05A1\vg\x03g\x03g\x05g\u05A5\ng\x03h\x03h\x03h\x03i\x03i\x03" + + "i\x03i\x03i\x07i\u05AF\ni\fi\x0Ei\u05B2\vi\x03j\x03j\x03j\x03j\x03j\x03" + + "j\x03j\x03j\x07j\u05BC\nj\fj\x0Ej\u05BF\vj\x03j\x03j\x03j\x03j\x03j\x03" + + "j\x03j\x07j\u05C8\nj\fj\x0Ej\u05CB\vj\x03j\x03j\x03j\x03j\x03j\x03j\x03" + + "j\x07j\u05D4\nj\fj\x0Ej\u05D7\vj\x03j\x03j\x05j\u05DB\nj\x03k\x03k\x03" + + "k\x03l\x03l\x03m\x03m\x03m\x03m\x03m\x03m\x03m\x03n\x03n\x03o\x03o\x03" + + "p\x03p\x03p\x03q\x03q\x03q\x03q\x07q\u05F4\nq\fq\x0Eq\u05F7\vq\x03r\x03" + + "r\x03r\x03r\x03s\x05s\u05FE\ns\x03s\x03s\x05s\u0602\ns\x03s\x05s\u0605" + + "\ns\x03s\x05s\u0608\ns\x03s\x03s\x03t\x03t\x03t\x05t\u060F\nt\x03t\x05" + + "t\u0612\nt\x03t\x05t\u0615\nt\x03t\x05t\u0618\nt\x03t\x05t\u061B\nt\x03" + + "t\x05t\u061E\nt\x03t\x03t\x03t\x05t\u0623\nt\x03t\x05t\u0626\nt\x03u\x03" + + "u\x03u\x03u\x03u\x07u\u062D\nu\fu\x0Eu\u0630\vu\x03v\x03v\x05v\u0634\n" + + "v\x03v\x03v\x05v\u0638\nv\x03w\x03w\x03w\x05w\u063D\nw\x03x\x03x\x03x" + + "\x03x\x03x\x07x\u0644\nx\fx\x0Ex\u0647\vx\x03y\x03y\x03y\x03y\x03y\x03" + + "y\x03y\x03y\x03y\x03y\x03y\x03y\x03y\x03y\x03y\x03y\x05y\u0659\ny\x03" + + "z\x03z\x03z\x03z\x07z\u065F\nz\fz\x0Ez\u0662\vz\x03{\x03{\x03{\x06{\u0667" + + "\n{\r{\x0E{\u0668\x03{\x03{\x05{\u066D\n{\x03|\x03|\x05|\u0671\n|\x03" + + "}\x03}\x03}\x03}\x03}\x03}\x03}\x03}\x05}\u067B\n}\x03~\x03~\x03~\x03" + + "~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03" + + "~\x03~\x03~\x03~\x03~\x03~\x03~\x05~\u0695\n~\x03\x7F\x03\x7F\x03\x7F" + + "\x03\x7F\x07\x7F\u069B\n\x7F\f\x7F\x0E\x7F\u069E\v\x7F\x03\x80\x03\x80" + + "\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x05\x80\u06A9" + + "\n\x80\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x82\x03\x82\x03\x82" + + "\x03\x83\x03\x83\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x05\x84\u06BF\n\x84\x05\x84\u06C1\n\x84\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x05\x84" + + "\u06CC\n\x84\x03\x84\x07\x84\u06CF\n\x84\f\x84\x0E\x84\u06D2\v\x84\x03" + + "\x85\x05\x85\u06D5\n\x85\x03\x85\x03\x85\x05\x85\u06D9\n\x85\x03\x85\x03" + + "\x85\x03\x85\x03\x85\x03\x85\x05\x85\u06E0\n\x85\x03\x85\x03\x85\x03\x85" + + "\x03\x85\x03\x85\x07\x85\u06E7\n\x85\f\x85\x0E\x85\u06EA\v\x85\x03\x85" + + "\x03\x85\x03\x85\x05\x85\u06EF\n\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03" + + "\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x05\x85\u06FC\n\x85" + + "\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x05\x85\u0703\n\x85\x03\x85\x03" + + "\x85\x03\x85\x05\x85\u0708\n\x85\x03\x85\x03\x85\x03\x85\x03\x85\x05\x85" + + "\u070E\n\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x05\x85\u0715\n\x85" + + "\x05\x85\u0717\n\x85\x03\x86\x05\x86\u071A\n\x86\x03\x86\x03\x86\x03\x86" + + "\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x07\x86\u0724\n\x86\f\x86\x0E" + + "\x86\u0727\v\x86\x03\x86\x03\x86\x05\x86\u072B\n\x86\x03\x86\x05\x86\u072E" + + "\n\x86\x03\x86\x03\x86\x03\x86\x03\x86\x05\x86\u0734\n\x86\x05\x86\u0736" + + "\n\x86\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u073C\n\x87\x03\x87\x03" + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + - "\x87\x05\x87\u06D9\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87" + - "\u06E0\n\x87\x03\x87\x03\x87\x03\x87\x05\x87\u06E5\n\x87\x03\x87\x03\x87" + - "\x03\x87\x03\x87\x05\x87\u06EB\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + - "\x87\x05\x87\u06F2\n\x87\x05\x87\u06F4\n\x87\x03\x88\x05\x88\u06F7\n\x88" + - "\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x07\x88" + - "\u0701\n\x88\f\x88\x0E\x88\u0704\v\x88\x03\x88\x03\x88\x05\x88\u0708\n" + - "\x88\x03\x88\x05\x88\u070B\n\x88\x03\x88\x03\x88\x03\x88\x03\x88\x05\x88" + - "\u0711\n\x88\x05\x88\u0713\n\x88\x03\x89\x03\x89\x03\x89\x03\x89\x05\x89" + - "\u0719\n\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03" + - "\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03" + - "\x89\x03\x89\x03\x89\x03\x89\x03\x89\x07\x89\u0730\n\x89\f\x89\x0E\x89" + - "\u0733\v\x89\x03\x8A\x03\x8A\x03\x8A\x06\x8A\u0738\n\x8A\r\x8A\x0E\x8A" + - "\u0739\x03\x8A\x03\x8A\x05\x8A\u073E\n\x8A\x03\x8A\x03\x8A\x03\x8A\x03" + - "\x8A\x03\x8A\x06\x8A\u0745\n\x8A\r\x8A\x0E\x8A\u0746\x03\x8A\x03\x8A\x05" + - "\x8A\u074B\n\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A" + - "\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x05\x8A\u075B" + - "\n\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x05\x8A" + - "\u0764\n\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03" + - "\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03" + - "\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x05\x8A\u077C\n\x8A\x03\x8A" + - "\x03\x8A\x03\x8A\x07\x8A\u0781\n\x8A\f\x8A\x0E\x8A\u0784\v\x8A\x05\x8A" + - "\u0786\n\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03" + - "\x8A\x05\x8A\u0790\n\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x07\x8A" + - "\u0797\n\x8A\f\x8A\x0E\x8A\u079A\v\x8A\x03\x8B\x03\x8B\x03\x8B\x05\x8B" + - "\u079F\n\x8B\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x05\x8C\u07A5\n\x8C\x03\x8D" + - "\x03\x8D\x03\x8E\x03\x8E\x03\x8F\x03\x8F\x05\x8F\u07AD\n\x8F\x03\x90\x03" + - "\x90\x03\x90\x05\x90\u07B2\n\x90\x03\x91\x03\x91\x05\x91\u07B6\n\x91\x03" + - "\x92\x03\x92\x03\x92\x06\x92\u07BB\n\x92\r\x92\x0E\x92\u07BC\x03\x93\x03" + - "\x93\x03\x93\x05\x93\u07C2\n\x93\x03\x94\x03\x94\x03\x94\x03\x94\x03\x94" + - "\x03\x95\x05\x95\u07CA\n\x95\x03\x95\x03\x95\x05\x95\u07CE\n\x95\x03\x96" + - "\x05\x96\u07D1\n\x96\x03\x96\x03\x96\x05\x96\u07D5\n\x96\x03\x97\x05\x97" + - "\u07D8\n\x97\x03\x97\x03\x97\x05\x97\u07DC\n\x97\x03\x98\x03\x98\x03\x98" + - "\x03\x99\x03\x99\x06\x99\u07E3\n\x99\r\x99\x0E\x99\u07E4\x03\x99\x05\x99" + - "\u07E8\n\x99\x03\x9A\x03\x9A\x03\x9A\x03\x9A\x03\x9B\x03\x9B\x03\x9B\x07" + - "\x9B\u07F1\n\x9B\f\x9B\x0E\x9B\u07F4\v\x9B\x03\x9C\x03\x9C\x03\x9C\x05" + - "\x9C\u07F9\n\x9C\x03\x9D\x03\x9D\x03\x9E\x03\x9E\x03\x9F\x03\x9F\x03\x9F" + - "\x03\x9F\x03\x9F\x03\xA0\x03\xA0\x03\xA0\x07\xA0\u0807\n\xA0\f\xA0\x0E" + - "\xA0\u080A\v\xA0\x03\xA1\x03\xA1\x03\xA1\x03\xA2\x03\xA2\x03\xA2\x03\xA2" + - "\x03\xA3\x03\xA3\x03\xA3\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x07\xA4\u081A" + - "\n\xA4\f\xA4\x0E\xA4\u081D\v\xA4\x03\xA4\x03\xA4\x03\xA5\x03\xA5\x05\xA5" + - "\u0823\n\xA5\x03\xA5\x05\xA5\u0826\n\xA5\x03\xA6\x03\xA6\x03\xA6\x05\xA6" + - "\u082B\n\xA6\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x05\xA7\u0831\n\xA7\x03\xA8" + - "\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x05\xA8\u0839\n\xA8\x03\xA9\x03" + - "\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03" + - "\xA9\x03\xA9\x03\xA9\x03\xA9\x05\xA9\u0849\n\xA9\x03\xAA\x03\xAA\x03\xAA" + - "\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x05\xAA\u0852\n\xAA\x03\xAB\x03\xAB\x03" + - "\xAC\x03\xAC\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x05\xAD\u085C\n\xAD\x03\xAD" + - "\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x05\xAD\u0863\n\xAD\x03\xAD\x05\xAD\u0866" + - "\n\xAD\x03\xAE\x03\xAE\x03\xAE\x03\xAF\x03\xAF\x03\xB0\x03\xB0\x03\xB1" + - "\x03\xB1\x03\xB2\x03\xB2\x03\xB3\x03\xB3\x03\xB4\x03\xB4\x03\xB5\x03\xB5" + - "\x03\xB6\x03\xB6\x03\xB7\x03\xB7\x03\xB8\x03\xB8\x03\xB8\x03\u0808\x02" + - "\x07\xA2\xB6\u010A\u0110\u0112\xB9\x02\x02\x04\x02\x06\x02\b\x02\n\x02" + - "\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02" + - "\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x02" + - "8\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02" + - "T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02" + - "p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02" + - "\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02" + - "\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02" + - "\xAC\x02\xAE\x02\xB0\x02\xB2\x02\xB4\x02\xB6\x02\xB8\x02\xBA\x02\xBC\x02" + - "\xBE\x02\xC0\x02\xC2\x02\xC4\x02\xC6\x02\xC8\x02\xCA\x02\xCC\x02\xCE\x02" + - "\xD0\x02\xD2\x02\xD4\x02\xD6\x02\xD8\x02\xDA\x02\xDC\x02\xDE\x02\xE0\x02" + - "\xE2\x02\xE4\x02\xE6\x02\xE8\x02\xEA\x02\xEC\x02\xEE\x02\xF0\x02\xF2\x02" + - "\xF4\x02\xF6\x02\xF8\x02\xFA\x02\xFC\x02\xFE\x02\u0100\x02\u0102\x02\u0104" + - "\x02\u0106\x02\u0108\x02\u010A\x02\u010C\x02\u010E\x02\u0110\x02\u0112" + - "\x02\u0114\x02\u0116\x02\u0118\x02\u011A\x02\u011C\x02\u011E\x02\u0120" + - "\x02\u0122\x02\u0124\x02\u0126\x02\u0128\x02\u012A\x02\u012C\x02\u012E" + - "\x02\u0130\x02\u0132\x02\u0134\x02\u0136\x02\u0138\x02\u013A\x02\u013C" + - "\x02\u013E\x02\u0140\x02\u0142\x02\u0144\x02\u0146\x02\u0148\x02\u014A" + - "\x02\u014C\x02\u014E\x02\u0150\x02\u0152\x02"; + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x07\x87\u0753\n\x87\f\x87\x0E\x87\u0756\v\x87\x03\x88\x03" + + "\x88\x03\x88\x06\x88\u075B\n\x88\r\x88\x0E\x88\u075C\x03\x88\x03\x88\x05" + + "\x88\u0761\n\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x06\x88\u0768" + + "\n\x88\r\x88\x0E\x88\u0769\x03\x88\x03\x88\x05\x88\u076E\n\x88\x03\x88" + + "\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88" + + "\x03\x88\x03\x88\x03\x88\x03\x88\x05\x88\u077E\n\x88\x03\x88\x03\x88\x03" + + "\x88\x03\x88\x03\x88\x03\x88\x03\x88\x05\x88\u0787\n\x88\x03\x88\x03\x88" + + "\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88" + + "\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88" + + "\x03\x88\x03\x88\x05\x88\u079F\n\x88\x03\x88\x03\x88\x03\x88\x07\x88\u07A4" + + "\n\x88\f\x88\x0E\x88\u07A7\v\x88\x05\x88\u07A9\n\x88\x03\x88\x03\x88\x03" + + "\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x05\x88\u07B3\n\x88\x03\x88" + + "\x03\x88\x03\x88\x03\x88\x03\x88\x07\x88\u07BA\n\x88\f\x88\x0E\x88\u07BD" + + "\v\x88\x03\x89\x03\x89\x03\x89\x05\x89\u07C2\n\x89\x03\x8A\x03\x8A\x03" + + "\x8A\x03\x8A\x05\x8A\u07C8\n\x8A\x03\x8B\x03\x8B\x03\x8C\x03\x8C\x03\x8D" + + "\x03\x8D\x05\x8D\u07D0\n\x8D\x03\x8E\x03\x8E\x03\x8E\x05\x8E\u07D5\n\x8E" + + "\x03\x8F\x03\x8F\x05\x8F\u07D9\n\x8F\x03\x90\x03\x90\x03\x90\x06\x90\u07DE" + + "\n\x90\r\x90\x0E\x90\u07DF\x03\x91\x03\x91\x03\x91\x05\x91\u07E5\n\x91" + + "\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x93\x05\x93\u07ED\n\x93\x03" + + "\x93\x03\x93\x05\x93\u07F1\n\x93\x03\x94\x05\x94\u07F4\n\x94\x03\x94\x03" + + "\x94\x05\x94\u07F8\n\x94\x03\x95\x05\x95\u07FB\n\x95\x03\x95\x03\x95\x05" + + "\x95\u07FF\n\x95\x03\x96\x03\x96\x03\x96\x03\x97\x03\x97\x06\x97\u0806" + + "\n\x97\r\x97\x0E\x97\u0807\x03\x97\x05\x97\u080B\n\x97\x03\x98\x03\x98" + + "\x03\x98\x03\x98\x03\x99\x03\x99\x03\x99\x07\x99\u0814\n\x99\f\x99\x0E" + + "\x99\u0817\v\x99\x03\x9A\x03\x9A\x03\x9A\x05\x9A\u081C\n\x9A\x03\x9B\x03" + + "\x9B\x03\x9C\x03\x9C\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9E\x03" + + "\x9E\x03\x9F\x03\x9F\x03\xA0\x03\xA0\x03\xA1\x03\xA1\x03\xA2\x03\xA2\x03" + + "\xA3\x03\xA3\x03\xA3\x07\xA3\u0834\n\xA3\f\xA3\x0E\xA3\u0837\v\xA3\x03" + + "\xA4\x03\xA4\x03\xA4\x03\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA6\x03\xA6\x03" + + "\xA6\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x07\xA7\u0847\n\xA7\f\xA7\x0E\xA7" + + "\u084A\v\xA7\x03\xA7\x03\xA7\x03\xA8\x03\xA8\x05\xA8\u0850\n\xA8\x03\xA8" + + "\x05\xA8\u0853\n\xA8\x03\xA9\x03\xA9\x03\xA9\x05\xA9\u0858\n\xA9\x03\xAA" + + "\x03\xAA\x03\xAA\x03\xAA\x05\xAA\u085E\n\xAA\x03\xAB\x03\xAB\x03\xAB\x03" + + "\xAB\x03\xAB\x03\xAB\x05\xAB\u0866\n\xAB\x03\xAC\x03\xAC\x03\xAC\x03\xAC" + + "\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC" + + "\x03\xAC\x05\xAC\u0876\n\xAC\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03" + + "\xAD\x03\xAD\x05\xAD\u087F\n\xAD\x03\xAE\x03\xAE\x03\xAF\x03\xAF\x03\xB0" + + "\x03\xB0\x03\xB0\x03\xB0\x05\xB0\u0889\n\xB0\x03\xB0\x03\xB0\x03\xB0\x03" + + "\xB0\x03\xB0\x05\xB0\u0890\n\xB0\x03\xB0\x05\xB0\u0893\n\xB0\x03\xB1\x03" + + "\xB1\x03\xB1\x03\xB2\x03\xB2\x03\xB3\x03\xB3\x03\xB4\x03\xB4\x03\xB5\x03" + + "\xB5\x03\xB6\x03\xB6\x03\xB7\x03\xB7\x03\xB8\x03\xB8\x03\xB9\x03\xB9\x03" + + "\xBA\x03\xBA\x03\xBB\x03\xBB\x03\xBB\x03\u0835\x02\x07\xA0\xB4\u0106\u010C" + + "\u010E\xBC\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12" + + "\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&" + + "\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02" + + "B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02" + + "^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02" + + "z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02" + + "\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E\x02" + + "\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0\x02" + + "\xB2\x02\xB4\x02\xB6\x02\xB8\x02\xBA\x02\xBC\x02\xBE\x02\xC0\x02\xC2\x02" + + "\xC4\x02\xC6\x02\xC8\x02\xCA\x02\xCC\x02\xCE\x02\xD0\x02\xD2\x02\xD4\x02" + + "\xD6\x02\xD8\x02\xDA\x02\xDC\x02\xDE\x02\xE0\x02\xE2\x02\xE4\x02\xE6\x02" + + "\xE8\x02\xEA\x02\xEC\x02\xEE\x02"; private static readonly _serializedATNSegment1: string = - "\u0154\x02\u0156\x02\u0158\x02\u015A\x02\u015C\x02\u015E\x02\u0160\x02" + - "\u0162\x02\u0164\x02\u0166\x02\u0168\x02\u016A\x02\u016C\x02\u016E\x02" + - "\x021\x04\x02 \xEC\xEC\x05\x02\x12\x12((FF\x06\x02\x0F\x0F\x1C\x1CCC" + - "\xA9\xA9\x04\x02\x0E\x0E\x1B\x1B\x04\x02\xFE\xFE\u0109\u0109\x04\x02\xA8" + - "\xA8\u015A\u015A\x04\x02\x06\x06xx\x03\x02nr\x05\x02\xC5\xC5\xE3\xE3\u012D" + - "\u012D\r\x02\f\f\x94\x94\x9A\x9A\xC1\xC2\xCE\xCE\xE4\xE4\u010E\u010F\u0151" + - "\u0151\u015D\u015D\u015F\u015F\u016E\u016F\x04\x02\u0173\u0173\u0175\u0175" + - "\x06\x02\xE6\xE7\xEE\xEE\xFC\xFC\u012E\u012E\x04\x02\xBA\xBA\u0127\u0127" + - "\x04\x02++\u010A\u010A\x05\x02\x17\x17bb\xB4\xB4\x05\x02++``\u010A\u010A" + - "\x05\x0277\\\\\xAC\xAC\x05\x02DDmm\x80\x80\x04\x02\r\r}}\x04\x02__\u0112" + - "\u0112\x05\x02\xF5\xF5\u0110\u0110\u0164\u0164\x06\x02\xFF\xFF\u010B\u010B" + - "\u0119\u0119\u0145\u0145\x05\x02\x19\x19;;\x9E\x9E\x07\x02\x1A\x1A\x8D" + - "\x8E\x93\x93\x99\x99\u0130\u0130\x04\x02\xDF\xDF\u0148\u0148\x05\x02;" + - ";\x8A\x8A\x9E\x9E\x04\x02\n\n \x04\x02//KK\x06\x02\xFB\xFB\u012D\u012D" + - "\u0162\u0162\u0166\u0166\x04\x02\xBC\xBC\u0156\u0156\x04\x02\xB4\xB4\xB8" + - "\xB8\x04\x02\u017B\u017B\u018F\u0190\x06\x02\"\"\u018D\u018D\u0191\u0191" + - "\u0194\u0194\x04\x02\u018F\u0190\u0192\u0192\x03\x02\u018F\u0190\x03\x02" + - "\u0198\u0199\x04\x02\u0198\u0198\u019B\u019B\x06\x02\"\"\u018D\u018D\u018F" + - "\u0191\u0193\u0194\x05\x02\u012C\u012C\u017A\u017B\u018F\u0190\x04\x02" + - "\xFB\xFB\u0162\u0162\x04\x02\xB4\xB4\xED\xED\f\x02PPRRtt\xAD\xAD\xE5\xE5" + - "\u0107\u0107\u0123\u0123\u0126\u0126\u014B\u014B\u0176\u0176\x12\x02\x10" + - "\x10\x1D\x1E&&<\u02B8\x03\x02\x02\x02@\u02C0\x03\x02\x02\x02B\u02C8\x03" + - "\x02\x02\x02D\u02CC\x03\x02\x02\x02F\u02D3\x03\x02\x02\x02H\u02EF\x03" + - "\x02\x02\x02J\u02F1\x03\x02\x02\x02L\u02F4\x03\x02\x02\x02N\u02FE\x03" + - "\x02\x02\x02P\u0300\x03\x02\x02\x02R\u0306\x03\x02\x02\x02T\u0308\x03" + - "\x02\x02\x02V\u0310\x03\x02\x02\x02X\u0318\x03\x02\x02\x02Z\u031A\x03" + - "\x02\x02\x02\\\u031E\x03\x02\x02\x02^\u0322\x03\x02\x02\x02`\u033A\x03" + - "\x02\x02\x02b\u033E\x03\x02\x02\x02d\u0340\x03\x02\x02\x02f\u034C\x03" + - "\x02\x02\x02h\u0352\x03\x02\x02\x02j\u0354\x03\x02\x02\x02l\u0359\x03" + - "\x02\x02\x02n\u0364\x03\x02\x02\x02p\u0376\x03\x02\x02\x02r\u038A\x03" + - "\x02\x02\x02t\u0395\x03\x02\x02\x02v\u0397\x03\x02\x02\x02x\u03A4\x03" + - "\x02\x02\x02z\u03AB\x03\x02\x02\x02|\u03AE\x03\x02\x02\x02~\u03B7\x03" + - "\x02\x02\x02\x80\u03BB\x03\x02\x02\x02\x82\u03BF\x03\x02\x02\x02\x84\u03C2" + - "\x03\x02\x02\x02\x86\u03CA\x03\x02\x02\x02\x88\u03CF\x03\x02\x02\x02\x8A" + - "\u03E0\x03\x02\x02\x02\x8C\u03E7\x03\x02\x02\x02\x8E\u03F1\x03\x02\x02" + - "\x02\x90\u03FA\x03\x02\x02\x02\x92\u0404\x03\x02\x02\x02\x94\u0417\x03" + - "\x02\x02\x02\x96\u0419\x03\x02\x02\x02\x98\u0426\x03\x02\x02\x02\x9A\u0429" + - "\x03\x02\x02\x02\x9C\u0432\x03\x02\x02\x02\x9E\u043D\x03\x02\x02\x02\xA0" + - "\u044A\x03\x02\x02\x02\xA2\u046D\x03\x02\x02\x02\xA4\u0480\x03\x02\x02" + - "\x02\xA6\u0489\x03\x02\x02\x02\xA8\u0492\x03\x02\x02\x02\xAA\u04A5\x03" + - "\x02\x02\x02\xAC\u04B9\x03\x02\x02\x02\xAE\u04BB\x03\x02\x02\x02\xB0\u04D2" + - "\x03\x02\x02\x02\xB2\u04E0\x03\x02\x02\x02\xB4\u04E2\x03\x02\x02\x02\xB6" + - "\u04F0\x03\x02\x02\x02\xB8\u050A\x03\x02\x02\x02\xBA\u0537\x03\x02\x02" + - "\x02\xBC\u0539\x03\x02\x02\x02\xBE\u053B\x03\x02\x02\x02\xC0\u0541\x03" + - "\x02\x02\x02\xC2\u0543\x03\x02\x02\x02\xC4\u0548\x03\x02\x02\x02\xC6\u054D" + - "\x03\x02\x02\x02\xC8\u0559\x03\x02\x02\x02\xCA\u056A\x03\x02\x02\x02\xCC" + - "\u056C\x03\x02\x02\x02\xCE\u056E\x03\x02\x02\x02\xD0\u0581\x03\x02\x02" + - "\x02\xD2\u0583\x03\x02\x02\x02\xD4\u0586\x03\x02\x02\x02\xD6\u05B7\x03" + - "\x02\x02\x02\xD8\u05B9\x03\x02\x02\x02\xDA\u05BC\x03\x02\x02\x02\xDC\u05BE" + - "\x03\x02\x02\x02\xDE\u05C5\x03\x02\x02\x02\xE0\u05C7\x03\x02\x02\x02\xE2" + - "\u05C9\x03\x02\x02\x02\xE4\u05CC\x03\x02\x02\x02\xE6\u05D5\x03\x02\x02" + - "\x02\xE8\u05DA\x03\x02\x02\x02\xEA\u05E8\x03\x02\x02\x02\xEC\u0604\x03" + - "\x02\x02\x02\xEE\u060E\x03\x02\x02\x02\xF0\u0616\x03\x02\x02\x02\xF2\u061B" + - "\x03\x02\x02\x02\xF4\u0635\x03\x02\x02\x02\xF6\u0637\x03\x02\x02\x02\xF8" + - "\u0640\x03\x02\x02\x02\xFA\u064B\x03\x02\x02\x02\xFC\u0657\x03\x02\x02" + - "\x02\xFE\u0671\x03\x02\x02\x02\u0100\u0673\x03\x02\x02\x02\u0102\u0685" + - "\x03\x02\x02\x02\u0104\u0687\x03\x02\x02\x02\u0106\u068C\x03\x02\x02\x02" + - "\u0108\u068F\x03\x02\x02\x02\u010A\u069D\x03\x02\x02\x02\u010C\u06F3\x03" + - "\x02\x02\x02\u010E\u0712\x03\x02\x02\x02\u0110\u0718\x03\x02\x02\x02\u0112" + - "\u078F\x03\x02\x02\x02\u0114\u079E\x03\x02\x02\x02\u0116\u07A4\x03\x02" + - "\x02\x02\u0118\u07A6\x03\x02\x02\x02\u011A\u07A8\x03\x02\x02\x02\u011C" + - "\u07AC\x03\x02\x02\x02\u011E\u07AE\x03\x02\x02\x02\u0120\u07B3\x03\x02" + - "\x02\x02\u0122\u07BA\x03\x02\x02\x02\u0124\u07BE\x03\x02\x02\x02\u0126" + - "\u07C3\x03\x02\x02\x02\u0128\u07CD\x03\x02\x02\x02\u012A\u07D0\x03\x02" + - "\x02\x02\u012C\u07D7\x03\x02\x02\x02\u012E\u07DD\x03\x02\x02\x02\u0130" + - "\u07E7\x03\x02\x02\x02\u0132\u07E9\x03\x02\x02\x02\u0134\u07ED\x03\x02" + - "\x02\x02\u0136\u07F8\x03\x02\x02\x02\u0138\u07FA\x03\x02\x02\x02\u013A" + - "\u07FC\x03\x02\x02\x02\u013C\u07FE\x03\x02\x02\x02\u013E\u0803\x03\x02" + - "\x02\x02\u0140\u080B\x03\x02\x02\x02\u0142\u080E\x03\x02\x02\x02\u0144" + - "\u0812\x03\x02\x02\x02\u0146\u0815\x03\x02\x02\x02\u0148\u0820\x03\x02" + - "\x02\x02\u014A\u082A\x03\x02\x02\x02\u014C\u0830\x03\x02\x02\x02\u014E" + - "\u0838\x03\x02\x02\x02\u0150\u0848\x03\x02\x02\x02\u0152\u0851\x03\x02" + - "\x02\x02\u0154\u0853\x03\x02\x02\x02\u0156\u0855\x03\x02\x02\x02\u0158" + - "\u0865\x03\x02\x02\x02\u015A\u0867\x03\x02\x02\x02\u015C\u086A\x03\x02" + - "\x02\x02\u015E\u086C\x03\x02\x02\x02\u0160\u086E\x03\x02\x02\x02\u0162" + - "\u0870\x03\x02\x02\x02\u0164\u0872\x03\x02\x02\x02\u0166\u0874\x03\x02" + - "\x02\x02\u0168\u0876\x03\x02\x02\x02\u016A\u0878\x03\x02\x02\x02\u016C" + - "\u087A\x03\x02\x02\x02\u016E\u087C\x03\x02\x02\x02\u0170\u0171\x05\x04" + - "\x03\x02\u0171\u0172\x07\x02\x02\x03\u0172\x03\x03\x02\x02\x02\u0173\u0174" + - "\x05\x06\x04\x02\u0174\u0175\x07\x02\x02\x03\u0175\x05\x03\x02\x02\x02" + - "\u0176\u0178\x05\b\x05\x02\u0177\u0179\x07\u0187\x02\x02\u0178\u0177\x03" + - "\x02\x02\x02\u0178\u0179\x03\x02\x02\x02\u0179\u017C\x03\x02\x02\x02\u017A" + - "\u017C\x05\n\x06\x02\u017B\u0176\x03\x02\x02\x02\u017B\u017A\x03\x02\x02" + - "\x02\u017C\u017F\x03\x02\x02\x02\u017D\u017B\x03\x02\x02\x02\u017D\u017E" + - "\x03\x02\x02\x02\u017E\x07\x03\x02\x02\x02\u017F\u017D\x03\x02\x02\x02" + - "\u0180\u018D\x05\f\x07\x02\u0181\u018D\x05\x0E\b\x02\u0182\u018D\x05\x10" + - "\t\x02\u0183\u018D\x05\x12\n\x02\u0184\u018D\x05\x18\r\x02\u0185\u018D" + - "\x05\x1C\x0F\x02\u0186\u018D\x05\x1E\x10\x02\u0187\u018D\x05 \x11\x02" + - "\u0188\u018D\x05\"\x12\x02\u0189\u018D\x05$\x13\x02\u018A\u018D\x05&\x14" + - "\x02\u018B\u018D\x05(\x15\x02\u018C\u0180\x03\x02\x02\x02\u018C\u0181" + - "\x03\x02\x02\x02\u018C\u0182\x03\x02\x02\x02\u018C\u0183\x03\x02\x02\x02" + - "\u018C\u0184\x03\x02\x02\x02\u018C\u0185\x03\x02\x02\x02\u018C\u0186\x03" + - "\x02\x02\x02\u018C\u0187\x03\x02\x02\x02\u018C\u0188\x03\x02\x02\x02\u018C" + - "\u0189\x03\x02\x02\x02\u018C\u018A\x03\x02\x02\x02\u018C\u018B\x03\x02" + - "\x02\x02\u018D\t\x03\x02\x02\x02\u018E\u018F\x07\u0187\x02\x02\u018F\v" + - "\x03\x02\x02\x02\u0190\u019F\x05,\x17\x02\u0191\u019F\x05l7\x02\u0192" + - "\u019F\x05n8\x02\u0193\u019F\x05p9\x02\u0194\u019F\x05j6\x02\u0195\u019F" + - "\x05v<\x02\u0196\u019F\x05\x84C\x02\u0197\u019F\x05\x86D\x02\u0198\u019F" + - "\x05\x88E\x02\u0199\u019F\x05\x8AF\x02\u019A\u019F\x05\x8CG\x02\u019B" + - "\u019F\x05\x8EH\x02\u019C\u019F\x05\x90I\x02\u019D\u019F\x05\x92J\x02" + - "\u019E\u0190\x03\x02\x02\x02\u019E\u0191\x03\x02\x02\x02\u019E\u0192\x03" + - "\x02\x02\x02\u019E\u0193\x03\x02\x02\x02\u019E\u0194\x03\x02\x02\x02\u019E" + - "\u0195\x03\x02\x02\x02\u019E\u0196\x03\x02\x02\x02\u019E\u0197\x03\x02" + - "\x02\x02\u019E\u0198\x03\x02\x02\x02\u019E\u0199\x03\x02\x02\x02\u019E" + - "\u019A\x03\x02\x02\x02\u019E\u019B\x03\x02\x02\x02\u019E\u019C\x03\x02" + - "\x02\x02\u019E\u019D\x03\x02\x02\x02\u019F\r\x03\x02\x02\x02\u01A0\u01A3" + - "\x05\xA2R\x02\u01A1\u01A3\x05\x94K\x02\u01A2\u01A0\x03\x02\x02\x02\u01A2" + - "\u01A1\x03\x02\x02\x02\u01A3\x0F\x03\x02\x02\x02\u01A4\u01A5\t\x02\x02" + - "\x02\u01A5\u01A6\x05\u013E\xA0\x02\u01A6\x11\x03\x02\x02\x02\u01A7\u01AB" + - "\x07\xF8\x02\x02\u01A8\u01AC\x05\x14\v\x02\u01A9\u01AA\x07g\x02\x02\u01AA" + - "\u01AC\x07\xFD\x02\x02\u01AB\u01A8\x03\x02\x02\x02\u01AB\u01A9\x03\x02" + - "\x02\x02\u01AB\u01AC\x03\x02\x02\x02\u01AC\u01B0\x03\x02\x02\x02\u01AD" + - "\u01B1\x05\x0E\b\x02\u01AE\u01B1\x05\x96L\x02\u01AF\u01B1\x05\xA0Q\x02" + - "\u01B0\u01AD\x03\x02\x02\x02\u01B0\u01AE\x03\x02\x02\x02\u01B0\u01AF\x03" + - "\x02\x02\x02\u01B1\x13\x03\x02\x02\x02\u01B2\u01B7\x05\x16\f\x02\u01B3" + - "\u01B4\x07\u0186\x02\x02\u01B4\u01B6\x05\x16\f\x02\u01B5\u01B3\x03\x02" + - "\x02\x02\u01B6\u01B9\x03\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02\u01B7" + - "\u01B8\x03\x02\x02\x02\u01B8\x15\x03\x02\x02\x02\u01B9\u01B7\x03\x02\x02" + - "\x02\u01BA\u01BB\t\x03\x02\x02\u01BB\x17\x03\x02\x02\x02\u01BC\u01BE\x07" + - "\xA3\x02\x02\u01BD\u01BF\x07\x0E\x02\x02\u01BE\u01BD\x03\x02\x02\x02\u01BE" + - "\u01BF\x03\x02\x02\x02\u01BF\u01C0\x03\x02\x02\x02\u01C0\u01C3\x05\u013E" + - "\xA0\x02\u01C1\u01C3\x05\x1A\x0E\x02\u01C2\u01BC\x03\x02\x02\x02\u01C2" + - "\u01C1\x03\x02\x02\x02\u01C3\x19\x03\x02\x02\x02\u01C4\u01C5\x07\xA3\x02" + - "\x02\u01C5\u01C6\x07V\x02\x02\u01C6\u01CB\x05\u013E\xA0\x02\u01C7\u01C8" + - "\x07\u0186\x02\x02\u01C8\u01CA\x05\u013E\xA0\x02\u01C9\u01C7\x03\x02\x02" + - "\x02\u01CA\u01CD\x03\x02\x02\x02\u01CB\u01C9\x03\x02\x02\x02\u01CB\u01CC" + - "\x03\x02\x02\x02\u01CC\x1B\x03\x02\x02\x02\u01CD\u01CB\x03\x02\x02\x02" + - "\u01CE\u01CF\x07\u014E\x02\x02\u01CF\u01F2\t\x04\x02\x02\u01D0\u01D1\x07" + - "\u014E\x02\x02\u01D1\u01D2\x07\xE0\x02\x02\u01D2\u01F2\t\x05\x02\x02\u01D3" + - "\u01D4\x07\u014E\x02\x02\u01D4\u01D7\x07\x97\x02\x02\u01D5\u01D6\t\x06" + - "\x02\x02\u01D6\u01D8\x05\u013E\xA0\x02\u01D7\u01D5\x03\x02\x02\x02\u01D7" + - "\u01D8\x03\x02\x02\x02\u01D8\u01DA\x03\x02\x02\x02\u01D9\u01DB\x05\u010E" + - "\x88\x02\u01DA\u01D9\x03\x02\x02\x02\u01DA\u01DB\x03\x02\x02\x02\u01DB" + - "\u01F2\x03\x02\x02\x02\u01DC\u01DD\x07\u014E\x02\x02\u01DD\u01DE\x07\x16" + - "\x02\x02\u01DE\u01DF\t\x06\x02\x02\u01DF\u01E1\x05\u013E\xA0\x02\u01E0" + - "\u01E2\x05\u010E\x88\x02\u01E1\u01E0\x03\x02\x02\x02\u01E1\u01E2\x03\x02" + - "\x02\x02\u01E2\u01F2\x03\x02\x02\x02\u01E3\u01E4\x07\u014E\x02\x02\u01E4" + - "\u01E5\x07\xDD\x02\x02\u01E5\u01E6\t\x07\x02\x02\u01E6\u01F2\x05\u013E" + - "\xA0\x02\u01E7\u01E9\x07\u014E\x02\x02\u01E8\u01EA\x07\u016A\x02\x02\u01E9" + - "\u01E8\x03\x02\x02\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EB\x03\x02" + - "\x02\x02\u01EB\u01F2\x075\x02\x02\u01EC\u01EE\x07\u014E\x02\x02\u01ED" + - "\u01EF\x07\xFF\x02\x02\u01EE\u01ED\x03\x02\x02\x02\u01EE\u01EF\x03\x02" + - "\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0\u01F2\x07V\x02\x02\u01F1\u01CE" + - "\x03\x02\x02\x02\u01F1\u01D0\x03\x02\x02\x02\u01F1\u01D3\x03\x02\x02\x02" + - "\u01F1\u01DC\x03\x02\x02\x02\u01F1\u01E3\x03\x02\x02\x02\u01F1\u01E7\x03" + - "\x02\x02\x02\u01F1\u01EC\x03\x02\x02\x02\u01F2\x1D\x03\x02\x02\x02\u01F3" + - "\u01F4\x07N\x02\x02\u01F4\u01F5\x07\u0125\x02\x02\u01F5\u01F8\x05\u013E" + - "\xA0\x02\u01F6\u01F7\x07\u0173\x02\x02\u01F7\u01F9\x05\u0146\xA4\x02\u01F8" + - "\u01F6\x03\x02\x02\x02\u01F8\u01F9\x03\x02\x02\x02\u01F9\x1F\x03\x02\x02" + - "\x02\u01FA\u01FB\x07\xA1\x02\x02\u01FB\u01FC\x07\u0125\x02\x02\u01FC\u01FD" + - "\x05\u013E\xA0\x02\u01FD!\x03\x02\x02\x02\u01FE\u0200\x07\u014D\x02\x02" + - "\u01FF\u0201\x05\u0148\xA5\x02\u0200\u01FF\x03\x02\x02\x02\u0200\u0201" + - "\x03\x02\x02\x02\u0201#\x03\x02\x02\x02\u0202\u0204\x07\u0143\x02\x02" + - "\u0203\u0205\x05\u014A\xA6\x02\u0204\u0203\x03\x02\x02\x02\u0204\u0205" + - "\x03\x02\x02\x02\u0205%\x03\x02\x02\x02\u0206\u0207\t\b\x02\x02\u0207" + - "\u0208\x07B\x02\x02\u0208\u0209\x05t;\x02\u0209\'\x03\x02\x02\x02\u020A" + - "\u020B\x07\x06\x02\x02\u020B\u020C\x07B\x02\x02\u020C\u020D\x07\u0173" + - "\x02\x02\u020D\u0210\x05*\x16\x02\u020E\u020F\x07\xBB\x02\x02\u020F\u0211" + - "\x05\u013E\xA0\x02\u0210\u020E\x03\x02\x02\x02\u0210\u0211\x03\x02\x02" + - "\x02\u0211\u0233\x03\x02\x02\x02\u0212\u0213\x07\x06\x02\x02\u0213\u0214" + - "\x07-\x02\x02\u0214\u0215\x07\u0173\x02\x02\u0215\u0218\x05*\x16\x02\u0216" + - "\u0217\x07\xBB\x02\x02\u0217\u0219\x05\u013E\xA0\x02\u0218\u0216\x03\x02" + - "\x02\x02\u0218\u0219\x03\x02\x02\x02\u0219\u021C\x03\x02\x02\x02\u021A" + - "\u021B\x07y\x02\x02\u021B\u021D\x05\u013E\xA0\x02\u021C\u021A\x03\x02" + - "\x02\x02\u021C\u021D\x03\x02\x02\x02\u021D\u0233\x03\x02\x02\x02\u021E" + - "\u021F\x07\x06\x02\x02\u021F\u0220\t\t\x02\x02\u0220\u0221\x07\u0173\x02" + - "\x02\u0221\u0222\x05*\x16\x02\u0222\u0223\x07y\x02\x02\u0223\u0224\x05" + - "\u013E\xA0\x02\u0224\u0233\x03\x02\x02\x02\u0225\u0226\x07\x06\x02\x02" + - "\u0226\u0227\x07s\x02\x02\u0227\u0233\x05*\x16\x02\u0228\u0229\x07\x06" + - "\x02\x02\u0229\u022A\x07%\x02\x02\u022A\u022B\x07-\x02\x02\u022B\u022C" + - "\x07\u0173\x02\x02\u022C\u022D\x05*\x16\x02\u022D\u022E\x07y\x02\x02\u022E" + - "\u022F\x05\u013E\xA0\x02\u022F\u0230\x07G\x02\x02\u0230\u0231\x05\u013E" + - "\xA0\x02\u0231\u0233\x03\x02\x02\x02\u0232\u020A\x03\x02\x02\x02\u0232" + - "\u0212\x03\x02\x02\x02\u0232\u021E\x03\x02\x02\x02\u0232\u0225\x03\x02" + - "\x02\x02\u0232\u0228\x03\x02\x02\x02\u0233)\x03\x02\x02\x02\u0234\u0236" + - "\x07\u019C\x02\x02\u0235\u0234\x03\x02\x02\x02\u0236\u0237\x03\x02\x02" + - "\x02\u0237\u0235\x03\x02\x02\x02\u0237\u0238\x03\x02\x02\x02\u0238+\x03" + - "\x02\x02\x02\u0239\u023C\x05.\x18\x02\u023A\u023C\x050\x19\x02\u023B\u0239" + - "\x03\x02\x02\x02\u023B\u023A\x03\x02\x02\x02\u023C-\x03\x02\x02\x02\u023D" + - "\u023F\x07\xDD\x02\x02\u023E\u0240\x07\x98\x02\x02\u023F\u023E\x03\x02" + - "\x02\x02\u023F\u0240\x03\x02\x02\x02\u0240\u0241\x03\x02\x02\x02\u0241" + - "\u0243\x07\u015A\x02\x02\u0242\u0244\x05\u0142\xA2\x02\u0243\u0242\x03" + - "\x02\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244\u0245\x03\x02\x02\x02\u0245" + - "\u0246\x05f4\x02\u0246\u0247\x07\u0182\x02\x02\u0247\u024C\x052\x1A\x02" + - "\u0248\u0249\x07\u0186\x02\x02\u0249\u024B\x052\x1A\x02\u024A\u0248\x03" + - "\x02\x02\x02\u024B\u024E\x03\x02\x02\x02\u024C\u024A\x03\x02\x02\x02\u024C" + - "\u024D\x03\x02\x02\x02\u024D\u0251\x03\x02\x02\x02\u024E\u024C\x03\x02" + - "\x02\x02\u024F\u0250\x07\u0186\x02\x02\u0250\u0252\x05T+\x02\u0251\u024F" + - "\x03\x02\x02\x02\u0251\u0252\x03\x02\x02\x02\u0252\u0255\x03\x02\x02\x02" + - "\u0253\u0254\x07\u0186\x02\x02\u0254\u0256\x05V,\x02\u0255\u0253\x03\x02" + - "\x02\x02\u0255\u0256\x03\x02\x02\x02\u0256\u0259\x03\x02\x02\x02\u0257" + - "\u0258\x07\u0186\x02\x02\u0258\u025A\x05Z.\x02\u0259\u0257\x03\x02\x02" + - "\x02\u0259\u025A\x03\x02\x02\x02\u025A\u025B\x03\x02\x02\x02\u025B\u025D" + - "\x07\u0183\x02\x02\u025C\u025E\x05J&\x02\u025D\u025C\x03\x02\x02\x02\u025D" + - "\u025E\x03\x02\x02\x02\u025E\u0260\x03\x02\x02\x02\u025F\u0261\x05\\/" + - "\x02\u0260\u025F\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02\u0261\u0262" + - "\x03\x02\x02\x02\u0262\u0264\x05\u0140\xA1\x02\u0263\u0265\x05d3\x02\u0264" + - "\u0263\x03\x02\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265/\x03\x02\x02" + - "\x02\u0266\u0267\x07\xDD\x02\x02\u0267\u0269\x07\u015A\x02\x02\u0268\u026A" + - "\x05\u0142\xA2\x02\u0269\u0268\x03\x02\x02\x02\u0269\u026A\x03\x02\x02" + - "\x02\u026A\u026B\x03\x02\x02\x02\u026B\u026C\x05f4\x02\u026C\u026F\x05" + - "\u0140\xA1\x02\u026D\u026E\x07\xBB\x02\x02\u026E\u0270\x05\xA2R\x02\u026F" + - "\u026D\x03\x02\x02\x02\u026F\u0270\x03\x02\x02\x02\u02701\x03\x02\x02" + - "\x02\u0271\u0275\x054\x1B\x02\u0272\u0275\x05L\'\x02\u0273\u0275\x05P" + - ")\x02\u0274\u0271\x03\x02\x02\x02\u0274\u0272\x03\x02\x02\x02\u0274\u0273" + - "\x03\x02\x02\x02\u02753\x03\x02\x02\x02\u0276\u0277\x056\x1C\x02\u0277" + - "\u0279\x05:\x1E\x02\u0278\u027A\x05H%\x02\u0279\u0278\x03\x02\x02\x02" + - "\u0279\u027A\x03\x02\x02\x02\u027A\u027C\x03\x02\x02\x02\u027B\u027D\x05" + - "J&\x02\u027C\u027B\x03\x02\x02\x02\u027C\u027D\x03\x02\x02\x02\u027D5" + - "\x03\x02\x02\x02\u027E\u0281\x05\u013E\xA0\x02\u027F\u0281\x05\u0108\x85" + - "\x02\u0280\u027E\x03\x02\x02\x02\u0280\u027F\x03\x02\x02\x02\u02817\x03" + - "\x02\x02\x02\u0282\u0283\x07\u0182\x02\x02\u0283\u0288\x056\x1C\x02\u0284" + - "\u0285\x07\u0186\x02\x02\u0285\u0287\x056\x1C\x02\u0286\u0284\x03\x02" + - "\x02\x02\u0287\u028A\x03\x02\x02\x02\u0288\u0286\x03\x02\x02\x02\u0288" + - "\u0289\x03\x02\x02\x02\u0289\u028B\x03\x02\x02\x02\u028A\u0288\x03\x02" + - "\x02\x02\u028B\u028C\x07\u0183\x02\x02\u028C9\x03\x02\x02\x02\u028D\u02B3" + - "\t\n\x02\x02\u028E\u0290\t\v\x02\x02\u028F\u0291\x05<\x1F\x02\u0290\u028F" + - "\x03\x02\x02\x02\u0290\u0291\x03\x02\x02\x02\u0291\u02B3\x03\x02\x02\x02" + - "\u0292\u0294\x07\u015E\x02\x02\u0293\u0295\x05<\x1F\x02\u0294\u0293\x03" + - "\x02\x02\x02\u0294\u0295\x03\x02\x02\x02\u0295\u029C\x03\x02\x02\x02\u0296" + - "\u0298\t\f\x02\x02\u0297\u0299\x07\u011C\x02\x02\u0298\u0297\x03\x02\x02" + - "\x02\u0298\u0299\x03\x02\x02\x02\u0299\u029A\x03\x02\x02\x02\u029A\u029B" + - "\x07\u015D\x02\x02\u029B\u029D\x07\xB2\x02\x02\u029C\u0296\x03\x02\x02" + - "\x02\u029C\u029D\x03\x02\x02\x02\u029D\u02B3\x03\x02\x02\x02\u029E\u02A0" + - "\t\r\x02\x02\u029F\u02A1\x05> \x02\u02A0\u029F\x03\x02\x02\x02\u02A0\u02A1" + - "\x03\x02\x02\x02\u02A1\u02B3\x03\x02\x02\x02\u02A2\u02A4\t\x0E\x02\x02" + - "\u02A3\u02A5\x05B\"\x02\u02A4\u02A3\x03\x02\x02\x02\u02A4\u02A5\x03\x02" + - "\x02\x02\u02A5\u02B3\x03\x02\x02\x02\u02A6\u02A8\x07O\x02\x02\u02A7\u02A9" + - "\x05D#\x02\u02A8\u02A7\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02\u02A9" + - "\u02B3\x03\x02\x02\x02\u02AA\u02AC\x07\u0149\x02\x02\u02AB\u02AD\x05F" + - "$\x02\u02AC\u02AB\x03\x02\x02\x02\u02AC\u02AD\x03\x02\x02\x02\u02AD\u02B3" + - "\x03\x02\x02\x02\u02AE\u02B0\x07u\x02\x02\u02AF\u02B1\x05@!\x02\u02B0" + - "\u02AF\x03\x02\x02\x02\u02B0\u02B1\x03\x02\x02\x02\u02B1\u02B3\x03\x02" + - "\x02\x02\u02B2\u028D\x03\x02\x02\x02\u02B2\u028E\x03\x02\x02\x02\u02B2" + - "\u0292\x03\x02\x02\x02\u02B2\u029E\x03\x02\x02\x02\u02B2\u02A2\x03\x02" + - "\x02\x02\u02B2\u02A6\x03\x02\x02\x02\u02B2\u02AA\x03\x02\x02\x02\u02B2" + - "\u02AE\x03\x02\x02\x02\u02B3;\x03\x02\x02\x02\u02B4\u02B5\x07\u0182\x02" + - "\x02\u02B5\u02B6\x05\u015E\xB0\x02\u02B6\u02B7\x07\u0183\x02\x02\u02B7" + - "=\x03\x02\x02\x02\u02B8\u02B9\x07\u0182\x02\x02\u02B9\u02BC\x05\u015E" + - "\xB0\x02\u02BA\u02BB\x07\u0186\x02\x02\u02BB\u02BD\x05\u015E\xB0\x02\u02BC" + - "\u02BA\x03\x02\x02\x02\u02BC\u02BD\x03\x02\x02\x02\u02BD\u02BE\x03\x02" + - "\x02\x02\u02BE\u02BF\x07\u0183\x02\x02\u02BF?\x03\x02\x02\x02\u02C0\u02C1" + - "\x07\u0182\x02\x02\u02C1\u02C4\x05\u015C\xAF\x02\u02C2\u02C3\x07\u0186" + - "\x02\x02\u02C3\u02C5\x05\u015C\xAF\x02\u02C4\u02C2\x03\x02\x02\x02\u02C4" + - "\u02C5\x03\x02\x02\x02\u02C5\u02C6\x03\x02\x02\x02\u02C6\u02C7\x07\u0183" + - "\x02\x02\u02C7A\x03\x02\x02\x02\u02C8\u02C9\x07\u0179\x02\x02\u02C9\u02CA" + - "\x05:\x1E\x02\u02CA\u02CB\x07\u0178\x02\x02\u02CBC\x03\x02\x02\x02\u02CC" + - "\u02CD\x07\u0179\x02\x02\u02CD\u02CE\x05:\x1E\x02\u02CE\u02CF\x07\u0186" + - "\x02\x02\u02CF\u02D0\x05:\x1E\x02\u02D0\u02D1\x03\x02\x02\x02\u02D1\u02D2" + - "\x07\u0178\x02\x02\u02D2E\x03\x02\x02\x02\u02D3\u02D4\x07\u0179\x02\x02" + - "\u02D4\u02D5\x056\x1C\x02\u02D5\u02DC\x05:\x1E\x02\u02D6\u02D7\x07\u0186" + - "\x02\x02\u02D7\u02D8\x056\x1C\x02\u02D8\u02D9\x05:\x1E\x02\u02D9\u02DB" + - "\x03\x02\x02\x02\u02DA\u02D6\x03\x02\x02\x02\u02DB\u02DE\x03\x02\x02\x02" + - "\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD\u02DF\x03" + - "\x02\x02\x02\u02DE\u02DC\x03\x02\x02\x02\u02DF\u02E0\x07\u0178\x02\x02" + - "\u02E0G\x03\x02\x02\x02\u02E1\u02E2\x07\xD9\x02\x02\u02E2\u02E4\x05X-" + - "\x02\u02E3\u02E1\x03\x02\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\u02E5" + - "\x03\x02\x02\x02\u02E5\u02E6\x07\u0140\x02\x02\u02E6\u02E9\x07G\x02\x02" + - "\u02E7\u02E8\x07\u012C\x02\x02\u02E8\u02EA\x07$\x02\x02\u02E9\u02E7\x03" + - "\x02\x02\x02\u02E9\u02EA\x03\x02\x02\x02\u02EA\u02F0\x03\x02\x02\x02\u02EB" + - "\u02ED\x07\u012C\x02\x02\u02EC\u02EB\x03\x02\x02\x02\u02EC\u02ED\x03\x02" + - "\x02\x02\u02ED\u02EE\x03\x02\x02\x02\u02EE\u02F0\x07\u012D\x02\x02\u02EF" + - "\u02E3\x03\x02\x02\x02\u02EF\u02EC\x03\x02\x02\x02\u02F0I\x03\x02\x02" + - "\x02\u02F1\u02F2\x07\x14\x02\x02\u02F2\u02F3\x07\u0197\x02\x02\u02F3K" + - "\x03\x02\x02\x02\u02F4\u02F5\x056\x1C\x02\u02F5\u02F6\x05:\x1E\x02\u02F6" + - "\u02F9\x07\u0121\x02\x02\u02F7\u02F8\x07\xFE\x02\x02\u02F8\u02FA\x05N" + - "(\x02\u02F9\u02F7\x03\x02\x02\x02\u02F9\u02FA\x03\x02\x02\x02\u02FA\u02FC" + - "\x03\x02\x02\x02\u02FB\u02FD\x07\xAA\x02\x02\u02FC\u02FB\x03\x02\x02\x02" + - "\u02FC\u02FD\x03\x02\x02\x02\u02FDM\x03\x02\x02\x02\u02FE\u02FF\x07\u0197" + - "\x02\x02\u02FFO\x03\x02\x02\x02\u0300\u0301\x056\x1C\x02\u0301\u0302\x07" + - "\xBB\x02\x02\u0302\u0304\x05R*\x02\u0303\u0305\x05J&\x02\u0304\u0303\x03" + - "\x02\x02\x02\u0304\u0305\x03\x02\x02\x02\u0305Q\x03\x02\x02\x02\u0306" + - "\u0307\x05\u0108\x85\x02\u0307S\x03\x02\x02\x02\u0308\u0309\x07\xAB\x02" + - "\x02\u0309\u030A\x07\xFD\x02\x02\u030A\u030B\x05\u0108\x85\x02\u030B\u030C" + - "\x07\xBB\x02\x02\u030C\u030D\x05\u0108\x85\x02\u030DU\x03\x02\x02\x02" + - "\u030E\u030F\x07\xD9\x02\x02\u030F\u0311\x05X-\x02\u0310\u030E\x03\x02" + - "\x02\x02\u0310\u0311\x03\x02\x02\x02\u0311\u0312\x03\x02\x02\x02\u0312" + - "\u0313\x07\u0140\x02\x02\u0313\u0314\x07G\x02\x02\u0314\u0315\x058\x1D" + - "\x02\u0315\u0316\x07\u012C\x02\x02\u0316\u0317\x07$\x02\x02\u0317W\x03" + - "\x02\x02\x02\u0318\u0319\x05\u0136\x9C\x02\u0319Y\x03\x02\x02\x02\u031A" + - "\u031B\x07\u013D\x02\x02\u031B\u031C\x07\xFD\x02\x02\u031C\u031D\x07\u0158" + - "\x02\x02\u031D[\x03\x02\x02\x02\u031E\u031F\x07a\x02\x02\u031F\u0320\x07" + - "\xC7\x02\x02\u0320\u0321\x05^0\x02\u0321]\x03\x02\x02\x02\u0322\u0323" + - "\x07\u0182\x02\x02\u0323\u0328\x05`1\x02\u0324\u0325\x07\u0186\x02\x02" + - "\u0325\u0327\x05`1\x02\u0326\u0324\x03\x02\x02\x02\u0327\u032A\x03\x02" + - "\x02\x02\u0328\u0326\x03\x02\x02\x02\u0328\u0329\x03\x02\x02\x02\u0329" + - "\u032B\x03\x02\x02\x02\u032A\u0328\x03\x02\x02\x02\u032B\u032C\x07\u0183" + - "\x02\x02\u032C_\x03\x02\x02\x02\u032D\u033B\x05\u011C\x8F\x02\u032E\u032F" + - "\x05\u0136\x9C\x02\u032F\u0330\x07\u0182\x02\x02\u0330\u0335\x05b2\x02" + - "\u0331\u0332\x07\u0186\x02\x02\u0332\u0334\x05b2\x02\u0333\u0331\x03\x02" + - "\x02\x02\u0334\u0337\x03\x02\x02\x02\u0335\u0333\x03\x02\x02\x02\u0335" + - "\u0336\x03\x02\x02\x02\u0336\u0338\x03\x02\x02\x02\u0337\u0335\x03\x02" + - "\x02\x02\u0338\u0339\x07\u0183\x02\x02\u0339\u033B\x03\x02\x02\x02\u033A" + - "\u032D\x03\x02\x02\x02\u033A\u032E\x03\x02\x02\x02\u033Ba\x03\x02\x02" + - "\x02\u033C\u033F\x05\u011C\x8F\x02\u033D\u033F\x05\u0158\xAD\x02\u033E" + - "\u033C\x03\x02\x02\x02"; + "\xF0\x02\xF2\x02\xF4\x02\xF6\x02\xF8\x02\xFA\x02\xFC\x02\xFE\x02\u0100" + + "\x02\u0102\x02\u0104\x02\u0106\x02\u0108\x02\u010A\x02\u010C\x02\u010E" + + "\x02\u0110\x02\u0112\x02\u0114\x02\u0116\x02\u0118\x02\u011A\x02\u011C" + + "\x02\u011E\x02\u0120\x02\u0122\x02\u0124\x02\u0126\x02\u0128\x02\u012A" + + "\x02\u012C\x02\u012E\x02\u0130\x02\u0132\x02\u0134\x02\u0136\x02\u0138" + + "\x02\u013A\x02\u013C\x02\u013E\x02\u0140\x02\u0142\x02\u0144\x02\u0146" + + "\x02\u0148\x02\u014A\x02\u014C\x02\u014E\x02\u0150\x02\u0152\x02\u0154" + + "\x02\u0156\x02\u0158\x02\u015A\x02\u015C\x02\u015E\x02\u0160\x02\u0162" + + "\x02\u0164\x02\u0166\x02\u0168\x02\u016A\x02\u016C\x02\u016E\x02\u0170" + + "\x02\u0172\x02\u0174\x02\x021\x04\x02 \xEC\xEC\x05\x02\x12\x12((FF\x06" + + "\x02\x0F\x0F\x1C\x1CCC\xA9\xA9\x04\x02\x0E\x0E\x1B\x1B\x04\x02\xFE\xFE" + + "\u0109\u0109\x04\x02\xA8\xA8\u015A\u015A\x04\x02\x06\x06xx\x03\x02nr\x05" + + "\x02\xC5\xC5\xE3\xE3\u012D\u012D\r\x02\f\f\x94\x94\x9A\x9A\xC1\xC2\xCE" + + "\xCE\xE4\xE4\u010E\u010F\u0151\u0151\u015D\u015D\u015F\u015F\u016E\u016F" + + "\x04\x02\u0173\u0173\u0175\u0175\x06\x02\xE6\xE7\xEE\xEE\xFC\xFC\u012E" + + "\u012E\x04\x02\xBA\xBA\u0127\u0127\x04\x02++\u010A\u010A\x05\x02\x17\x17" + + "bb\xB4\xB4\x05\x02++``\u010A\u010A\x05\x0277\\\\\xAC\xAC\x05\x02DDmm\x80" + + "\x80\x04\x02\r\r}}\x04\x02__\u0112\u0112\x05\x02\xF5\xF5\u0110\u0110\u0164" + + "\u0164\x06\x02\xFF\xFF\u010B\u010B\u0119\u0119\u0145\u0145\x05\x02\x19" + + "\x19;;\x9E\x9E\x07\x02\x1A\x1A\x8D\x8E\x93\x93\x99\x99\u0130\u0130\x04" + + "\x02\xDF\xDF\u0148\u0148\x05\x02;;\x8A\x8A\x9E\x9E\x04\x02\n\n \x04\x02" + + "//KK\x06\x02\xFB\xFB\u012D\u012D\u0162\u0162\u0166\u0166\x04\x02\xBC\xBC" + + "\u0156\u0156\x04\x02\xB4\xB4\xB8\xB8\x04\x02\u017B\u017B\u018F\u0190\x06" + + "\x02\"\"\u018D\u018D\u0191\u0191\u0194\u0194\x04\x02\u018F\u0190\u0192" + + "\u0192\x03\x02\u018F\u0190\x03\x02\u0198\u0199\x04\x02\u0198\u0198\u019B" + + "\u019B\x06\x02\"\"\u018D\u018D\u018F\u0191\u0193\u0194\x05\x02\u012C\u012C" + + "\u017A\u017B\u018F\u0190\x04\x02\xFB\xFB\u0162\u0162\x04\x02\xB4\xB4\xED" + + "\xED\f\x02PPRRtt\xAD\xAD\xE5\xE5\u0107\u0107\u0123\u0123\u0126\u0126\u014B" + + "\u014B\u0176\u0176\x12\x02\x10\x10\x1D\x1E&&<\u02DF\x03\x02\x02\x02" + + "@\u02E7\x03\x02\x02\x02B\u02EF\x03\x02\x02\x02D\u02F3\x03\x02\x02\x02" + + "F\u02FA\x03\x02\x02\x02H\u0316\x03\x02\x02\x02J\u0318\x03\x02\x02\x02" + + "L\u031B\x03\x02\x02\x02N\u0325\x03\x02\x02\x02P\u0327\x03\x02\x02\x02" + + "R\u032D\x03\x02\x02\x02T\u032F\x03\x02\x02\x02V\u0337\x03\x02\x02\x02" + + "X\u033F\x03\x02\x02\x02Z\u0341\x03\x02\x02\x02\\\u0345\x03\x02\x02\x02" + + "^\u0349\x03\x02\x02\x02`\u0361\x03\x02\x02\x02b\u0365\x03\x02\x02\x02" + + "d\u0367\x03\x02\x02\x02f\u0377\x03\x02\x02\x02h\u0379\x03\x02\x02\x02" + + "j\u037E\x03\x02\x02\x02l\u0389\x03\x02\x02\x02n\u039B\x03\x02\x02\x02" + + "p\u03AF\x03\x02\x02\x02r\u03BA\x03\x02\x02\x02t\u03BC\x03\x02\x02\x02" + + "v\u03C9\x03\x02\x02\x02x\u03D0\x03\x02\x02\x02z\u03D3\x03\x02\x02\x02" + + "|\u03DC\x03\x02\x02\x02~\u03E0\x03\x02\x02\x02\x80\u03E4\x03\x02\x02\x02" + + "\x82\u03E7\x03\x02\x02\x02\x84\u03EF\x03\x02\x02\x02\x86\u03F4\x03\x02" + + "\x02\x02\x88\u0405\x03\x02\x02\x02\x8A\u040C\x03\x02\x02\x02\x8C\u0416" + + "\x03\x02\x02\x02\x8E\u041F\x03\x02\x02\x02\x90\u0429\x03\x02\x02\x02\x92" + + "\u043C\x03\x02\x02\x02\x94\u043E\x03\x02\x02\x02\x96\u044B\x03\x02\x02" + + "\x02\x98\u044E\x03\x02\x02\x02\x9A\u0457\x03\x02\x02\x02\x9C\u0462\x03" + + "\x02\x02\x02\x9E\u046F\x03\x02\x02\x02\xA0\u0492\x03\x02\x02\x02\xA2\u04A5" + + "\x03\x02\x02\x02\xA4\u04AE\x03\x02\x02\x02\xA6\u04B7\x03\x02\x02\x02\xA8" + + "\u04CA\x03\x02\x02\x02\xAA\u04DE\x03\x02\x02\x02\xAC\u04E0\x03\x02\x02" + + "\x02\xAE\u04F7\x03\x02\x02\x02\xB0\u0505\x03\x02\x02\x02\xB2\u0507\x03" + + "\x02\x02\x02\xB4\u0515\x03\x02\x02\x02\xB6\u052F\x03\x02\x02\x02\xB8\u055C" + + "\x03\x02\x02\x02\xBA\u055E\x03\x02\x02\x02\xBC\u0564\x03\x02\x02\x02\xBE" + + "\u0566\x03\x02\x02\x02\xC0\u056B\x03\x02\x02\x02\xC2\u0570\x03\x02\x02" + + "\x02\xC4\u057C\x03\x02\x02\x02\xC6\u058D\x03\x02\x02\x02\xC8\u058F\x03" + + "\x02\x02\x02\xCA\u0591\x03\x02\x02\x02\xCC\u05A4\x03\x02\x02\x02\xCE\u05A6" + + "\x03\x02\x02\x02\xD0\u05A9\x03\x02\x02\x02\xD2\u05DA\x03\x02\x02\x02\xD4" + + "\u05DC\x03\x02\x02\x02\xD6\u05DF\x03\x02\x02\x02\xD8\u05E1\x03\x02\x02" + + "\x02\xDA\u05E8\x03\x02\x02\x02\xDC\u05EA\x03\x02\x02\x02\xDE\u05EC\x03" + + "\x02\x02\x02\xE0\u05EF\x03\x02\x02\x02\xE2\u05F8\x03\x02\x02\x02\xE4\u05FD" + + "\x03\x02\x02\x02\xE6\u060B\x03\x02\x02\x02\xE8\u0627\x03\x02\x02\x02\xEA" + + "\u0631\x03\x02\x02\x02\xEC\u0639\x03\x02\x02\x02\xEE\u063E\x03\x02\x02" + + "\x02\xF0\u0658\x03\x02\x02\x02\xF2\u065A\x03\x02\x02\x02\xF4\u0663\x03" + + "\x02\x02\x02\xF6\u066E\x03\x02\x02\x02\xF8\u067A\x03\x02\x02\x02\xFA\u0694" + + "\x03\x02\x02\x02\xFC\u0696\x03\x02\x02\x02\xFE\u06A8\x03\x02\x02\x02\u0100" + + "\u06AA\x03\x02\x02\x02\u0102\u06AF\x03\x02\x02\x02\u0104\u06B2\x03\x02" + + "\x02\x02\u0106\u06C0\x03\x02\x02\x02\u0108\u0716\x03\x02\x02\x02\u010A" + + "\u0735\x03\x02\x02\x02\u010C\u073B\x03\x02\x02\x02\u010E\u07B2\x03\x02" + + "\x02\x02\u0110\u07C1\x03\x02\x02\x02\u0112\u07C7\x03\x02\x02\x02\u0114" + + "\u07C9\x03\x02\x02\x02\u0116\u07CB\x03\x02\x02\x02\u0118\u07CF\x03\x02" + + "\x02\x02\u011A\u07D1\x03\x02\x02\x02\u011C\u07D6\x03\x02\x02\x02\u011E" + + "\u07DD\x03\x02\x02\x02\u0120\u07E1\x03\x02\x02\x02\u0122\u07E6\x03\x02" + + "\x02\x02\u0124\u07F0\x03\x02\x02\x02\u0126\u07F3\x03\x02\x02\x02\u0128" + + "\u07FA\x03\x02\x02\x02\u012A\u0800\x03\x02\x02\x02\u012C\u080A\x03\x02" + + "\x02\x02\u012E\u080C\x03\x02\x02\x02\u0130\u0810\x03\x02\x02\x02\u0132" + + "\u081B\x03\x02\x02\x02\u0134\u081D\x03\x02\x02\x02\u0136\u081F\x03\x02" + + "\x02\x02\u0138\u0821\x03\x02\x02\x02\u013A\u0826\x03\x02\x02\x02\u013C" + + "\u0828\x03\x02\x02\x02\u013E\u082A\x03\x02\x02\x02\u0140\u082C\x03\x02" + + "\x02\x02\u0142\u082E\x03\x02\x02\x02\u0144\u0830\x03\x02\x02\x02\u0146" + + "\u0838\x03\x02\x02\x02\u0148\u083B\x03\x02\x02\x02\u014A\u083F\x03\x02" + + "\x02\x02\u014C\u0842\x03\x02\x02\x02\u014E\u084D\x03\x02\x02\x02\u0150" + + "\u0857\x03\x02\x02\x02\u0152\u085D\x03\x02\x02\x02\u0154\u0865\x03\x02" + + "\x02\x02\u0156\u0875\x03\x02\x02\x02\u0158\u087E\x03\x02\x02\x02\u015A" + + "\u0880\x03\x02\x02\x02\u015C\u0882\x03\x02\x02\x02\u015E\u0892\x03\x02" + + "\x02\x02\u0160\u0894\x03\x02\x02\x02\u0162\u0897\x03\x02\x02\x02\u0164" + + "\u0899\x03\x02\x02\x02\u0166\u089B\x03\x02\x02\x02\u0168\u089D\x03\x02" + + "\x02\x02\u016A\u089F\x03\x02\x02\x02\u016C\u08A1\x03\x02\x02\x02\u016E" + + "\u08A3\x03\x02\x02\x02\u0170\u08A5\x03\x02\x02\x02\u0172\u08A7\x03\x02" + + "\x02\x02\u0174\u08A9\x03\x02\x02\x02\u0176\u0177\x05\x04\x03\x02\u0177" + + "\u0178\x07\x02\x02\x03\u0178\x03\x03\x02\x02\x02\u0179\u017A\x05\x06\x04" + + "\x02\u017A\u017B\x07\x02\x02\x03\u017B\x05\x03\x02\x02\x02\u017C\u017F" + + "\x05\b\x05\x02\u017D\u017F\x05\n\x06\x02\u017E\u017C\x03\x02\x02\x02\u017E" + + "\u017D\x03\x02\x02\x02\u017F\u0182\x03\x02\x02\x02\u0180\u017E\x03\x02" + + "\x02\x02\u0180\u0181\x03\x02\x02\x02\u0181\x07\x03\x02\x02\x02\u0182\u0180" + + "\x03\x02\x02\x02\u0183\u0185\x05\f\x07\x02\u0184\u0186\x07\u0187\x02\x02" + + "\u0185\u0184\x03\x02\x02\x02\u0185\u0186\x03\x02\x02\x02\u0186\u01B4\x03" + + "\x02\x02\x02\u0187\u0189\x05\x0E\b\x02\u0188\u018A\x07\u0187\x02\x02\u0189" + + "\u0188\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A\u01B4\x03\x02" + + "\x02\x02\u018B\u018D\x05\x10\t\x02\u018C\u018E\x07\u0187\x02\x02\u018D" + + "\u018C\x03\x02\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E\u01B4\x03\x02" + + "\x02\x02\u018F\u0191\x05\x12\n\x02\u0190\u0192\x07\u0187\x02\x02\u0191" + + "\u0190\x03\x02\x02\x02\u0191\u0192\x03\x02\x02\x02\u0192\u01B4\x03\x02" + + "\x02\x02\u0193\u0195\x05\x18\r\x02\u0194\u0196\x07\u0187\x02\x02\u0195" + + "\u0194\x03\x02\x02\x02\u0195\u0196\x03\x02\x02\x02\u0196\u01B4\x03\x02" + + "\x02\x02\u0197\u0199\x05\x1C\x0F\x02\u0198\u019A\x07\u0187\x02\x02\u0199" + + "\u0198\x03\x02\x02\x02\u0199\u019A\x03\x02\x02\x02\u019A\u01B4\x03\x02" + + "\x02\x02\u019B\u019D\x05\x1E\x10\x02\u019C\u019E\x07\u0187\x02\x02\u019D" + + "\u019C\x03\x02\x02\x02\u019D\u019E\x03\x02\x02\x02\u019E\u01B4\x03\x02" + + "\x02\x02\u019F\u01A1\x05 \x11\x02\u01A0\u01A2\x07\u0187\x02\x02\u01A1" + + "\u01A0\x03\x02\x02\x02\u01A1\u01A2\x03\x02\x02\x02\u01A2\u01B4\x03\x02" + + "\x02\x02\u01A3\u01A5\x05\"\x12\x02\u01A4\u01A6\x07\u0187\x02\x02\u01A5" + + "\u01A4\x03\x02\x02\x02\u01A5\u01A6\x03\x02\x02\x02\u01A6\u01B4\x03\x02" + + "\x02\x02\u01A7\u01A9\x05$\x13\x02\u01A8\u01AA\x07\u0187\x02\x02\u01A9" + + "\u01A8\x03\x02\x02\x02\u01A9\u01AA\x03\x02\x02\x02\u01AA\u01B4\x03\x02" + + "\x02\x02\u01AB\u01AD\x05&\x14\x02\u01AC\u01AE\x07\u0187\x02\x02\u01AD" + + "\u01AC\x03\x02\x02\x02\u01AD\u01AE\x03\x02\x02\x02\u01AE\u01B4\x03\x02" + + "\x02\x02\u01AF\u01B1\x05(\x15\x02\u01B0\u01B2\x07\u0187\x02\x02\u01B1" + + "\u01B0\x03\x02\x02\x02\u01B1\u01B2\x03\x02\x02\x02\u01B2\u01B4\x03\x02" + + "\x02\x02\u01B3\u0183\x03\x02\x02\x02\u01B3\u0187\x03\x02\x02\x02\u01B3" + + "\u018B\x03\x02\x02\x02\u01B3\u018F\x03\x02\x02\x02\u01B3\u0193\x03\x02" + + "\x02\x02\u01B3\u0197\x03\x02\x02\x02\u01B3\u019B\x03\x02\x02\x02\u01B3" + + "\u019F\x03\x02\x02\x02\u01B3\u01A3\x03\x02\x02\x02\u01B3\u01A7\x03\x02" + + "\x02\x02\u01B3\u01AB\x03\x02\x02\x02\u01B3\u01AF\x03\x02\x02\x02\u01B4" + + "\t\x03\x02\x02\x02\u01B5\u01B6\x07\u0187\x02\x02\u01B6\v\x03\x02\x02\x02" + + "\u01B7\u01C6\x05,\x17\x02\u01B8\u01C6\x05j6\x02\u01B9\u01C6\x05l7\x02" + + "\u01BA\u01C6\x05n8\x02\u01BB\u01C6\x05h5\x02\u01BC\u01C6\x05t;\x02\u01BD" + + "\u01C6\x05\x82B\x02\u01BE\u01C6\x05\x84C\x02\u01BF\u01C6\x05\x86D\x02" + + "\u01C0\u01C6\x05\x88E\x02\u01C1\u01C6\x05\x8AF\x02\u01C2\u01C6\x05\x8C" + + "G\x02\u01C3\u01C6\x05\x8EH\x02\u01C4\u01C6\x05\x90I\x02\u01C5\u01B7\x03" + + "\x02\x02\x02\u01C5\u01B8\x03\x02\x02\x02\u01C5\u01B9\x03\x02\x02\x02\u01C5" + + "\u01BA\x03\x02\x02\x02\u01C5\u01BB\x03\x02\x02\x02\u01C5\u01BC\x03\x02" + + "\x02\x02\u01C5\u01BD\x03\x02\x02\x02\u01C5\u01BE\x03\x02\x02\x02\u01C5" + + "\u01BF\x03\x02\x02\x02\u01C5\u01C0\x03\x02\x02\x02\u01C5\u01C1\x03\x02" + + "\x02\x02\u01C5\u01C2\x03\x02\x02\x02\u01C5\u01C3\x03\x02\x02\x02\u01C5" + + "\u01C4\x03\x02\x02\x02\u01C6\r\x03\x02\x02\x02\u01C7\u01CA\x05\xA0Q\x02" + + "\u01C8\u01CA\x05\x92J\x02\u01C9\u01C7\x03\x02\x02\x02\u01C9\u01C8\x03" + + "\x02\x02\x02\u01CA\x0F\x03\x02\x02\x02\u01CB\u01CC\t\x02\x02\x02\u01CC" + + "\u01CD\x05\u0142\xA2\x02\u01CD\x11\x03\x02\x02\x02\u01CE\u01D2\x07\xF8" + + "\x02\x02\u01CF\u01D3\x05\x14\v\x02\u01D0\u01D1\x07g\x02\x02\u01D1\u01D3" + + "\x07\xFD\x02\x02\u01D2\u01CF\x03\x02\x02\x02\u01D2\u01D0\x03\x02\x02\x02" + + "\u01D2\u01D3\x03\x02\x02\x02\u01D3\u01D7\x03\x02\x02\x02\u01D4\u01D8\x05" + + "\x0E\b\x02\u01D5\u01D8\x05\x94K\x02\u01D6\u01D8\x05\x9EP\x02\u01D7\u01D4" + + "\x03\x02\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D7\u01D6\x03\x02\x02\x02" + + "\u01D8\x13\x03\x02\x02\x02\u01D9\u01DE\x05\x16\f\x02\u01DA\u01DB\x07\u0186" + + "\x02\x02\u01DB\u01DD\x05\x16\f\x02\u01DC\u01DA\x03\x02\x02\x02\u01DD\u01E0" + + "\x03\x02\x02\x02\u01DE\u01DC\x03\x02\x02\x02\u01DE\u01DF\x03\x02\x02\x02" + + "\u01DF\x15\x03\x02\x02\x02\u01E0\u01DE\x03\x02\x02\x02\u01E1\u01E2\t\x03" + + "\x02\x02\u01E2\x17\x03\x02\x02\x02\u01E3\u01E4\x07\xA3\x02\x02\u01E4\u01E5" + + "\x07\x0E\x02\x02\u01E5\u01EA\x05\u013A\x9E\x02\u01E6\u01E7\x07\xA3\x02" + + "\x02\u01E7\u01EA\x05\u013C\x9F\x02\u01E8\u01EA\x05\x1A\x0E\x02\u01E9\u01E3" + + "\x03\x02\x02\x02\u01E9\u01E6\x03\x02\x02\x02\u01E9\u01E8\x03\x02\x02\x02" + + "\u01EA\x19\x03\x02\x02\x02\u01EB\u01EC\x07\xA3\x02\x02\u01EC\u01ED\x07" + + "V\x02\x02\u01ED\u01F2\x05\u0144\xA3\x02\u01EE\u01EF\x07\u0186\x02\x02" + + "\u01EF\u01F1\x05\u0144\xA3\x02\u01F0\u01EE\x03\x02\x02\x02\u01F1\u01F4" + + "\x03\x02\x02\x02\u01F2\u01F0\x03\x02\x02\x02\u01F2\u01F3\x03\x02\x02\x02" + + "\u01F3\x1B\x03\x02\x02\x02\u01F4\u01F2\x03\x02\x02\x02\u01F5\u01F6\x07" + + "\u014E\x02\x02\u01F6\u0219\t\x04\x02\x02\u01F7\u01F8\x07\u014E\x02\x02" + + "\u01F8\u01F9\x07\xE0\x02\x02\u01F9\u0219\t\x05\x02\x02\u01FA\u01FB\x07" + + "\u014E\x02\x02\u01FB\u01FE\x07\x97\x02\x02\u01FC\u01FD\t\x06\x02\x02\u01FD" + + "\u01FF\x05\u0142\xA2\x02\u01FE\u01FC\x03\x02\x02\x02\u01FE\u01FF\x03\x02" + + "\x02\x02\u01FF\u0201\x03\x02\x02\x02\u0200\u0202\x05\u010A\x86\x02\u0201" + + "\u0200\x03\x02\x02\x02\u0201\u0202\x03\x02\x02\x02\u0202\u0219\x03\x02" + + "\x02\x02\u0203\u0204\x07\u014E\x02\x02\u0204\u0205\x07\x16\x02\x02\u0205" + + "\u0206\t\x06\x02\x02\u0206\u0208\x05\u0144\xA3\x02\u0207\u0209\x05\u010A" + + "\x86\x02\u0208\u0207\x03\x02\x02\x02\u0208\u0209\x03\x02\x02\x02\u0209" + + "\u0219\x03\x02\x02\x02\u020A\u020B\x07\u014E\x02\x02\u020B\u020C\x07\xDD" + + "\x02\x02\u020C\u020D\t\x07\x02\x02\u020D\u0219\x05\u0144\xA3\x02\u020E" + + "\u0210\x07\u014E\x02\x02\u020F\u0211\x07\u016A\x02\x02\u0210\u020F\x03" + + "\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212" + + "\u0219\x075\x02\x02\u0213\u0215\x07\u014E\x02\x02\u0214\u0216\x07\xFF" + + "\x02\x02\u0215\u0214\x03\x02\x02\x02\u0215\u0216\x03\x02\x02\x02\u0216" + + "\u0217\x03\x02\x02\x02\u0217\u0219\x07V\x02\x02\u0218\u01F5\x03\x02\x02" + + "\x02\u0218\u01F7\x03\x02\x02\x02\u0218\u01FA\x03\x02\x02\x02\u0218\u0203" + + "\x03\x02\x02\x02\u0218\u020A\x03\x02\x02\x02\u0218\u020E\x03\x02\x02\x02" + + "\u0218\u0213\x03\x02\x02\x02\u0219\x1D\x03\x02\x02\x02\u021A\u021B\x07" + + "N\x02\x02\u021B\u021C\x07\u0125\x02\x02\u021C\u021F\x05\u0144\xA3\x02" + + "\u021D\u021E\x07\u0173\x02\x02\u021E\u0220\x05\u014C\xA7\x02\u021F\u021D" + + "\x03\x02\x02\x02\u021F\u0220\x03\x02\x02\x02\u0220\x1F\x03\x02\x02\x02" + + "\u0221\u0222\x07\xA1\x02\x02\u0222\u0223\x07\u0125\x02\x02\u0223\u0224" + + "\x05\u0144\xA3\x02\u0224!\x03\x02\x02\x02\u0225\u0227\x07\u014D\x02\x02" + + "\u0226\u0228\x05\u014E\xA8\x02\u0227\u0226\x03\x02\x02\x02\u0227\u0228" + + "\x03\x02\x02\x02\u0228#\x03\x02\x02\x02\u0229\u022B\x07\u0143\x02\x02" + + "\u022A\u022C\x05\u0150\xA9\x02\u022B\u022A\x03\x02\x02\x02\u022B\u022C" + + "\x03\x02\x02\x02\u022C%\x03\x02\x02\x02\u022D\u022E\t\b\x02\x02\u022E" + + "\u022F\x07B\x02\x02\u022F\u0230\x05r:\x02\u0230\'\x03\x02\x02\x02\u0231" + + "\u0232\x07\x06\x02\x02\u0232\u0233\x07B\x02\x02\u0233\u0234\x07\u0173" + + "\x02\x02\u0234\u0237\x05*\x16\x02\u0235\u0236\x07\xBB\x02\x02\u0236\u0238" + + "\x05\u0144\xA3\x02\u0237\u0235\x03\x02\x02\x02\u0237\u0238\x03\x02\x02" + + "\x02\u0238\u025A\x03\x02\x02\x02\u0239\u023A\x07\x06\x02\x02\u023A\u023B" + + "\x07-\x02\x02\u023B\u023C\x07\u0173\x02\x02\u023C\u023F\x05*\x16\x02\u023D" + + "\u023E\x07\xBB\x02\x02\u023E\u0240\x05\u0144\xA3\x02\u023F\u023D\x03\x02" + + "\x02\x02\u023F\u0240\x03\x02\x02\x02\u0240\u0243\x03\x02\x02\x02\u0241" + + "\u0242\x07y\x02\x02\u0242\u0244\x05\u0144\xA3\x02\u0243\u0241\x03\x02" + + "\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244\u025A\x03\x02\x02\x02\u0245" + + "\u0246\x07\x06\x02\x02\u0246\u0247\t\t\x02\x02\u0247\u0248\x07\u0173\x02" + + "\x02\u0248\u0249\x05*\x16\x02\u0249\u024A\x07y\x02\x02\u024A\u024B\x05" + + "\u0144\xA3\x02\u024B\u025A\x03\x02\x02\x02\u024C\u024D\x07\x06\x02\x02" + + "\u024D\u024E\x07s\x02\x02\u024E\u025A\x05*\x16\x02\u024F\u0250\x07\x06" + + "\x02\x02\u0250\u0251\x07%\x02\x02\u0251\u0252\x07-\x02\x02\u0252\u0253" + + "\x07\u0173\x02\x02\u0253\u0254\x05*\x16\x02\u0254\u0255\x07y\x02\x02\u0255" + + "\u0256\x05\u0144\xA3\x02\u0256\u0257\x07G\x02\x02\u0257\u0258\x05\u0144" + + "\xA3\x02\u0258\u025A\x03\x02\x02\x02\u0259\u0231\x03\x02\x02\x02\u0259" + + "\u0239\x03\x02\x02\x02\u0259\u0245\x03\x02\x02\x02\u0259\u024C\x03\x02" + + "\x02\x02\u0259\u024F\x03\x02\x02\x02\u025A)\x03\x02\x02\x02\u025B\u025D" + + "\x07\u019C\x02\x02\u025C\u025B\x03\x02\x02\x02\u025D\u025E\x03\x02\x02" + + "\x02\u025E\u025C\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F+\x03" + + "\x02\x02\x02\u0260\u0263\x05.\x18\x02\u0261\u0263\x050\x19\x02\u0262\u0260" + + "\x03\x02\x02\x02\u0262\u0261\x03\x02\x02\x02\u0263-\x03\x02\x02\x02\u0264" + + "\u0266\x07\xDD\x02\x02\u0265\u0267\x07\x98\x02\x02\u0266\u0265\x03\x02" + + "\x02\x02\u0266\u0267\x03\x02\x02\x02\u0267\u0268\x03\x02\x02\x02\u0268" + + "\u026A\x07\u015A\x02\x02\u0269\u026B\x05\u0148\xA5\x02\u026A\u0269\x03" + + "\x02\x02\x02\u026A\u026B\x03\x02\x02\x02\u026B\u026C\x03\x02\x02\x02\u026C" + + "\u026D\x05\u0140\xA1\x02\u026D\u026E\x07\u0182\x02\x02\u026E\u0273\x05" + + "2\x1A\x02\u026F\u0270\x07\u0186\x02\x02\u0270\u0272\x052\x1A\x02\u0271" + + "\u026F\x03\x02\x02\x02\u0272\u0275\x03\x02\x02\x02\u0273\u0271\x03\x02" + + "\x02\x02\u0273\u0274\x03\x02\x02\x02\u0274\u0278\x03\x02\x02\x02\u0275" + + "\u0273\x03\x02\x02\x02\u0276\u0277\x07\u0186\x02\x02\u0277\u0279\x05T" + + "+\x02\u0278\u0276\x03\x02\x02\x02\u0278\u0279\x03\x02\x02\x02\u0279\u027C" + + "\x03\x02\x02\x02\u027A\u027B\x07\u0186\x02\x02\u027B\u027D\x05V,\x02\u027C" + + "\u027A\x03\x02\x02\x02\u027C\u027D\x03\x02\x02\x02\u027D\u0280\x03\x02" + + "\x02\x02\u027E\u027F\x07\u0186\x02\x02\u027F\u0281\x05Z.\x02\u0280\u027E" + + "\x03\x02\x02\x02\u0280\u0281\x03\x02\x02\x02\u0281\u0282\x03\x02\x02\x02" + + "\u0282\u0284\x07\u0183\x02\x02\u0283\u0285\x05J&\x02\u0284\u0283\x03\x02" + + "\x02\x02\u0284\u0285\x03\x02\x02\x02\u0285\u0287\x03\x02\x02\x02\u0286" + + "\u0288\x05\\/\x02\u0287\u0286\x03\x02\x02\x02\u0287\u0288\x03\x02\x02" + + "\x02\u0288\u0289\x03\x02\x02\x02\u0289\u028B\x05\u0146\xA4\x02\u028A\u028C" + + "\x05d3\x02\u028B\u028A\x03\x02\x02\x02\u028B\u028C\x03\x02\x02\x02\u028C" + + "/\x03\x02\x02\x02\u028D\u028E\x07\xDD\x02\x02\u028E\u0290\x07\u015A\x02" + + "\x02\u028F\u0291\x05\u0148\xA5\x02\u0290\u028F\x03\x02\x02\x02\u0290\u0291" + + "\x03\x02\x02\x02\u0291\u0292\x03\x02\x02\x02\u0292\u0293\x05\u0140\xA1" + + "\x02\u0293\u0296\x05\u0146\xA4\x02\u0294\u0295\x07\xBB\x02\x02\u0295\u0297" + + "\x05\xA0Q\x02\u0296\u0294\x03\x02\x02\x02\u0296\u0297\x03\x02\x02\x02" + + "\u02971\x03\x02\x02\x02\u0298\u029C\x054\x1B\x02\u0299\u029C\x05L\'\x02" + + "\u029A\u029C\x05P)\x02\u029B\u0298\x03\x02\x02\x02\u029B\u0299\x03\x02" + + "\x02\x02\u029B\u029A\x03\x02\x02\x02\u029C3\x03\x02\x02\x02\u029D\u029E" + + "\x056\x1C\x02\u029E\u02A0\x05:\x1E\x02\u029F\u02A1\x05H%\x02\u02A0\u029F" + + "\x03\x02\x02\x02\u02A0\u02A1\x03\x02\x02\x02\u02A1\u02A3\x03\x02\x02\x02" + + "\u02A2\u02A4\x05J&\x02\u02A3\u02A2\x03\x02\x02\x02\u02A3\u02A4\x03\x02" + + "\x02\x02\u02A45\x03\x02\x02\x02\u02A5\u02A8\x05\u0144\xA3\x02\u02A6\u02A8" + + "\x05\u0104\x83\x02\u02A7\u02A5\x03\x02\x02\x02\u02A7\u02A6\x03\x02\x02" + + "\x02\u02A87\x03\x02\x02\x02\u02A9\u02AA\x07\u0182\x02\x02\u02AA\u02AF" + + "\x056\x1C\x02\u02AB\u02AC\x07\u0186\x02\x02\u02AC\u02AE\x056\x1C\x02\u02AD" + + "\u02AB\x03\x02\x02\x02\u02AE\u02B1\x03\x02\x02\x02\u02AF\u02AD\x03\x02" + + "\x02\x02\u02AF\u02B0\x03\x02\x02\x02\u02B0\u02B2\x03\x02\x02\x02\u02B1" + + "\u02AF\x03\x02\x02\x02\u02B2\u02B3\x07\u0183\x02\x02\u02B39\x03\x02\x02" + + "\x02\u02B4\u02DA\t\n\x02\x02\u02B5\u02B7\t\v\x02\x02\u02B6\u02B8\x05<" + + "\x1F\x02\u02B7\u02B6\x03\x02\x02\x02\u02B7\u02B8\x03\x02\x02\x02\u02B8" + + "\u02DA\x03\x02\x02\x02\u02B9\u02BB\x07\u015E\x02\x02\u02BA\u02BC\x05<" + + "\x1F\x02\u02BB\u02BA\x03\x02\x02\x02\u02BB\u02BC\x03\x02\x02\x02\u02BC" + + "\u02C3\x03\x02\x02\x02\u02BD\u02BF\t\f\x02\x02\u02BE\u02C0\x07\u011C\x02" + + "\x02\u02BF\u02BE\x03\x02\x02\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02C1" + + "\x03\x02\x02\x02\u02C1\u02C2\x07\u015D\x02\x02\u02C2\u02C4\x07\xB2\x02" + + "\x02\u02C3\u02BD\x03\x02\x02\x02\u02C3\u02C4\x03\x02\x02\x02\u02C4\u02DA" + + "\x03\x02\x02\x02\u02C5\u02C7\t\r\x02\x02\u02C6\u02C8\x05> \x02\u02C7\u02C6" + + "\x03\x02\x02\x02\u02C7\u02C8\x03\x02\x02\x02\u02C8\u02DA\x03\x02\x02\x02" + + "\u02C9\u02CB\t\x0E\x02\x02\u02CA\u02CC\x05B\"\x02\u02CB\u02CA\x03\x02" + + "\x02\x02\u02CB\u02CC\x03\x02\x02\x02\u02CC\u02DA\x03\x02\x02\x02\u02CD" + + "\u02CF\x07O\x02\x02\u02CE\u02D0\x05D#\x02\u02CF\u02CE\x03\x02\x02\x02" + + "\u02CF\u02D0\x03\x02\x02\x02\u02D0\u02DA\x03\x02\x02\x02\u02D1\u02D3\x07" + + "\u0149\x02\x02\u02D2\u02D4\x05F$\x02\u02D3\u02D2\x03\x02\x02\x02\u02D3" + + "\u02D4\x03\x02\x02\x02\u02D4\u02DA\x03\x02\x02\x02\u02D5\u02D7\x07u\x02" + + "\x02\u02D6\u02D8\x05@!\x02\u02D7\u02D6\x03\x02\x02\x02\u02D7\u02D8\x03" + + "\x02\x02\x02\u02D8\u02DA\x03\x02\x02\x02\u02D9\u02B4\x03\x02\x02\x02\u02D9" + + "\u02B5\x03\x02\x02\x02\u02D9\u02B9\x03\x02\x02\x02\u02D9\u02C5\x03\x02" + + "\x02\x02\u02D9\u02C9\x03\x02\x02\x02\u02D9\u02CD\x03\x02\x02\x02\u02D9" + + "\u02D1\x03\x02\x02\x02\u02D9\u02D5\x03\x02\x02\x02\u02DA;\x03\x02\x02" + + "\x02\u02DB\u02DC\x07\u0182\x02\x02\u02DC\u02DD\x05\u0164\xB3\x02\u02DD" + + "\u02DE\x07\u0183\x02\x02\u02DE=\x03\x02\x02\x02\u02DF\u02E0\x07\u0182" + + "\x02\x02\u02E0\u02E3\x05\u0164\xB3\x02\u02E1\u02E2\x07\u0186\x02\x02\u02E2" + + "\u02E4\x05\u0164\xB3\x02\u02E3\u02E1\x03\x02\x02\x02\u02E3\u02E4\x03\x02" + + "\x02\x02\u02E4\u02E5\x03\x02\x02\x02\u02E5\u02E6\x07\u0183\x02\x02\u02E6" + + "?\x03\x02\x02\x02\u02E7\u02E8\x07\u0182\x02\x02\u02E8\u02EB\x05\u0162" + + "\xB2\x02\u02E9\u02EA\x07\u0186\x02\x02\u02EA\u02EC\x05\u0162\xB2\x02\u02EB" + + "\u02E9\x03\x02\x02\x02\u02EB\u02EC\x03\x02\x02\x02\u02EC\u02ED\x03\x02" + + "\x02\x02\u02ED\u02EE\x07\u0183\x02\x02\u02EEA\x03\x02\x02\x02\u02EF\u02F0" + + "\x07\u0179\x02\x02\u02F0\u02F1\x05:\x1E\x02\u02F1\u02F2\x07\u0178\x02" + + "\x02\u02F2C\x03\x02\x02\x02\u02F3\u02F4\x07\u0179\x02\x02\u02F4\u02F5" + + "\x05:\x1E\x02\u02F5\u02F6\x07\u0186\x02\x02\u02F6\u02F7\x05:\x1E\x02\u02F7" + + "\u02F8\x03\x02\x02\x02\u02F8\u02F9\x07\u0178\x02\x02\u02F9E\x03\x02\x02" + + "\x02\u02FA\u02FB\x07\u0179\x02\x02\u02FB\u02FC\x056\x1C\x02\u02FC\u0303" + + "\x05:\x1E\x02\u02FD\u02FE\x07\u0186\x02\x02\u02FE\u02FF\x056\x1C\x02\u02FF" + + "\u0300\x05:\x1E\x02\u0300\u0302\x03\x02\x02\x02\u0301\u02FD\x03\x02\x02" + + "\x02\u0302\u0305\x03\x02\x02\x02\u0303\u0301\x03\x02\x02\x02\u0303\u0304" + + "\x03\x02\x02\x02\u0304\u0306\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02" + + "\u0306\u0307\x07\u0178\x02\x02\u0307G\x03\x02\x02\x02\u0308\u0309\x07" + + "\xD9\x02\x02\u0309\u030B\x05X-\x02\u030A\u0308\x03\x02\x02\x02\u030A\u030B" + + "\x03\x02\x02\x02\u030B\u030C\x03\x02\x02\x02\u030C\u030D\x07\u0140\x02" + + "\x02\u030D\u0310\x07G\x02\x02\u030E\u030F\x07\u012C\x02\x02\u030F\u0311" + + "\x07$\x02\x02\u0310\u030E\x03\x02\x02\x02\u0310\u0311\x03\x02\x02\x02" + + "\u0311\u0317\x03\x02\x02\x02\u0312\u0314\x07\u012C\x02\x02\u0313\u0312" + + "\x03\x02\x02\x02\u0313\u0314\x03\x02\x02\x02\u0314\u0315\x03\x02\x02\x02" + + "\u0315\u0317\x07\u012D\x02\x02\u0316\u030A\x03\x02\x02\x02\u0316\u0313" + + "\x03\x02\x02\x02\u0317I\x03\x02\x02\x02\u0318\u0319\x07\x14\x02\x02\u0319" + + "\u031A\x07\u0197\x02\x02\u031AK\x03\x02\x02\x02\u031B\u031C\x056\x1C\x02" + + "\u031C\u031D\x05:\x1E\x02\u031D\u0320\x07\u0121\x02\x02\u031E\u031F\x07" + + "\xFE\x02\x02\u031F\u0321\x05N(\x02\u0320\u031E\x03\x02\x02\x02\u0320\u0321" + + "\x03\x02\x02\x02\u0321\u0323\x03\x02\x02\x02\u0322\u0324\x07\xAA\x02\x02" + + "\u0323\u0322\x03\x02\x02\x02\u0323\u0324\x03\x02\x02\x02\u0324M\x03\x02" + + "\x02\x02\u0325\u0326\x07\u0197\x02\x02\u0326O\x03\x02\x02\x02\u0327\u0328" + + "\x056\x1C\x02\u0328\u0329\x07\xBB\x02\x02\u0329\u032B\x05R*\x02\u032A" + + "\u032C"; private static readonly _serializedATNSegment2: string = - "\u033E\u033D\x03\x02\x02\x02\u033Fc\x03\x02\x02\x02\u0340\u0341\x07\u011A" + - "\x02\x02\u0341\u034A\x05f4\x02\u0342\u0346\x07\u0182\x02\x02\u0343\u0345" + - "\x05h5\x02\u0344\u0343\x03\x02\x02\x02\u0345\u0348\x03\x02\x02\x02\u0346" + - "\u0344\x03\x02\x02\x02\u0346\u0347\x03\x02\x02\x02\u0347\u0349\x03\x02" + - "\x02\x02\u0348\u0346\x03\x02\x02\x02\u0349\u034B\x07\u0183\x02\x02\u034A" + - "\u0342\x03\x02\x02\x02\u034A\u034B\x03\x02\x02\x02\u034Be\x03\x02\x02" + - "\x02\u034C\u034D\x05\u013E\xA0\x02\u034Dg\x03\x02\x02\x02\u034E\u034F" + - "\t\x0F\x02\x02\u034F\u0353\t\x10\x02\x02\u0350\u0351\t\x11\x02\x02\u0351" + - "\u0353\t\x12\x02\x02\u0352\u034E\x03\x02\x02\x02\u0352\u0350\x03\x02\x02" + - "\x02\u0353i\x03\x02\x02\x02\u0354\u0355\x07\xDD\x02\x02\u0355\u0356\x07" + - "\x0E\x02\x02\u0356\u0357\x05\u013E\xA0\x02\u0357\u0358\x05\u0140\xA1\x02" + - "\u0358k\x03\x02\x02\x02\u0359\u035A\x07\xDD\x02\x02\u035A\u035C\x07\x1B" + - "\x02\x02\u035B\u035D\x05\u0142\xA2\x02\u035C\u035B\x03\x02\x02\x02\u035C" + - "\u035D\x03\x02\x02\x02\u035D\u035E\x03\x02\x02\x02\u035E\u0360\x05\u013E" + - "\xA0\x02\u035F\u0361\x05J&\x02\u0360\u035F\x03\x02\x02\x02\u0360\u0361" + - "\x03\x02\x02\x02\u0361\u0362\x03\x02\x02\x02\u0362\u0363\x05\u0140\xA1" + - "\x02\u0363m\x03\x02\x02\x02\u0364\u0366\x07\xDD\x02\x02\u0365\u0367\x07" + - "\x98\x02\x02\u0366\u0365\x03\x02\x02\x02\u0366\u0367\x03\x02\x02\x02\u0367" + - "\u0368\x03\x02\x02\x02\u0368\u036A\x07\xA8\x02\x02\u0369\u036B\x05\u0142" + - "\xA2\x02\u036A\u0369\x03\x02\x02\x02\u036A\u036B\x03\x02\x02\x02\u036B" + - "\u036C\x03\x02\x02\x02\u036C\u036E\x05\u013E\xA0\x02\u036D\u036F\x058" + - "\x1D\x02\u036E\u036D\x03\x02\x02\x02\u036E\u036F\x03\x02\x02\x02\u036F" + - "\u0371\x03\x02\x02\x02\u0370\u0372\x05J&\x02\u0371\u0370\x03\x02\x02\x02" + - "\u0371\u0372\x03\x02\x02\x02\u0372\u0373\x03\x02\x02\x02\u0373\u0374\x07" + - "\xBB\x02\x02\u0374\u0375\x05\xA2R\x02\u0375o\x03\x02\x02\x02\u0376\u037A" + - "\x07\xDD\x02\x02\u0377\u037B\x07\x98\x02\x02\u0378\u0379\x07\x98\x02\x02" + - "\u0379\u037B\x07\u0157\x02\x02\u037A\u0377\x03\x02\x02\x02\u037A\u0378" + - "\x03\x02\x02\x02\u037A\u037B\x03\x02\x02\x02\u037B\u037C\x03\x02\x02\x02" + - "\u037C\u037E\x07\u0100\x02\x02\u037D\u037F\x05\u0142\xA2\x02\u037E\u037D" + - "\x03\x02\x02\x02\u037E\u037F\x03\x02\x02\x02\u037F\u0380\x03\x02\x02\x02" + - "\u0380\u0381\x05\u013E\xA0\x02\u0381\u0382\x07\xBB\x02\x02\u0382\u0385" + - "\x05\u0136\x9C\x02\u0383\u0384\x07\u0116\x02\x02\u0384\u0386\t\x13\x02" + - "\x02\u0385\u0383\x03\x02\x02\x02\u0385\u0386\x03\x02\x02\x02\u0386\u0388" + - "\x03\x02\x02\x02\u0387\u0389\x05r:\x02\u0388\u0387\x03\x02\x02\x02\u0388" + - "\u0389\x03\x02\x02\x02\u0389q\x03\x02\x02\x02\u038A\u038B\x07\u016B\x02" + - "\x02\u038B\u038C\x07B\x02\x02\u038C\u0392\x05t;\x02\u038D\u038E\x07\u0186" + - "\x02\x02\u038E\u038F\x07B\x02\x02\u038F\u0391\x05t;\x02\u0390\u038D\x03" + - "\x02\x02\x02\u0391\u0394\x03\x02\x02\x02\u0392\u0390\x03\x02\x02\x02\u0392" + - "\u0393\x03\x02\x02\x02\u0393s\x03\x02\x02\x02\u0394\u0392\x03\x02\x02" + - "\x02\u0395\u0396\x07\u0197\x02\x02\u0396u\x03\x02\x02\x02\u0397\u0398" + - "\x07\xB6\x02\x02\u0398\u039A\x07\u015A\x02\x02\u0399\u039B\x05\u0144\xA3" + - "\x02\u039A\u0399\x03\x02\x02\x02\u039A\u039B\x03\x02\x02\x02\u039B\u039C" + - "\x03\x02\x02\x02\u039C\u03A2\x05\u013E\xA0\x02\u039D\u03A3\x05x=\x02\u039E" + - "\u03A3\x05z>\x02\u039F\u03A3\x05|?\x02\u03A0\u03A3\x05~@\x02\u03A1\u03A3" + - "\x05\x80A\x02\u03A2\u039D\x03\x02\x02\x02\u03A2\u039E\x03\x02\x02\x02" + - "\u03A2\u039F\x03\x02\x02\x02\u03A2\u03A0\x03\x02\x02\x02\u03A2\u03A1\x03" + - "\x02\x02\x02\u03A3w\x03\x02\x02\x02\u03A4\u03A6\x07y\x02\x02\u03A5\u03A7" + - "\x05\u013E\xA0\x02\u03A6\u03A5\x03\x02\x02\x02\u03A6\u03A7\x03\x02\x02" + - "\x02\u03A7\u03A8\x03\x02\x02\x02\u03A8\u03A9\x07\u0160\x02\x02\u03A9\u03AA" + - "\x05\u013E\xA0\x02\u03AAy\x03\x02\x02\x02\u03AB\u03AC\x07\u014D\x02\x02" + - "\u03AC\u03AD\x05\u0146\xA4\x02\u03AD{\x03\x02\x02\x02\u03AE\u03AF\x07" + - "\x06\x02\x02\u03AF\u03B0\x07\xD9\x02\x02\u03B0\u03B1\x05X-\x02\u03B1\u03B2" + - "\x07\u0140\x02\x02\u03B2\u03B3\x07G\x02\x02\u03B3\u03B5\x058\x1D\x02\u03B4" + - "\u03B6\x05\x82B\x02\u03B5\u03B4\x03\x02\x02\x02\u03B5\u03B6\x03\x02\x02" + - "\x02\u03B6}\x03\x02\x02\x02\u03B7\u03B8\x07\xEF\x02\x02\u03B8\u03B9\x07" + - "\xD9\x02\x02\u03B9\u03BA\x05X-\x02\u03BA\x7F\x03\x02\x02\x02\u03BB\u03BC" + - "\x07\x06\x02\x02\u03BC\u03BD\x07\u0165\x02\x02\u03BD\u03BE\x058\x1D\x02" + - "\u03BE\x81\x03\x02\x02\x02\u03BF\u03C0\x07\u012C\x02\x02\u03C0\u03C1\x07" + - "$\x02\x02\u03C1\x83\x03\x02\x02\x02\u03C2\u03C3\x07\xB6\x02\x02\u03C3" + - "\u03C4\x07\xA8\x02\x02\u03C4\u03C8\x05\u013E\xA0\x02\u03C5\u03C9\x05x" + - "=\x02\u03C6\u03C7\x07\xBB\x02\x02\u03C7\u03C9\x05\xA2R\x02\u03C8\u03C5" + - "\x03\x02\x02\x02\u03C8\u03C6\x03\x02\x02\x02\u03C9\x85\x03\x02\x02\x02" + - "\u03CA\u03CB\x07\xB6\x02\x02\u03CB\u03CC\x07\x1B\x02\x02\u03CC\u03CD\x05" + - "\u013E\xA0\x02\u03CD\u03CE\x05z>\x02\u03CE\x87\x03\x02\x02\x02\u03CF\u03D3" + - "\x07\xB6\x02\x02\u03D0\u03D4\x07\x98\x02\x02\u03D1\u03D2\x07\x98\x02\x02" + - "\u03D2\u03D4\x07\u0157\x02\x02\u03D3\u03D0\x03\x02\x02\x02\u03D3\u03D1" + - "\x03\x02\x02\x02\u03D3\u03D4\x03\x02\x02\x02\u03D4\u03D5\x03\x02\x02\x02" + - "\u03D5\u03D7\x07\u0100\x02\x02\u03D6\u03D8\x05\u0144\xA3\x02\u03D7\u03D6" + - "\x03\x02\x02\x02\u03D7\u03D8\x03\x02\x02\x02\u03D8\u03D9\x03\x02\x02\x02" + - "\u03D9\u03DA\x05\u013E\xA0\x02\u03DA\u03DB\x07\xBB\x02\x02\u03DB\u03DE" + - "\x05\u0136\x9C\x02\u03DC\u03DD\x07\u0116\x02\x02\u03DD\u03DF\t\x13\x02" + - "\x02\u03DE\u03DC\x03\x02\x02\x02\u03DE\u03DF\x03\x02\x02\x02\u03DF\x89" + - "\x03\x02\x02\x02\u03E0\u03E1\x07\xEF\x02\x02\u03E1\u03E3\x07\x0E\x02\x02" + - "\u03E2\u03E4\x05\u0144\xA3\x02\u03E3\u03E2\x03\x02\x02\x02\u03E3\u03E4" + - "\x03\x02\x02\x02\u03E4\u03E5\x03\x02\x02\x02\u03E5\u03E6\x05\u013E\xA0" + - "\x02\u03E6\x8B\x03\x02\x02\x02\u03E7\u03E9\x07\xEF\x02\x02\u03E8\u03EA" + - "\x07\x98\x02\x02\u03E9\u03E8\x03\x02\x02\x02\u03E9\u03EA\x03\x02\x02\x02" + - "\u03EA\u03EB\x03\x02\x02\x02\u03EB\u03ED\x07\u015A\x02\x02\u03EC\u03EE" + - "\x05\u0144\xA3\x02\u03ED\u03EC\x03\x02\x02\x02\u03ED\u03EE\x03\x02\x02" + - "\x02\u03EE\u03EF\x03\x02\x02\x02\u03EF\u03F0\x05\u013E\xA0\x02\u03F0\x8D" + - "\x03\x02\x02\x02\u03F1\u03F2\x07\xEF\x02\x02\u03F2\u03F4\x07\x1B\x02\x02" + - "\u03F3\u03F5\x05\u0144\xA3\x02\u03F4\u03F3\x03\x02\x02\x02\u03F4\u03F5" + - "\x03\x02\x02\x02\u03F5\u03F6\x03\x02\x02\x02\u03F6\u03F8\x05\u013E\xA0" + - "\x02\u03F7\u03F9\t\x14\x02\x02\u03F8\u03F7\x03\x02\x02\x02\u03F8\u03F9" + - "\x03\x02\x02\x02\u03F9\x8F\x03\x02\x02\x02\u03FA\u03FC\x07\xEF\x02\x02" + - "\u03FB\u03FD\x07\x98\x02\x02\u03FC\u03FB\x03\x02\x02\x02\u03FC\u03FD\x03" + - "\x02\x02\x02\u03FD\u03FE\x03\x02\x02\x02\u03FE\u0400\x07\xA8\x02\x02\u03FF" + - "\u0401\x05\u0144\xA3\x02\u0400\u03FF\x03\x02\x02\x02\u0400\u0401\x03\x02" + - "\x02\x02\u0401\u0402\x03\x02\x02\x02\u0402\u0403\x05\u013E\xA0\x02\u0403" + - "\x91\x03\x02\x02\x02\u0404\u0408\x07\xEF\x02\x02\u0405\u0409\x07\x98\x02" + - "\x02\u0406\u0407\x07\x98\x02\x02\u0407\u0409\x07\u0157\x02\x02\u0408\u0405" + - "\x03\x02\x02\x02\u0408\u0406\x03\x02\x02\x02\u0408\u0409\x03\x02\x02\x02" + - "\u0409\u040A\x03\x02\x02\x02\u040A\u040C\x07\u0100\x02\x02\u040B\u040D" + - "\x05\u0144\xA3\x02\u040C\u040B\x03\x02\x02\x02\u040C\u040D\x03\x02\x02" + - "\x02\u040D\u040E\x03\x02\x02\x02\u040E\u040F\x05\u013E\xA0\x02\u040F\x93" + - "\x03\x02\x02\x02\u0410\u0412\x07\xF6\x02\x02\u0411\u0410\x03\x02\x02\x02" + - "\u0411\u0412\x03\x02\x02\x02\u0412\u0413\x03\x02\x02\x02\u0413\u0418\x05" + - "\x96L\x02\u0414\u0418\x05\x9EP\x02\u0415\u0416\x07\xF6\x02\x02\u0416\u0418" + - "\x05\xA0Q\x02\u0417\u0411\x03\x02\x02\x02\u0417\u0414\x03\x02\x02\x02" + - "\u0417\u0415\x03\x02\x02\x02\u0418\x95\x03\x02\x02\x02\u0419\u041A\x07" + - "\u010D\x02\x02\u041A\u041B\t\x15\x02\x02\u041B\u0424\x05\u013E\xA0\x02" + - "\u041C\u041E\x05\x98M\x02\u041D\u041C\x03\x02\x02\x02\u041D\u041E\x03" + - "\x02\x02\x02\u041E\u0420\x03\x02\x02\x02\u041F\u0421\x058\x1D\x02\u0420" + - "\u041F\x03\x02\x02\x02\u0420\u0421\x03\x02\x02\x02\u0421\u0422\x03\x02" + - "\x02\x02\u0422\u0425\x05\xA2R\x02\u0423\u0425\x05\x9AN\x02\u0424\u041D" + - "\x03\x02\x02\x02\u0424\u0423\x03\x02\x02\x02\u0425\x97\x03\x02\x02\x02" + - "\u0426\u0427\x07\u0139\x02\x02\u0427\u0428\x05\u0146\xA4\x02\u0428\x99" + - "\x03\x02\x02\x02\u0429\u042A\x07\u016D\x02\x02\u042A\u042F\x05\x9CO\x02" + - "\u042B\u042C\x07\u0186\x02\x02\u042C\u042E\x05\x9CO\x02\u042D\u042B\x03" + - "\x02\x02\x02\u042E\u0431\x03\x02\x02\x02\u042F\u042D\x03\x02\x02\x02\u042F" + - "\u0430\x03\x02\x02\x02\u0430\x9B\x03\x02\x02\x02\u0431\u042F\x03\x02\x02" + - "\x02\u0432\u0433\x07\u0182\x02\x02\u0433\u0438\x05\u0158\xAD\x02\u0434" + - "\u0435\x07\u0186\x02\x02\u0435\u0437\x05\u0158\xAD\x02\u0436\u0434\x03" + - "\x02\x02\x02\u0437\u043A\x03\x02\x02\x02\u0438\u0436\x03\x02\x02\x02\u0438" + - "\u0439\x03\x02\x02\x02\u0439\u043B\x03\x02\x02\x02\u043A\u0438\x03\x02" + - "\x02\x02\u043B\u043C\x07\u0183\x02\x02\u043C\x9D\x03\x02\x02\x02\u043D" + - "\u043E\x07\xBF\x02\x02\u043E\u043F\x07\x92\x02\x02\u043F\u0440\x07\u014D" + - "\x02\x02\u0440\u0444\x07\u0187\x02\x02\u0441\u0442\x05\x96L\x02\u0442" + - "\u0443\x07\u0187\x02\x02\u0443\u0445\x03\x02\x02\x02\u0444\u0441\x03\x02" + - "\x02\x02\u0445\u0446\x03\x02\x02\x02\u0446\u0444\x03\x02\x02\x02\u0446" + - "\u0447\x03\x02\x02\x02\u0447\u0448\x03\x02\x02\x02\u0448\u0449\x07\xF2" + - "\x02\x02\u0449\x9F\x03\x02\x02\x02\u044A\u044B\x07\x92\x02\x02\u044B\u044C" + - "\x07\u014D\x02\x02\u044C\u0450\x07\xBF\x02\x02\u044D\u044E\x05\x96L\x02" + - "\u044E\u044F\x07\u0187\x02\x02\u044F\u0451\x03\x02\x02\x02\u0450\u044D" + - "\x03\x02\x02\x02\u0451\u0452\x03\x02\x02\x02\u0452\u0450\x03\x02\x02\x02" + - "\u0452\u0453\x03\x02\x02\x02\u0453\u0454\x03\x02\x02\x02\u0454\u0455\x07" + - "\xF2\x02\x02\u0455\xA1\x03\x02\x02\x02\u0456\u0457\bR\x01\x02\u0457\u046E" + - "\x05\xA4S\x02\u0458\u0459\x05\xA6T\x02\u0459\u045A\x05\xA2R\x07\u045A" + - "\u046E\x03\x02\x02\x02\u045B\u045C\x07\u0182\x02\x02\u045C\u045D\x05\xA2" + - "R\x02\u045D\u045E\x07\u0183\x02\x02\u045E\u046E\x03\x02\x02\x02\u045F" + - "\u0461\x05\xAEX\x02\u0460\u0462\x05\xECw\x02\u0461\u0460\x03\x02\x02\x02" + - "\u0461\u0462\x03\x02\x02\x02\u0462\u0464\x03\x02\x02\x02\u0463\u0465\x05" + - "\xF0y\x02\u0464\u0463\x03\x02\x02\x02\u0464\u0465\x03\x02\x02\x02\u0465" + - "\u046E\x03\x02\x02\x02\u0466\u0468\x05\xACW\x02\u0467\u0469\x05\xECw\x02" + - "\u0468\u0467\x03\x02\x02\x02\u0468\u0469\x03\x02\x02\x02\u0469\u046B\x03" + - "\x02\x02\x02\u046A\u046C\x05\xF0y\x02\u046B\u046A\x03\x02\x02\x02\u046B" + - "\u046C\x03\x02\x02\x02\u046C\u046E\x03\x02\x02\x02\u046D\u0456\x03\x02" + - "\x02\x02\u046D\u0458\x03\x02\x02\x02\u046D\u045B\x03\x02\x02\x02\u046D" + - "\u045F\x03\x02\x02\x02\u046D\u0466\x03\x02\x02\x02\u046E\u047D\x03\x02" + - "\x02\x02\u046F\u0470\f\x05\x02\x02\u0470\u0472\t\x16\x02\x02\u0471\u0473" + - "\x07\xB4\x02\x02\u0472\u0471\x03\x02\x02\x02\u0472\u0473\x03\x02\x02\x02" + - "\u0473\u0474\x03\x02\x02\x02\u0474\u0476\x05\xA2R\x02\u0475\u0477\x05" + - "\xECw\x02\u0476\u0475\x03\x02\x02\x02\u0476\u0477\x03\x02\x02\x02\u0477" + - "\u0479\x03\x02\x02\x02\u0478\u047A\x05\xF0y\x02\u0479\u0478\x03\x02\x02" + - "\x02\u0479\u047A\x03\x02\x02\x02\u047A\u047C\x03\x02\x02\x02\u047B\u046F" + - "\x03\x02\x02\x02\u047C\u047F\x03\x02\x02\x02\u047D\u047B\x03\x02\x02\x02" + - "\u047D\u047E\x03\x02\x02\x02\u047E\xA3\x03\x02\x02\x02\u047F\u047D\x03" + - "\x02\x02\x02\u0480\u0481\x07\u016D\x02\x02\u0481\u0486\x05\u0108\x85\x02" + - "\u0482\u0483\x07\u0186\x02\x02\u0483\u0485\x05\u0108\x85\x02\u0484\u0482" + - "\x03\x02\x02\x02\u0485\u0488\x03\x02\x02\x02\u0486\u0484\x03\x02\x02\x02" + - "\u0486\u0487\x03\x02\x02\x02\u0487\xA5\x03\x02\x02\x02\u0488\u0486\x03" + - "\x02\x02\x02\u0489\u048A\x07\u0173\x02\x02\u048A\u048F\x05\xA8U\x02\u048B" + - "\u048C\x07\u0186\x02\x02\u048C\u048E\x05\xA8U\x02\u048D\u048B\x03\x02" + - "\x02\x02\u048E\u0491\x03\x02\x02\x02\u048F\u048D\x03\x02\x02\x02\u048F" + - "\u0490\x03\x02\x02\x02\u0490\xA7\x03\x02\x02\x02\u0491\u048F\x03\x02\x02" + - "\x02\u0492\u049E\x05\xAAV\x02\u0493\u0494\x07\u0182\x02\x02\u0494\u0499" + - "\x056\x1C\x02\u0495\u0496\x07\u0186\x02\x02\u0496\u0498\x056\x1C\x02\u0497" + - "\u0495\x03\x02\x02\x02\u0498\u049B\x03\x02\x02\x02\u0499\u0497\x03\x02" + - "\x02\x02\u0499\u049A\x03\x02\x02\x02\u049A\u049C\x03\x02\x02\x02\u049B" + - "\u0499\x03\x02\x02\x02\u049C\u049D\x07\u0183\x02\x02\u049D\u049F\x03\x02" + - "\x02\x02\u049E\u0493\x03\x02\x02\x02\u049E\u049F\x03\x02\x02\x02\u049F" + - "\u04A0\x03\x02\x02\x02\u04A0\u04A1\x07\xBB\x02\x02\u04A1\u04A2\x07\u0182" + - "\x02\x02\u04A2\u04A3\x05\xA2R\x02\u04A3\u04A4\x07\u0183\x02\x02\u04A4" + - "\xA9\x03\x02\x02\x02\u04A5\u04A6\x05\u0136\x9C\x02\u04A6\xAB\x03\x02\x02" + - "\x02\u04A7\u04A8\x05\xAEX\x02\u04A8\u04AA\x05\xB4[\x02\u04A9\u04AB\x05" + - "\xD2j\x02\u04AA\u04A9\x03\x02\x02\x02\u04AA\u04AB\x03\x02\x02\x02\u04AB" + - "\u04AD\x03\x02\x02\x02\u04AC\u04AE\x05\xD4k\x02\u04AD\u04AC\x03\x02\x02" + - "\x02\u04AD\u04AE\x03\x02\x02\x02\u04AE\u04B0\x03\x02\x02\x02\u04AF\u04B1" + - "\x05\xE2r\x02\u04B0\u04AF\x03\x02\x02\x02\u04B0\u04B1\x03\x02\x02\x02" + - "\u04B1\u04B3\x03\x02\x02\x02\u04B2\u04B4\x05\xE4s\x02\u04B3\u04B2\x03" + - "\x02\x02\x02\u04B3\u04B4\x03\x02\x02\x02\u04B4\u04BA\x03\x02\x02\x02\u04B5" + - "\u04B6\x05\xAEX\x02\u04B6\u04B7\x05\xB4[\x02\u04B7\u04B8\x05\xEAv\x02" + - "\u04B8\u04BA\x03\x02\x02\x02\u04B9\u04A7\x03\x02\x02\x02\u04B9\u04B5\x03" + - "\x02\x02\x02\u04BA\xAD\x03\x02\x02\x02\u04BB\u04BD\x07\u014C\x02\x02\u04BC" + - "\u04BE\x05\u0162\xB2\x02\u04BD\u04BC\x03\x02\x02\x02\u04BD\u04BE\x03\x02" + - "\x02\x02\u04BE\u04C8\x03\x02\x02\x02\u04BF\u04C9\x07\u018D\x02\x02\u04C0" + - "\u04C5\x05\xB0Y\x02\u04C1\u04C2\x07\u0186\x02\x02\u04C2\u04C4\x05\xB0" + - "Y\x02\u04C3\u04C1\x03\x02\x02\x02\u04C4\u04C7\x03\x02\x02\x02\u04C5\u04C3" + - "\x03\x02\x02\x02\u04C5\u04C6\x03\x02\x02\x02\u04C6\u04C9\x03\x02\x02\x02" + - "\u04C7\u04C5\x03\x02\x02\x02\u04C8\u04BF\x03\x02\x02\x02\u04C8\u04C0\x03" + - "\x02\x02\x02\u04C9\xAF\x03\x02\x02\x02\u04CA\u04D3\x05\xB2Z\x02\u04CB" + - "\u04D0\x05\u0108\x85\x02\u04CC\u04CE\x07\xBB\x02\x02\u04CD\u04CC\x03\x02" + - "\x02\x02\u04CD\u04CE\x03\x02\x02\x02\u04CE\u04CF\x03\x02\x02\x02\u04CF" + - "\u04D1\x05\u0108\x85\x02\u04D0\u04CD\x03\x02\x02\x02\u04D0\u04D1\x03\x02" + - "\x02\x02\u04D1\u04D3\x03\x02\x02\x02\u04D2\u04CA\x03\x02\x02\x02\u04D2" + - "\u04CB\x03\x02\x02\x02\u04D3\xB1\x03\x02\x02\x02\u04D4\u04D5\x05\u0112" + - "\x8A\x02\u04D5\u04D6\x07\u0137\x02\x02\u04D6\u04D7\x05\xE8u\x02\u04D7" + - "\u04D8\x07\xBB\x02\x02\u04D8\u04D9\x05\u0136\x9C\x02\u04D9\u04E1\x03\x02" + - "\x02\x02\u04DA\u04DB\x05\u0112\x8A\x02\u04DB\u04DC\x07\u0137\x02\x02\u04DC" + - "\u04DD\x05\u012E\x98\x02\u04DD\u04DE\x07\xBB\x02\x02\u04DE\u04DF\x05\u0136" + - "\x9C\x02\u04DF\u04E1\x03\x02\x02\x02\u04E0\u04D4\x03\x02\x02\x02\u04E0" + - "\u04DA\x03\x02\x02\x02\u04E1\xB3\x03\x02\x02\x02\u04E2\u04E3\x07\xFE\x02" + - "\x02\u04E3\u04E4\x05\xB6\\\x02\u04E4\xB5\x03\x02\x02\x02\u04E5\u04E6\b" + - "\\\x01\x02\u04E6\u04EB\x05\xB8]\x02\u04E7\u04E8\x07\u0186\x02\x02\u04E8" + - "\u04EA\x05\xB8]\x02\u04E9\u04E7\x03\x02\x02\x02\u04EA\u04ED\x03\x02\x02" + - "\x02\u04EB\u04E9\x03\x02\x02\x02\u04EB\u04EC\x03\x02\x02\x02\u04EC\u04F1" + - "\x03\x02\x02\x02\u04ED\u04EB\x03\x02\x02\x02\u04EE\u04F1\x05\xC2b\x02" + - "\u04EF\u04F1\x05\xC4c\x02\u04F0\u04E5\x03\x02\x02\x02\u04F0\u04EE\x03" + - "\x02\x02\x02\u04F0\u04EF\x03\x02\x02\x02\u04F1\u0507\x03\x02\x02\x02\u04F2" + - "\u04F3\f\x05\x02\x02\u04F3\u04F4\x07\xDE\x02\x02\u04F4\u04F5\x07\u0114" + - "\x02\x02\u04F5\u0506\x05\xB6\\\x06\u04F6\u04F8\f\x06\x02\x02\u04F7\u04F9" + - "\x07\u0128\x02\x02\u04F8\u04F7\x03\x02\x02\x02\u04F8\u04F9\x03\x02\x02" + - "\x02\u04F9\u04FB\x03\x02\x02\x02\u04FA\u04FC\t\x17\x02\x02\u04FB\u04FA" + - "\x03\x02\x02\x02\u04FB\u04FC\x03\x02\x02\x02\u04FC\u04FE\x03\x02\x02\x02" + - "\u04FD\u04FF\x07\u0136\x02\x02\u04FE\u04FD\x03\x02\x02\x02\u04FE\u04FF" + - "\x03\x02\x02\x02\u04FF\u0500\x03\x02\x02\x02\u0500\u0501\x07\u0114\x02" + - "\x02\u0501\u0503\x05\xB6\\\x02\u0502\u0504\x05\xD0i\x02\u0503\u0502\x03" + - "\x02\x02\x02\u0503\u0504\x03\x02\x02\x02\u0504\u0506\x03\x02\x02\x02\u0505" + - "\u04F2\x03\x02\x02\x02\u0505\u04F6\x03\x02\x02\x02\u0506\u0509\x03\x02" + - "\x02\x02\u0507\u0505\x03\x02\x02\x02\u0507\u0508\x03\x02\x02\x02\u0508" + - "\xB7\x03\x02\x02\x02\u0509\u0507\x03\x02\x02\x02\u050A\u050C\x05\xBA^" + - "\x02\u050B\u050D\x05\u012C\x97\x02\u050C\u050B\x03\x02\x02\x02\u050C\u050D" + - "\x03\x02\x02\x02\u050D\xB9\x03\x02\x02\x02\u050E\u0510\x07\u015A\x02\x02" + - "\u050F\u050E\x03\x02\x02\x02\u050F\u0510\x03\x02\x02\x02\u0510\u0511\x03" + - "\x02\x02\x02\u0511\u0513\x05\xBC_\x02\u0512\u0514\x05\xBE`\x02\u0513\u0512" + - "\x03\x02\x02\x02\u0513\u0514\x03\x02\x02\x02\u0514\u0519\x03\x02\x02\x02" + - "\u0515\u0517\x07\xBB\x02\x02\u0516\u0515\x03\x02\x02\x02\u0516\u0517\x03" + - "\x02\x02\x02\u0517\u0518\x03\x02\x02\x02\u0518\u051A\x05\u011A\x8E\x02" + - "\u0519\u0516\x03\x02\x02\x02\u0519\u051A\x03\x02\x02\x02\u051A\u0538\x03" + - "\x02\x02\x02\u051B\u051C\x07\u0117\x02\x02\u051C\u051D\x07\u015A\x02\x02" + - "\u051D\u051E\x07\u0182\x02\x02\u051E\u051F\x05\u0114\x8B\x02\u051F\u0520" + - "\x07\u0182\x02\x02\u0520\u0525\x05\u0116\x8C\x02\u0521\u0522\x07\u0186" + - "\x02\x02\u0522\u0524\x05\u0116\x8C\x02\u0523\u0521\x03\x02\x02\x02\u0524" + - "\u0527\x03\x02\x02\x02\u0525\u0523\x03\x02\x02\x02\u0525\u0526\x03\x02" + - "\x02\x02\u0526\u0528\x03\x02\x02\x02\u0527\u0525\x03\x02\x02\x02\u0528" + - "\u0529\x07\u0183\x02\x02\u0529\u052A\x07\u0183\x02\x02\u052A\u0538\x03" + - "\x02\x02\x02\u052B\u052D\x07\u0117\x02\x02\u052C\u052B\x03\x02\x02\x02" + - "\u052C\u052D\x03\x02\x02\x02\u052D\u052E\x03\x02\x02\x02\u052E\u052F\x07" + - "\u0182\x02\x02\u052F\u0530\x05\xA2R\x02\u0530\u0531\x07\u0183\x02\x02" + - "\u0531\u0538\x03\x02\x02\x02\u0532\u0533\x07\u0167\x02\x02\u0533\u0534" + - "\x07\u0182\x02\x02\u0534\u0535\x05\u0108\x85\x02\u0535\u0536\x07\u0183" + - "\x02\x02\u0536\u0538\x03\x02\x02\x02\u0537\u050F\x03\x02\x02\x02\u0537" + - "\u051B\x03\x02\x02\x02\u0537\u052C\x03\x02\x02\x02\u0537\u0532\x03\x02" + - "\x02\x02\u0538\xBB\x03\x02\x02\x02\u0539\u053A\x05\u013E\xA0\x02\u053A" + - "\xBD\x03\x02\x02\x02\u053B\u053C\x07\xFD\x02\x02\u053C\u053D\x07\u0158" + - "\x02\x02\u053D\u053E\x07\xBB\x02\x02\u053E\u053F\x07\u012F\x02\x02\u053F" + - "\u0540\x05\xC0a\x02\u0540\xBF\x03\x02\x02\x02\u0541\u0542\x05\u0108\x85" + - "\x02\u0542\xC1\x03\x02\x02\x02\u0543\u0544\x07\u0182\x02\x02\u0544\u0545" + - "\x05\x9AN\x02\u0545\u0546\x07\u0183\x02\x02\u0546\u0547\x05\u012C\x97" + - "\x02\u0547\xC3\x03\x02\x02\x02\u0548\u0549\x07\u015A\x02\x02\u0549\u054A" + - "\x07\u0182\x02\x02\u054A\u054B\x05\xC6d\x02\u054B\u054C\x07\u0183\x02" + - "\x02\u054C\xC5\x03\x02\x02\x02\u054D\u054E\x05\xC8e\x02\u054E\u054F\x07" + - "\u0182\x02\x02\u054F\u0554\x05\xCAf\x02\u0550\u0551\x07\u0186\x02\x02" + - "\u0551\u0553\x05\xCAf\x02\u0552\u0550\x03\x02\x02\x02\u0553\u0556\x03" + - "\x02\x02\x02\u0554\u0552\x03\x02\x02\x02\u0554\u0555\x03\x02\x02\x02\u0555" + - "\u0557\x03\x02\x02\x02\u0556\u0554\x03\x02\x02\x02\u0557\u0558\x07\u0183" + - "\x02\x02\u0558\xC7\x03\x02\x02\x02\u0559\u055A\t\x18\x02\x02\u055A\xC9" + - "\x03\x02\x02\x02\u055B\u055C\x07\u015A\x02\x02\u055C\u056B\x05\xE0q\x02" + - "\u055D\u056B\x05\xCEh\x02\u055E\u056B\x05\u011E\x90\x02\u055F\u0560\x07" + - "\x1A\x02\x02\u0560\u0561\x07\u0196\x02\x02\u0561\u0562\x07\u015A\x02\x02" + - "\u0562\u056B\x05\xE0q\x02\u0563\u0564\x07\x99\x02\x02\u0564\u0565\x07" + - "\u0196\x02\x02\u0565\u056B\x05\xCEh\x02\u0566\u0567\x05\xCCg\x02\u0567" + - "\u0568\x07\u0196\x02\x02\u0568\u0569\x05\u011E\x90\x02\u0569\u056B\x03" + - "\x02\x02\x02\u056A\u055B\x03\x02\x02\x02\u056A\u055D\x03\x02\x02\x02\u056A" + - "\u055E\x03\x02\x02\x02\u056A\u055F\x03\x02\x02\x02\u056A\u0563\x03\x02" + - "\x02\x02\u056A\u0566\x03\x02\x02\x02\u056B\xCB\x03\x02\x02\x02\u056C\u056D" + - "\t\x19\x02\x02\u056D\xCD\x03\x02\x02\x02\u056E\u056F\x07!\x02\x02\u056F" + - "\u0570\x07\u0182\x02\x02\u0570\u0571\x05\u013E\xA0\x02\u0571\u0572\x07" + - "\u0183\x02\x02\u0572\xCF\x03\x02\x02\x02\u0573\u0574\x07\u0131\x02\x02" + - "\u0574\u0582\x05\u010A\x86\x02\u0575\u0576\x07\u016B\x02\x02\u0576\u0577" + - "\x07\u0182\x02\x02\u0577\u057C\x05\u013E\xA0\x02\u0578\u0579\x07\u0186" + - "\x02\x02\u0579\u057B\x05\u013E\xA0\x02\u057A\u0578\x03\x02\x02\x02\u057B" + - "\u057E\x03\x02\x02\x02\u057C\u057A\x03\x02\x02\x02\u057C\u057D\x03\x02" + - "\x02\x02\u057D\u057F\x03\x02\x02\x02\u057E\u057C\x03\x02\x02\x02\u057F" + - "\u0580\x07\u0183\x02\x02\u0580\u0582\x03\x02\x02\x02\u0581\u0573\x03\x02" + - "\x02\x02\u0581\u0575\x03\x02\x02\x02\u0582\xD1\x03\x02\x02\x02\u0583\u0584" + - "\x07\u0171\x02\x02\u0584\u0585\x05\u010A\x86\x02\u0585\xD3\x03\x02\x02" + - "\x02\u0586\u0587\x07\u0103\x02\x02\u0587\u0588\x07\xC7\x02\x02\u0588\u058D" + - "\x05\xD6l\x02\u0589\u058A\x07\u0186\x02\x02\u058A\u058C\x05\xD6l\x02\u058B" + - "\u0589\x03\x02\x02\x02\u058C\u058F\x03\x02\x02\x02\u058D\u058B\x03\x02" + - "\x02\x02\u058D\u058E\x03\x02\x02\x02\u058E\xD5\x03\x02\x02\x02\u058F\u058D" + - "\x03\x02\x02\x02\u0590\u05B8\x05\u0108\x85\x02\u0591\u05B8\x05\xDCo\x02" + - "\u0592\u0593\x07\u0182\x02\x02\u0593\u05B8\x07\u0183\x02\x02\u0594\u0595" + - "\x07\u0182\x02\x02\u0595\u059A\x05\u0108\x85\x02\u0596\u0597\x07\u0186" + - "\x02\x02\u0597\u0599\x05\u0108\x85\x02\u0598\u0596\x03\x02\x02\x02\u0599" + - "\u059C\x03\x02\x02\x02\u059A\u0598\x03\x02\x02\x02\u059A\u059B\x03\x02" + - "\x02\x02\u059B\u059D\x03\x02\x02\x02\u059C\u059A\x03\x02\x02\x02\u059D" + - "\u059E\x07\u0183\x02\x02\u059E\u05B8\x03\x02\x02\x02\u059F\u05A0\x05\xDA" + - "n\x02\u05A0\u05A1\x07\u0182\x02\x02\u05A1\u05A6\x05\u0108\x85\x02\u05A2" + - "\u05A3\x07\u0186\x02\x02\u05A3\u05A5\x05\u0108\x85\x02\u05A4\u05A2\x03" + - "\x02\x02\x02\u05A5\u05A8\x03\x02\x02\x02\u05A6\u05A4\x03\x02\x02\x02\u05A6" + - "\u05A7\x03\x02\x02\x02\u05A7\u05A9\x03\x02\x02\x02\u05A8\u05A6\x03\x02" + - "\x02\x02\u05A9\u05AA\x07\u0183\x02\x02\u05AA\u05B8\x03\x02\x02\x02\u05AB" + - "\u05AC\x05\xD8m\x02\u05AC\u05AD\x07\u0182\x02\x02\u05AD\u05B2\x05\xD6" + - "l\x02\u05AE\u05AF\x07\u0186\x02\x02\u05AF\u05B1\x05\xD6l\x02\u05B0\u05AE" + - "\x03\x02\x02\x02\u05B1\u05B4\x03\x02\x02\x02\u05B2\u05B0\x03\x02\x02\x02" + - "\u05B2\u05B3\x03\x02\x02\x02\u05B3\u05B5\x03\x02\x02\x02\u05B4\u05B2\x03" + - "\x02\x02\x02\u05B5\u05B6\x07\u0183\x02\x02\u05B6\u05B8\x03\x02\x02\x02" + - "\u05B7\u0590\x03\x02\x02\x02\u05B7\u0591\x03\x02\x02\x02\u05B7\u0592\x03" + - "\x02\x02\x02\u05B7\u0594\x03\x02\x02\x02\u05B7\u059F\x03\x02\x02\x02\u05B7" + - "\u05AB\x03\x02\x02\x02\u05B8\xD7\x03\x02\x02\x02\u05B9\u05BA\x07\u0104" + - "\x02\x02\u05BA\u05BB\x07\x8B\x02\x02\u05BB\xD9\x03\x02\x02\x02\u05BC\u05BD" + - "\t\x1A\x02\x02\u05BD\xDB\x03\x02\x02\x02\u05BE\u05BF\x05\xDEp\x02\u05BF" + - "\u05C0\x07\u0182\x02\x02\u05C0\u05C1\x05\xE0q\x02\u05C1\u05C2\x07\u0186" + - "\x02\x02\u05C2\u05C3\x05\u011E\x90\x02\u05C3\u05C4\x07\u0183\x02\x02\u05C4" + - "\xDD\x03\x02\x02\x02\u05C5\u05C6\t\x1B\x02\x02\u05C6\xDF\x03\x02\x02\x02" + - "\u05C7\u05C8\x05\u013E\xA0\x02\u05C8\xE1\x03\x02\x02\x02\u05C9\u05CA\x07" + - "\u0106\x02\x02\u05CA\u05CB\x05\u010A\x86\x02\u05CB\xE3\x03\x02\x02\x02" + - "\u05CC\u05CD\x07\u0172\x02\x02\u05CD\u05D2\x05\xE6t\x02\u05CE\u05CF\x07" + - "\u0186\x02\x02\u05CF\u05D1\x05\xE6t\x02\u05D0\u05CE\x03\x02\x02\x02\u05D1" + - "\u05D4\x03\x02\x02\x02\u05D2\u05D0\x03\x02\x02\x02\u05D2\u05D3\x03\x02" + - "\x02\x02\u05D3\xE5\x03\x02\x02\x02\u05D4\u05D2\x03\x02\x02\x02\u05D5\u05D6" + - "\x05\u012E\x98\x02\u05D6\u05D7\x07\xBB\x02\x02\u05D7\u05D8\x05\xE8u\x02" + - "\u05D8\xE7\x03\x02\x02\x02\u05D9\u05DB\x05\u012E\x98\x02\u05DA\u05D9\x03" + - "\x02\x02\x02\u05DA\u05DB\x03\x02\x02\x02\u05DB\u05DC\x03\x02\x02\x02\u05DC" + - "\u05DE\x07\u0182\x02\x02\u05DD\u05DF\x05\xF2z\x02\u05DE\u05DD\x03\x02" + - "\x02\x02\u05DE\u05DF\x03\x02\x02\x02\u05DF\u05E1\x03\x02\x02\x02\u05E0" + - "\u05E2\x05\xECw\x02\u05E1\u05E0\x03\x02\x02\x02\u05E1\u05E2\x03\x02\x02" + - "\x02\u05E2\u05E4\x03\x02\x02\x02\u05E3\u05E5\x05\u0102\x82\x02\u05E4\u05E3" + - "\x03\x02\x02\x02\u05E4\u05E5\x03\x02\x02\x02\u05E5\u05E6\x03\x02\x02\x02" + - "\u05E6\u05E7\x07\u0183\x02\x02\u05E7\xE9\x03\x02\x02\x02\u05E8\u05E9\x07" + - "\u011E\x02\x02\u05E9\u05EB\x07\u0182\x02\x02\u05EA\u05EC\x05\xF2z\x02" + - "\u05EB\u05EA\x03\x02\x02\x02\u05EB\u05EC\x03\x02\x02\x02\u05EC\u05EE\x03" + - "\x02\x02\x02\u05ED\u05EF\x05\xECw\x02\u05EE\u05ED\x03\x02\x02\x02\u05EE" + - "\u05EF\x03\x02\x02\x02\u05EF\u05F1\x03\x02\x02\x02\u05F0\u05F2\x05\xF6" + - "|\x02\u05F1\u05F0\x03\x02\x02\x02\u05F1\u05F2\x03\x02\x02\x02\u05F2\u05F4" + - "\x03\x02\x02\x02\u05F3\u05F5\x05\xFC\x7F\x02\u05F4\u05F3\x03\x02\x02\x02" + - "\u05F4\u05F5\x03\x02\x02\x02\u05F5\u05F7\x03\x02\x02\x02\u05F6\u05F8\x05" + - "\xFE\x80\x02\u05F7\u05F6\x03\x02\x02\x02\u05F7\u05F8\x03\x02\x02\x02\u05F8" + - "\u05FA\x03\x02\x02\x02\u05F9\u05FB\x05\xF8}\x02\u05FA\u05F9\x03\x02\x02" + - "\x02\u05FA\u05FB\x03\x02\x02\x02\u05FB\u05FC\x03\x02\x02\x02\u05FC\u05FD" + - "\x05\u0100\x81\x02\u05FD\u0602\x07\u0183\x02\x02\u05FE\u0600\x07\xBB\x02" + - "\x02\u05FF\u05FE\x03\x02\x02\x02\u05FF\u0600\x03\x02\x02\x02\u0600\u0601" + - "\x03\x02\x02\x02\u0601\u0603\x05\u0136\x9C\x02\u0602\u05FF\x03\x02\x02" + - "\x02\u0602\u0603\x03\x02\x02\x02\u0603\xEB"; + "\x05J&\x02\u032B\u032A\x03\x02\x02\x02\u032B\u032C\x03\x02\x02\x02\u032C" + + "Q\x03\x02\x02\x02\u032D\u032E\x05\u0104\x83\x02\u032ES\x03\x02\x02\x02" + + "\u032F\u0330\x07\xAB\x02\x02\u0330\u0331\x07\xFD\x02\x02\u0331\u0332\x05" + + "\u0104\x83\x02\u0332\u0333\x07\xBB\x02\x02\u0333\u0334\x05\u0104\x83\x02" + + "\u0334U\x03\x02\x02\x02\u0335\u0336\x07\xD9\x02\x02\u0336\u0338\x05X-" + + "\x02\u0337\u0335\x03\x02\x02\x02\u0337\u0338\x03\x02\x02\x02\u0338\u0339" + + "\x03\x02\x02\x02\u0339\u033A\x07\u0140\x02\x02\u033A\u033B\x07G\x02\x02" + + "\u033B\u033C\x058\x1D\x02\u033C\u033D\x07\u012C\x02\x02\u033D\u033E\x07" + + "$\x02\x02\u033EW\x03\x02\x02\x02\u033F\u0340\x05\u0132\x9A\x02\u0340Y" + + "\x03\x02\x02\x02\u0341\u0342\x07\u013D\x02\x02\u0342\u0343\x07\xFD\x02" + + "\x02\u0343\u0344\x07\u0158\x02\x02\u0344[\x03\x02\x02\x02\u0345\u0346" + + "\x07a\x02\x02\u0346\u0347\x07\xC7\x02\x02\u0347\u0348\x05^0\x02\u0348" + + "]\x03\x02\x02\x02\u0349\u034A\x07\u0182\x02\x02\u034A\u034F\x05`1\x02" + + "\u034B\u034C\x07\u0186\x02\x02\u034C\u034E\x05`1\x02\u034D\u034B\x03\x02" + + "\x02\x02\u034E\u0351\x03\x02\x02\x02\u034F\u034D\x03\x02\x02\x02\u034F" + + "\u0350\x03\x02\x02\x02\u0350\u0352\x03\x02\x02\x02\u0351\u034F\x03\x02" + + "\x02\x02\u0352\u0353\x07\u0183\x02\x02\u0353_\x03\x02\x02\x02\u0354\u0362" + + "\x05\u0118\x8D\x02\u0355\u0356\x05\u0132\x9A\x02\u0356\u0357\x07\u0182" + + "\x02\x02\u0357\u035C\x05b2\x02\u0358\u0359\x07\u0186\x02\x02\u0359\u035B" + + "\x05b2\x02\u035A\u0358\x03\x02\x02\x02\u035B\u035E\x03\x02\x02\x02\u035C" + + "\u035A\x03\x02\x02\x02\u035C\u035D\x03\x02\x02\x02\u035D\u035F\x03\x02" + + "\x02\x02\u035E\u035C\x03\x02\x02\x02\u035F\u0360\x07\u0183\x02\x02\u0360" + + "\u0362\x03\x02\x02\x02\u0361\u0354\x03\x02\x02\x02\u0361\u0355\x03\x02" + + "\x02\x02\u0362a\x03\x02\x02\x02\u0363\u0366\x05\u0118\x8D\x02\u0364\u0366" + + "\x05\u015E\xB0\x02\u0365\u0363\x03\x02\x02\x02\u0365\u0364\x03\x02\x02" + + "\x02\u0366c\x03\x02\x02\x02\u0367\u0368\x07\u011A\x02\x02\u0368\u0371" + + "\x05\u0142\xA2\x02\u0369\u036D\x07\u0182\x02\x02\u036A\u036C\x05f4\x02" + + "\u036B\u036A\x03\x02\x02\x02\u036C\u036F\x03\x02\x02\x02\u036D\u036B\x03" + + "\x02\x02\x02\u036D\u036E\x03\x02\x02\x02\u036E\u0370\x03\x02\x02\x02\u036F" + + "\u036D\x03\x02\x02\x02\u0370\u0372\x07\u0183\x02\x02\u0371\u0369\x03\x02" + + "\x02\x02\u0371\u0372\x03\x02\x02\x02\u0372e\x03\x02\x02\x02\u0373\u0374" + + "\t\x0F\x02\x02\u0374\u0378\t\x10\x02\x02\u0375\u0376\t\x11\x02\x02\u0376" + + "\u0378\t\x12\x02\x02\u0377\u0373\x03\x02\x02\x02\u0377\u0375\x03\x02\x02" + + "\x02\u0378g\x03\x02\x02\x02\u0379\u037A\x07\xDD\x02\x02\u037A\u037B\x07" + + "\x0E\x02\x02\u037B\u037C\x05\u0144\xA3\x02\u037C\u037D\x05\u0146\xA4\x02" + + "\u037Di\x03\x02\x02\x02\u037E\u037F\x07\xDD\x02\x02\u037F\u0381\x07\x1B" + + "\x02\x02\u0380\u0382\x05\u0148\xA5\x02\u0381\u0380\x03\x02\x02\x02\u0381" + + "\u0382\x03\x02\x02\x02\u0382\u0383\x03\x02\x02\x02\u0383\u0385\x05\u013E" + + "\xA0\x02\u0384\u0386\x05J&\x02\u0385\u0384\x03\x02\x02\x02\u0385\u0386" + + "\x03\x02\x02\x02\u0386\u0387\x03\x02\x02\x02\u0387\u0388\x05\u0146\xA4" + + "\x02\u0388k\x03\x02\x02\x02\u0389\u038B\x07\xDD\x02\x02\u038A\u038C\x07" + + "\x98\x02\x02\u038B\u038A\x03\x02\x02\x02\u038B\u038C\x03\x02\x02\x02\u038C" + + "\u038D\x03\x02\x02\x02\u038D\u038F\x07\xA8\x02\x02\u038E\u0390\x05\u0148" + + "\xA5\x02\u038F\u038E\x03\x02\x02\x02\u038F\u0390\x03\x02\x02\x02\u0390" + + "\u0391\x03\x02\x02\x02\u0391\u0393\x05\u0144\xA3\x02\u0392\u0394\x058" + + "\x1D\x02\u0393\u0392\x03\x02\x02\x02\u0393\u0394\x03\x02\x02\x02\u0394" + + "\u0396\x03\x02\x02\x02\u0395\u0397\x05J&\x02\u0396\u0395\x03\x02\x02\x02" + + "\u0396\u0397\x03\x02\x02\x02\u0397\u0398\x03\x02\x02\x02\u0398\u0399\x07" + + "\xBB\x02\x02\u0399\u039A\x05\xA0Q\x02\u039Am\x03\x02\x02\x02\u039B\u039F" + + "\x07\xDD\x02\x02\u039C\u03A0\x07\x98\x02\x02\u039D\u039E\x07\x98\x02\x02" + + "\u039E\u03A0\x07\u0157\x02\x02\u039F\u039C\x03\x02\x02\x02\u039F\u039D" + + "\x03\x02\x02\x02\u039F\u03A0\x03\x02\x02\x02\u03A0\u03A1\x03\x02\x02\x02" + + "\u03A1\u03A3\x07\u0100\x02\x02\u03A2\u03A4\x05\u0148\xA5\x02\u03A3\u03A2" + + "\x03\x02\x02\x02\u03A3\u03A4\x03\x02\x02\x02\u03A4\u03A5\x03\x02\x02\x02" + + "\u03A5\u03A6\x05\u0110\x89\x02\u03A6\u03A7\x07\xBB\x02\x02\u03A7\u03AA" + + "\x05\u0132\x9A\x02\u03A8\u03A9\x07\u0116\x02\x02\u03A9\u03AB\t\x13\x02" + + "\x02\u03AA\u03A8\x03\x02\x02\x02\u03AA\u03AB\x03\x02\x02\x02\u03AB\u03AD" + + "\x03\x02\x02\x02\u03AC\u03AE\x05p9\x02\u03AD\u03AC\x03\x02\x02\x02\u03AD" + + "\u03AE\x03\x02\x02\x02\u03AEo\x03\x02\x02\x02\u03AF\u03B0\x07\u016B\x02" + + "\x02\u03B0\u03B1\x07B\x02\x02\u03B1\u03B7\x05r:\x02\u03B2\u03B3\x07\u0186" + + "\x02\x02\u03B3\u03B4\x07B\x02\x02\u03B4\u03B6\x05r:\x02\u03B5\u03B2\x03" + + "\x02\x02\x02\u03B6\u03B9\x03\x02\x02\x02\u03B7\u03B5\x03\x02\x02\x02\u03B7" + + "\u03B8\x03\x02\x02\x02\u03B8q\x03\x02\x02\x02\u03B9\u03B7\x03\x02\x02" + + "\x02\u03BA\u03BB\x07\u0197\x02\x02\u03BBs\x03\x02\x02\x02\u03BC\u03BD" + + "\x07\xB6\x02\x02\u03BD\u03BF\x07\u015A\x02\x02\u03BE\u03C0\x05\u014A\xA6" + + "\x02\u03BF\u03BE\x03\x02\x02\x02\u03BF\u03C0\x03\x02\x02\x02\u03C0\u03C1" + + "\x03\x02\x02\x02\u03C1\u03C7\x05\u0142\xA2\x02\u03C2\u03C8\x05v<\x02\u03C3" + + "\u03C8\x05x=\x02\u03C4\u03C8\x05z>\x02\u03C5\u03C8\x05|?\x02\u03C6\u03C8" + + "\x05~@\x02\u03C7\u03C2\x03\x02\x02\x02\u03C7\u03C3\x03\x02\x02\x02\u03C7" + + "\u03C4\x03\x02\x02\x02\u03C7\u03C5\x03\x02\x02\x02\u03C7\u03C6\x03\x02" + + "\x02\x02\u03C8u\x03\x02\x02\x02\u03C9\u03CB\x07y\x02\x02\u03CA\u03CC\x05" + + "\u0144\xA3\x02\u03CB\u03CA\x03\x02\x02\x02\u03CB\u03CC\x03\x02\x02\x02" + + "\u03CC\u03CD\x03\x02\x02\x02\u03CD\u03CE\x07\u0160\x02\x02\u03CE\u03CF" + + "\x05\u0144\xA3\x02\u03CFw\x03\x02\x02\x02\u03D0\u03D1\x07\u014D\x02\x02" + + "\u03D1\u03D2\x05\u014C\xA7\x02\u03D2y\x03\x02\x02\x02\u03D3\u03D4\x07" + + "\x06\x02\x02\u03D4\u03D5\x07\xD9\x02\x02\u03D5\u03D6\x05X-\x02\u03D6\u03D7" + + "\x07\u0140\x02\x02\u03D7\u03D8\x07G\x02\x02\u03D8\u03DA\x058\x1D\x02\u03D9" + + "\u03DB\x05\x80A\x02\u03DA\u03D9\x03\x02\x02\x02\u03DA\u03DB\x03\x02\x02" + + "\x02\u03DB{\x03\x02\x02\x02\u03DC\u03DD\x07\xEF\x02\x02\u03DD\u03DE\x07" + + "\xD9\x02\x02\u03DE\u03DF\x05X-\x02\u03DF}\x03\x02\x02\x02\u03E0\u03E1" + + "\x07\x06\x02\x02\u03E1\u03E2\x07\u0165\x02\x02\u03E2\u03E3\x058\x1D\x02" + + "\u03E3\x7F\x03\x02\x02\x02\u03E4\u03E5\x07\u012C\x02\x02\u03E5\u03E6\x07" + + "$\x02\x02\u03E6\x81\x03\x02\x02\x02\u03E7\u03E8\x07\xB6\x02\x02\u03E8" + + "\u03E9\x07\xA8\x02\x02\u03E9\u03ED\x05\u0144\xA3\x02\u03EA\u03EE\x05v" + + "<\x02\u03EB\u03EC\x07\xBB\x02\x02\u03EC\u03EE\x05\xA0Q\x02\u03ED\u03EA" + + "\x03\x02\x02\x02\u03ED\u03EB\x03\x02\x02\x02\u03EE\x83\x03\x02\x02\x02" + + "\u03EF\u03F0\x07\xB6\x02\x02\u03F0\u03F1\x07\x1B\x02\x02\u03F1\u03F2\x05" + + "\u013C\x9F\x02\u03F2\u03F3\x05x=\x02\u03F3\x85\x03\x02\x02\x02\u03F4\u03F8" + + "\x07\xB6\x02\x02\u03F5\u03F9\x07\x98\x02\x02\u03F6\u03F7\x07\x98\x02\x02" + + "\u03F7\u03F9\x07\u0157\x02\x02\u03F8\u03F5\x03\x02\x02\x02\u03F8\u03F6" + + "\x03\x02\x02\x02\u03F8\u03F9\x03\x02\x02\x02\u03F9\u03FA\x03\x02\x02\x02" + + "\u03FA\u03FC\x07\u0100\x02\x02\u03FB\u03FD\x05\u014A\xA6\x02\u03FC\u03FB" + + "\x03\x02\x02\x02\u03FC\u03FD\x03\x02\x02\x02\u03FD\u03FE\x03\x02\x02\x02" + + "\u03FE\u03FF\x05\u0144\xA3\x02\u03FF\u0400\x07\xBB\x02\x02\u0400\u0403" + + "\x05\u0132\x9A\x02\u0401\u0402\x07\u0116\x02\x02\u0402\u0404\t\x13\x02" + + "\x02\u0403\u0401\x03\x02\x02\x02\u0403\u0404\x03\x02\x02\x02\u0404\x87" + + "\x03\x02\x02\x02\u0405\u0406\x07\xEF\x02\x02\u0406\u0408\x07\x0E\x02\x02" + + "\u0407\u0409\x05\u014A\xA6\x02\u0408\u0407\x03\x02\x02\x02\u0408\u0409" + + "\x03\x02\x02\x02\u0409\u040A\x03\x02\x02\x02\u040A\u040B\x05\u013A\x9E" + + "\x02\u040B\x89\x03\x02\x02\x02\u040C\u040E\x07\xEF\x02\x02\u040D\u040F" + + "\x07\x98\x02\x02\u040E\u040D\x03\x02\x02\x02\u040E\u040F\x03\x02\x02\x02" + + "\u040F\u0410\x03\x02\x02\x02\u0410\u0412\x07\u015A\x02\x02\u0411\u0413" + + "\x05\u014A\xA6\x02\u0412\u0411\x03\x02\x02\x02\u0412\u0413\x03\x02\x02" + + "\x02\u0413\u0414\x03\x02\x02\x02\u0414\u0415\x05\u0142\xA2\x02\u0415\x8B" + + "\x03\x02\x02\x02\u0416\u0417\x07\xEF\x02\x02\u0417\u0419\x07\x1B\x02\x02" + + "\u0418\u041A\x05\u014A\xA6\x02\u0419\u0418\x03\x02\x02\x02\u0419\u041A" + + "\x03\x02\x02\x02\u041A\u041B\x03\x02\x02\x02\u041B\u041D\x05\u013C\x9F" + + "\x02\u041C\u041E\t\x14\x02\x02\u041D\u041C\x03\x02\x02\x02\u041D\u041E" + + "\x03\x02\x02\x02\u041E\x8D\x03\x02\x02\x02\u041F\u0421\x07\xEF\x02\x02" + + "\u0420\u0422\x07\x98\x02\x02\u0421\u0420\x03\x02\x02\x02\u0421\u0422\x03" + + "\x02\x02\x02\u0422\u0423\x03\x02\x02\x02\u0423\u0425\x07\xA8\x02\x02\u0424" + + "\u0426\x05\u014A\xA6\x02\u0425\u0424\x03\x02\x02\x02\u0425\u0426\x03\x02" + + "\x02\x02\u0426\u0427\x03\x02\x02\x02\u0427\u0428\x05\u0144\xA3\x02\u0428" + + "\x8F\x03\x02\x02\x02\u0429\u042D\x07\xEF\x02\x02\u042A\u042E\x07\x98\x02" + + "\x02\u042B\u042C\x07\x98\x02\x02\u042C\u042E\x07\u0157\x02\x02\u042D\u042A" + + "\x03\x02\x02\x02\u042D\u042B\x03\x02\x02\x02\u042D\u042E\x03\x02\x02\x02" + + "\u042E\u042F\x03\x02\x02\x02\u042F\u0431\x07\u0100\x02\x02\u0430\u0432" + + "\x05\u014A\xA6\x02\u0431\u0430\x03\x02\x02\x02\u0431\u0432\x03\x02\x02" + + "\x02\u0432\u0433\x03\x02\x02\x02\u0433\u0434\x05\u0110\x89\x02\u0434\x91" + + "\x03\x02\x02\x02\u0435\u0437\x07\xF6\x02\x02\u0436\u0435\x03\x02\x02\x02" + + "\u0436\u0437\x03\x02\x02\x02\u0437\u0438\x03\x02\x02\x02\u0438\u043D\x05" + + "\x94K\x02\u0439\u043D\x05\x9CO\x02\u043A\u043B\x07\xF6\x02\x02\u043B\u043D" + + "\x05\x9EP\x02\u043C\u0436\x03\x02\x02\x02\u043C\u0439\x03\x02\x02\x02" + + "\u043C\u043A\x03\x02\x02\x02\u043D\x93\x03\x02\x02\x02\u043E\u043F\x07" + + "\u010D\x02\x02\u043F\u0440\t\x15\x02\x02\u0440\u0449\x05\u0142\xA2\x02" + + "\u0441\u0443\x05\x96L\x02\u0442\u0441\x03\x02\x02\x02\u0442\u0443\x03" + + "\x02\x02\x02\u0443\u0445\x03\x02\x02\x02\u0444\u0446\x058\x1D\x02\u0445" + + "\u0444\x03\x02\x02\x02\u0445\u0446\x03\x02\x02\x02\u0446\u0447\x03\x02" + + "\x02\x02\u0447\u044A\x05\xA0Q\x02\u0448\u044A\x05\x98M\x02\u0449\u0442" + + "\x03\x02\x02\x02\u0449\u0448\x03\x02\x02\x02\u044A\x95\x03\x02\x02\x02" + + "\u044B\u044C\x07\u0139\x02\x02\u044C\u044D\x05\u014C\xA7\x02\u044D\x97" + + "\x03\x02\x02\x02\u044E\u044F\x07\u016D\x02\x02\u044F\u0454\x05\x9AN\x02" + + "\u0450\u0451\x07\u0186\x02\x02\u0451\u0453\x05\x9AN\x02\u0452\u0450\x03" + + "\x02\x02\x02\u0453\u0456\x03\x02\x02\x02\u0454\u0452\x03\x02\x02\x02\u0454" + + "\u0455\x03\x02\x02\x02\u0455\x99\x03\x02\x02\x02\u0456\u0454\x03\x02\x02" + + "\x02\u0457\u0458\x07\u0182\x02\x02\u0458\u045D\x05\u015E\xB0\x02\u0459" + + "\u045A\x07\u0186\x02\x02\u045A\u045C\x05\u015E\xB0\x02\u045B\u0459\x03" + + "\x02\x02\x02\u045C\u045F\x03\x02\x02\x02\u045D\u045B\x03\x02\x02\x02\u045D" + + "\u045E\x03\x02\x02\x02\u045E\u0460\x03\x02\x02\x02\u045F\u045D\x03\x02" + + "\x02\x02\u0460\u0461\x07\u0183\x02\x02\u0461\x9B\x03\x02\x02\x02\u0462" + + "\u0463\x07\xBF\x02\x02\u0463\u0464\x07\x92\x02\x02\u0464\u0465\x07\u014D" + + "\x02\x02\u0465\u0469\x07\u0187\x02\x02\u0466\u0467\x05\x94K\x02\u0467" + + "\u0468\x07\u0187\x02\x02\u0468\u046A\x03\x02\x02\x02\u0469\u0466\x03\x02" + + "\x02\x02\u046A\u046B\x03\x02\x02\x02\u046B\u0469\x03\x02\x02\x02\u046B" + + "\u046C\x03\x02\x02\x02\u046C\u046D\x03\x02\x02\x02\u046D\u046E\x07\xF2" + + "\x02\x02\u046E\x9D\x03\x02\x02\x02\u046F\u0470\x07\x92\x02\x02\u0470\u0471" + + "\x07\u014D\x02\x02\u0471\u0475\x07\xBF\x02\x02\u0472\u0473\x05\x94K\x02" + + "\u0473\u0474\x07\u0187\x02\x02\u0474\u0476\x03\x02\x02\x02\u0475\u0472" + + "\x03\x02\x02\x02\u0476\u0477\x03\x02\x02\x02\u0477\u0475\x03\x02\x02\x02" + + "\u0477\u0478\x03\x02\x02\x02\u0478\u0479\x03\x02\x02\x02\u0479\u047A\x07" + + "\xF2\x02\x02\u047A\x9F\x03\x02\x02\x02\u047B\u047C\bQ\x01\x02\u047C\u0493" + + "\x05\xA2R\x02\u047D\u047E\x05\xA4S\x02\u047E\u047F\x05\xA0Q\x07\u047F" + + "\u0493\x03\x02\x02\x02\u0480\u0481\x07\u0182\x02\x02\u0481\u0482\x05\xA0" + + "Q\x02\u0482\u0483\x07\u0183\x02\x02\u0483\u0493\x03\x02\x02\x02\u0484" + + "\u0486\x05\xACW\x02\u0485\u0487\x05\xE8u\x02\u0486\u0485\x03\x02\x02\x02" + + "\u0486\u0487\x03\x02\x02\x02\u0487\u0489\x03\x02\x02\x02\u0488\u048A\x05" + + "\xECw\x02\u0489\u0488\x03\x02\x02\x02\u0489\u048A\x03\x02\x02\x02\u048A" + + "\u0493\x03\x02\x02\x02\u048B\u048D\x05\xAAV\x02\u048C\u048E\x05\xE8u\x02" + + "\u048D\u048C\x03\x02\x02\x02\u048D\u048E\x03\x02\x02\x02\u048E\u0490\x03" + + "\x02\x02\x02\u048F\u0491\x05\xECw\x02\u0490\u048F\x03\x02\x02\x02\u0490" + + "\u0491\x03\x02\x02\x02\u0491\u0493\x03\x02\x02\x02\u0492\u047B\x03\x02" + + "\x02\x02\u0492\u047D\x03\x02\x02\x02\u0492\u0480\x03\x02\x02\x02\u0492" + + "\u0484\x03\x02\x02\x02\u0492\u048B\x03\x02\x02\x02\u0493\u04A2\x03\x02" + + "\x02\x02\u0494\u0495\f\x05\x02\x02\u0495\u0497\t\x16\x02\x02\u0496\u0498" + + "\x07\xB4\x02\x02\u0497\u0496\x03\x02\x02\x02\u0497\u0498\x03\x02\x02\x02" + + "\u0498\u0499\x03\x02\x02\x02\u0499\u049B\x05\xA0Q\x02\u049A\u049C\x05" + + "\xE8u\x02\u049B\u049A\x03\x02\x02\x02\u049B\u049C\x03\x02\x02\x02\u049C" + + "\u049E\x03\x02\x02\x02\u049D\u049F\x05\xECw\x02\u049E\u049D\x03\x02\x02" + + "\x02\u049E\u049F\x03\x02\x02\x02\u049F\u04A1\x03\x02\x02\x02\u04A0\u0494" + + "\x03\x02\x02\x02\u04A1\u04A4\x03\x02\x02\x02\u04A2\u04A0\x03\x02\x02\x02" + + "\u04A2\u04A3\x03\x02\x02\x02\u04A3\xA1\x03\x02\x02\x02\u04A4\u04A2\x03" + + "\x02\x02\x02\u04A5\u04A6\x07\u016D\x02\x02\u04A6\u04AB\x05\u0104\x83\x02" + + "\u04A7\u04A8\x07\u0186\x02\x02\u04A8\u04AA\x05\u0104\x83\x02\u04A9\u04A7" + + "\x03\x02\x02\x02\u04AA\u04AD\x03\x02\x02\x02\u04AB\u04A9\x03\x02\x02\x02" + + "\u04AB\u04AC\x03\x02\x02\x02\u04AC\xA3\x03\x02\x02\x02\u04AD\u04AB\x03" + + "\x02\x02\x02\u04AE\u04AF\x07\u0173\x02\x02\u04AF\u04B4\x05\xA6T\x02\u04B0" + + "\u04B1\x07\u0186\x02\x02\u04B1\u04B3\x05\xA6T\x02\u04B2\u04B0\x03\x02" + + "\x02\x02\u04B3\u04B6\x03\x02\x02\x02\u04B4\u04B2\x03\x02\x02\x02\u04B4" + + "\u04B5\x03\x02\x02\x02\u04B5\xA5\x03\x02\x02\x02\u04B6\u04B4\x03\x02\x02" + + "\x02\u04B7\u04C3\x05\xA8U\x02\u04B8\u04B9\x07\u0182\x02\x02\u04B9\u04BE" + + "\x056\x1C\x02\u04BA\u04BB\x07\u0186\x02\x02\u04BB\u04BD\x056\x1C\x02\u04BC" + + "\u04BA\x03\x02\x02\x02\u04BD\u04C0\x03\x02\x02\x02\u04BE\u04BC\x03\x02" + + "\x02\x02\u04BE\u04BF\x03\x02\x02\x02\u04BF\u04C1\x03\x02\x02\x02\u04C0" + + "\u04BE\x03\x02\x02\x02\u04C1\u04C2\x07\u0183\x02\x02\u04C2\u04C4\x03\x02" + + "\x02\x02\u04C3\u04B8\x03\x02\x02\x02\u04C3\u04C4\x03\x02\x02\x02\u04C4" + + "\u04C5\x03\x02\x02\x02\u04C5\u04C6\x07\xBB\x02\x02\u04C6\u04C7\x07\u0182" + + "\x02\x02\u04C7\u04C8\x05\xA0Q\x02\u04C8\u04C9\x07\u0183\x02\x02\u04C9" + + "\xA7\x03\x02\x02\x02\u04CA\u04CB\x05\u0132\x9A\x02\u04CB\xA9\x03\x02\x02" + + "\x02\u04CC\u04CD\x05\xACW\x02\u04CD\u04CF\x05\xB2Z\x02\u04CE\u04D0\x05" + + "\xCEh\x02\u04CF\u04CE\x03\x02\x02\x02\u04CF\u04D0\x03\x02\x02\x02\u04D0" + + "\u04D2\x03\x02\x02\x02\u04D1\u04D3\x05\xD0i\x02\u04D2\u04D1\x03\x02\x02" + + "\x02\u04D2\u04D3\x03\x02\x02\x02\u04D3\u04D5\x03\x02\x02\x02\u04D4\u04D6" + + "\x05\xDEp\x02\u04D5\u04D4\x03\x02\x02\x02\u04D5\u04D6\x03\x02\x02\x02" + + "\u04D6\u04D8\x03\x02\x02\x02\u04D7\u04D9\x05\xE0q\x02\u04D8\u04D7\x03" + + "\x02\x02\x02\u04D8\u04D9\x03\x02\x02\x02\u04D9\u04DF\x03\x02\x02\x02\u04DA" + + "\u04DB\x05\xACW\x02\u04DB\u04DC\x05\xB2Z\x02\u04DC\u04DD\x05\xE6t\x02" + + "\u04DD\u04DF\x03\x02\x02\x02\u04DE\u04CC\x03\x02\x02\x02\u04DE\u04DA\x03" + + "\x02\x02\x02\u04DF\xAB\x03\x02\x02\x02\u04E0\u04E2\x07\u014C\x02\x02\u04E1" + + "\u04E3\x05\u0168\xB5\x02\u04E2\u04E1\x03\x02\x02\x02\u04E2\u04E3\x03\x02" + + "\x02\x02\u04E3\u04ED\x03\x02\x02\x02\u04E4\u04EE\x07\u018D\x02\x02\u04E5" + + "\u04EA\x05\xAEX\x02\u04E6\u04E7\x07\u0186\x02\x02\u04E7\u04E9\x05\xAE" + + "X\x02\u04E8\u04E6\x03\x02\x02\x02\u04E9\u04EC\x03\x02\x02\x02\u04EA\u04E8" + + "\x03\x02\x02\x02\u04EA\u04EB\x03\x02\x02\x02\u04EB\u04EE\x03\x02\x02\x02" + + "\u04EC\u04EA\x03\x02\x02\x02\u04ED\u04E4\x03\x02\x02\x02\u04ED\u04E5\x03" + + "\x02\x02\x02\u04EE\xAD\x03\x02\x02\x02\u04EF\u04F8\x05\xB0Y\x02\u04F0" + + "\u04F5\x05\u0104\x83\x02\u04F1\u04F3\x07\xBB\x02\x02\u04F2\u04F1\x03\x02" + + "\x02\x02\u04F2\u04F3\x03\x02\x02\x02\u04F3\u04F4\x03\x02\x02\x02\u04F4" + + "\u04F6\x05\u0104\x83\x02\u04F5\u04F2\x03\x02\x02\x02\u04F5\u04F6\x03\x02" + + "\x02\x02\u04F6\u04F8\x03\x02\x02\x02\u04F7\u04EF\x03\x02\x02\x02\u04F7" + + "\u04F0\x03\x02\x02\x02\u04F8\xAF\x03\x02\x02\x02\u04F9\u04FA\x05\u010E" + + "\x88\x02\u04FA\u04FB\x07\u0137\x02\x02\u04FB\u04FC\x05\xE4s\x02\u04FC" + + "\u04FD\x07\xBB\x02\x02\u04FD\u04FE\x05\u0132\x9A\x02\u04FE\u0506\x03\x02" + + "\x02\x02\u04FF\u0500\x05\u010E\x88\x02\u0500\u0501\x07\u0137\x02\x02\u0501" + + "\u0502\x05\u012A\x96\x02\u0502\u0503\x07\xBB\x02\x02\u0503\u0504\x05\u0132" + + "\x9A\x02\u0504\u0506\x03\x02\x02\x02\u0505\u04F9\x03\x02\x02\x02\u0505" + + "\u04FF\x03\x02\x02\x02\u0506\xB1\x03\x02\x02\x02\u0507\u0508\x07\xFE\x02" + + "\x02\u0508\u0509\x05\xB4[\x02\u0509\xB3\x03\x02\x02\x02\u050A\u050B\b" + + "[\x01\x02\u050B\u0510\x05\xB6\\\x02\u050C\u050D\x07\u0186\x02\x02\u050D" + + "\u050F\x05\xB6\\\x02\u050E\u050C\x03\x02\x02\x02\u050F\u0512\x03\x02\x02" + + "\x02\u0510\u050E\x03\x02\x02\x02\u0510\u0511\x03\x02\x02\x02\u0511\u0516" + + "\x03\x02\x02\x02\u0512\u0510\x03\x02\x02\x02\u0513\u0516\x05\xBE`\x02" + + "\u0514\u0516\x05\xC0a\x02\u0515\u050A\x03\x02\x02\x02\u0515\u0513\x03" + + "\x02\x02\x02\u0515\u0514\x03\x02\x02\x02\u0516\u052C\x03\x02\x02\x02\u0517" + + "\u0518\f\x05\x02\x02\u0518\u0519\x07\xDE\x02\x02\u0519\u051A\x07\u0114" + + "\x02\x02\u051A\u052B\x05\xB4[\x06\u051B\u051D\f\x06\x02\x02\u051C\u051E" + + "\x07\u0128\x02\x02\u051D\u051C\x03\x02\x02\x02\u051D\u051E\x03\x02\x02" + + "\x02\u051E\u0520\x03\x02\x02\x02\u051F\u0521\t\x17\x02\x02\u0520\u051F" + + "\x03\x02\x02\x02\u0520\u0521\x03\x02\x02\x02\u0521\u0523\x03\x02\x02\x02" + + "\u0522\u0524\x07\u0136\x02\x02\u0523\u0522\x03\x02\x02\x02\u0523\u0524" + + "\x03\x02\x02\x02\u0524\u0525\x03\x02\x02\x02\u0525\u0526\x07\u0114\x02" + + "\x02\u0526\u0528\x05\xB4[\x02\u0527\u0529\x05\xCCg\x02\u0528\u0527\x03" + + "\x02\x02\x02\u0528\u0529\x03\x02\x02\x02\u0529\u052B\x03\x02\x02\x02\u052A" + + "\u0517\x03\x02\x02\x02\u052A\u051B\x03\x02\x02\x02\u052B\u052E\x03\x02" + + "\x02\x02\u052C\u052A\x03\x02\x02\x02\u052C\u052D\x03\x02\x02\x02\u052D" + + "\xB5\x03\x02\x02\x02\u052E\u052C\x03\x02\x02\x02\u052F\u0531\x05\xB8]" + + "\x02\u0530\u0532\x05\u0128\x95\x02\u0531\u0530\x03\x02\x02\x02\u0531\u0532" + + "\x03\x02\x02\x02\u0532\xB7\x03\x02\x02\x02\u0533\u0535\x07\u015A\x02\x02" + + "\u0534\u0533\x03\x02\x02\x02\u0534\u0535\x03\x02\x02\x02\u0535\u0536\x03" + + "\x02\x02\x02\u0536\u0538\x05\u0142\xA2\x02\u0537\u0539\x05\xBA^\x02\u0538" + + "\u0537\x03\x02\x02\x02\u0538\u0539\x03\x02\x02\x02\u0539\u053E\x03\x02" + + "\x02\x02\u053A\u053C\x07\xBB\x02\x02\u053B\u053A\x03\x02\x02\x02\u053B" + + "\u053C\x03\x02\x02\x02\u053C\u053D\x03\x02\x02\x02\u053D\u053F\x05\u0116" + + "\x8C\x02\u053E\u053B\x03\x02\x02\x02\u053E\u053F\x03\x02\x02\x02\u053F" + + "\u055D\x03\x02\x02\x02\u0540\u0541\x07\u0117\x02\x02\u0541\u0542\x07\u015A" + + "\x02\x02\u0542\u0543\x07\u0182\x02\x02\u0543\u0544\x05\u0110\x89\x02\u0544" + + "\u0545\x07\u0182\x02\x02\u0545\u054A\x05\u0112\x8A\x02\u0546\u0547\x07" + + "\u0186\x02\x02\u0547\u0549\x05\u0112\x8A\x02\u0548\u0546\x03\x02\x02\x02" + + "\u0549\u054C\x03\x02\x02\x02\u054A\u0548\x03\x02\x02\x02\u054A\u054B\x03" + + "\x02\x02\x02\u054B\u054D\x03\x02\x02\x02\u054C\u054A\x03\x02\x02\x02\u054D" + + "\u054E\x07\u0183\x02\x02\u054E\u054F\x07\u0183\x02\x02\u054F\u055D\x03" + + "\x02\x02\x02\u0550\u0552\x07\u0117\x02\x02\u0551\u0550\x03\x02\x02\x02" + + "\u0551\u0552\x03\x02\x02\x02\u0552\u0553\x03\x02\x02\x02\u0553\u0554\x07" + + "\u0182\x02\x02\u0554\u0555\x05\xA0Q\x02\u0555\u0556\x07\u0183\x02\x02" + + "\u0556\u055D\x03\x02\x02\x02\u0557\u0558\x07\u0167\x02\x02\u0558\u0559" + + "\x07\u0182\x02\x02\u0559\u055A\x05\u0104\x83\x02\u055A\u055B\x07\u0183" + + "\x02\x02\u055B\u055D\x03\x02\x02\x02\u055C\u0534\x03\x02\x02\x02\u055C" + + "\u0540\x03\x02\x02\x02\u055C\u0551\x03\x02\x02\x02\u055C\u0557\x03\x02" + + "\x02\x02\u055D\xB9\x03\x02\x02\x02\u055E\u055F\x07\xFD\x02\x02\u055F\u0560" + + "\x07\u0158\x02\x02\u0560\u0561\x07\xBB\x02\x02\u0561\u0562\x07\u012F\x02" + + "\x02\u0562\u0563\x05\xBC_\x02\u0563\xBB\x03\x02\x02\x02\u0564\u0565\x05" + + "\u0104\x83\x02\u0565\xBD\x03\x02\x02\x02\u0566\u0567\x07\u0182\x02\x02" + + "\u0567\u0568\x05\x98M\x02\u0568\u0569\x07\u0183\x02\x02\u0569\u056A\x05" + + "\u0128\x95\x02\u056A\xBF\x03\x02\x02\x02\u056B\u056C\x07\u015A\x02\x02" + + "\u056C\u056D\x07\u0182\x02\x02\u056D\u056E\x05\xC2b\x02\u056E\u056F\x07" + + "\u0183\x02\x02\u056F\xC1\x03\x02\x02\x02\u0570\u0571\x05\xC4c\x02\u0571" + + "\u0572\x07\u0182\x02\x02\u0572\u0577\x05\xC6d\x02\u0573\u0574\x07\u0186" + + "\x02\x02\u0574\u0576\x05\xC6d\x02\u0575\u0573\x03\x02\x02\x02\u0576\u0579" + + "\x03\x02\x02\x02\u0577\u0575\x03\x02\x02\x02\u0577\u0578\x03\x02\x02\x02" + + "\u0578\u057A\x03\x02\x02\x02\u0579\u0577\x03\x02\x02\x02\u057A\u057B\x07" + + "\u0183\x02\x02\u057B\xC3\x03\x02\x02\x02\u057C\u057D\t\x18\x02\x02\u057D" + + "\xC5\x03\x02\x02\x02\u057E\u057F\x07\u015A\x02\x02\u057F\u058E\x05\xDC" + + "o\x02\u0580\u058E\x05\xCAf\x02\u0581\u058E\x05\u011A\x8E\x02\u0582\u0583" + + "\x07\x1A\x02\x02\u0583\u0584\x07\u0196\x02\x02\u0584\u0585\x07\u015A\x02" + + "\x02\u0585\u058E\x05\xDCo\x02\u0586\u0587\x07\x99\x02\x02\u0587\u0588" + + "\x07\u0196\x02\x02\u0588\u058E\x05\xCAf\x02\u0589\u058A\x05\xC8e\x02\u058A" + + "\u058B\x07\u0196\x02\x02\u058B\u058C\x05\u011A\x8E\x02\u058C\u058E\x03" + + "\x02\x02\x02\u058D\u057E\x03\x02\x02\x02\u058D\u0580\x03\x02\x02\x02\u058D" + + "\u0581\x03\x02\x02\x02\u058D\u0582\x03\x02\x02\x02\u058D\u0586\x03\x02" + + "\x02\x02\u058D\u0589\x03\x02\x02\x02\u058E\xC7\x03\x02\x02\x02\u058F\u0590" + + "\t\x19\x02\x02\u0590\xC9\x03\x02\x02\x02\u0591\u0592\x07!\x02\x02\u0592" + + "\u0593\x07\u0182\x02\x02\u0593\u0594\x05\u0144\xA3\x02\u0594\u0595\x07" + + "\u0183\x02\x02\u0595\xCB\x03\x02\x02\x02\u0596\u0597\x07\u0131\x02\x02" + + "\u0597\u05A5\x05\u0106\x84\x02\u0598\u0599\x07\u016B\x02\x02\u0599\u059A" + + "\x07\u0182\x02\x02\u059A\u059F\x05\u0144\xA3\x02\u059B\u059C\x07\u0186" + + "\x02\x02\u059C\u059E\x05\u0144\xA3\x02\u059D\u059B\x03\x02\x02\x02\u059E" + + "\u05A1\x03\x02\x02\x02\u059F\u059D\x03\x02\x02\x02\u059F\u05A0\x03\x02" + + "\x02\x02\u05A0\u05A2\x03\x02\x02\x02\u05A1\u059F\x03\x02\x02\x02\u05A2" + + "\u05A3\x07\u0183\x02\x02\u05A3\u05A5\x03\x02\x02\x02\u05A4\u0596\x03\x02" + + "\x02\x02\u05A4\u0598\x03\x02\x02\x02\u05A5\xCD\x03\x02\x02\x02\u05A6\u05A7" + + "\x07\u0171\x02\x02\u05A7\u05A8\x05\u0106\x84\x02\u05A8\xCF\x03\x02\x02" + + "\x02\u05A9\u05AA\x07\u0103\x02\x02\u05AA\u05AB\x07\xC7\x02\x02\u05AB\u05B0" + + "\x05\xD2j\x02\u05AC\u05AD\x07\u0186\x02\x02\u05AD\u05AF\x05\xD2j\x02\u05AE" + + "\u05AC\x03\x02\x02\x02\u05AF\u05B2\x03\x02\x02\x02\u05B0\u05AE\x03\x02" + + "\x02\x02\u05B0\u05B1\x03\x02\x02\x02\u05B1\xD1\x03\x02\x02\x02\u05B2\u05B0" + + "\x03\x02\x02\x02\u05B3\u05DB\x05\u0104\x83\x02\u05B4\u05DB\x05\xD8m\x02" + + "\u05B5\u05B6\x07\u0182\x02\x02\u05B6\u05DB\x07\u0183\x02\x02\u05B7\u05B8" + + "\x07\u0182\x02\x02\u05B8\u05BD\x05\u0104\x83\x02\u05B9\u05BA\x07\u0186" + + "\x02\x02\u05BA\u05BC\x05\u0104\x83\x02\u05BB\u05B9\x03\x02\x02\x02\u05BC" + + "\u05BF\x03\x02\x02\x02\u05BD\u05BB\x03\x02\x02\x02\u05BD\u05BE\x03\x02" + + "\x02\x02\u05BE\u05C0\x03\x02\x02\x02\u05BF\u05BD\x03\x02\x02\x02\u05C0" + + "\u05C1\x07\u0183\x02\x02\u05C1\u05DB\x03\x02\x02\x02\u05C2\u05C3\x05\xD6" + + "l\x02\u05C3\u05C4\x07\u0182\x02\x02\u05C4\u05C9\x05\u0104\x83\x02\u05C5" + + "\u05C6\x07\u0186\x02\x02\u05C6\u05C8\x05\u0104\x83\x02\u05C7\u05C5\x03" + + "\x02\x02\x02\u05C8\u05CB\x03\x02\x02\x02\u05C9\u05C7\x03\x02\x02\x02\u05C9" + + "\u05CA\x03\x02\x02\x02\u05CA\u05CC\x03\x02\x02\x02\u05CB\u05C9\x03\x02" + + "\x02\x02\u05CC\u05CD\x07\u0183\x02\x02\u05CD\u05DB\x03\x02\x02\x02\u05CE" + + "\u05CF\x05\xD4k\x02\u05CF\u05D0\x07\u0182\x02\x02\u05D0\u05D5\x05\xD2" + + "j\x02\u05D1\u05D2\x07\u0186\x02\x02\u05D2\u05D4\x05\xD2j\x02\u05D3\u05D1" + + "\x03\x02\x02\x02\u05D4\u05D7\x03\x02\x02\x02\u05D5\u05D3\x03\x02\x02\x02" + + "\u05D5\u05D6\x03\x02\x02\x02\u05D6\u05D8\x03\x02\x02\x02\u05D7\u05D5\x03" + + "\x02\x02\x02\u05D8\u05D9\x07\u0183\x02\x02\u05D9\u05DB\x03\x02\x02\x02" + + "\u05DA\u05B3\x03\x02\x02\x02\u05DA\u05B4\x03\x02\x02\x02\u05DA\u05B5\x03" + + "\x02\x02\x02\u05DA\u05B7\x03\x02\x02\x02\u05DA\u05C2\x03\x02\x02\x02\u05DA" + + "\u05CE\x03\x02\x02\x02\u05DB\xD3\x03\x02\x02\x02\u05DC\u05DD\x07\u0104" + + "\x02\x02\u05DD\u05DE\x07\x8B\x02\x02\u05DE\xD5\x03\x02\x02\x02\u05DF\u05E0" + + "\t\x1A\x02\x02\u05E0\xD7\x03\x02\x02\x02\u05E1\u05E2\x05\xDAn\x02\u05E2" + + "\u05E3\x07\u0182\x02\x02\u05E3\u05E4\x05\xDCo\x02\u05E4\u05E5\x07\u0186" + + "\x02\x02\u05E5\u05E6\x05\u011A\x8E\x02\u05E6\u05E7\x07\u0183\x02\x02\u05E7" + + "\xD9\x03\x02\x02\x02\u05E8\u05E9\t\x1B\x02\x02\u05E9\xDB\x03\x02\x02\x02" + + "\u05EA\u05EB\x05\u0144\xA3\x02\u05EB\xDD\x03\x02\x02\x02\u05EC\u05ED\x07" + + "\u0106\x02\x02\u05ED\u05EE\x05\u0106\x84\x02\u05EE\xDF\x03\x02\x02\x02" + + "\u05EF\u05F0\x07\u0172\x02\x02\u05F0\u05F5\x05\xE2r\x02\u05F1\u05F2\x07" + + "\u0186\x02\x02\u05F2\u05F4\x05\xE2r\x02\u05F3\u05F1\x03\x02\x02\x02\u05F4" + + "\u05F7\x03\x02\x02\x02\u05F5\u05F3\x03\x02\x02\x02\u05F5\u05F6\x03\x02"; private static readonly _serializedATNSegment3: string = - "\x03\x02\x02\x02\u0604\u0605\x07\u0134\x02\x02\u0605\u0606\x07\xC7\x02" + - "\x02\u0606\u060B\x05\xEEx\x02\u0607\u0608\x07\u0186\x02\x02\u0608\u060A" + - "\x05\xEEx\x02\u0609\u0607\x03\x02\x02\x02\u060A\u060D\x03\x02\x02\x02" + - "\u060B\u0609\x03\x02\x02\x02\u060B\u060C\x03\x02\x02\x02\u060C\xED\x03" + - "\x02\x02\x02\u060D\u060B\x03\x02\x02\x02\u060E\u0610\x05\u0108\x85\x02" + - "\u060F\u0611\t\x1C\x02\x02\u0610\u060F\x03\x02\x02\x02\u0610\u0611\x03" + - "\x02\x02\x02\u0611\u0614\x03\x02\x02\x02\u0612\u0613\x07Y\x02\x02\u0613" + - "\u0615\t\x1D\x02\x02\u0614\u0612\x03\x02\x02\x02\u0614\u0615\x03\x02\x02" + - "\x02\u0615\xEF\x03\x02\x02\x02\u0616\u0619\x07\u011B\x02\x02\u0617\u061A" + - "\x07\xB4\x02\x02\u0618\u061A\x05\u0108\x85\x02\u0619\u0617\x03\x02\x02" + - "\x02\u0619\u0618\x03\x02\x02\x02\u061A\xF1\x03\x02\x02\x02\u061B\u061C" + - "\x07\u0139\x02\x02\u061C\u061D\x07\xC7\x02\x02\u061D\u0622\x05\u0108\x85" + - "\x02\u061E\u061F\x07\u0186\x02\x02\u061F\u0621\x05\u0108\x85\x02\u0620" + - "\u061E\x03\x02\x02\x02\u0621\u0624\x03\x02\x02\x02\u0622\u0620\x03\x02" + - "\x02\x02\u0622\u0623\x03\x02\x02\x02\u0623\xF3\x03\x02\x02\x02\u0624\u0622" + - "\x03\x02\x02\x02\u0625\u0636\x07\u018D\x02\x02\u0626\u0636\x07\u0190\x02" + - "\x02\u0627\u0636\x07\u0195\x02\x02\u0628\u0629\x07\u0184\x02\x02\u0629" + - "\u062A\x07\u0198\x02\x02\u062A\u062B\x07\u0186\x02\x02\u062B\u062C\x07" + - "\u0198\x02\x02\u062C\u0636\x07\u0185\x02\x02\u062D\u062E\x07\u0184\x02" + - "\x02\u062E\u062F\x07\u0198\x02\x02\u062F\u0630\x07\u0186\x02\x02\u0630" + - "\u0636\x07\u0185\x02\x02\u0631\u0632\x07\u0184\x02\x02\u0632\u0633\x07" + - "\u0186\x02\x02\u0633\u0634\x07\u0198\x02\x02\u0634\u0636\x07\u0185\x02" + - "\x02\u0635\u0625\x03\x02\x02\x02\u0635\u0626\x03\x02\x02\x02\u0635\u0627" + - "\x03\x02\x02\x02\u0635\u0628\x03\x02\x02\x02\u0635\u062D\x03\x02\x02\x02" + - "\u0635\u0631\x03\x02\x02\x02\u0636\xF5\x03\x02\x02\x02\u0637\u0638\x07" + - "\u011F\x02\x02\u0638\u063D\x05\xB0Y\x02\u0639\u063A\x07\u0186\x02\x02" + - "\u063A\u063C\x05\xB0Y\x02\u063B\u0639\x03\x02\x02\x02\u063C\u063F\x03" + - "\x02\x02\x02\u063D\u063B\x03\x02\x02\x02\u063D\u063E\x03\x02\x02\x02\u063E" + - "\xF7\x03\x02\x02\x02\u063F\u063D\x03\x02\x02\x02\u0640\u0641\x07\u013A" + - "\x02\x02\u0641\u0643\x07\u0182\x02\x02\u0642\u0644\x05\xFA~\x02\u0643" + - "\u0642\x03\x02\x02\x02\u0644\u0645\x03\x02\x02\x02\u0645\u0643\x03\x02" + - "\x02\x02\u0645\u0646\x03\x02\x02\x02\u0646\u0647\x03\x02\x02\x02\u0647" + - "\u0649\x07\u0183\x02\x02\u0648\u064A\x05\u0106\x84\x02\u0649\u0648\x03" + - "\x02\x02\x02\u0649\u064A\x03\x02\x02\x02\u064A\xF9\x03\x02\x02\x02\u064B" + - "\u064D\x05\u0138\x9D\x02\u064C\u064E\x05\xF4{\x02\u064D\u064C\x03\x02" + - "\x02\x02\u064D\u064E\x03\x02\x02\x02\u064E\xFB\x03\x02\x02\x02\u064F\u0650" + - "\x07\xB4\x02\x02\u0650\u0651\x07\u014A\x02\x02\u0651\u0652\x07\u013B\x02" + - "\x02\u0652\u0658\x07\u011D\x02\x02\u0653\u0654\x07\u0132\x02\x02\u0654" + - "\u0655\x07\u0149\x02\x02\u0655\u0656\x07\u013B\x02\x02\u0656\u0658\x07" + - "\u011D\x02\x02\u0657\u064F\x03\x02\x02\x02\u0657\u0653\x03\x02\x02\x02" + - "\u0658\xFD\x03\x02\x02\x02\u0659\u065A\x07\b\x02\x02\u065A\u065B\x07\u011D" + - "\x02\x02\u065B\u065C\x07\u0150\x02\x02\u065C\u065D\x07d\x02\x02\u065D" + - "\u065E\x07K\x02\x02\u065E\u0672\x07\u0149\x02\x02\u065F\u0660\x07\b\x02" + - "\x02\u0660\u0661\x07\u011D\x02\x02\u0661\u0662\x07\u0150\x02\x02\u0662" + - "\u0663\x07\u0160\x02\x02\u0663\u0664\x07\u0129\x02\x02\u0664\u0672\x07" + - "\u0149\x02\x02\u0665\u0666\x07\b\x02\x02\u0666\u0667\x07\u011D\x02\x02" + - "\u0667\u0668\x07\u0150\x02\x02\u0668\u0669\x07\u0160\x02\x02\u0669\u066A" + - "\x07K\x02\x02\u066A\u0672\x05\u0138\x9D\x02\u066B\u066C\x07\b\x02\x02" + - "\u066C\u066D\x07\u011D\x02\x02\u066D\u066E\x07\u0150\x02\x02\u066E\u066F" + - "\x07\u0160\x02\x02\u066F\u0670\x07/\x02\x02\u0670\u0672\x05\u0138\x9D" + - "\x02\u0671\u0659\x03\x02\x02\x02\u0671\u065F\x03\x02\x02\x02\u0671\u0665" + - "\x03\x02\x02\x02\u0671\u066B\x03\x02\x02\x02\u0672\xFF\x03\x02\x02\x02" + - "\u0673\u0674\x07\xEA\x02\x02\u0674\u0679\x05\xB0Y\x02\u0675\u0676\x07" + - "\u0186\x02\x02\u0676\u0678\x05\xB0Y\x02\u0677\u0675\x03\x02\x02\x02\u0678" + - "\u067B\x03\x02\x02\x02\u0679\u0677\x03\x02\x02\x02\u0679\u067A\x03\x02" + - "\x02\x02\u067A\u0101\x03\x02\x02\x02\u067B\u0679\x03\x02\x02\x02\u067C" + - "\u067D\x07\u0141\x02\x02\u067D\u067E\x07\xC0\x02\x02\u067E\u067F\x05\u011E" + - "\x90\x02\u067F\u0680\x05\u0104\x83\x02\u0680\u0686\x03\x02\x02\x02\u0681" + - "\u0682\x07\u014A\x02\x02\u0682\u0683\x07\xC0\x02\x02\u0683\u0684\x07\u0198" + - "\x02\x02\u0684\u0686\x05\u0104\x83\x02\u0685\u067C\x03\x02\x02\x02\u0685" + - "\u0681\x03\x02\x02\x02\u0686\u0103\x03\x02\x02\x02\u0687\u0688\x07h\x02" + - "\x02\u0688\u0689\x07\xB7\x02\x02\u0689\u068A\x07\xE0\x02\x02\u068A\u068B" + - "\x07\u0149\x02\x02\u068B\u0105\x03\x02\x02\x02\u068C\u068D\x07\u0174\x02" + - "\x02\u068D\u068E\x05\u011E\x90\x02\u068E\u0107\x03\x02\x02\x02\u068F\u0690" + - "\x05\u010A\x86\x02\u0690\u0109\x03\x02\x02\x02\u0691\u0692\b\x86\x01\x02" + - "\u0692\u0693\x07\u012C\x02\x02\u0693\u069E\x05\u010A\x86\b\u0694\u0695" + - "\x07\xF7\x02\x02\u0695\u0696\x07\u0182\x02\x02\u0696\u0697\x05\xA2R\x02" + - "\u0697\u0698\x07\u0183\x02\x02\u0698\u069E\x03\x02\x02\x02\u0699\u069B" + - "\x05\u0110\x89\x02\u069A\u069C\x05\u010C\x87\x02\u069B\u069A\x03\x02\x02" + - "\x02\u069B\u069C\x03\x02\x02\x02\u069C\u069E\x03\x02\x02\x02\u069D\u0691" + - "\x03\x02\x02\x02\u069D\u0694\x03\x02\x02\x02\u069D\u0699\x03\x02\x02\x02" + - "\u069E\u06AD\x03\x02\x02\x02\u069F\u06A0\f\x05\x02\x02\u06A0\u06A1\x07" + - "\xB7\x02\x02\u06A1\u06AC\x05\u010A\x86\x06\u06A2\u06A3\f\x04\x02\x02\u06A3" + - "\u06A4\x07\u0133\x02\x02\u06A4\u06AC\x05\u010A\x86\x05\u06A5\u06A6\f\x03" + - "\x02\x02\u06A6\u06A8\x07\u0113\x02\x02\u06A7\u06A9\x07\u012C\x02\x02\u06A8" + - "\u06A7\x03\x02\x02\x02\u06A8\u06A9\x03\x02\x02\x02\u06A9\u06AA\x03\x02" + - "\x02\x02\u06AA\u06AC\t\x1E\x02\x02\u06AB\u069F\x03\x02\x02\x02\u06AB\u06A2" + - "\x03\x02\x02\x02\u06AB\u06A5\x03\x02\x02\x02\u06AC\u06AF\x03\x02\x02\x02" + - "\u06AD\u06AB\x03\x02\x02\x02\u06AD\u06AE\x03\x02\x02\x02\u06AE\u010B\x03" + - "\x02\x02\x02\u06AF\u06AD\x03\x02\x02\x02\u06B0\u06B2\x07\u012C\x02\x02" + - "\u06B1\u06B0\x03\x02\x02\x02\u06B1\u06B2\x03\x02\x02\x02\u06B2\u06B3\x03" + - "\x02\x02\x02\u06B3\u06B5\x07\xC0\x02\x02\u06B4\u06B6\t\x1F\x02\x02\u06B5" + - "\u06B4\x03\x02\x02\x02\u06B5\u06B6\x03\x02\x02\x02\u06B6\u06B7\x03\x02" + - "\x02\x02\u06B7\u06B8\x05\u0110\x89\x02\u06B8\u06B9\x07\xB7\x02\x02\u06B9" + - "\u06BA\x05\u0110\x89\x02\u06BA\u06F4\x03\x02\x02\x02\u06BB\u06BD\x07\u012C" + - "\x02\x02\u06BC\u06BB\x03\x02\x02\x02\u06BC\u06BD\x03\x02\x02\x02\u06BD" + - "\u06BE\x03\x02\x02\x02\u06BE\u06BF\x07\u0109\x02\x02\u06BF\u06C0\x07\u0182" + - "\x02\x02\u06C0\u06C5\x05\u0108\x85\x02\u06C1\u06C2\x07\u0186\x02\x02\u06C2" + - "\u06C4\x05\u0108\x85\x02\u06C3\u06C1\x03\x02\x02\x02\u06C4\u06C7\x03\x02" + - "\x02\x02\u06C5\u06C3\x03\x02\x02\x02\u06C5\u06C6\x03\x02\x02\x02\u06C6" + - "\u06C8\x03\x02\x02\x02\u06C7\u06C5\x03\x02\x02\x02\u06C8\u06C9\x07\u0183" + - "\x02\x02\u06C9\u06F4\x03\x02\x02\x02\u06CA\u06CC\x07\u012C\x02\x02\u06CB" + - "\u06CA\x03\x02\x02\x02\u06CB\u06CC\x03\x02\x02\x02\u06CC\u06CD\x03\x02" + - "\x02\x02\u06CD\u06CE\x07\u0109\x02\x02\u06CE\u06CF\x07\u0182\x02\x02\u06CF" + - "\u06D0\x05\xA2R\x02\u06D0\u06D1\x07\u0183\x02\x02\u06D1\u06F4\x03\x02" + - "\x02\x02\u06D2\u06D3\x07\xF7\x02\x02\u06D3\u06D4\x07\u0182\x02\x02\u06D4" + - "\u06D5\x05\xA2R\x02\u06D5\u06D6\x07\u0183\x02\x02\u06D6\u06F4\x03\x02" + - "\x02\x02\u06D7\u06D9\x07\u012C\x02\x02\u06D8\u06D7\x03\x02\x02\x02\u06D8" + - "\u06D9\x03\x02\x02\x02\u06D9\u06DA\x03\x02\x02\x02\u06DA\u06DB\x07\u0146" + - "\x02\x02\u06DB\u06F4\x05\u0110\x89\x02\u06DC\u06F4\x05\u010E\x88\x02\u06DD" + - "\u06DF\x07\u0113\x02\x02\u06DE\u06E0\x07\u012C\x02\x02\u06DF\u06DE\x03" + - "\x02\x02\x02\u06DF\u06E0\x03\x02\x02\x02\u06E0\u06E1\x03\x02\x02\x02\u06E1" + - "\u06F4\t\x1E\x02\x02\u06E2\u06E4\x07\u0113\x02\x02\u06E3\u06E5\x07\u012C" + - "\x02\x02\u06E4\u06E3\x03\x02\x02\x02\u06E4\u06E5\x03\x02\x02\x02\u06E5" + - "\u06E6\x03\x02\x02\x02\u06E6\u06E7\x07\xED\x02\x02\u06E7\u06E8\x07\xFE" + - "\x02\x02\u06E8\u06F4\x05\u0110\x89\x02\u06E9\u06EB\x07\u012C\x02\x02\u06EA" + - "\u06E9\x03\x02\x02\x02\u06EA\u06EB\x03\x02\x02\x02\u06EB\u06EC\x03\x02" + - "\x02\x02\u06EC\u06ED\x07\u014F\x02\x02\u06ED\u06EE\x07\u0160\x02\x02\u06EE" + - "\u06F1\x05\u0110\x89\x02\u06EF\u06F0\x07\xF4\x02\x02\u06F0\u06F2\x05\u015C" + - "\xAF\x02\u06F1\u06EF\x03\x02\x02\x02\u06F1\u06F2\x03\x02\x02\x02\u06F2" + - "\u06F4\x03\x02\x02\x02\u06F3\u06B1\x03\x02\x02\x02\u06F3\u06BC\x03\x02" + - "\x02\x02\u06F3\u06CB\x03\x02\x02\x02\u06F3\u06D2\x03\x02\x02\x02\u06F3" + - "\u06D8\x03\x02\x02\x02\u06F3\u06DC\x03\x02\x02\x02\u06F3\u06DD\x03\x02" + - "\x02\x02\u06F3\u06E2\x03\x02\x02\x02\u06F3\u06EA\x03\x02\x02\x02\u06F4" + - "\u010D\x03\x02\x02\x02\u06F5\u06F7\x07\u012C\x02\x02\u06F6\u06F5\x03\x02" + - "\x02\x02\u06F6\u06F7\x03\x02\x02\x02\u06F7\u06F8\x03\x02\x02\x02\u06F8" + - "\u06F9\x07\u011A\x02\x02\u06F9\u0707\t \x02\x02\u06FA\u06FB\x07\u0182" + - "\x02\x02\u06FB\u0708\x07\u0183\x02\x02\u06FC\u06FD\x07\u0182\x02\x02\u06FD" + - "\u0702\x05\u0108\x85\x02\u06FE\u06FF\x07\u0186\x02\x02\u06FF\u0701\x05" + - "\u0108\x85\x02\u0700\u06FE\x03\x02\x02\x02\u0701\u0704\x03\x02\x02\x02" + - "\u0702\u0700\x03\x02\x02\x02\u0702\u0703\x03\x02\x02\x02\u0703\u0705\x03" + - "\x02\x02\x02\u0704\u0702\x03\x02\x02\x02\u0705\u0706\x07\u0183\x02\x02" + - "\u0706\u0708\x03\x02\x02\x02\u0707\u06FA\x03\x02\x02\x02\u0707\u06FC\x03" + - "\x02\x02\x02\u0708\u0713\x03\x02\x02\x02\u0709\u070B\x07\u012C\x02\x02" + - "\u070A\u0709\x03\x02\x02\x02\u070A\u070B\x03\x02\x02\x02\u070B\u070C\x03" + - "\x02\x02\x02\u070C\u070D\x07\u011A\x02\x02\u070D\u0710\x05\u0110\x89\x02" + - "\u070E\u070F\x07\xF4\x02\x02\u070F\u0711\x05\u015C\xAF\x02\u0710\u070E" + - "\x03\x02\x02\x02\u0710\u0711\x03\x02\x02\x02\u0711\u0713\x03\x02\x02\x02" + - "\u0712\u06F6\x03\x02\x02\x02\u0712\u070A\x03\x02\x02\x02\u0713\u010F\x03" + - "\x02\x02\x02\u0714\u0715\b\x89\x01\x02\u0715\u0719\x05\u0112\x8A\x02\u0716" + - "\u0717\t!\x02\x02\u0717\u0719\x05\u0110\x89\n\u0718\u0714\x03\x02\x02" + - "\x02\u0718\u0716\x03\x02\x02\x02\u0719\u0731\x03\x02\x02\x02\u071A\u071B" + - "\f\t\x02\x02\u071B\u071C\t\"\x02\x02\u071C\u0730\x05\u0110\x89\n\u071D" + - "\u071E\f\b\x02\x02\u071E\u071F\t#\x02\x02\u071F\u0730\x05\u0110\x89\t" + - "\u0720\u0721\f\x07\x02\x02\u0721\u0722\x07\u017D\x02\x02\u0722\u0730\x05" + - "\u0110\x89\b\u0723\u0724\f\x06\x02\x02\u0724\u0725\x07\u017E\x02\x02\u0725" + - "\u0730\x05\u0110\x89\x07\u0726\u0727\f\x05\x02\x02\u0727\u0728\x07\u017C" + - "\x02\x02\u0728\u0730\x05\u0110\x89\x06\u0729\u072A\f\x04\x02\x02\u072A" + - "\u072B\x05\u0150\xA9\x02\u072B\u072C\x05\u0110\x89\x05\u072C\u0730\x03" + - "\x02\x02\x02\u072D\u072E\f\x03\x02\x02\u072E\u0730\x07\u019C\x02\x02\u072F" + - "\u071A\x03\x02\x02\x02\u072F\u071D\x03\x02\x02\x02\u072F\u0720\x03\x02" + - "\x02\x02\u072F\u0723\x03\x02\x02\x02\u072F\u0726\x03\x02\x02\x02\u072F" + - "\u0729\x03\x02\x02\x02\u072F\u072D\x03\x02\x02\x02\u0730\u0733\x03\x02" + - "\x02\x02\u0731\u072F\x03\x02\x02\x02\u0731\u0732\x03\x02\x02\x02\u0732" + - "\u0111\x03\x02\x02\x02\u0733\u0731\x03\x02\x02\x02\u0734\u0735\b\x8A\x01" + - "\x02\u0735\u0737\x07\xCB\x02\x02\u0736\u0738\x05\u013C\x9F\x02\u0737\u0736" + - "\x03\x02\x02\x02\u0738\u0739\x03\x02\x02\x02\u0739\u0737\x03\x02\x02\x02" + - "\u0739\u073A\x03\x02\x02\x02\u073A\u073D\x03\x02\x02\x02\u073B\u073C\x07" + - "\xF1\x02\x02\u073C\u073E\x05\u0108\x85\x02\u073D\u073B\x03\x02\x02\x02" + - "\u073D\u073E\x03\x02\x02\x02\u073E\u073F\x03\x02\x02\x02\u073F\u0740\x07" + - "\xF2\x02\x02\u0740\u0790\x03\x02\x02\x02\u0741\u0742\x07\xCB\x02\x02\u0742" + - "\u0744\x05\u0108\x85\x02\u0743\u0745\x05\u013C\x9F\x02\u0744\u0743\x03" + - "\x02\x02\x02\u0745\u0746\x03\x02\x02\x02\u0746\u0744\x03\x02\x02\x02\u0746" + - "\u0747\x03\x02\x02\x02\u0747\u074A\x03\x02\x02\x02\u0748\u0749\x07\xF1" + - "\x02\x02\u0749\u074B\x05\u0108\x85\x02\u074A\u0748\x03\x02\x02\x02\u074A" + - "\u074B\x03\x02\x02\x02\u074B\u074C\x03\x02\x02\x02\u074C\u074D\x07\xF2" + - "\x02\x02\u074D\u0790\x03\x02\x02\x02\u074E\u074F\x07\xCC\x02\x02\u074F" + - "\u0750\x07\u0182\x02\x02\u0750\u0751\x05\u0108\x85\x02\u0751\u0752\x07" + - "\xBB\x02\x02\u0752\u0753\x05:\x1E\x02\u0753\u0754\x07\u0183\x02\x02\u0754" + - "\u0790\x03\x02\x02\x02\u0755\u0756\x07/\x02\x02\u0756\u0757\x07\u0182" + - "\x02\x02\u0757\u075A\x05\u0108\x85\x02\u0758\u0759\x07>\x02\x02\u0759" + - "\u075B\x07Y\x02\x02\u075A\u0758\x03\x02\x02\x02\u075A\u075B\x03\x02\x02" + - "\x02\u075B\u075C\x03\x02\x02\x02\u075C\u075D\x07\u0183\x02\x02\u075D\u0790" + - "\x03\x02\x02\x02\u075E\u075F\x07K\x02\x02\u075F\u0760\x07\u0182\x02\x02" + - "\u0760\u0763\x05\u0108\x85\x02\u0761\u0762\x07>\x02\x02\u0762\u0764\x07" + - "Y\x02\x02\u0763\u0761\x03\x02\x02\x02\u0763\u0764\x03\x02\x02\x02\u0764" + - "\u0765\x03\x02\x02\x02\u0765\u0766\x07\u0183\x02\x02\u0766\u0790\x03\x02" + - "\x02\x02\u0767\u0768\x07\u013E\x02\x02\u0768\u0769\x07\u0182\x02\x02\u0769" + - "\u076A\x05\u0110\x89\x02\u076A\u076B\x07\u0109\x02\x02\u076B\u076C\x05" + - "\u0110\x89\x02\u076C\u076D\x07\u0183\x02\x02\u076D\u0790\x03\x02\x02\x02" + - "\u076E\u0790\x05\u0158\xAD\x02\u076F\u0790\x07\u018D\x02\x02\u0770\u0771" + - "\x05\u013E\xA0\x02\u0771\u0772\x07\u017F\x02\x02\u0772\u0773\x07\u018D" + - "\x02\x02\u0773\u0790\x03\x02\x02\x02\u0774\u0775\x07\u0182\x02\x02\u0775" + - "\u0776\x05\xA2R\x02\u0776\u0777\x07\u0183\x02\x02\u0777\u0790\x03\x02" + - "\x02\x02\u0778\u0779\x05\u0114\x8B\x02\u0779\u0785\x07\u0182\x02\x02\u077A" + - "\u077C\x05\u0162\xB2\x02\u077B\u077A\x03\x02\x02\x02\u077B\u077C\x03\x02" + - "\x02\x02\u077C\u077D\x03\x02\x02\x02\u077D\u0782\x05\u0116\x8C\x02\u077E" + - "\u077F\x07\u0186\x02\x02\u077F\u0781\x05\u0116\x8C\x02\u0780\u077E\x03" + - "\x02\x02\x02\u0781\u0784\x03\x02\x02\x02\u0782\u0780\x03\x02\x02\x02\u0782" + - "\u0783\x03\x02\x02\x02\u0783\u0786\x03\x02\x02\x02\u0784\u0782\x03\x02" + - "\x02\x02\u0785\u077B\x03\x02\x02\x02\u0785\u0786\x03\x02\x02\x02\u0786" + - "\u0787\x03\x02\x02\x02\u0787\u0788\x07\u0183\x02\x02\u0788\u0790\x03\x02" + - "\x02\x02\u0789\u0790\x05\u0136\x9C\x02\u078A\u0790\x05\u0118\x8D\x02\u078B" + - "\u078C\x07\u0182\x02\x02\u078C\u078D\x05\u0108\x85\x02\u078D\u078E\x07" + - "\u0183\x02\x02\u078E\u0790\x03\x02\x02\x02\u078F\u0734\x03\x02\x02\x02" + - "\u078F\u0741\x03\x02\x02\x02\u078F\u074E\x03\x02\x02\x02\u078F\u0755\x03" + - "\x02\x02\x02\u078F\u075E\x03\x02\x02\x02\u078F\u0767\x03\x02\x02\x02\u078F" + - "\u076E\x03\x02\x02\x02\u078F\u076F\x03\x02\x02\x02\u078F\u0770\x03\x02" + - "\x02\x02\u078F\u0774\x03\x02\x02\x02\u078F\u0778\x03\x02\x02\x02\u078F" + - "\u0789\x03\x02\x02\x02\u078F\u078A\x03\x02\x02\x02\u078F\u078B\x03\x02" + - "\x02\x02\u0790\u0798\x03\x02\x02\x02\u0791\u0792\f\x06\x02\x02\u0792\u0793" + - "\x07\u0180\x02\x02\u0793\u0794\x05\u0110\x89\x02\u0794\u0795\x07\u0181" + - "\x02\x02\u0795\u0797\x03\x02\x02\x02\u0796\u0791\x03\x02\x02\x02\u0797" + - "\u079A\x03\x02\x02\x02\u0798\u0796\x03\x02\x02\x02\u0798\u0799\x03\x02" + - "\x02\x02\u0799\u0113\x03\x02\x02\x02\u079A\u0798\x03\x02\x02\x02\u079B" + - "\u079F\x05\u016A\xB6\x02\u079C\u079F\x05\u016E\xB8\x02\u079D\u079F\x05" + - "\u013E\xA0\x02\u079E\u079B\x03\x02\x02\x02\u079E\u079C\x03\x02\x02\x02" + - "\u079E\u079D\x03\x02\x02\x02\u079F\u0115\x03\x02\x02\x02\u07A0\u07A5\x05" + - "\u0168\xB5\x02\u07A1\u07A5\x05\u0166\xB4\x02\u07A2\u07A5\x05\u0164\xB3" + - "\x02\u07A3\u07A5\x05\u0108\x85\x02\u07A4\u07A0\x03\x02\x02\x02\u07A4\u07A1" + - "\x03\x02\x02\x02\u07A4\u07A2\x03\x02\x02\x02\u07A4\u07A3\x03\x02\x02\x02" + - "\u07A5\u0117\x03\x02\x02\x02\u07A6\u07A7\x05\u013E\xA0\x02\u07A7\u0119" + - "\x03\x02\x02\x02\u07A8\u07A9\x05\u0136\x9C\x02\u07A9\u011B\x03\x02\x02" + - "\x02\u07AA\u07AD\x05\u0136\x9C\x02\u07AB\u07AD\x05\u0118\x8D\x02\u07AC" + - "\u07AA\x03\x02\x02\x02\u07AC\u07AB\x03\x02\x02\x02\u07AD\u011D\x03\x02" + - "\x02\x02\u07AE\u07B1\x07\u0111\x02\x02\u07AF\u07B2\x05\u0120\x91\x02\u07B0" + - "\u07B2\x05\u0124\x93\x02\u07B1\u07AF\x03\x02\x02\x02\u07B1\u07B0\x03\x02" + - "\x02\x02\u07B1\u07B2\x03\x02\x02\x02\u07B2\u011F\x03\x02\x02\x02\u07B3" + - "\u07B5\x05\u0122\x92\x02\u07B4\u07B6\x05\u0126\x94\x02\u07B5\u07B4\x03" + - "\x02\x02\x02\u07B5\u07B6\x03\x02\x02\x02\u07B6\u0121\x03\x02\x02\x02\u07B7" + - "\u07B8\x05\u0128\x95\x02\u07B8\u07B9\x05\u0166\xB4\x02\u07B9\u07BB\x03" + - "\x02\x02\x02\u07BA\u07B7\x03\x02\x02\x02\u07BB\u07BC\x03\x02\x02\x02\u07BC" + - "\u07BA\x03\x02\x02\x02\u07BC\u07BD\x03\x02\x02\x02\u07BD\u0123\x03\x02" + - "\x02\x02\u07BE\u07C1\x05\u0126\x94\x02\u07BF\u07C2\x05\u0122\x92\x02\u07C0" + - "\u07C2\x05\u0126\x94\x02\u07C1\u07BF\x03\x02\x02\x02\u07C1\u07C0\x03\x02" + - "\x02\x02\u07C1\u07C2\x03\x02\x02\x02\u07C2\u0125\x03\x02\x02\x02\u07C3" + - "\u07C4\x05\u0128\x95\x02\u07C4\u07C5\x05\u0166\xB4\x02\u07C5\u07C6\x07" + - "\u0160\x02\x02\u07C6\u07C7\x05\u0166\xB4\x02\u07C7\u0127\x03\x02\x02\x02" + - "\u07C8\u07CA\t$\x02\x02\u07C9\u07C8\x03\x02\x02\x02\u07C9\u07CA\x03\x02" + - "\x02\x02\u07CA\u07CB\x03\x02\x02\x02\u07CB\u07CE\t%\x02\x02\u07CC\u07CE" + - "\x07\u0197\x02\x02\u07CD\u07C9\x03\x02\x02\x02\u07CD\u07CC\x03\x02\x02" + - "\x02\u07CE\u0129\x03\x02\x02\x02\u07CF\u07D1\x07\xBB\x02\x02\u07D0\u07CF" + - "\x03\x02\x02\x02\u07D0\u07D1\x03\x02\x02\x02\u07D1\u07D2\x03\x02\x02\x02" + - "\u07D2\u07D4\x05\u0136\x9C\x02\u07D3\u07D5\x05\u0132\x9A\x02\u07D4\u07D3" + - "\x03\x02\x02\x02\u07D4\u07D5\x03\x02\x02\x02\u07D5\u012B\x03\x02\x02\x02" + - "\u07D6\u07D8\x07\xBB\x02\x02\u07D7\u07D6\x03\x02\x02\x02\u07D7\u07D8\x03" + - "\x02\x02\x02\u07D8\u07D9\x03\x02\x02\x02\u07D9\u07DB\x05\u0136\x9C\x02" + - "\u07DA\u07DC\x05\u0132\x9A\x02\u07DB\u07DA\x03\x02\x02\x02\u07DB\u07DC" + - "\x03\x02\x02\x02\u07DC\u012D\x03\x02\x02\x02\u07DD\u07DE\x05\u0136\x9C" + - "\x02\u07DE\u07DF\x05\u0130\x99\x02\u07DF\u012F\x03\x02\x02\x02\u07E0\u07E1" + - "\x07\u0122\x02\x02\u07E1\u07E3\x05\u0136\x9C\x02\u07E2\u07E0\x03\x02\x02" + - "\x02\u07E3\u07E4\x03\x02\x02\x02\u07E4\u07E2\x03\x02\x02\x02\u07E4\u07E5" + - "\x03\x02\x02\x02\u07E5\u07E8\x03\x02\x02\x02\u07E6\u07E8\x03\x02\x02\x02" + - "\u07E7\u07E2\x03\x02\x02\x02\u07E7\u07E6\x03\x02\x02\x02\u07E8\u0131\x03" + - "\x02\x02\x02\u07E9\u07EA\x07\u0182\x02\x02\u07EA\u07EB\x05\u0134\x9B\x02" + - "\u07EB\u07EC\x07\u0183\x02\x02\u07EC\u0133\x03\x02\x02\x02\u07ED\u07F2" + - "\x05\u0136\x9C\x02\u07EE\u07EF\x07\u0186\x02\x02\u07EF\u07F1\x05\u0136" + - "\x9C\x02\u07F0\u07EE\x03\x02\x02\x02\u07F1\u07F4\x03\x02\x02\x02\u07F2" + - "\u07F0\x03\x02\x02\x02\u07F2\u07F3\x03\x02\x02\x02\u07F3\u0135\x03\x02" + - "\x02\x02\u07F4\u07F2\x03\x02\x02\x02\u07F5\u07F9\x05\u0138\x9D\x02\u07F6" + - "\u07F9\x05\u013A\x9E\x02\u07F7\u07F9\x05\u016E\xB8\x02\u07F8\u07F5\x03" + - "\x02\x02\x02\u07F8\u07F6\x03\x02\x02\x02\u07F8\u07F7\x03\x02\x02\x02\u07F9" + - "\u0137\x03\x02\x02\x02\u07FA\u07FB\t&\x02\x02\u07FB\u0139\x03\x02\x02" + - "\x02\u07FC\u07FD\x07\u0197\x02\x02\u07FD\u013B\x03\x02\x02\x02\u07FE\u07FF" + - "\x07\u0170\x02\x02\u07FF\u0800\x05\u0108\x85\x02\u0800\u0801\x07\u015C" + - "\x02\x02\u0801\u0802\x05\u0108\x85\x02\u0802\u013D\x03\x02\x02\x02\u0803" + - "\u0808\x05\u0136\x9C\x02\u0804\u0805\x07\u017F\x02\x02\u0805\u0807\x05" + - "\u0136\x9C\x02\u0806\u0804\x03\x02\x02\x02\u0807\u080A\x03\x02\x02\x02" + - "\u0808\u0809\x03\x02\x02\x02\u0808\u0806\x03\x02\x02\x02\u0809\u013F\x03" + - "\x02\x02\x02\u080A\u0808\x03\x02\x02\x02\u080B\u080C\x07\u0173\x02\x02" + - "\u080C\u080D\x05\u0146\xA4\x02\u080D\u0141\x03\x02\x02\x02\u080E\u080F" + - "\x07=\x02\x02\u080F\u0810\x07\u012C\x02\x02\u0810\u0811\x07\xF7\x02\x02" + - "\u0811\u0143\x03\x02\x02\x02\u0812\u0813\x07=\x02\x02\u0813\u0814\x07" + - "\xF7\x02\x02\u0814\u0145\x03\x02\x02\x02\u0815\u0816\x07\u0182\x02\x02" + - "\u0816\u081B\x05\u0148\xA5\x02\u0817\u0818\x07\u0186\x02\x02\u0818\u081A" + - "\x05\u0148\xA5\x02\u0819\u0817\x03\x02\x02\x02\u081A\u081D\x03\x02\x02" + - "\x02\u081B\u0819\x03\x02\x02\x02\u081B\u081C\x03\x02\x02\x02\u081C\u081E" + - "\x03\x02\x02\x02\u081D\u081B\x03\x02\x02\x02\u081E\u081F\x07\u0183\x02" + - "\x02\u081F\u0147\x03\x02\x02\x02\u0820\u0825\x05\u014A\xA6\x02\u0821\u0823" + - "\x07\u0177\x02\x02\u0822\u0821\x03\x02\x02\x02\u0822\u0823\x03\x02\x02" + - "\x02\u0823\u0824\x03\x02\x02\x02\u0824\u0826\x05\u014C\xA7\x02\u0825\u0822" + - "\x03\x02\x02\x02\u0825\u0826\x03\x02\x02\x02\u0826\u0149\x03\x02\x02\x02" + - "\u0827\u082B\x05\u0136\x9C\x02\u0828\u082B\x05\u0118\x8D\x02\u0829\u082B" + - "\x07\u0197\x02\x02\u082A\u0827\x03\x02\x02\x02\u082A\u0828\x03\x02\x02" + - "\x02\u082A\u0829\x03\x02\x02\x02\u082B\u014B\x03\x02\x02\x02\u082C\u0831" + - "\x07\u0198\x02\x02\u082D\u0831\x07\u0199\x02\x02\u082E\u0831\x05\u0160" + - "\xB1\x02\u082F\u0831\x07\u0197\x02\x02\u0830\u082C\x03\x02\x02\x02\u0830" + - "\u082D\x03\x02\x02\x02\u0830\u082E\x03\x02\x02\x02\u0830\u082F\x03\x02" + - "\x02\x02\u0831\u014D\x03\x02\x02\x02\u0832\u0839\x07\xB7\x02\x02\u0833" + - "\u0834\x07\u017D\x02\x02\u0834\u0839\x07\u017D\x02\x02\u0835\u0839\x07" + - "\u0133\x02\x02\u0836\u0837\x07\u017C\x02\x02\u0837\u0839\x07\u017C\x02" + - "\x02\u0838\u0832\x03\x02\x02\x02\u0838\u0833\x03\x02\x02\x02\u0838\u0835" + - "\x03\x02\x02\x02\u0838\u0836\x03\x02\x02\x02\u0839\u014F\x03\x02\x02\x02" + - "\u083A\u0849\x07\u0177\x02\x02\u083B\u0849\x07\u0178\x02\x02\u083C\u0849" + - "\x07\u0179\x02\x02\u083D\u083E\x07\u0179\x02\x02\u083E\u0849\x07\u0177" + - "\x02\x02\u083F\u0840\x07\u0178\x02\x02\u0840\u0849\x07\u0177\x02\x02\u0841" + - "\u0842\x07\u0179\x02\x02\u0842\u0849\x07\u0178\x02\x02\u0843\u0844\x07" + - "\u017A\x02\x02\u0844\u0849\x07\u0177\x02\x02\u0845\u0846\x07\u0179\x02" + - "\x02\u0846\u0847\x07\u0177\x02\x02\u0847\u0849\x07\u0178\x02\x02\u0848" + - "\u083A\x03\x02\x02\x02\u0848\u083B\x03\x02\x02\x02\u0848\u083C\x03\x02" + - "\x02\x02\u0848\u083D\x03\x02\x02\x02\u0848\u083F\x03\x02\x02\x02\u0848" + - "\u0841\x03\x02\x02\x02\u0848\u0843\x03\x02\x02\x02\u0848\u0845\x03\x02" + - "\x02\x02\u0849\u0151\x03\x02\x02\x02\u084A\u084B\x07\u0179\x02\x02\u084B" + - "\u0852\x07\u0179\x02\x02\u084C\u084D\x07\u0178\x02\x02\u084D\u0852\x07" + - "\u0178\x02\x02\u084E\u0852\x07\u017D\x02\x02\u084F\u0852\x07\u017E\x02" + - "\x02\u0850\u0852\x07\u017C\x02\x02\u0851\u084A\x03\x02\x02\x02\u0851\u084C" + - "\x03\x02\x02\x02\u0851\u084E\x03\x02\x02\x02\u0851\u084F\x03\x02\x02\x02" + - "\u0851\u0850\x03\x02\x02\x02\u0852\u0153\x03\x02\x02\x02\u0853\u0854\t" + - "\'\x02\x02\u0854\u0155\x03\x02\x02\x02\u0855\u0856\t(\x02\x02\u0856\u0157" + - "\x03\x02\x02\x02\u0857\u0866\x05\u011E\x90\x02\u0858\u0866\x05\u015A\xAE" + - "\x02\u0859\u0866\x05\u015C\xAF\x02\u085A\u085C\x07\u018F\x02\x02\u085B" + - "\u085A\x03\x02\x02\x02\u085B\u085C\x03\x02\x02\x02\u085C\u085D\x03\x02" + - "\x02\x02\u085D\u0866\x05\u015E\xB0\x02\u085E\u0866\x05\u0160\xB1\x02\u085F" + - "\u0866\x07\u0199\x02\x02\u0860\u0866\x07\u019A\x02\x02\u0861\u0863\x07" + - "\u012C\x02\x02\u0862\u0861\x03\x02\x02\x02\u0862\u0863\x03\x02\x02\x02" + - "\u0863\u0864\x03\x02\x02\x02\u0864\u0866\x07\u012D\x02\x02\u0865\u0857" + - "\x03\x02\x02\x02\u0865\u0858\x03\x02\x02\x02\u0865\u0859\x03\x02\x02\x02" + - "\u0865\u085B\x03\x02\x02\x02\u0865\u085E\x03\x02\x02\x02\u0865\u085F\x03" + - "\x02\x02\x02\u0865\u0860\x03\x02\x02\x02\u0865\u0862\x03\x02\x02\x02\u0866" + - "\u0159\x03\x02\x02\x02\u0867\u0868\x05\u0164\xB3\x02\u0868\u0869\x05\u015C" + - "\xAF\x02\u0869\u015B\x03\x02\x02\x02\u086A\u086B\x07\u0197\x02\x02\u086B" + - "\u015D\x03\x02\x02\x02\u086C\u086D\x07\u0198\x02\x02\u086D\u015F\x03\x02" + - "\x02\x02\u086E\u086F\t)\x02\x02\u086F\u0161\x03\x02\x02\x02\u0870\u0871" + - "\t*\x02\x02\u0871\u0163\x03\x02\x02\x02\u0872\u0873\t+\x02\x02\u0873\u0165" + - "\x03\x02\x02\x02\u0874\u0875\t,\x02\x02\u0875\u0167\x03\x02\x02\x02\u0876" + - "\u0877\t-\x02\x02\u0877\u0169\x03\x02\x02\x02\u0878\u0879\t.\x02\x02\u0879" + - "\u016B\x03\x02\x02\x02\u087A\u087B\t/\x02\x02\u087B\u016D\x03\x02\x02" + - "\x02\u087C\u087D\t0\x02\x02\u087D\u016F\x03\x02\x02\x02\xFC\u0178\u017B" + - "\u017D\u018C\u019E\u01A2\u01AB\u01B0\u01B7\u01BE\u01C2\u01CB\u01D7\u01DA" + - "\u01E1\u01E9\u01EE\u01F1\u01F8\u0200\u0204\u0210\u0218\u021C\u0232\u0237" + - "\u023B\u023F\u0243\u024C\u0251\u0255\u0259\u025D\u0260\u0264\u0269\u026F" + - "\u0274\u0279\u027C\u0280\u0288\u0290\u0294\u0298\u029C\u02A0\u02A4\u02A8" + - "\u02AC\u02B0\u02B2\u02BC\u02C4\u02DC\u02E3\u02E9\u02EC\u02EF\u02F9\u02FC" + - "\u0304\u0310\u0328\u0335\u033A\u033E\u0346\u034A\u0352\u035C\u0360\u0366" + - "\u036A\u036E\u0371\u037A\u037E\u0385\u0388\u0392\u039A\u03A2\u03A6\u03B5" + - "\u03C8\u03D3\u03D7\u03DE\u03E3\u03E9\u03ED\u03F4\u03F8\u03FC\u0400\u0408" + - "\u040C\u0411\u0417\u041D\u0420\u0424\u042F\u0438\u0446\u0452\u0461\u0464" + - "\u0468\u046B\u046D\u0472\u0476\u0479\u047D\u0486\u048F\u0499\u049E\u04AA" + - "\u04AD\u04B0\u04B3\u04B9\u04BD\u04C5\u04C8\u04CD\u04D0\u04D2\u04E0\u04EB" + - "\u04F0\u04F8\u04FB\u04FE\u0503\u0505\u0507\u050C\u050F\u0513\u0516\u0519" + - "\u0525\u052C\u0537\u0554\u056A\u057C\u0581\u058D\u059A\u05A6\u05B2\u05B7" + - "\u05D2\u05DA\u05DE\u05E1\u05E4\u05EB\u05EE\u05F1\u05F4\u05F7\u05FA\u05FF" + - "\u0602\u060B\u0610\u0614\u0619\u0622\u0635\u063D\u0645\u0649\u064D\u0657" + - "\u0671\u0679\u0685\u069B\u069D\u06A8\u06AB\u06AD\u06B1\u06B5\u06BC\u06C5" + - "\u06CB\u06D8\u06DF\u06E4\u06EA\u06F1\u06F3\u06F6\u0702\u0707\u070A\u0710" + - "\u0712\u0718\u072F\u0731\u0739\u073D\u0746\u074A\u075A\u0763\u077B\u0782" + - "\u0785\u078F\u0798\u079E\u07A4\u07AC\u07B1\u07B5\u07BC\u07C1\u07C9\u07CD" + - "\u07D0\u07D4\u07D7\u07DB\u07E4\u07E7\u07F2\u07F8\u0808\u081B\u0822\u0825" + - "\u082A\u0830\u0838\u0848\u0851\u085B\u0862\u0865"; + "\x02\x02\u05F6\xE1\x03\x02\x02\x02\u05F7\u05F5\x03\x02\x02\x02\u05F8\u05F9" + + "\x05\u012A\x96\x02\u05F9\u05FA\x07\xBB\x02\x02\u05FA\u05FB\x05\xE4s\x02" + + "\u05FB\xE3\x03\x02\x02\x02\u05FC\u05FE\x05\u012A\x96\x02\u05FD\u05FC\x03" + + "\x02\x02\x02\u05FD\u05FE\x03\x02\x02\x02\u05FE\u05FF\x03\x02\x02\x02\u05FF" + + "\u0601\x07\u0182\x02\x02\u0600\u0602\x05\xEEx\x02\u0601\u0600\x03\x02" + + "\x02\x02\u0601\u0602\x03\x02\x02\x02\u0602\u0604\x03\x02\x02\x02\u0603" + + "\u0605\x05\xE8u\x02\u0604\u0603\x03\x02\x02\x02\u0604\u0605\x03\x02\x02" + + "\x02\u0605\u0607\x03\x02\x02\x02\u0606\u0608\x05\xFE\x80\x02\u0607\u0606" + + "\x03\x02\x02\x02\u0607\u0608\x03\x02\x02\x02\u0608\u0609\x03\x02\x02\x02" + + "\u0609\u060A\x07\u0183\x02\x02\u060A\xE5\x03\x02\x02\x02\u060B\u060C\x07" + + "\u011E\x02\x02\u060C\u060E\x07\u0182\x02\x02\u060D\u060F\x05\xEEx\x02" + + "\u060E\u060D\x03\x02\x02\x02\u060E\u060F\x03\x02\x02\x02\u060F\u0611\x03" + + "\x02\x02\x02\u0610\u0612\x05\xE8u\x02\u0611\u0610\x03\x02\x02\x02\u0611" + + "\u0612\x03\x02\x02\x02\u0612\u0614\x03\x02\x02\x02\u0613\u0615\x05\xF2" + + "z\x02\u0614\u0613\x03\x02\x02\x02\u0614\u0615\x03\x02\x02\x02\u0615\u0617" + + "\x03\x02\x02\x02\u0616\u0618\x05\xF8}\x02\u0617\u0616\x03\x02\x02\x02" + + "\u0617\u0618\x03\x02\x02\x02\u0618\u061A\x03\x02\x02\x02\u0619\u061B\x05" + + "\xFA~\x02\u061A\u0619\x03\x02\x02\x02\u061A\u061B\x03\x02\x02\x02\u061B" + + "\u061D\x03\x02\x02\x02\u061C\u061E\x05\xF4{\x02\u061D\u061C\x03\x02\x02" + + "\x02\u061D\u061E\x03\x02\x02\x02\u061E\u061F\x03\x02\x02\x02\u061F\u0620" + + "\x05\xFC\x7F\x02\u0620\u0625\x07\u0183\x02\x02\u0621\u0623\x07\xBB\x02" + + "\x02\u0622\u0621\x03\x02\x02\x02\u0622\u0623\x03\x02\x02\x02\u0623\u0624" + + "\x03\x02\x02\x02\u0624\u0626\x05\u0132\x9A\x02\u0625\u0622\x03\x02\x02" + + "\x02\u0625\u0626\x03\x02\x02\x02\u0626\xE7\x03\x02\x02\x02\u0627\u0628" + + "\x07\u0134\x02\x02\u0628\u0629\x07\xC7\x02\x02\u0629\u062E\x05\xEAv\x02" + + "\u062A\u062B\x07\u0186\x02\x02\u062B\u062D\x05\xEAv\x02\u062C\u062A\x03" + + "\x02\x02\x02\u062D\u0630\x03\x02\x02\x02\u062E\u062C\x03\x02\x02\x02\u062E" + + "\u062F\x03\x02\x02\x02\u062F\xE9\x03\x02\x02\x02\u0630\u062E\x03\x02\x02" + + "\x02\u0631\u0633\x05\u0104\x83\x02\u0632\u0634\t\x1C\x02\x02\u0633\u0632" + + "\x03\x02\x02\x02\u0633\u0634\x03\x02\x02\x02\u0634\u0637\x03\x02\x02\x02" + + "\u0635\u0636\x07Y\x02\x02\u0636\u0638\t\x1D\x02\x02\u0637\u0635\x03\x02" + + "\x02\x02\u0637\u0638\x03\x02\x02\x02\u0638\xEB\x03\x02\x02\x02\u0639\u063C" + + "\x07\u011B\x02\x02\u063A\u063D\x07\xB4\x02\x02\u063B\u063D\x05\u0104\x83" + + "\x02\u063C\u063A\x03\x02\x02\x02\u063C\u063B\x03\x02\x02\x02\u063D\xED" + + "\x03\x02\x02\x02\u063E\u063F\x07\u0139\x02\x02\u063F\u0640\x07\xC7\x02" + + "\x02\u0640\u0645\x05\u0104\x83\x02\u0641\u0642\x07\u0186\x02\x02\u0642" + + "\u0644\x05\u0104\x83\x02\u0643\u0641\x03\x02\x02\x02\u0644\u0647\x03\x02" + + "\x02\x02\u0645\u0643\x03\x02\x02\x02\u0645\u0646\x03\x02\x02\x02\u0646" + + "\xEF\x03\x02\x02\x02\u0647\u0645\x03\x02\x02\x02\u0648\u0659\x07\u018D" + + "\x02\x02\u0649\u0659\x07\u0190\x02\x02\u064A\u0659\x07\u0195\x02\x02\u064B" + + "\u064C\x07\u0184\x02\x02\u064C\u064D\x07\u0198\x02\x02\u064D\u064E\x07" + + "\u0186\x02\x02\u064E\u064F\x07\u0198\x02\x02\u064F\u0659\x07\u0185\x02" + + "\x02\u0650\u0651\x07\u0184\x02\x02\u0651\u0652\x07\u0198\x02\x02\u0652" + + "\u0653\x07\u0186\x02\x02\u0653\u0659\x07\u0185\x02\x02\u0654\u0655\x07" + + "\u0184\x02\x02\u0655\u0656\x07\u0186\x02\x02\u0656\u0657\x07\u0198\x02" + + "\x02\u0657\u0659\x07\u0185\x02\x02\u0658\u0648\x03\x02\x02\x02\u0658\u0649" + + "\x03\x02\x02\x02\u0658\u064A\x03\x02\x02\x02\u0658\u064B\x03\x02\x02\x02" + + "\u0658\u0650\x03\x02\x02\x02\u0658\u0654\x03\x02\x02\x02\u0659\xF1\x03" + + "\x02\x02\x02\u065A\u065B\x07\u011F\x02\x02\u065B\u0660\x05\xAEX\x02\u065C" + + "\u065D\x07\u0186\x02\x02\u065D\u065F\x05\xAEX\x02\u065E\u065C\x03\x02" + + "\x02\x02\u065F\u0662\x03\x02\x02\x02\u0660\u065E\x03\x02\x02\x02\u0660" + + "\u0661\x03\x02\x02\x02\u0661\xF3\x03\x02\x02\x02\u0662\u0660\x03\x02\x02" + + "\x02\u0663\u0664\x07\u013A\x02\x02\u0664\u0666\x07\u0182\x02\x02\u0665" + + "\u0667\x05\xF6|\x02\u0666\u0665\x03\x02\x02\x02\u0667\u0668\x03\x02\x02" + + "\x02\u0668\u0666\x03\x02\x02\x02\u0668\u0669\x03\x02\x02\x02\u0669\u066A" + + "\x03\x02\x02\x02\u066A\u066C\x07\u0183\x02\x02\u066B\u066D\x05\u0102\x82" + + "\x02\u066C\u066B\x03\x02\x02\x02\u066C\u066D\x03\x02\x02\x02\u066D\xF5" + + "\x03\x02\x02\x02\u066E\u0670\x05\u0134\x9B\x02\u066F\u0671\x05\xF0y\x02" + + "\u0670\u066F\x03\x02\x02\x02\u0670\u0671\x03\x02\x02\x02\u0671\xF7\x03" + + "\x02\x02\x02\u0672\u0673\x07\xB4\x02\x02\u0673\u0674\x07\u014A\x02\x02" + + "\u0674\u0675\x07\u013B\x02\x02\u0675\u067B\x07\u011D\x02\x02\u0676\u0677" + + "\x07\u0132\x02\x02\u0677\u0678\x07\u0149\x02\x02\u0678\u0679\x07\u013B" + + "\x02\x02\u0679\u067B\x07\u011D\x02\x02\u067A\u0672\x03\x02\x02\x02\u067A" + + "\u0676\x03\x02\x02\x02\u067B\xF9\x03\x02\x02\x02\u067C\u067D\x07\b\x02" + + "\x02\u067D\u067E\x07\u011D\x02\x02\u067E\u067F\x07\u0150\x02\x02\u067F" + + "\u0680\x07d\x02\x02\u0680\u0681\x07K\x02\x02\u0681\u0695\x07\u0149\x02" + + "\x02\u0682\u0683\x07\b\x02\x02\u0683\u0684\x07\u011D\x02\x02\u0684\u0685" + + "\x07\u0150\x02\x02\u0685\u0686\x07\u0160\x02\x02\u0686\u0687\x07\u0129" + + "\x02\x02\u0687\u0695\x07\u0149\x02\x02\u0688\u0689\x07\b\x02\x02\u0689" + + "\u068A\x07\u011D\x02\x02\u068A\u068B\x07\u0150\x02\x02\u068B\u068C\x07" + + "\u0160\x02\x02\u068C\u068D\x07K\x02\x02\u068D\u0695\x05\u0134\x9B\x02" + + "\u068E\u068F\x07\b\x02\x02\u068F\u0690\x07\u011D\x02\x02\u0690\u0691\x07" + + "\u0150\x02\x02\u0691\u0692\x07\u0160\x02\x02\u0692\u0693\x07/\x02\x02" + + "\u0693\u0695\x05\u0134\x9B\x02\u0694\u067C\x03\x02\x02\x02\u0694\u0682" + + "\x03\x02\x02\x02\u0694\u0688\x03\x02\x02\x02\u0694\u068E\x03\x02\x02\x02" + + "\u0695\xFB\x03\x02\x02\x02\u0696\u0697\x07\xEA\x02\x02\u0697\u069C\x05" + + "\xAEX\x02\u0698\u0699\x07\u0186\x02\x02\u0699\u069B\x05\xAEX\x02\u069A" + + "\u0698\x03\x02\x02\x02\u069B\u069E\x03\x02\x02\x02\u069C\u069A\x03\x02" + + "\x02\x02\u069C\u069D\x03\x02\x02\x02\u069D\xFD\x03\x02\x02\x02\u069E\u069C" + + "\x03\x02\x02\x02\u069F\u06A0\x07\u0141\x02\x02\u06A0\u06A1\x07\xC0\x02" + + "\x02\u06A1\u06A2\x05\u011A\x8E\x02\u06A2\u06A3\x05\u0100\x81\x02\u06A3" + + "\u06A9\x03\x02\x02\x02\u06A4\u06A5\x07\u014A\x02\x02\u06A5\u06A6\x07\xC0" + + "\x02\x02\u06A6\u06A7\x07\u0198\x02\x02\u06A7\u06A9\x05\u0100\x81\x02\u06A8" + + "\u069F\x03\x02\x02\x02\u06A8\u06A4\x03\x02\x02\x02\u06A9\xFF\x03\x02\x02" + + "\x02\u06AA\u06AB\x07h\x02\x02\u06AB\u06AC\x07\xB7\x02\x02\u06AC\u06AD" + + "\x07\xE0\x02\x02\u06AD\u06AE\x07\u0149\x02\x02\u06AE\u0101\x03\x02\x02" + + "\x02\u06AF\u06B0\x07\u0174\x02\x02\u06B0\u06B1\x05\u011A\x8E\x02\u06B1" + + "\u0103\x03\x02\x02\x02\u06B2\u06B3\x05\u0106\x84\x02\u06B3\u0105\x03\x02" + + "\x02\x02\u06B4\u06B5\b\x84\x01\x02\u06B5\u06B6\x07\u012C\x02\x02\u06B6" + + "\u06C1\x05\u0106\x84\b\u06B7\u06B8\x07\xF7\x02\x02\u06B8\u06B9\x07\u0182" + + "\x02\x02\u06B9\u06BA\x05\xA0Q\x02\u06BA\u06BB\x07\u0183\x02\x02\u06BB" + + "\u06C1\x03\x02\x02\x02\u06BC\u06BE\x05\u010C\x87\x02\u06BD\u06BF\x05\u0108" + + "\x85\x02\u06BE\u06BD\x03\x02\x02\x02\u06BE\u06BF\x03\x02\x02\x02\u06BF" + + "\u06C1\x03\x02\x02\x02\u06C0\u06B4\x03\x02\x02\x02\u06C0\u06B7\x03\x02" + + "\x02\x02\u06C0\u06BC\x03\x02\x02\x02\u06C1\u06D0\x03\x02\x02\x02\u06C2" + + "\u06C3\f\x05\x02\x02\u06C3\u06C4\x07\xB7\x02\x02\u06C4\u06CF\x05\u0106" + + "\x84\x06\u06C5\u06C6\f\x04\x02\x02\u06C6\u06C7\x07\u0133\x02\x02\u06C7" + + "\u06CF\x05\u0106\x84\x05\u06C8\u06C9\f\x03\x02\x02\u06C9\u06CB\x07\u0113" + + "\x02\x02\u06CA\u06CC\x07\u012C\x02\x02\u06CB\u06CA\x03\x02\x02\x02\u06CB" + + "\u06CC\x03\x02\x02\x02\u06CC\u06CD\x03\x02\x02\x02\u06CD\u06CF\t\x1E\x02" + + "\x02\u06CE\u06C2\x03\x02\x02\x02\u06CE\u06C5\x03\x02\x02\x02\u06CE\u06C8" + + "\x03\x02\x02\x02\u06CF\u06D2\x03\x02\x02\x02\u06D0\u06CE\x03\x02\x02\x02" + + "\u06D0\u06D1\x03\x02\x02\x02\u06D1\u0107\x03\x02\x02\x02\u06D2\u06D0\x03" + + "\x02\x02\x02\u06D3\u06D5\x07\u012C\x02\x02\u06D4\u06D3\x03\x02\x02\x02" + + "\u06D4\u06D5\x03\x02\x02\x02\u06D5\u06D6\x03\x02\x02\x02\u06D6\u06D8\x07" + + "\xC0\x02\x02\u06D7\u06D9\t\x1F\x02\x02\u06D8\u06D7\x03\x02\x02\x02\u06D8" + + "\u06D9\x03\x02\x02\x02\u06D9\u06DA\x03\x02\x02\x02\u06DA\u06DB\x05\u010C" + + "\x87\x02\u06DB\u06DC\x07\xB7\x02\x02\u06DC\u06DD\x05\u010C\x87\x02\u06DD" + + "\u0717\x03\x02\x02\x02\u06DE\u06E0\x07\u012C\x02\x02\u06DF\u06DE\x03\x02" + + "\x02\x02\u06DF\u06E0\x03\x02\x02\x02\u06E0\u06E1\x03\x02\x02\x02\u06E1" + + "\u06E2\x07\u0109\x02\x02\u06E2\u06E3\x07\u0182\x02\x02\u06E3\u06E8\x05" + + "\u0104\x83\x02\u06E4\u06E5\x07\u0186\x02\x02\u06E5\u06E7\x05\u0104\x83" + + "\x02\u06E6\u06E4\x03\x02\x02\x02\u06E7\u06EA\x03\x02\x02\x02\u06E8\u06E6" + + "\x03\x02\x02\x02\u06E8\u06E9\x03\x02\x02\x02\u06E9\u06EB\x03\x02\x02\x02" + + "\u06EA\u06E8\x03\x02\x02\x02\u06EB\u06EC\x07\u0183\x02\x02\u06EC\u0717" + + "\x03\x02\x02\x02\u06ED\u06EF\x07\u012C\x02\x02\u06EE\u06ED\x03\x02\x02" + + "\x02\u06EE\u06EF\x03\x02\x02\x02\u06EF\u06F0\x03\x02\x02\x02\u06F0\u06F1" + + "\x07\u0109\x02\x02\u06F1\u06F2\x07\u0182\x02\x02\u06F2\u06F3\x05\xA0Q" + + "\x02\u06F3\u06F4\x07\u0183\x02\x02\u06F4\u0717\x03\x02\x02\x02\u06F5\u06F6" + + "\x07\xF7\x02\x02\u06F6\u06F7\x07\u0182\x02\x02\u06F7\u06F8\x05\xA0Q\x02" + + "\u06F8\u06F9\x07\u0183\x02\x02\u06F9\u0717\x03\x02\x02\x02\u06FA\u06FC" + + "\x07\u012C\x02\x02\u06FB\u06FA\x03\x02\x02\x02\u06FB\u06FC\x03\x02\x02" + + "\x02\u06FC\u06FD\x03\x02\x02\x02\u06FD\u06FE\x07\u0146\x02\x02\u06FE\u0717" + + "\x05\u010C\x87\x02\u06FF\u0717\x05\u010A\x86\x02\u0700\u0702\x07\u0113" + + "\x02\x02\u0701\u0703\x07\u012C\x02\x02\u0702\u0701\x03\x02\x02\x02\u0702" + + "\u0703\x03\x02\x02\x02\u0703\u0704\x03\x02\x02\x02\u0704\u0717\t\x1E\x02" + + "\x02\u0705\u0707\x07\u0113\x02\x02\u0706\u0708\x07\u012C\x02\x02\u0707" + + "\u0706\x03\x02\x02\x02\u0707\u0708\x03\x02\x02\x02\u0708\u0709\x03\x02" + + "\x02\x02\u0709\u070A\x07\xED\x02\x02\u070A\u070B\x07\xFE\x02\x02\u070B" + + "\u0717\x05\u010C\x87\x02\u070C\u070E\x07\u012C\x02\x02\u070D\u070C\x03" + + "\x02\x02\x02\u070D\u070E\x03\x02\x02\x02\u070E\u070F\x03\x02\x02\x02\u070F" + + "\u0710\x07\u014F\x02\x02\u0710\u0711\x07\u0160\x02\x02\u0711\u0714\x05" + + "\u010C\x87\x02\u0712\u0713\x07\xF4\x02\x02\u0713\u0715\x05\u0162\xB2\x02" + + "\u0714\u0712\x03\x02\x02\x02\u0714\u0715\x03\x02\x02\x02\u0715\u0717\x03" + + "\x02\x02\x02\u0716\u06D4\x03\x02\x02\x02\u0716\u06DF\x03\x02\x02\x02\u0716" + + "\u06EE\x03\x02\x02\x02\u0716\u06F5\x03\x02\x02\x02\u0716\u06FB\x03\x02" + + "\x02\x02\u0716\u06FF\x03\x02\x02\x02\u0716\u0700\x03\x02\x02\x02\u0716" + + "\u0705\x03\x02\x02\x02\u0716\u070D\x03\x02\x02\x02\u0717\u0109\x03\x02" + + "\x02\x02\u0718\u071A\x07\u012C\x02\x02\u0719\u0718\x03\x02\x02\x02\u0719" + + "\u071A\x03\x02\x02\x02\u071A\u071B\x03\x02\x02\x02\u071B\u071C\x07\u011A" + + "\x02\x02\u071C\u072A\t \x02\x02\u071D\u071E\x07\u0182\x02\x02\u071E\u072B" + + "\x07\u0183\x02\x02\u071F\u0720\x07\u0182\x02\x02\u0720\u0725\x05\u0104" + + "\x83\x02\u0721\u0722\x07\u0186\x02\x02\u0722\u0724\x05\u0104\x83\x02\u0723" + + "\u0721\x03\x02\x02\x02\u0724\u0727\x03\x02\x02\x02\u0725\u0723\x03\x02" + + "\x02\x02\u0725\u0726\x03\x02\x02\x02\u0726\u0728\x03\x02\x02\x02\u0727" + + "\u0725\x03\x02\x02\x02\u0728\u0729\x07\u0183\x02\x02\u0729\u072B\x03\x02" + + "\x02\x02\u072A\u071D\x03\x02\x02\x02\u072A\u071F\x03\x02\x02\x02\u072B" + + "\u0736\x03\x02\x02\x02\u072C\u072E\x07\u012C\x02\x02\u072D\u072C\x03\x02" + + "\x02\x02\u072D\u072E\x03\x02\x02\x02\u072E\u072F\x03\x02\x02\x02\u072F" + + "\u0730\x07\u011A\x02\x02\u0730\u0733\x05\u010C\x87\x02\u0731\u0732\x07" + + "\xF4\x02\x02\u0732\u0734\x05\u0162\xB2\x02\u0733\u0731\x03\x02\x02\x02" + + "\u0733\u0734\x03\x02\x02\x02\u0734\u0736\x03\x02\x02\x02\u0735\u0719\x03" + + "\x02\x02\x02\u0735\u072D\x03\x02\x02\x02\u0736\u010B\x03\x02\x02\x02\u0737" + + "\u0738\b\x87\x01\x02\u0738\u073C\x05\u010E\x88\x02\u0739\u073A\t!\x02" + + "\x02\u073A\u073C\x05\u010C\x87\n\u073B\u0737\x03\x02\x02\x02\u073B\u0739" + + "\x03\x02\x02\x02\u073C\u0754\x03\x02\x02\x02\u073D\u073E\f\t\x02\x02\u073E" + + "\u073F\t\"\x02\x02\u073F\u0753\x05\u010C\x87\n\u0740\u0741\f\b\x02\x02" + + "\u0741\u0742\t#\x02\x02\u0742\u0753\x05\u010C\x87\t\u0743\u0744\f\x07" + + "\x02\x02\u0744\u0745\x07\u017D\x02\x02\u0745\u0753\x05\u010C\x87\b\u0746" + + "\u0747\f\x06\x02\x02\u0747\u0748\x07\u017E\x02\x02\u0748\u0753\x05\u010C" + + "\x87\x07\u0749\u074A\f\x05\x02\x02\u074A\u074B\x07\u017C\x02\x02\u074B" + + "\u0753\x05\u010C\x87\x06\u074C\u074D\f\x04\x02\x02\u074D\u074E\x05\u0156" + + "\xAC\x02\u074E\u074F\x05\u010C\x87\x05\u074F\u0753\x03\x02\x02\x02\u0750" + + "\u0751\f\x03\x02\x02\u0751\u0753\x07\u019C\x02\x02\u0752\u073D\x03\x02" + + "\x02\x02\u0752\u0740\x03\x02\x02\x02\u0752\u0743\x03\x02\x02\x02\u0752" + + "\u0746\x03\x02\x02\x02\u0752\u0749\x03\x02\x02\x02\u0752\u074C\x03\x02" + + "\x02\x02\u0752\u0750\x03\x02\x02\x02\u0753\u0756\x03\x02\x02\x02\u0754" + + "\u0752\x03\x02\x02\x02\u0754\u0755\x03\x02\x02\x02\u0755\u010D\x03\x02" + + "\x02\x02\u0756\u0754\x03\x02\x02\x02\u0757\u0758\b\x88\x01\x02\u0758\u075A" + + "\x07\xCB\x02\x02\u0759\u075B\x05\u0138\x9D\x02\u075A\u0759\x03\x02\x02" + + "\x02\u075B\u075C\x03\x02\x02\x02\u075C\u075A\x03\x02\x02\x02\u075C\u075D" + + "\x03\x02\x02\x02\u075D\u0760\x03\x02\x02\x02\u075E\u075F\x07\xF1\x02\x02" + + "\u075F\u0761\x05\u0104\x83\x02\u0760\u075E\x03\x02\x02\x02\u0760\u0761" + + "\x03\x02\x02\x02\u0761\u0762\x03\x02\x02\x02\u0762\u0763\x07\xF2\x02\x02" + + "\u0763\u07B3\x03\x02\x02\x02\u0764\u0765\x07\xCB\x02\x02\u0765\u0767\x05" + + "\u0104\x83\x02\u0766\u0768\x05\u0138\x9D\x02\u0767\u0766\x03\x02\x02\x02" + + "\u0768\u0769\x03\x02\x02\x02\u0769\u0767\x03\x02\x02\x02\u0769\u076A\x03" + + "\x02\x02\x02\u076A\u076D\x03\x02\x02\x02\u076B\u076C\x07\xF1\x02\x02\u076C" + + "\u076E\x05\u0104\x83\x02\u076D\u076B\x03\x02\x02\x02\u076D\u076E\x03\x02" + + "\x02\x02\u076E\u076F\x03\x02\x02\x02\u076F\u0770\x07\xF2\x02\x02\u0770" + + "\u07B3\x03\x02\x02\x02\u0771\u0772\x07\xCC\x02\x02\u0772\u0773\x07\u0182" + + "\x02\x02\u0773\u0774\x05\u0104\x83\x02\u0774\u0775\x07\xBB\x02\x02\u0775" + + "\u0776\x05:\x1E\x02\u0776\u0777\x07\u0183\x02\x02\u0777\u07B3\x03\x02" + + "\x02\x02\u0778\u0779\x07/\x02\x02\u0779\u077A\x07\u0182\x02\x02\u077A" + + "\u077D\x05\u0104\x83\x02\u077B\u077C\x07>\x02\x02\u077C\u077E\x07Y\x02" + + "\x02\u077D\u077B\x03\x02\x02\x02\u077D\u077E\x03\x02\x02\x02\u077E\u077F" + + "\x03\x02\x02\x02\u077F\u0780\x07\u0183\x02\x02\u0780\u07B3\x03\x02\x02" + + "\x02\u0781\u0782\x07K\x02\x02\u0782\u0783\x07\u0182\x02\x02\u0783\u0786" + + "\x05\u0104\x83\x02\u0784\u0785\x07>\x02\x02\u0785\u0787\x07Y\x02\x02\u0786" + + "\u0784\x03\x02\x02\x02\u0786\u0787\x03\x02\x02\x02\u0787\u0788\x03\x02" + + "\x02\x02\u0788\u0789\x07\u0183\x02\x02\u0789\u07B3\x03\x02\x02\x02\u078A" + + "\u078B\x07\u013E\x02\x02\u078B\u078C\x07\u0182\x02\x02\u078C\u078D\x05" + + "\u010C\x87\x02\u078D\u078E\x07\u0109\x02\x02\u078E\u078F\x05\u010C\x87" + + "\x02\u078F\u0790\x07\u0183\x02\x02\u0790\u07B3\x03\x02\x02\x02\u0791\u07B3" + + "\x05\u015E\xB0\x02\u0792\u07B3\x07\u018D\x02\x02\u0793\u0794\x05\u0144" + + "\xA3\x02\u0794\u0795\x07\u017F\x02\x02\u0795\u0796\x07\u018D\x02\x02\u0796" + + "\u07B3\x03\x02\x02\x02\u0797\u0798\x07\u0182\x02\x02\u0798\u0799\x05\xA0" + + "Q\x02\u0799\u079A\x07\u0183\x02\x02\u079A\u07B3\x03\x02\x02\x02\u079B" + + "\u079C\x05\u0110\x89\x02\u079C\u07A8\x07\u0182\x02\x02\u079D\u079F\x05" + + "\u0168\xB5\x02\u079E\u079D\x03\x02\x02\x02\u079E\u079F\x03\x02\x02\x02" + + "\u079F\u07A0\x03\x02\x02\x02\u07A0\u07A5\x05\u0112\x8A\x02\u07A1\u07A2" + + "\x07\u0186\x02\x02\u07A2\u07A4\x05\u0112\x8A\x02\u07A3\u07A1\x03\x02\x02" + + "\x02\u07A4\u07A7\x03\x02\x02\x02\u07A5\u07A3\x03\x02\x02\x02\u07A5\u07A6" + + "\x03\x02\x02\x02\u07A6\u07A9\x03\x02\x02\x02\u07A7\u07A5\x03\x02\x02\x02" + + "\u07A8\u079E\x03\x02\x02\x02\u07A8\u07A9\x03\x02\x02\x02\u07A9\u07AA\x03" + + "\x02\x02\x02\u07AA\u07AB\x07\u0183\x02\x02\u07AB\u07B3\x03\x02\x02\x02" + + "\u07AC\u07B3\x05\u0132\x9A\x02\u07AD\u07B3\x05\u0114\x8B\x02\u07AE\u07AF" + + "\x07\u0182\x02\x02\u07AF\u07B0\x05\u0104\x83\x02\u07B0\u07B1\x07\u0183" + + "\x02\x02\u07B1\u07B3\x03\x02\x02\x02\u07B2\u0757\x03\x02\x02\x02\u07B2" + + "\u0764\x03\x02\x02\x02\u07B2\u0771\x03\x02\x02\x02\u07B2\u0778\x03\x02" + + "\x02\x02\u07B2\u0781\x03\x02\x02\x02\u07B2\u078A\x03\x02\x02\x02\u07B2" + + "\u0791\x03\x02\x02\x02\u07B2\u0792\x03\x02\x02\x02\u07B2\u0793\x03\x02" + + "\x02\x02\u07B2\u0797\x03\x02\x02\x02\u07B2\u079B\x03\x02\x02\x02\u07B2" + + "\u07AC\x03\x02\x02\x02\u07B2\u07AD\x03\x02\x02\x02\u07B2\u07AE\x03\x02" + + "\x02\x02\u07B3\u07BB\x03\x02\x02\x02\u07B4\u07B5\f\x06\x02\x02\u07B5\u07B6" + + "\x07\u0180\x02\x02\u07B6\u07B7\x05\u010C\x87\x02\u07B7\u07B8\x07\u0181" + + "\x02\x02\u07B8\u07BA\x03\x02\x02\x02\u07B9\u07B4\x03\x02\x02\x02\u07BA" + + "\u07BD\x03\x02\x02\x02\u07BB\u07B9\x03\x02\x02\x02\u07BB\u07BC\x03\x02" + + "\x02\x02\u07BC\u010F\x03\x02\x02\x02\u07BD\u07BB\x03\x02\x02\x02\u07BE" + + "\u07C2\x05\u0170\xB9\x02\u07BF\u07C2\x05\u0174\xBB\x02\u07C0\u07C2\x05" + + "\u0144\xA3\x02\u07C1\u07BE\x03\x02\x02\x02\u07C1\u07BF\x03\x02\x02\x02" + + "\u07C1\u07C0\x03\x02\x02\x02\u07C2\u0111\x03\x02\x02\x02\u07C3\u07C8\x05" + + "\u016E\xB8\x02\u07C4\u07C8\x05\u016C\xB7\x02\u07C5\u07C8\x05\u016A\xB6" + + "\x02\u07C6\u07C8\x05\u0104\x83\x02\u07C7\u07C3\x03\x02\x02\x02\u07C7\u07C4" + + "\x03\x02\x02\x02\u07C7\u07C5\x03\x02\x02\x02\u07C7\u07C6\x03\x02\x02\x02" + + "\u07C8\u0113\x03\x02\x02\x02\u07C9\u07CA\x05\u0144\xA3\x02\u07CA\u0115" + + "\x03\x02\x02\x02\u07CB\u07CC\x05\u0132\x9A\x02\u07CC\u0117\x03\x02\x02" + + "\x02\u07CD\u07D0\x05\u0132\x9A\x02\u07CE\u07D0\x05\u0114\x8B\x02\u07CF" + + "\u07CD\x03\x02\x02\x02\u07CF\u07CE\x03\x02\x02\x02\u07D0\u0119\x03\x02" + + "\x02\x02\u07D1\u07D4\x07\u0111\x02\x02\u07D2\u07D5\x05\u011C\x8F\x02\u07D3" + + "\u07D5\x05\u0120\x91\x02\u07D4\u07D2\x03\x02\x02\x02\u07D4\u07D3\x03\x02" + + "\x02\x02\u07D4\u07D5\x03\x02\x02\x02\u07D5\u011B\x03\x02\x02\x02\u07D6" + + "\u07D8\x05\u011E\x90\x02\u07D7\u07D9\x05\u0122\x92\x02\u07D8\u07D7\x03" + + "\x02\x02\x02\u07D8\u07D9\x03\x02\x02\x02\u07D9\u011D\x03\x02\x02\x02\u07DA" + + "\u07DB\x05\u0124\x93\x02\u07DB\u07DC\x05\u016C\xB7\x02\u07DC\u07DE\x03" + + "\x02\x02\x02\u07DD\u07DA\x03\x02\x02\x02\u07DE\u07DF\x03\x02\x02\x02\u07DF" + + "\u07DD\x03\x02\x02\x02\u07DF\u07E0\x03\x02\x02\x02\u07E0\u011F\x03\x02" + + "\x02\x02\u07E1\u07E4\x05\u0122\x92\x02\u07E2\u07E5\x05\u011E\x90\x02\u07E3" + + "\u07E5\x05\u0122\x92\x02\u07E4\u07E2\x03\x02\x02\x02\u07E4\u07E3\x03\x02" + + "\x02\x02\u07E4\u07E5\x03\x02\x02\x02\u07E5\u0121\x03\x02\x02\x02\u07E6" + + "\u07E7\x05\u0124\x93\x02\u07E7\u07E8\x05\u016C\xB7\x02\u07E8\u07E9\x07" + + "\u0160\x02\x02\u07E9\u07EA\x05\u016C\xB7\x02\u07EA\u0123\x03\x02\x02\x02" + + "\u07EB\u07ED\t$\x02\x02\u07EC\u07EB\x03\x02\x02\x02\u07EC\u07ED\x03\x02" + + "\x02\x02\u07ED\u07EE\x03\x02\x02\x02\u07EE\u07F1\t%\x02\x02\u07EF\u07F1" + + "\x07\u0197\x02\x02\u07F0\u07EC\x03\x02\x02\x02\u07F0\u07EF\x03\x02\x02" + + "\x02\u07F1\u0125\x03\x02\x02\x02\u07F2\u07F4\x07\xBB\x02\x02\u07F3\u07F2" + + "\x03\x02\x02\x02\u07F3\u07F4\x03\x02\x02\x02\u07F4\u07F5\x03\x02\x02\x02" + + "\u07F5\u07F7\x05\u0132\x9A\x02\u07F6\u07F8\x05\u012E\x98\x02\u07F7\u07F6" + + "\x03\x02\x02\x02\u07F7\u07F8\x03\x02\x02\x02\u07F8\u0127\x03\x02\x02\x02" + + "\u07F9\u07FB\x07\xBB\x02\x02\u07FA\u07F9\x03\x02\x02\x02\u07FA\u07FB\x03" + + "\x02\x02\x02\u07FB\u07FC\x03\x02\x02\x02\u07FC\u07FE\x05\u0132\x9A\x02" + + "\u07FD\u07FF\x05\u012E\x98\x02\u07FE\u07FD\x03\x02\x02\x02\u07FE\u07FF" + + "\x03\x02\x02\x02\u07FF\u0129\x03\x02\x02\x02\u0800\u0801\x05\u0132\x9A" + + "\x02\u0801\u0802\x05\u012C\x97\x02\u0802\u012B\x03\x02\x02\x02\u0803\u0804" + + "\x07\u0122\x02\x02\u0804\u0806\x05\u0132\x9A\x02\u0805\u0803\x03\x02\x02" + + "\x02\u0806\u0807\x03\x02\x02\x02\u0807\u0805\x03\x02\x02\x02\u0807\u0808" + + "\x03\x02\x02\x02\u0808\u080B\x03\x02\x02\x02\u0809\u080B\x03\x02\x02\x02" + + "\u080A\u0805\x03\x02\x02\x02\u080A\u0809\x03\x02\x02\x02\u080B\u012D\x03" + + "\x02\x02\x02\u080C\u080D\x07\u0182\x02\x02\u080D\u080E\x05\u0130\x99\x02" + + "\u080E\u080F\x07\u0183\x02\x02\u080F\u012F\x03\x02\x02\x02\u0810\u0815" + + "\x05\u0132\x9A\x02\u0811\u0812\x07\u0186\x02\x02\u0812\u0814\x05\u0132" + + "\x9A\x02\u0813\u0811\x03\x02\x02\x02\u0814\u0817\x03\x02\x02\x02\u0815" + + "\u0813\x03\x02\x02\x02\u0815\u0816\x03\x02\x02\x02\u0816\u0131\x03\x02" + + "\x02\x02\u0817\u0815\x03\x02\x02\x02\u0818\u081C\x05\u0134\x9B\x02\u0819" + + "\u081C\x05\u0136\x9C\x02\u081A\u081C\x05\u0174\xBB\x02\u081B\u0818\x03" + + "\x02\x02\x02\u081B\u0819\x03\x02\x02\x02\u081B\u081A\x03\x02\x02\x02\u081C" + + "\u0133\x03\x02\x02\x02\u081D\u081E\t&\x02\x02\u081E\u0135\x03\x02\x02" + + "\x02\u081F\u0820\x07\u0197\x02\x02\u0820\u0137\x03\x02\x02\x02\u0821\u0822" + + "\x07\u0170\x02\x02\u0822\u0823\x05\u0104\x83\x02\u0823\u0824\x07\u015C" + + "\x02\x02\u0824\u0825\x05\u0104\x83\x02\u0825\u0139\x03\x02\x02\x02\u0826" + + "\u0827\x05\u0144\xA3\x02\u0827\u013B\x03\x02\x02\x02\u0828\u0829\x05\u0144" + + "\xA3\x02\u0829\u013D\x03\x02\x02\x02\u082A\u082B\x05\u0144\xA3\x02\u082B" + + "\u013F\x03\x02\x02\x02\u082C\u082D\x05\u0144\xA3\x02\u082D\u0141\x03\x02" + + "\x02\x02\u082E\u082F\x05\u0144\xA3\x02\u082F\u0143\x03\x02\x02\x02\u0830" + + "\u0835\x05\u0132\x9A\x02\u0831\u0832\x07\u017F\x02\x02\u0832\u0834\x05" + + "\u0132\x9A\x02\u0833\u0831\x03\x02\x02\x02\u0834\u0837\x03\x02\x02\x02" + + "\u0835\u0836\x03\x02\x02\x02\u0835\u0833\x03\x02\x02\x02\u0836\u0145\x03" + + "\x02\x02\x02\u0837\u0835\x03\x02\x02\x02\u0838\u0839\x07\u0173\x02\x02" + + "\u0839\u083A\x05\u014C\xA7\x02\u083A\u0147\x03\x02\x02\x02\u083B\u083C" + + "\x07=\x02\x02\u083C\u083D\x07\u012C\x02\x02\u083D\u083E\x07\xF7\x02\x02" + + "\u083E\u0149\x03\x02\x02\x02\u083F\u0840\x07=\x02\x02\u0840\u0841\x07" + + "\xF7\x02\x02\u0841\u014B\x03\x02\x02\x02\u0842\u0843\x07\u0182\x02\x02" + + "\u0843\u0848\x05\u014E\xA8\x02\u0844\u0845\x07\u0186\x02\x02\u0845\u0847" + + "\x05\u014E\xA8\x02\u0846\u0844\x03\x02\x02\x02\u0847\u084A\x03\x02\x02" + + "\x02\u0848\u0846\x03\x02\x02\x02\u0848\u0849\x03\x02\x02\x02\u0849\u084B" + + "\x03\x02\x02\x02\u084A\u0848\x03\x02\x02\x02\u084B\u084C\x07\u0183\x02" + + "\x02\u084C\u014D\x03\x02\x02\x02\u084D\u0852\x05\u0150\xA9\x02\u084E\u0850" + + "\x07\u0177\x02\x02\u084F\u084E\x03\x02\x02\x02\u084F\u0850\x03\x02\x02" + + "\x02\u0850\u0851\x03\x02\x02\x02\u0851\u0853\x05\u0152\xAA\x02\u0852\u084F" + + "\x03\x02\x02\x02\u0852\u0853\x03\x02\x02\x02\u0853\u014F\x03\x02\x02\x02" + + "\u0854\u0858\x05\u0132\x9A\x02\u0855\u0858\x05\u0114\x8B\x02\u0856\u0858" + + "\x07\u0197\x02\x02\u0857\u0854\x03\x02\x02\x02\u0857\u0855\x03\x02\x02" + + "\x02\u0857\u0856\x03\x02\x02\x02\u0858\u0151\x03\x02\x02\x02\u0859\u085E" + + "\x07\u0198\x02\x02\u085A\u085E\x07\u0199\x02\x02\u085B\u085E\x05\u0166" + + "\xB4\x02\u085C\u085E\x07\u0197\x02\x02\u085D\u0859\x03\x02\x02\x02\u085D" + + "\u085A\x03\x02\x02\x02\u085D\u085B\x03\x02\x02\x02\u085D\u085C\x03\x02" + + "\x02\x02\u085E\u0153\x03\x02\x02\x02\u085F\u0866\x07\xB7\x02\x02\u0860" + + "\u0861\x07\u017D\x02\x02\u0861\u0866\x07\u017D\x02\x02\u0862\u0866\x07" + + "\u0133\x02\x02\u0863\u0864\x07\u017C\x02\x02\u0864\u0866\x07\u017C\x02" + + "\x02\u0865\u085F\x03\x02\x02\x02\u0865\u0860\x03\x02\x02\x02\u0865\u0862" + + "\x03\x02\x02\x02\u0865\u0863\x03\x02\x02\x02\u0866\u0155\x03\x02\x02\x02" + + "\u0867\u0876\x07\u0177\x02\x02\u0868\u0876\x07\u0178\x02\x02\u0869\u0876" + + "\x07\u0179\x02\x02\u086A\u086B\x07\u0179\x02\x02\u086B\u0876\x07\u0177" + + "\x02\x02\u086C\u086D\x07\u0178\x02\x02\u086D\u0876\x07\u0177\x02\x02\u086E" + + "\u086F\x07\u0179\x02\x02\u086F\u0876\x07\u0178\x02\x02\u0870\u0871\x07" + + "\u017A\x02\x02\u0871\u0876\x07\u0177\x02\x02\u0872\u0873\x07\u0179\x02" + + "\x02\u0873\u0874\x07\u0177\x02\x02\u0874\u0876\x07\u0178\x02\x02\u0875" + + "\u0867\x03\x02\x02\x02\u0875\u0868\x03\x02\x02\x02\u0875\u0869\x03\x02" + + "\x02\x02\u0875\u086A\x03\x02\x02\x02\u0875\u086C\x03\x02\x02\x02\u0875" + + "\u086E\x03\x02\x02\x02\u0875\u0870\x03\x02\x02\x02\u0875\u0872\x03\x02" + + "\x02\x02\u0876\u0157\x03\x02\x02\x02\u0877\u0878\x07\u0179\x02\x02\u0878" + + "\u087F\x07\u0179\x02\x02\u0879\u087A\x07\u0178\x02\x02\u087A\u087F\x07" + + "\u0178\x02\x02\u087B\u087F\x07\u017D\x02\x02\u087C\u087F\x07\u017E\x02" + + "\x02\u087D\u087F\x07\u017C\x02\x02\u087E\u0877\x03\x02\x02\x02\u087E\u0879" + + "\x03\x02\x02\x02\u087E\u087B\x03\x02\x02\x02\u087E\u087C\x03\x02\x02\x02" + + "\u087E\u087D\x03\x02\x02\x02\u087F\u0159\x03\x02\x02\x02\u0880\u0881\t" + + "\'\x02\x02\u0881\u015B\x03\x02\x02\x02\u0882\u0883\t(\x02\x02\u0883\u015D" + + "\x03\x02\x02\x02\u0884\u0893\x05\u011A\x8E\x02\u0885\u0893\x05\u0160\xB1" + + "\x02\u0886\u0893\x05\u0162\xB2\x02\u0887\u0889\x07\u018F\x02\x02\u0888" + + "\u0887\x03\x02\x02\x02\u0888\u0889\x03\x02\x02\x02\u0889\u088A\x03\x02" + + "\x02\x02\u088A\u0893\x05\u0164\xB3\x02\u088B\u0893\x05\u0166\xB4\x02\u088C" + + "\u0893\x07\u0199\x02\x02\u088D\u0893\x07\u019A\x02\x02\u088E\u0890\x07" + + "\u012C\x02\x02\u088F\u088E\x03\x02\x02\x02\u088F\u0890\x03\x02\x02\x02" + + "\u0890\u0891\x03\x02\x02\x02\u0891\u0893\x07\u012D\x02\x02\u0892\u0884" + + "\x03\x02\x02\x02\u0892\u0885\x03\x02\x02\x02\u0892\u0886\x03\x02\x02\x02" + + "\u0892\u0888\x03\x02\x02\x02\u0892\u088B\x03\x02\x02\x02\u0892\u088C\x03" + + "\x02\x02\x02\u0892\u088D\x03\x02\x02\x02\u0892\u088F\x03\x02\x02\x02\u0893" + + "\u015F\x03\x02\x02\x02\u0894\u0895\x05\u016A\xB6\x02\u0895\u0896\x05\u0162" + + "\xB2\x02\u0896\u0161\x03\x02\x02\x02\u0897\u0898\x07\u0197\x02\x02\u0898" + + "\u0163\x03\x02\x02\x02\u0899\u089A\x07\u0198\x02\x02\u089A\u0165\x03\x02" + + "\x02\x02\u089B\u089C\t)\x02\x02\u089C\u0167\x03\x02\x02\x02\u089D\u089E" + + "\t*\x02\x02\u089E\u0169\x03\x02\x02\x02\u089F\u08A0\t+\x02\x02\u08A0\u016B" + + "\x03\x02\x02\x02\u08A1\u08A2\t,\x02\x02"; + private static readonly _serializedATNSegment4: string = + "\u08A2\u016D\x03\x02\x02\x02\u08A3\u08A4\t-\x02\x02\u08A4\u016F\x03\x02" + + "\x02\x02\u08A5\u08A6\t.\x02\x02\u08A6\u0171\x03\x02\x02\x02\u08A7\u08A8" + + "\t/\x02\x02\u08A8\u0173\x03\x02\x02\x02\u08A9\u08AA\t0\x02\x02\u08AA\u0175" + + "\x03\x02\x02\x02\u0106\u017E\u0180\u0185\u0189\u018D\u0191\u0195\u0199" + + "\u019D\u01A1\u01A5\u01A9\u01AD\u01B1\u01B3\u01C5\u01C9\u01D2\u01D7\u01DE" + + "\u01E9\u01F2\u01FE\u0201\u0208\u0210\u0215\u0218\u021F\u0227\u022B\u0237" + + "\u023F\u0243\u0259\u025E\u0262\u0266\u026A\u0273\u0278\u027C\u0280\u0284" + + "\u0287\u028B\u0290\u0296\u029B\u02A0\u02A3\u02A7\u02AF\u02B7\u02BB\u02BF" + + "\u02C3\u02C7\u02CB\u02CF\u02D3\u02D7\u02D9\u02E3\u02EB\u0303\u030A\u0310" + + "\u0313\u0316\u0320\u0323\u032B\u0337\u034F\u035C\u0361\u0365\u036D\u0371" + + "\u0377\u0381\u0385\u038B\u038F\u0393\u0396\u039F\u03A3\u03AA\u03AD\u03B7" + + "\u03BF\u03C7\u03CB\u03DA\u03ED\u03F8\u03FC\u0403\u0408\u040E\u0412\u0419" + + "\u041D\u0421\u0425\u042D\u0431\u0436\u043C\u0442\u0445\u0449\u0454\u045D" + + "\u046B\u0477\u0486\u0489\u048D\u0490\u0492\u0497\u049B\u049E\u04A2\u04AB" + + "\u04B4\u04BE\u04C3\u04CF\u04D2\u04D5\u04D8\u04DE\u04E2\u04EA\u04ED\u04F2" + + "\u04F5\u04F7\u0505\u0510\u0515\u051D\u0520\u0523\u0528\u052A\u052C\u0531" + + "\u0534\u0538\u053B\u053E\u054A\u0551\u055C\u0577\u058D\u059F\u05A4\u05B0" + + "\u05BD\u05C9\u05D5\u05DA\u05F5\u05FD\u0601\u0604\u0607\u060E\u0611\u0614" + + "\u0617\u061A\u061D\u0622\u0625\u062E\u0633\u0637\u063C\u0645\u0658\u0660" + + "\u0668\u066C\u0670\u067A\u0694\u069C\u06A8\u06BE\u06C0\u06CB\u06CE\u06D0" + + "\u06D4\u06D8\u06DF\u06E8\u06EE\u06FB\u0702\u0707\u070D\u0714\u0716\u0719" + + "\u0725\u072A\u072D\u0733\u0735\u073B\u0752\u0754\u075C\u0760\u0769\u076D" + + "\u077D\u0786\u079E\u07A5\u07A8\u07B2\u07BB\u07C1\u07C7\u07CF\u07D4\u07D8" + + "\u07DF\u07E4\u07EC\u07F0\u07F3\u07F7\u07FA\u07FE\u0807\u080A\u0815\u081B" + + "\u0835\u0848\u084F\u0852\u0857\u085D\u0865\u0875\u087E\u0888\u088F\u0892"; public static readonly _serializedATN: string = Utils.join( [ FlinkSqlParser._serializedATNSegment0, FlinkSqlParser._serializedATNSegment1, FlinkSqlParser._serializedATNSegment2, FlinkSqlParser._serializedATNSegment3, + FlinkSqlParser._serializedATNSegment4, ], "", ); @@ -12955,15 +13176,6 @@ export class SqlStatementsContext extends ParserRuleContext { return this.getRuleContext(i, EmptyStatementContext); } } - public SEMICOLON(): TerminalNode[]; - public SEMICOLON(i: number): TerminalNode; - public SEMICOLON(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(FlinkSqlParser.SEMICOLON); - } else { - return this.getToken(FlinkSqlParser.SEMICOLON, i); - } - } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } @@ -12996,6 +13208,7 @@ export class SqlStatementContext extends ParserRuleContext { public ddlStatement(): DdlStatementContext | undefined { return this.tryGetRuleContext(0, DdlStatementContext); } + public SEMICOLON(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.SEMICOLON, 0); } public dmlStatement(): DmlStatementContext | undefined { return this.tryGetRuleContext(0, DmlStatementContext); } @@ -13194,8 +13407,8 @@ export class DmlStatementContext extends ParserRuleContext { export class DescribeStatementContext extends ParserRuleContext { - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public tablePath(): TablePathContext { + return this.getRuleContext(0, TablePathContext); } public KW_DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_DESCRIBE, 0); } public KW_DESC(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_DESC, 0); } @@ -13352,10 +13565,13 @@ export class ExplainDetailContext extends ParserRuleContext { export class UseStatementContext extends ParserRuleContext { public KW_USE(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_USE, 0); } - public uid(): UidContext | undefined { - return this.tryGetRuleContext(0, UidContext); - } public KW_CATALOG(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_CATALOG, 0); } + public catalogPath(): CatalogPathContext | undefined { + return this.tryGetRuleContext(0, CatalogPathContext); + } + public databasePath(): DatabasePathContext | undefined { + return this.tryGetRuleContext(0, DatabasePathContext); + } public useModuleStatement(): UseModuleStatementContext | undefined { return this.tryGetRuleContext(0, UseModuleStatementContext); } @@ -13446,8 +13662,8 @@ export class ShowStatememtContext extends ParserRuleContext { public KW_CATALOG(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_CATALOG, 0); } public KW_DATABASE(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_DATABASE, 0); } public KW_TABLES(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_TABLES, 0); } - public uid(): UidContext | undefined { - return this.tryGetRuleContext(0, UidContext); + public tablePath(): TablePathContext | undefined { + return this.tryGetRuleContext(0, TablePathContext); } public likePredicate(): LikePredicateContext | undefined { return this.tryGetRuleContext(0, LikePredicateContext); @@ -13455,6 +13671,9 @@ export class ShowStatememtContext extends ParserRuleContext { public KW_FROM(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_FROM, 0); } public KW_IN(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_IN, 0); } public KW_COLUMNS(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_COLUMNS, 0); } + public uid(): UidContext | undefined { + return this.tryGetRuleContext(0, UidContext); + } public KW_CREATE(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_CREATE, 0); } public KW_TABLE(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_TABLE, 0); } public KW_VIEW(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_VIEW, 0); } @@ -13794,8 +14013,8 @@ export class CreateTableContext extends ParserRuleContext { export class SimpleCreateTableContext extends ParserRuleContext { public KW_CREATE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_CREATE, 0); } public KW_TABLE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_TABLE, 0); } - public sourceTable(): SourceTableContext { - return this.getRuleContext(0, SourceTableContext); + public tablePathCreate(): TablePathCreateContext { + return this.getRuleContext(0, TablePathCreateContext); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); } public columnOptionDefinition(): ColumnOptionDefinitionContext[]; @@ -13873,8 +14092,8 @@ export class SimpleCreateTableContext extends ParserRuleContext { export class CreateTableAsSelectContext extends ParserRuleContext { public KW_CREATE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_CREATE, 0); } public KW_TABLE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_TABLE, 0); } - public sourceTable(): SourceTableContext { - return this.getRuleContext(0, SourceTableContext); + public tablePathCreate(): TablePathCreateContext { + return this.getRuleContext(0, TablePathCreateContext); } public withOption(): WithOptionContext { return this.getRuleContext(0, WithOptionContext); @@ -14974,8 +15193,8 @@ export class TransformArgumentContext extends ParserRuleContext { export class LikeDefinitionContext extends ParserRuleContext { public KW_LIKE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_LIKE, 0); } - public sourceTable(): SourceTableContext { - return this.getRuleContext(0, SourceTableContext); + public tablePath(): TablePathContext { + return this.getRuleContext(0, TablePathContext); } public LR_BRACKET(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.LR_BRACKET, 0); } public RR_BRACKET(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.RR_BRACKET, 0); } @@ -15016,38 +15235,6 @@ export class LikeDefinitionContext extends ParserRuleContext { } -export class SourceTableContext extends ParserRuleContext { - public uid(): UidContext { - return this.getRuleContext(0, UidContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return FlinkSqlParser.RULE_sourceTable; } - // @Override - public enterRule(listener: FlinkSqlParserListener): void { - if (listener.enterSourceTable) { - listener.enterSourceTable(this); - } - } - // @Override - public exitRule(listener: FlinkSqlParserListener): void { - if (listener.exitSourceTable) { - listener.exitSourceTable(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitSourceTable) { - return visitor.visitSourceTable(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class LikeOptionContext extends ParserRuleContext { public KW_INCLUDING(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_INCLUDING, 0); } public KW_EXCLUDING(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_EXCLUDING, 0); } @@ -15126,8 +15313,8 @@ export class CreateCatalogContext extends ParserRuleContext { export class CreateDatabaseContext extends ParserRuleContext { public KW_CREATE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_CREATE, 0); } public KW_DATABASE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public databasePathCreate(): DatabasePathCreateContext { + return this.getRuleContext(0, DatabasePathCreateContext); } public withOption(): WithOptionContext { return this.getRuleContext(0, WithOptionContext); @@ -15217,8 +15404,8 @@ export class CreateViewContext extends ParserRuleContext { export class CreateFunctionContext extends ParserRuleContext { public KW_CREATE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_CREATE, 0); } public KW_FUNCTION(): TerminalNode { return this.getToken(FlinkSqlParser.KW_FUNCTION, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public functionName(): FunctionNameContext { + return this.getRuleContext(0, FunctionNameContext); } public KW_AS(): TerminalNode { return this.getToken(FlinkSqlParser.KW_AS, 0); } public identifier(): IdentifierContext { @@ -15354,8 +15541,8 @@ export class JarFileNameContext extends ParserRuleContext { export class AlterTableContext extends ParserRuleContext { public KW_ALTER(): TerminalNode { return this.getToken(FlinkSqlParser.KW_ALTER, 0); } public KW_TABLE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_TABLE, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public tablePath(): TablePathContext { + return this.getRuleContext(0, TablePathContext); } public renameDefinition(): RenameDefinitionContext | undefined { return this.tryGetRuleContext(0, RenameDefinitionContext); @@ -15661,8 +15848,8 @@ export class AlertViewContext extends ParserRuleContext { export class AlterDatabaseContext extends ParserRuleContext { public KW_ALTER(): TerminalNode { return this.getToken(FlinkSqlParser.KW_ALTER, 0); } public KW_DATABASE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public databasePath(): DatabasePathContext { + return this.getRuleContext(0, DatabasePathContext); } public setKeyValueDefinition(): SetKeyValueDefinitionContext { return this.getRuleContext(0, SetKeyValueDefinitionContext); @@ -15745,8 +15932,8 @@ export class AlterFunctionContext extends ParserRuleContext { export class DropCatalogContext extends ParserRuleContext { public KW_DROP(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DROP, 0); } public KW_CATALOG(): TerminalNode { return this.getToken(FlinkSqlParser.KW_CATALOG, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public catalogPath(): CatalogPathContext { + return this.getRuleContext(0, CatalogPathContext); } public ifExists(): IfExistsContext | undefined { return this.tryGetRuleContext(0, IfExistsContext); @@ -15782,8 +15969,8 @@ export class DropCatalogContext extends ParserRuleContext { export class DropTableContext extends ParserRuleContext { public KW_DROP(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DROP, 0); } public KW_TABLE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_TABLE, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public tablePath(): TablePathContext { + return this.getRuleContext(0, TablePathContext); } public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_TEMPORARY, 0); } public ifExists(): IfExistsContext | undefined { @@ -15821,8 +16008,8 @@ export class DropDatabaseContext extends ParserRuleContext { public _dropType!: Token; public KW_DROP(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DROP, 0); } public KW_DATABASE(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public databasePath(): DatabasePathContext { + return this.getRuleContext(0, DatabasePathContext); } public ifExists(): IfExistsContext | undefined { return this.tryGetRuleContext(0, IfExistsContext); @@ -15898,8 +16085,8 @@ export class DropViewContext extends ParserRuleContext { export class DropFunctionContext extends ParserRuleContext { public KW_DROP(): TerminalNode { return this.getToken(FlinkSqlParser.KW_DROP, 0); } public KW_FUNCTION(): TerminalNode { return this.getToken(FlinkSqlParser.KW_FUNCTION, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public functionName(): FunctionNameContext { + return this.getRuleContext(0, FunctionNameContext); } public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_TEMPORARY, 0); } public KW_SYSTEM(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_SYSTEM, 0); } @@ -15975,8 +16162,8 @@ export class InsertStatementContext extends ParserRuleContext { export class InsertSimpleStatementContext extends ParserRuleContext { public KW_INSERT(): TerminalNode { return this.getToken(FlinkSqlParser.KW_INSERT, 0); } - public uid(): UidContext { - return this.getRuleContext(0, UidContext); + public tablePath(): TablePathContext { + return this.getRuleContext(0, TablePathContext); } public KW_INTO(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_INTO, 0); } public KW_OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(FlinkSqlParser.KW_OVERWRITE, 0); } @@ -16932,38 +17119,6 @@ export class TablePrimaryContext extends ParserRuleContext { } -export class TablePathContext extends ParserRuleContext { - public uid(): UidContext { - return this.getRuleContext(0, UidContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return FlinkSqlParser.RULE_tablePath; } - // @Override - public enterRule(listener: FlinkSqlParserListener): void { - if (listener.enterTablePath) { - listener.enterTablePath(this); - } - } - // @Override - public exitRule(listener: FlinkSqlParserListener): void { - if (listener.exitTablePath) { - listener.exitTablePath(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitTablePath) { - return visitor.visitTablePath(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class SystemTimePeriodContext extends ParserRuleContext { public KW_FOR(): TerminalNode { return this.getToken(FlinkSqlParser.KW_FOR, 0); } public KW_SYSTEM_TIME(): TerminalNode { return this.getToken(FlinkSqlParser.KW_SYSTEM_TIME, 0); } @@ -20432,6 +20587,166 @@ export class WhenClauseContext extends ParserRuleContext { } +export class CatalogPathContext extends ParserRuleContext { + public uid(): UidContext { + return this.getRuleContext(0, UidContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return FlinkSqlParser.RULE_catalogPath; } + // @Override + public enterRule(listener: FlinkSqlParserListener): void { + if (listener.enterCatalogPath) { + listener.enterCatalogPath(this); + } + } + // @Override + public exitRule(listener: FlinkSqlParserListener): void { + if (listener.exitCatalogPath) { + listener.exitCatalogPath(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitCatalogPath) { + return visitor.visitCatalogPath(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DatabasePathContext extends ParserRuleContext { + public uid(): UidContext { + return this.getRuleContext(0, UidContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return FlinkSqlParser.RULE_databasePath; } + // @Override + public enterRule(listener: FlinkSqlParserListener): void { + if (listener.enterDatabasePath) { + listener.enterDatabasePath(this); + } + } + // @Override + public exitRule(listener: FlinkSqlParserListener): void { + if (listener.exitDatabasePath) { + listener.exitDatabasePath(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitDatabasePath) { + return visitor.visitDatabasePath(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DatabasePathCreateContext extends ParserRuleContext { + public uid(): UidContext { + return this.getRuleContext(0, UidContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return FlinkSqlParser.RULE_databasePathCreate; } + // @Override + public enterRule(listener: FlinkSqlParserListener): void { + if (listener.enterDatabasePathCreate) { + listener.enterDatabasePathCreate(this); + } + } + // @Override + public exitRule(listener: FlinkSqlParserListener): void { + if (listener.exitDatabasePathCreate) { + listener.exitDatabasePathCreate(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitDatabasePathCreate) { + return visitor.visitDatabasePathCreate(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TablePathCreateContext extends ParserRuleContext { + public uid(): UidContext { + return this.getRuleContext(0, UidContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return FlinkSqlParser.RULE_tablePathCreate; } + // @Override + public enterRule(listener: FlinkSqlParserListener): void { + if (listener.enterTablePathCreate) { + listener.enterTablePathCreate(this); + } + } + // @Override + public exitRule(listener: FlinkSqlParserListener): void { + if (listener.exitTablePathCreate) { + listener.exitTablePathCreate(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitTablePathCreate) { + return visitor.visitTablePathCreate(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TablePathContext extends ParserRuleContext { + public uid(): UidContext { + return this.getRuleContext(0, UidContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return FlinkSqlParser.RULE_tablePath; } + // @Override + public enterRule(listener: FlinkSqlParserListener): void { + if (listener.enterTablePath) { + listener.enterTablePath(this); + } + } + // @Override + public exitRule(listener: FlinkSqlParserListener): void { + if (listener.exitTablePath) { + listener.exitTablePath(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitTablePath) { + return visitor.visitTablePath(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class UidContext extends ParserRuleContext { public identifier(): IdentifierContext[]; public identifier(i: number): IdentifierContext; diff --git a/src/lib/flinksql/FlinkSqlParserListener.ts b/src/lib/flinksql/FlinkSqlParserListener.ts index 99a2e07..700c8f2 100644 --- a/src/lib/flinksql/FlinkSqlParserListener.ts +++ b/src/lib/flinksql/FlinkSqlParserListener.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; @@ -84,7 +84,6 @@ import { TransformListContext } from "./FlinkSqlParser"; import { TransformContext } from "./FlinkSqlParser"; import { TransformArgumentContext } from "./FlinkSqlParser"; import { LikeDefinitionContext } from "./FlinkSqlParser"; -import { SourceTableContext } from "./FlinkSqlParser"; import { LikeOptionContext } from "./FlinkSqlParser"; import { CreateCatalogContext } from "./FlinkSqlParser"; import { CreateDatabaseContext } from "./FlinkSqlParser"; @@ -127,7 +126,6 @@ import { FromClauseContext } from "./FlinkSqlParser"; import { TableExpressionContext } from "./FlinkSqlParser"; import { TableReferenceContext } from "./FlinkSqlParser"; import { TablePrimaryContext } from "./FlinkSqlParser"; -import { TablePathContext } from "./FlinkSqlParser"; import { SystemTimePeriodContext } from "./FlinkSqlParser"; import { DateTimeExpressionContext } from "./FlinkSqlParser"; import { InlineDataValueClauseContext } from "./FlinkSqlParser"; @@ -192,6 +190,11 @@ import { IdentifierContext } from "./FlinkSqlParser"; import { UnquotedIdentifierContext } from "./FlinkSqlParser"; import { QuotedIdentifierContext } from "./FlinkSqlParser"; import { WhenClauseContext } from "./FlinkSqlParser"; +import { CatalogPathContext } from "./FlinkSqlParser"; +import { DatabasePathContext } from "./FlinkSqlParser"; +import { DatabasePathCreateContext } from "./FlinkSqlParser"; +import { TablePathCreateContext } from "./FlinkSqlParser"; +import { TablePathContext } from "./FlinkSqlParser"; import { UidContext } from "./FlinkSqlParser"; import { WithOptionContext } from "./FlinkSqlParser"; import { IfNotExistsContext } from "./FlinkSqlParser"; @@ -1177,17 +1180,6 @@ export interface FlinkSqlParserListener extends ParseTreeListener { */ exitLikeDefinition?: (ctx: LikeDefinitionContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.sourceTable`. - * @param ctx the parse tree - */ - enterSourceTable?: (ctx: SourceTableContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.sourceTable`. - * @param ctx the parse tree - */ - exitSourceTable?: (ctx: SourceTableContext) => void; - /** * Enter a parse tree produced by `FlinkSqlParser.likeOption`. * @param ctx the parse tree @@ -1650,17 +1642,6 @@ export interface FlinkSqlParserListener extends ParseTreeListener { */ exitTablePrimary?: (ctx: TablePrimaryContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.tablePath`. - * @param ctx the parse tree - */ - enterTablePath?: (ctx: TablePathContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.tablePath`. - * @param ctx the parse tree - */ - exitTablePath?: (ctx: TablePathContext) => void; - /** * Enter a parse tree produced by `FlinkSqlParser.systemTimePeriod`. * @param ctx the parse tree @@ -2365,6 +2346,61 @@ export interface FlinkSqlParserListener extends ParseTreeListener { */ exitWhenClause?: (ctx: WhenClauseContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.catalogPath`. + * @param ctx the parse tree + */ + enterCatalogPath?: (ctx: CatalogPathContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.catalogPath`. + * @param ctx the parse tree + */ + exitCatalogPath?: (ctx: CatalogPathContext) => void; + + /** + * Enter a parse tree produced by `FlinkSqlParser.databasePath`. + * @param ctx the parse tree + */ + enterDatabasePath?: (ctx: DatabasePathContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.databasePath`. + * @param ctx the parse tree + */ + exitDatabasePath?: (ctx: DatabasePathContext) => void; + + /** + * Enter a parse tree produced by `FlinkSqlParser.databasePathCreate`. + * @param ctx the parse tree + */ + enterDatabasePathCreate?: (ctx: DatabasePathCreateContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.databasePathCreate`. + * @param ctx the parse tree + */ + exitDatabasePathCreate?: (ctx: DatabasePathCreateContext) => void; + + /** + * Enter a parse tree produced by `FlinkSqlParser.tablePathCreate`. + * @param ctx the parse tree + */ + enterTablePathCreate?: (ctx: TablePathCreateContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.tablePathCreate`. + * @param ctx the parse tree + */ + exitTablePathCreate?: (ctx: TablePathCreateContext) => void; + + /** + * Enter a parse tree produced by `FlinkSqlParser.tablePath`. + * @param ctx the parse tree + */ + enterTablePath?: (ctx: TablePathContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.tablePath`. + * @param ctx the parse tree + */ + exitTablePath?: (ctx: TablePathContext) => void; + /** * Enter a parse tree produced by `FlinkSqlParser.uid`. * @param ctx the parse tree diff --git a/src/lib/flinksql/FlinkSqlParserVisitor.ts b/src/lib/flinksql/FlinkSqlParserVisitor.ts index 197c41c..436b327 100644 --- a/src/lib/flinksql/FlinkSqlParserVisitor.ts +++ b/src/lib/flinksql/FlinkSqlParserVisitor.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT +// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; @@ -84,7 +84,6 @@ import { TransformListContext } from "./FlinkSqlParser"; import { TransformContext } from "./FlinkSqlParser"; import { TransformArgumentContext } from "./FlinkSqlParser"; import { LikeDefinitionContext } from "./FlinkSqlParser"; -import { SourceTableContext } from "./FlinkSqlParser"; import { LikeOptionContext } from "./FlinkSqlParser"; import { CreateCatalogContext } from "./FlinkSqlParser"; import { CreateDatabaseContext } from "./FlinkSqlParser"; @@ -127,7 +126,6 @@ import { FromClauseContext } from "./FlinkSqlParser"; import { TableExpressionContext } from "./FlinkSqlParser"; import { TableReferenceContext } from "./FlinkSqlParser"; import { TablePrimaryContext } from "./FlinkSqlParser"; -import { TablePathContext } from "./FlinkSqlParser"; import { SystemTimePeriodContext } from "./FlinkSqlParser"; import { DateTimeExpressionContext } from "./FlinkSqlParser"; import { InlineDataValueClauseContext } from "./FlinkSqlParser"; @@ -192,6 +190,11 @@ import { IdentifierContext } from "./FlinkSqlParser"; import { UnquotedIdentifierContext } from "./FlinkSqlParser"; import { QuotedIdentifierContext } from "./FlinkSqlParser"; import { WhenClauseContext } from "./FlinkSqlParser"; +import { CatalogPathContext } from "./FlinkSqlParser"; +import { DatabasePathContext } from "./FlinkSqlParser"; +import { DatabasePathCreateContext } from "./FlinkSqlParser"; +import { TablePathCreateContext } from "./FlinkSqlParser"; +import { TablePathContext } from "./FlinkSqlParser"; import { UidContext } from "./FlinkSqlParser"; import { WithOptionContext } from "./FlinkSqlParser"; import { IfNotExistsContext } from "./FlinkSqlParser"; @@ -825,13 +828,6 @@ export interface FlinkSqlParserVisitor extends ParseTreeVisitor */ visitLikeDefinition?: (ctx: LikeDefinitionContext) => Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.sourceTable`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSourceTable?: (ctx: SourceTableContext) => Result; - /** * Visit a parse tree produced by `FlinkSqlParser.likeOption`. * @param ctx the parse tree @@ -1126,13 +1122,6 @@ export interface FlinkSqlParserVisitor extends ParseTreeVisitor */ visitTablePrimary?: (ctx: TablePrimaryContext) => Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.tablePath`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTablePath?: (ctx: TablePathContext) => Result; - /** * Visit a parse tree produced by `FlinkSqlParser.systemTimePeriod`. * @param ctx the parse tree @@ -1581,6 +1570,41 @@ export interface FlinkSqlParserVisitor extends ParseTreeVisitor */ visitWhenClause?: (ctx: WhenClauseContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.catalogPath`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCatalogPath?: (ctx: CatalogPathContext) => Result; + + /** + * Visit a parse tree produced by `FlinkSqlParser.databasePath`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatabasePath?: (ctx: DatabasePathContext) => Result; + + /** + * Visit a parse tree produced by `FlinkSqlParser.databasePathCreate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatabasePathCreate?: (ctx: DatabasePathCreateContext) => Result; + + /** + * Visit a parse tree produced by `FlinkSqlParser.tablePathCreate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTablePathCreate?: (ctx: TablePathCreateContext) => Result; + + /** + * Visit a parse tree produced by `FlinkSqlParser.tablePath`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTablePath?: (ctx: TablePathContext) => Result; + /** * Visit a parse tree produced by `FlinkSqlParser.uid`. * @param ctx the parse tree diff --git a/src/parser/common/basic-parser-types.ts b/src/parser/common/basic-parser-types.ts new file mode 100644 index 0000000..4b4343c --- /dev/null +++ b/src/parser/common/basic-parser-types.ts @@ -0,0 +1,71 @@ +/** + * The insertion position of the candidate list. + * Such as cursor position + */ +export interface CaretPosition { + /** start at 1 */ + lineNumber: number; + /** start at 1 */ + column: number; +} + +/** + * Syntax context type at caret position + */ +export enum SyntaxContextType { + /** catalog name */ + CATALOG = 'catalog', + /** database name path, such as catalog.db */ + DATABASE = 'database', + /** database name path will be created */ + DATABASE_CREATE = 'databaseCreate', + /** table name path, such as catalog.db.tb */ + TABLE = 'table', + /** table name path will be created */ + TABLE_CREATE = 'tableCreate' +} + +export interface WordRange { + /** content of word */ + text: string; + /** start at 0 */ + startIndex: number; + stopIndex: number; + /** start at 1 */ + line: number; + /** start at 1 */ + startColumn: number; + stopColumn: number; +} + +/** + * Suggested information analyzed from the input + */ +export interface SyntaxSuggestion { + syntaxContextType: SyntaxContextType; + wordRanges: T[]; +} + +/** + * Suggested information analyzed from the input + */ +export interface Suggestions { + /** + * Suggestions about syntax + */ + syntax: SyntaxSuggestion[]; + /** + * Suggestions about keywords + */ + keywords: string[]; +} + +export interface TextSlice { + startIndex: number; + endIndex: number; + startLine: number; + endLine: number; + startColumn: number; + endColumn: number; + text: string; +} \ No newline at end of file diff --git a/src/parser/common/basicParser.ts b/src/parser/common/basicParser.ts index 5bbb1b7..8ba60eb 100644 --- a/src/parser/common/basicParser.ts +++ b/src/parser/common/basicParser.ts @@ -1,86 +1,164 @@ -import { Parser } from 'antlr4ts'; -import { ParseTreeWalker } from 'antlr4ts/tree'; - +import { + Parser, + Lexer, + Token, + CharStreams, + CommonTokenStream, + CodePointCharStream, + ParserRuleContext +} from 'antlr4ts'; +import { ParseTreeWalker, ParseTreeListener } from 'antlr4ts/tree'; +import { CandidatesCollection, CodeCompletionCore } from 'antlr4-c3'; +import { findCaretTokenIndex } from '../../utils/findCaretTokenIndex'; +import { + CaretPosition, + Suggestions, + SyntaxSuggestion, + WordRange, + TextSlice +} from './basic-parser-types'; import ParserErrorListener, { ParserError, ErrorHandler, ParserErrorCollector, } from './parserErrorListener'; -interface IParser extends Parser { - // Lost in type definition - ruleNames: string[]; +interface IParser extends Parser { // Customized in our parser - program(): any; + program(): IParserRuleContext; +} + +interface SplitListener extends ParseTreeListener { + statementsContext: ParserRuleContext[]; } /** * Custom Parser class, subclass needs extends it. */ -export default abstract class BasicParser { - private _parser: IParser; - - public parse( - input: string, - errorListener?: ErrorHandler, - ) { - const parser = this.createParser(input); - this._parser = parser; - - parser.removeErrorListeners(); - parser.addErrorListener(new ParserErrorListener(errorListener)); - - const parserTree = parser.program(); - - return parserTree; - } - - public validate(input: string): ParserError[] { - const lexerError = []; const syntaxErrors = []; - - const parser = this.createParser(input); - this._parser = parser; - - parser.removeErrorListeners(); - parser.addErrorListener(new ParserErrorCollector(syntaxErrors)); - - parser.program(); - return lexerError.concat(syntaxErrors); - } +export default abstract class BasicParser< + L extends Lexer = Lexer, + PRC extends ParserRuleContext = ParserRuleContext, + P extends IParser = IParser +> { + protected _charStreams: CodePointCharStream; + protected _lexer: L; + protected _tokenStream: CommonTokenStream; + protected _parser: P; + protected _parserTree: PRC; + protected _errorCollector: ParserErrorCollector = new ParserErrorCollector(); + protected _parsedInput: string = null; /** - * Create antrl4 Lexer object + * preferredRules for antlr4-c3 + */ + public abstract preferredRules: Set; + + /** + * Create antrl4 Lexer instance * @param input source string */ - public abstract createLexer(input: string); + public abstract createLexerFormCharStream(charStreams: CodePointCharStream): L; /** - * Create Parser by lexer - * @param lexer Lexer + * Create Parser by CommonTokenStream + * @param tokenStream CommonTokenStream */ - public abstract createParserFromLexer(lexer); + public abstract createParserFromTokenStream(tokenStream: CommonTokenStream): P; + + /** + * convert candidates to suggestions + * @param candidates candidate list + * @param allTokens all tokens from input + * @param caretTokenIndex tokenIndex of caretPosition + * @param tokenIndexOffset offset of the tokenIndex in the candidates + * compared to the tokenIndex in allTokens + */ + public abstract processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number, + tokenIndexOffset: number, + ): Suggestions; /** - * Get all Tokens of input string - * @param input string + * splitListener instance Getter + */ + protected abstract get splitListener (): SplitListener; + + /** + * If it is invoked multiple times in a row and the input parameters is the same + * this method returns the parsing result directly for the first time, + * unless the errorListener parameter is passed + * @param input source string + * @param errorListener listen errors + * @returns parserTree + */ + public parse( + input: string, + errorListener?: ErrorHandler + ) { + // Avoid parsing the same input repeatedly + if(this._parsedInput === input && !errorListener) { + return; + } + + const parser = this.createParser(input); + this._parsedInput = input; + + parser.removeErrorListeners(); + this._errorCollector.clear(); + + parser.addErrorListener(this._errorCollector); + if(errorListener) { + parser.addErrorListener(new ParserErrorListener(errorListener)); + } + + this._parserTree = parser.program(); + + return this._parserTree; + } + + /** + * validate input string and return syntax errors + * @param input source string + * @returns syntax errors + */ + public validate(input: string): ParserError[] { + this.parse(input); + const lexerError = []; + return lexerError.concat(this._errorCollector.parserErrors); + } + + /** + * Get all Tokens of input string,'' is not included + * @param input source string * @returns Token[] */ - public getAllTokens(input: string): string[] { - const lexer = this.createLexer(input); - return lexer.getAllTokens().map(token => token.text); + public getAllTokens(input: string): Token[] { + this.parse(input); + let allTokens = this._tokenStream.getTokens(); + if(allTokens[allTokens.length - 1].text === '') { + allTokens = allTokens.slice(0, -1) + } + return allTokens }; /** * Get Parser instance by input string - * @param input + * @param input string */ - public createParser(input: string): IParser { - const lexer = this.createLexer(input); - const parser: any = this.createParserFromLexer(lexer); - parser.buildParseTrees = true; - this._parser = parser; + public createParser(input: string): P { + this._parserTree = null; + this._charStreams = CharStreams.fromString(input.toUpperCase()); + this._lexer = this.createLexerFormCharStream(this._charStreams); - return parser; + this._tokenStream = new CommonTokenStream(this._lexer); + this._tokenStream.fill(); + + this._parser = this.createParserFromTokenStream(this._tokenStream); + this._parser.buildParseTree = true; + + return this._parser } /** @@ -88,18 +166,15 @@ export default abstract class BasicParser { * @param string input */ public parserTreeToString(input: string): string { - const parser = this.createParser(input); - this._parser = parser; - - const tree = parser.program(); - return tree.toStringTree(parser.ruleNames); + this.parse(input); + return this._parserTree.toStringTree(this._parser.ruleNames); } /** * Get List-like style tree string - * @param parserTree + * @param parserTree ProgramRuleContext */ - public toString(parserTree: any): string { + public toString(parserTree: PRC): string { return parserTree.toStringTree(this._parser.ruleNames); } @@ -107,7 +182,130 @@ export default abstract class BasicParser { * @param listener Listener instance extends ParserListener * @param parserTree parser Tree */ - public listen(listener: any, parserTree: any) { + public listen(listener: PTL, parserTree: PRC) { ParseTreeWalker.DEFAULT.walk(listener, parserTree); } + + /** + * split input into statements + * @param input source string + */ + public splitSQL(input): TextSlice[] { + this.parse(input); + const splitListener = this.splitListener; + this.listen(splitListener, this._parserTree); + + const res = splitListener.statementsContext.map(context => { + const { start, stop } = context; + return { + startIndex: start.startIndex, + endIndex: stop.stopIndex, + startLine: start.line, + endLine: stop.line, + startColumn: start.charPositionInLine + 1, + endColumn: stop.charPositionInLine + stop.text.length, + text: this._parsedInput.slice(start.startIndex, stop.stopIndex + 1), + } + }) + + return res; + } + + /** + * Get suggestions of syntax and token at caretPosition + * @param input source string + * @param caretPosition caret position, such as cursor position + * @returns suggestion + */ + public getSuggestionAtCaretPosition(input: string, caretPosition: CaretPosition): Suggestions | null { + const splitListener = this.splitListener; + // TODO: add splitListener to all sqlParser implements add remove following if + if(!splitListener) return null; + + this.parse(input); + let sqlParserIns = this._parser; + let allTokens = this.getAllTokens(input); + let caretTokenIndex = findCaretTokenIndex(caretPosition, allTokens); + let c3Context: ParserRuleContext = this._parserTree; + let tokenIndexOffset: number = 0; + + if(!caretTokenIndex && caretTokenIndex !== 0) return null; + + /** + * Split sql by statement. + * Try to collect candidates from the caret statement only. + */ + this.listen(splitListener, this._parserTree); + + // If there are multiple statements. + if (splitListener.statementsContext.length) { + // find statement rule context where caretPosition is located. + const caretStatementContext = splitListener?.statementsContext.find(ctx => { + return caretTokenIndex <= ctx.stop?.tokenIndex && caretTokenIndex >= ctx.start.tokenIndex; + }); + + if(caretStatementContext) { + c3Context = caretStatementContext + } else { + const lastIndex = splitListener.statementsContext.length > 1 + ? 2 + : 1; + const lastStatementToken= splitListener + .statementsContext[splitListener?.statementsContext.length - lastIndex] + .stop; + /** + * If caretStatementContext is not found and it follows all statements. + * Reparses part of the input following the penultimate statement. + * And c3 will collect candidates in the new parserTreeContext. + */ + if (caretTokenIndex > lastStatementToken?.tokenIndex) { + /** + * Save offset of the tokenIndex in the partInput + * compared to the tokenIndex in the whole input + */ + tokenIndexOffset = lastStatementToken?.tokenIndex + 1; + // Correct caretTokenIndex + caretTokenIndex = caretTokenIndex - tokenIndexOffset; + + const inputSlice = input.slice(lastStatementToken.stopIndex + 1); + const charStreams = CharStreams.fromString(inputSlice.toUpperCase()); + const lexer = this.createLexerFormCharStream(charStreams); + const tokenStream = new CommonTokenStream(lexer); + tokenStream.fill(); + const parser = this.createParserFromTokenStream(tokenStream); + parser.buildParseTree = true; + sqlParserIns = parser; + c3Context = parser.program(); + } + } + } + + const core = new CodeCompletionCore(sqlParserIns); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(caretTokenIndex, c3Context); + const originalSuggestions = this.processCandidates(candidates, allTokens, caretTokenIndex, tokenIndexOffset); + + const syntaxSuggestions: SyntaxSuggestion[] = originalSuggestions.syntax + .map(syntaxCtx => { + const wordRanges: WordRange[] = syntaxCtx.wordRanges.map(token => { + return { + text: this._parsedInput.slice(token.startIndex, token.stopIndex + 1), + startIndex: token.startIndex, + stopIndex: token.stopIndex, + line: token.line, + startColumn: token.charPositionInLine + 1, + stopColumn: token.charPositionInLine + token.text.length + } + }) + return { + syntaxContextType: syntaxCtx.syntaxContextType, + wordRanges, + } + }) + return { + syntax: syntaxSuggestions, + keywords: originalSuggestions.keywords + } + } } diff --git a/src/parser/common/parserErrorListener.ts b/src/parser/common/parserErrorListener.ts index 9839b44..2ed1e08 100644 --- a/src/parser/common/parserErrorListener.ts +++ b/src/parser/common/parserErrorListener.ts @@ -1,4 +1,6 @@ import { Token, Recognizer, ParserErrorListener, RecognitionException } from 'antlr4ts'; +import { ATNSimulator } from 'antlr4ts/atn/ATNSimulator' + export interface ParserError { startLine: number; endLine: number; @@ -8,56 +10,70 @@ export interface ParserError { } export interface SyntaxError { - recognizer: Recognizer; + recognizer: Recognizer; offendingSymbol: Token; line: number; charPositionInLine: number; msg: string; - e: any; + e: RecognitionException; } -type ErrorOffendingSymbol = { - text: string; -}; - export type ErrorHandler = (err: ParserError, errOption: SyntaxError) => void; export class ParserErrorCollector implements ParserErrorListener { - private _errors: ParserError[]; - - constructor(error: ParserError[]) { - this._errors = error; - } + private _parseErrors: ParserError[] = []; + private _syntaxErrors: SyntaxError[] = []; syntaxError( - recognizer: Recognizer, offendingSymbol: ErrorOffendingSymbol, line: number, - charPositionInLine: number, msg: string, e: RecognitionException, + recognizer: Recognizer, + offendingSymbol: Token, + line: number, + charPositionInLine: number, + msg: string, + e: RecognitionException, ) { let endCol = charPositionInLine + 1; if (offendingSymbol && offendingSymbol.text !== null) { endCol = charPositionInLine + offendingSymbol.text.length; } - this._errors.push({ + this._parseErrors.push({ startLine: line, endLine: line, startCol: charPositionInLine, endCol: endCol, message: msg, }); + + this._syntaxErrors.push({ + e, + line, + msg, + recognizer, + offendingSymbol, + charPositionInLine, + }) + } + + clear() { + this._parseErrors = []; + this._syntaxErrors = []; + } + + get parserErrors () { + return this._parseErrors } } - export default class CustomParserErrorListener implements ParserErrorListener { private _errorHandler; - constructor(errorListener: ErrorHandler) { + constructor(errorListener: ErrorHandler) { this._errorHandler = errorListener; } syntaxError( - recognizer: Recognizer, offendingSymbol: ErrorOffendingSymbol, line: number, - charPositionInLine: number, msg: string, e: any, + recognizer: Recognizer, offendingSymbol: Token, line: number, + charPositionInLine: number, msg: string, e: RecognitionException, ) { let endCol = charPositionInLine + 1; if (offendingSymbol && offendingSymbol.text !== null) { @@ -81,4 +97,3 @@ export default class CustomParserErrorListener implements ParserErrorListener { } } } - diff --git a/src/parser/flinksql.ts b/src/parser/flinksql.ts index e89e541..0a014d6 100644 --- a/src/parser/flinksql.ts +++ b/src/parser/flinksql.ts @@ -1,17 +1,115 @@ -import { CharStreams, CommonTokenStream } from 'antlr4ts'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { FlinkSqlLexer } from '../lib/flinksql/FlinkSqlLexer'; -import { FlinkSqlParser } from '../lib/flinksql/FlinkSqlParser'; +import { + FlinkSqlParser, + ProgramContext, + SqlStatementContext, + SqlStatementsContext +} from '../lib/flinksql/FlinkSqlParser'; +import { FlinkSqlParserListener } from 'src/lib/flinksql/FlinkSqlParserListener'; +import { SyntaxContextType, Suggestions, SyntaxSuggestion } from './common/basic-parser-types'; import BasicParser from './common/basicParser'; -export default class FlinkSQL extends BasicParser { - public createLexer(input: string): FlinkSqlLexer { - const chars = CharStreams.fromString(input.toUpperCase()); // Some Lexer only support uppercase token, So you need transform - const lexer = new FlinkSqlLexer(chars); + +export default class FlinkSQL extends BasicParser { + public createLexerFormCharStream(charStreams) { + const lexer = new FlinkSqlLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: FlinkSqlLexer): FlinkSqlParser { - const tokens = new CommonTokenStream(lexer); - const parser = new FlinkSqlParser(tokens); + + public createParserFromTokenStream(tokenStream) { + const parser = new FlinkSqlParser(tokenStream); return parser; } + + public preferredRules = new Set([ + FlinkSqlParser.RULE_tablePath, // table name >> select / insert ... + FlinkSqlParser.RULE_tablePathCreate, // table name >> create + FlinkSqlParser.RULE_databasePath, // database name >> show + FlinkSqlParser.RULE_databasePathCreate, // database name >> create + FlinkSqlParser.RULE_catalogPath, // catalog name + ]); + + protected get splitListener () { + return new FlinkSqlSplitListener(); + } + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number, + tokenIndexOffset: number + ): Suggestions { + const originalSyntaxSuggestions: SyntaxSuggestion[] = []; + const keywords: string[] = []; + + for (let candidate of candidates.rules) { + const [ruleType, candidateRule] = candidate; + const startTokenIndex = candidateRule.startTokenIndex + tokenIndexOffset; + const tokenRanges = allTokens.slice(startTokenIndex, caretTokenIndex + 1); + + let syntaxContextType: SyntaxContextType; + switch (ruleType) { + case FlinkSqlParser.RULE_tablePath: { + syntaxContextType = SyntaxContextType.TABLE; + break; + } + case FlinkSqlParser.RULE_tablePathCreate: { + syntaxContextType = SyntaxContextType.TABLE_CREATE; + break; + } + case FlinkSqlParser.RULE_databasePath: { + syntaxContextType = SyntaxContextType.DATABASE; + break; + } + case FlinkSqlParser.RULE_databasePathCreate: { + syntaxContextType = SyntaxContextType.DATABASE; + break; + } + case FlinkSqlParser.RULE_catalogPath: { + syntaxContextType = SyntaxContextType.CATALOG; + break; + } + default: + break; + } + + if (syntaxContextType) { + originalSyntaxSuggestions.push({ + syntaxContextType, + wordRanges: tokenRanges + }) + } + } + + for (let candidate of candidates.tokens) { + const symbolicName = this._parser.vocabulary.getSymbolicName(candidate[0]); + const displayName = this._parser.vocabulary.getDisplayName(candidate[0]); + if(symbolicName && symbolicName.startsWith('KW_')) { + const keyword = displayName.startsWith("'") && displayName.endsWith("'") + ? displayName.slice(1, -1) + : displayName + keywords.push(keyword); + } + } + return { + syntax: originalSyntaxSuggestions, + keywords, + } + } } +export class FlinkSqlSplitListener implements FlinkSqlParserListener { + private _statementsContext: SqlStatementContext[] = []; + + exitSqlStatement = (ctx: SqlStatementContext) => { + this._statementsContext.push(ctx); + } + + enterSqlStatements = (ctx: SqlStatementsContext) => { + }; + + get statementsContext () { + return this._statementsContext; + } +} diff --git a/src/parser/generic.ts b/src/parser/generic.ts index d08d2ba..41f0212 100644 --- a/src/parser/generic.ts +++ b/src/parser/generic.ts @@ -1,17 +1,35 @@ -import { CharStreams, CommonTokenStream } from 'antlr4ts'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { SqlLexer } from '../lib/generic/SqlLexer'; -import { SqlParser } from '../lib/generic/SqlParser'; +import { SqlParser, ProgramContext } from '../lib/generic/SqlParser'; import BasicParser from './common/basicParser'; +import { Suggestions } from './common/basic-parser-types'; -export default class GenericSQL extends BasicParser { - public createLexer(input: string): SqlLexer { - const chars = CharStreams.fromString(input.toUpperCase()); // Some Lexer only support uppercase token, So you need transform - const lexer = new SqlLexer(chars); +export default class GenericSQL extends BasicParser { + public createLexerFormCharStream(charStreams): SqlLexer { + const lexer = new SqlLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: SqlLexer): SqlParser { - const tokenStream = new CommonTokenStream(lexer); + + public createParserFromTokenStream(tokenStream): SqlParser { return new SqlParser(tokenStream); } + + public preferredRules: Set = new Set(); + + protected get splitListener () { + return null as any; + } + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number + ): Suggestions { + return { + syntax: [], + keywords: [] + } + } } diff --git a/src/parser/hive.ts b/src/parser/hive.ts index e34a7c3..a960db9 100644 --- a/src/parser/hive.ts +++ b/src/parser/hive.ts @@ -1,17 +1,36 @@ -import { CharStreams, CommonTokenStream } from 'antlr4ts'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { HiveSqlLexer } from '../lib/hive/HiveSqlLexer'; -import { HiveSql } from '../lib/hive/HiveSql'; +import { HiveSql, ProgramContext } from '../lib/hive/HiveSql'; import BasicParser from './common/basicParser'; +import { Suggestions } from './common/basic-parser-types'; -export default class HiveSQL extends BasicParser { - public createLexer(input: string): HiveSqlLexer { - const chars = CharStreams.fromString(input.toUpperCase()); - const lexer = new HiveSqlLexer(chars); + +export default class HiveSQL extends BasicParser { + public createLexerFormCharStream(charStreams) { + const lexer = new HiveSqlLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: HiveSqlLexer): HiveSql { - const tokenStream = new CommonTokenStream(lexer); + + public createParserFromTokenStream(tokenStream) { return new HiveSql(tokenStream); } + + protected get splitListener () { + return null as any; + } + + public preferredRules: Set = new Set(); + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number + ): Suggestions { + return { + syntax: [], + keywords: [] + } + } } diff --git a/src/parser/pgsql.ts b/src/parser/pgsql.ts index 27f0384..6510e61 100644 --- a/src/parser/pgsql.ts +++ b/src/parser/pgsql.ts @@ -1,17 +1,34 @@ -import { CharStreams, CommonTokenStream, Lexer } from 'antlr4ts'; - -import BasicParser from './common/basicParser'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { PostgreSQLLexer } from '../lib/pgsql/PostgreSQLLexer'; -import { PostgreSQLParser } from '../lib/pgsql/PostgreSQLParser'; +import { PostgreSQLParser, ProgramContext } from '../lib/pgsql/PostgreSQLParser'; +import BasicParser from './common/basicParser'; +import { Suggestions } from './common/basic-parser-types'; -export default class PostgresSQL extends BasicParser { - public createLexer(input: string): PostgreSQLLexer { - const chars = CharStreams.fromString(input.toUpperCase()); - const lexer = new PostgreSQLLexer(chars); +export default class PostgresSQL extends BasicParser { + public createLexerFormCharStream(charStreams) { + const lexer = new PostgreSQLLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: Lexer): PostgreSQLParser { - const tokenStream = new CommonTokenStream(lexer); + + public createParserFromTokenStream(tokenStream) { return new PostgreSQLParser(tokenStream); } + + public preferredRules: Set = new Set(); + + protected get splitListener () { + return null as any; + } + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number + ): Suggestions { + return { + syntax: [], + keywords: [] + } + } } diff --git a/src/parser/plsql.ts b/src/parser/plsql.ts index 742904f..717d5c8 100644 --- a/src/parser/plsql.ts +++ b/src/parser/plsql.ts @@ -1,17 +1,34 @@ -import { CharStreams, CommonTokenStream, Lexer } from 'antlr4ts'; - -import BasicParser from './common/basicParser'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { PlSqlLexer } from '../lib/plsql/PlSqlLexer'; -import { PlSqlParser } from '../lib/plsql/PlSqlParser'; +import { PlSqlParser, ProgramContext } from '../lib/plsql/PlSqlParser'; +import BasicParser from './common/basicParser'; +import { Suggestions } from './common/basic-parser-types'; -export default class PLSQLParser extends BasicParser { - public createLexer(input: string): PlSqlLexer { - const chars = CharStreams.fromString(input.toUpperCase()); - const lexer = new PlSqlLexer(chars); +export default class PLSQL extends BasicParser { + public createLexerFormCharStream(charStreams) { + const lexer = new PlSqlLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: Lexer): PlSqlParser { - const tokenStream = new CommonTokenStream(lexer); + + public createParserFromTokenStream(tokenStream) { return new PlSqlParser(tokenStream); } + + public preferredRules: Set = new Set(); + + protected get splitListener () { + return null as any; + } + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number + ): Suggestions { + return { + syntax: [], + keywords: [] + } + } } diff --git a/src/parser/spark.ts b/src/parser/spark.ts index 83184af..8dc836c 100644 --- a/src/parser/spark.ts +++ b/src/parser/spark.ts @@ -1,16 +1,34 @@ -import { CharStreams, CommonTokenStream } from 'antlr4ts'; -import BasicParser from './common/basicParser'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { SparkSqlLexer } from '../lib/spark/SparkSqlLexer'; -import { SparkSqlParser } from '../lib/spark/SparkSqlParser'; +import { SparkSqlParser, ProgramContext } from '../lib/spark/SparkSqlParser'; +import BasicParser from './common/basicParser'; +import { Suggestions } from './common/basic-parser-types'; -export default class SparkSQL extends BasicParser { - public createLexer(input: string): SparkSqlLexer { - const chars = CharStreams.fromString(input.toUpperCase()); // Some Lexer only support uppercase token, So you need transform - const lexer = new SparkSqlLexer(chars); +export default class SparkSQL extends BasicParser { + public createLexerFormCharStream(charStreams) { + const lexer = new SparkSqlLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: SparkSqlLexer): SparkSqlParser { - const tokenStream = new CommonTokenStream(lexer); + + public createParserFromTokenStream(tokenStream) { return new SparkSqlParser(tokenStream); } + + public preferredRules: Set = new Set(); + + protected get splitListener () { + return null as any; + } + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number + ): Suggestions { + return { + syntax: [], + keywords: [] + } + } } diff --git a/src/parser/trinosql.ts b/src/parser/trinosql.ts index fc4a6ce..480730e 100644 --- a/src/parser/trinosql.ts +++ b/src/parser/trinosql.ts @@ -1,17 +1,36 @@ -import { CharStreams, CommonTokenStream, Lexer } from 'antlr4ts'; +import { Token } from 'antlr4ts'; +import { CandidatesCollection } from 'antlr4-c3'; import { TrinoSqlLexer } from '../lib/trinosql/TrinoSqlLexer'; -import { TrinoSqlParser } from '../lib/trinosql/TrinoSqlParser'; +import { TrinoSqlParser, ProgramContext } from '../lib/trinosql/TrinoSqlParser'; import BasicParser from './common/basicParser'; -export default class trinoSQL extends BasicParser { - public createLexer(input: string): TrinoSqlLexer { - const chars = CharStreams.fromString(input.toUpperCase()); // Some Lexer only support uppercase token, So you need transform - const lexer = new TrinoSqlLexer(chars); +import { Suggestions } from './common/basic-parser-types'; + +export default class TrinoSQL extends BasicParser { + public createLexerFormCharStream(charStreams) { + const lexer = new TrinoSqlLexer(charStreams); return lexer; } - public createParserFromLexer(lexer: Lexer): TrinoSqlParser { - const tokens = new CommonTokenStream(lexer); - const parser = new TrinoSqlParser(tokens); + + public createParserFromTokenStream(tokenStream) { + const parser = new TrinoSqlParser(tokenStream); return parser; } + + protected get splitListener () { + return null as any; + } + + public preferredRules: Set = new Set(); + + public processCandidates( + candidates: CandidatesCollection, + allTokens: Token[], + caretTokenIndex: number + ): Suggestions { + return { + syntax: [], + keywords: [] + } + } } diff --git a/src/utils/findCaretTokenIndex.ts b/src/utils/findCaretTokenIndex.ts new file mode 100644 index 0000000..3d1a89e --- /dev/null +++ b/src/utils/findCaretTokenIndex.ts @@ -0,0 +1,33 @@ +import { Token } from "antlr4ts"; +import { CaretPosition } from "../../src/parser/common/basic-parser-types"; + +/** + * find token index via caret position (cursor position) + * @param caretPosition + * @param allTokens all the tokens + * @returns caretTokenIndex + */ +export function findCaretTokenIndex(caretPosition: CaretPosition, allTokens: Token[]) { + const { lineNumber: caretLine, column: caretCol } = caretPosition; + let left = 0; + let right = allTokens.length - 1; + + while(left <= right) { + const mid = left + ((right - left) >> 1); + const token = allTokens[mid]; + if (token.line > caretLine || ( + token.line === caretLine + && token.charPositionInLine + 1 >= caretCol + )) { + right = mid - 1; + } else if (token.line < caretLine || ( + token.line === caretLine + && token.charPositionInLine + token.text.length + 1 < caretCol + )) { + left = mid + 1; + } else { + return allTokens[mid].tokenIndex + } + } + return null; +} \ No newline at end of file diff --git a/test/parser/flinksql/suggestion/fixtures/syntaxSuggestion.sql b/test/parser/flinksql/suggestion/fixtures/syntaxSuggestion.sql new file mode 100644 index 0000000..393bb6e --- /dev/null +++ b/test/parser/flinksql/suggestion/fixtures/syntaxSuggestion.sql @@ -0,0 +1,11 @@ +INSERT INTO cat.db.tb + +SELECT * FROM cat.db + +CREATE TABLE cat.db ; + +SHOW TABLES FROM cat + +ALTER DATABASE cat. + +USE DATABASE cat. \ No newline at end of file diff --git a/test/parser/flinksql/suggestion/fixtures/tokenSuggestion.sql b/test/parser/flinksql/suggestion/fixtures/tokenSuggestion.sql new file mode 100644 index 0000000..b8c7ef5 --- /dev/null +++ b/test/parser/flinksql/suggestion/fixtures/tokenSuggestion.sql @@ -0,0 +1,7 @@ +SELECT * FROM aa.bb; + +USE +; +CREATE +; +SHOW \ No newline at end of file diff --git a/test/parser/flinksql/suggestion/syntaxSuggestion.test.ts b/test/parser/flinksql/suggestion/syntaxSuggestion.test.ts new file mode 100644 index 0000000..9326c6d --- /dev/null +++ b/test/parser/flinksql/suggestion/syntaxSuggestion.test.ts @@ -0,0 +1,90 @@ +import fs from 'fs'; +import path from 'path'; +import { CaretPosition, SyntaxContextType } from '../../../../src/parser/common/basic-parser-types'; +import FlinkSQL from '../../../../src/parser/flinksql' + +const syntaxSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'syntaxSuggestion.sql'), 'utf-8'); + +describe('Flink SQL Syntax Suggestion', () => { + const parser = new FlinkSQL(); + + test('Validate Syntax SQL', () => { + expect(parser.validate(syntaxSql).length).not.toBe(0); + expect(parser.validate(syntaxSql).length).not.toBe(0); + expect(parser.validate(syntaxSql).length).not.toBe(0); + }) + + test('Insert table ', () => { + const pos: CaretPosition = { + lineNumber: 1, + column: 22 + } + const suggestion = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax?.[0]; + + expect(suggestion?.syntaxContextType === SyntaxContextType.TABLE) + + expect(suggestion?.wordRanges.map(token => token.text)) + .toEqual([ 'cat', '.', 'db', '.', 'tb' ]) + }) + + test('Select table', () => { + const pos: CaretPosition = { + lineNumber: 3, + column: 21 + } + const suggestion = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax?.[0]; + + expect(suggestion?.syntaxContextType === SyntaxContextType.TABLE) + expect(suggestion?.wordRanges.map(token => token.text)) + .toEqual([ 'cat', '.', 'db' ]) + }) + + test('Create table', () => { + const pos: CaretPosition = { + lineNumber: 5, + column: 20 + } + const suggestion = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax?.[0]; + + expect(suggestion?.syntaxContextType === SyntaxContextType.TABLE_CREATE) + expect(suggestion?.wordRanges.map(token => token.text)) + .toEqual([ 'cat', '.', 'db' ]) + }) + + test('Show tables from', () => { + const pos: CaretPosition = { + lineNumber: 7, + column: 21 + } + const suggestion = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax?.[0]; + + expect(suggestion?.syntaxContextType === SyntaxContextType.TABLE) + expect(suggestion?.wordRanges.map(token => token.text)) + .toEqual([ 'cat' ]) + }) + + test('Alter database', () => { + const pos: CaretPosition = { + lineNumber: 9, + column: 20 + } + const suggestion = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax?.[0]; + + expect(suggestion?.syntaxContextType === SyntaxContextType.DATABASE) + expect(suggestion?.wordRanges.map(token => token.text)) + .toEqual([ 'cat', '.' ]) + }) + + test('Use database', () => { + const pos: CaretPosition = { + lineNumber: 9, + column: 20 + } + const suggestion = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax?.[0]; + + expect(suggestion?.syntaxContextType === SyntaxContextType.DATABASE) + expect(suggestion?.wordRanges.map(token => token.text)) + .toEqual([ 'cat', '.' ]) + }) + +}) \ No newline at end of file diff --git a/test/parser/flinksql/suggestion/tokenSuggestion.test.ts b/test/parser/flinksql/suggestion/tokenSuggestion.test.ts new file mode 100644 index 0000000..d000caf --- /dev/null +++ b/test/parser/flinksql/suggestion/tokenSuggestion.test.ts @@ -0,0 +1,57 @@ +import fs from 'fs'; +import path from 'path'; +import { CaretPosition } from '../../../../src/parser/common/basic-parser-types'; +import FlinkSQL from '../../../../src/parser/flinksql' + +const tokenSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'tokenSuggestion.sql'), 'utf-8'); + +describe('Flink SQL Syntax Suggestion', () => { + const parser = new FlinkSQL(); + + test('Use Statement ', () => { + const pos: CaretPosition = { + lineNumber: 3, + column: 5 + } + const suggestion = parser.getSuggestionAtCaretPosition(tokenSql, pos)?.keywords; + + expect(suggestion) + .toEqual([ 'MODULES', 'CATALOG' ]) + }) + + test('Create Statement ', () => { + const pos: CaretPosition = { + lineNumber: 5, + column: 8 + } + const suggestion = parser.getSuggestionAtCaretPosition(tokenSql, pos)?.keywords; + + expect(suggestion) + .toEqual([ 'CATALOG', 'FUNCTION', 'TEMPORARY', 'VIEW', 'DATABASE', 'TABLE' ]) + }) + + test('Show Statement ', () => { + const pos: CaretPosition = { + lineNumber: 7, + column: 6 + } + const suggestion = parser.getSuggestionAtCaretPosition(tokenSql, pos)?.keywords; + + expect(suggestion) + .toEqual([ + 'MODULES', + 'FULL', + 'FUNCTIONS', + 'USER', + 'CREATE', + 'COLUMNS', + 'TABLES', + 'CURRENT', + 'CATALOGS', + 'DATABASES', + 'JARS', + 'VIEWS' + ]) + }) + +}) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7eadd11..5df5ea4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -961,14 +961,21 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +antlr4-c3@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/antlr4-c3/-/antlr4-c3-3.0.1.tgz#e9b6ba7b796e7afc35630ffa6fac4d915f152c99" + integrity sha512-Vbizas0WK4Id6l1f48ANYHFZgfzmj82LZx4OuB/a87vCpyoUwofrlJ+sCiL1qT/D2SWf8HEcBPCsgskdx8NnzQ== + dependencies: + antlr4ts "0.5.0-alpha.4" + antlr4ts-cli@^0.5.0-alpha.4: version "0.5.0-alpha.4" resolved "https://registry.yarnpkg.com/antlr4ts-cli/-/antlr4ts-cli-0.5.0-alpha.4.tgz#f3bfc37f10131e78d7b981c397a2aaa0450b67f6" integrity sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw== -antlr4ts@^0.5.0-alpha.4: +antlr4ts@0.5.0-alpha.4, antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + resolved "https://registry.npmmirror.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== anymatch@^3.0.3: