From 199fe09a4285b4db3b492d61ab07ddd1c6a6c62a Mon Sep 17 00:00:00 2001 From: Xiaoli Zhou Date: Tue, 10 Mar 2026 16:36:16 +0800 Subject: [PATCH 1/6] support varchar(max_length) in NeuG type system Committed-by: Xiaoli Zhou from Dev container --- CMakeLists.txt | 2 +- doc/source/cypher_manual/data_types.md | 5 +- include/neug/compiler/common/types/types.h | 28 +- include/neug/compiler/gopt/g_constants.h | 1 - include/neug/compiler/gopt/g_type_utils.h | 28 +- .../compiler/tools/shell/include/keywords.h | 4 +- src/compiler/antlr4/Cypher.g4 | 5 +- src/compiler/common/types/types.cpp | 54 + src/compiler/gopt/g_type_converter.cpp | 14 +- .../scripts/antlr4/generate_grammar.cmake | 21 +- third_party/antlr4_cypher/cypher_lexer.cpp | 906 ++-- third_party/antlr4_cypher/cypher_parser.cpp | 4751 +++++++++-------- .../antlr4_cypher/include/cypher_lexer.h | 15 +- .../antlr4_cypher/include/cypher_parser.h | 16 +- tools/python_bind/tests/test_ddl.py | 33 + 15 files changed, 3035 insertions(+), 2848 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index af90ce55c..d9de6a022 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,7 +73,7 @@ option(ENABLE_THREAD_SANITIZER "Enable thread sanitizer." FALSE) option(ENABLE_UBSAN "Enable undefined behavior sanitizer." FALSE) option(ENABLE_RUNTIME_CHECKS "Enable runtime coherency checks (e.g. asserts)" FALSE) option(ENABLE_LTO "Enable Link-Time Optimization" FALSE) -option(AUTO_UPDATE_GRAMMAR "Automatically regenerate C++ grammar files on change." TRUE) +option(AUTO_UPDATE_GRAMMAR "Automatically regenerate C++ grammar files on change." FALSE) option(BUILD_EXTENSIONS "Semicolon-separated list of extensions to build." "") option(BUILD_SINGLE_FILE_HEADER "Build single file header. Requires Python >= 3.9." FALSE) option(BUILD_TEST "Build C++ tests." TRUE) diff --git a/doc/source/cypher_manual/data_types.md b/doc/source/cypher_manual/data_types.md index 1021eda1e..df916bed7 100644 --- a/doc/source/cypher_manual/data_types.md +++ b/doc/source/cypher_manual/data_types.md @@ -70,10 +70,13 @@ The following table showcases all data types supported by NeuG and their differe ### String Types +We currently support only the VARCHAR type for strings. You can specify a maximum character length using the `VARCHAR(max_length)` syntax. The default value of `max_length` is 256, and the maximum limit is 65536. +Alternatively, you can use STRING to specify the character type directly; STRING is equivalent to VARCHAR(256), i.e., a varchar type with a default maximum length of 256 characters. + #### VARCHAR - **Description**: Variable-length character string with UTF-8 encoding - **Query Example**: `RETURN 'Hello World' AS string_value;` -- **Length**: Variable, limited by system constraints, default is `65536` +- **Length**: Variable, limited by system constraints, default is `256` ### Temporal Types diff --git a/include/neug/compiler/common/types/types.h b/include/neug/compiler/common/types/types.h index 0e1a58210..a46f5670c 100644 --- a/include/neug/compiler/common/types/types.h +++ b/include/neug/compiler/common/types/types.h @@ -278,6 +278,7 @@ enum class PhysicalTypeID : uint8_t { class ExtraTypeInfo; class StructField; class StructTypeInfo; +class StringTypeInfo; enum class TypeCategory : uint8_t { INTERNAL = 0, UDT = 1 }; @@ -340,6 +341,13 @@ class LogicalType { return ret; } + // default max_length value of VARCHAR type if max_length is not defined + // explicitly + static size_t getDefaultStringMaxLen() { return 256; } + + // maximum limit of max_length value of VARCHAR type + static size_t getMaxStringMaxLen() { return 65536; } + static LogicalType BOOL() { return LogicalType(LogicalTypeID::BOOL); } static LogicalType HASH() { return LogicalType(LogicalTypeID::UINT64); } static LogicalType INT64() { return LogicalType(LogicalTypeID::INT64); } @@ -375,7 +383,8 @@ class LogicalType { return LogicalType(LogicalTypeID::INTERNAL_ID); } static LogicalType SERIAL() { return LogicalType(LogicalTypeID::SERIAL); } - static LogicalType STRING() { return LogicalType(LogicalTypeID::STRING); } + static LogicalType STRING(); + static LogicalType STRING(size_t max_length); static LogicalType BLOB() { return LogicalType(LogicalTypeID::BLOB); } static LogicalType UUID() { return LogicalType(LogicalTypeID::UUID); } static LogicalType POINTER() { return LogicalType(LogicalTypeID::POINTER); } @@ -448,6 +457,23 @@ class NEUG_API ExtraTypeInfo { virtual void serializeInternal(Serializer& serializer) const = 0; }; +class NEUG_API StringTypeInfo : public ExtraTypeInfo { + public: + explicit StringTypeInfo(size_t max_length) : max_length(max_length) {} + + size_t getMaxLength() const { return max_length; } + + bool containsAny() const override { return false; } + + bool operator==(const ExtraTypeInfo& other) const override; + + std::unique_ptr copy() const override; + + private: + virtual void serializeInternal(Serializer& serializer) const override; + size_t max_length; +}; + class NEUG_API UDTTypeInfo : public ExtraTypeInfo { public: explicit UDTTypeInfo(std::string typeName) : typeName{std::move(typeName)} {} diff --git a/include/neug/compiler/gopt/g_constants.h b/include/neug/compiler/gopt/g_constants.h index e8cc888a8..947f90baa 100644 --- a/include/neug/compiler/gopt/g_constants.h +++ b/include/neug/compiler/gopt/g_constants.h @@ -24,7 +24,6 @@ namespace neug { class Constants { public: static inline uint64_t MAX_UPPER_BOUND = INT32_MAX; - static inline uint64_t VARCHAR_MAX_LENGTH = 65536; static inline uint64_t ARRAY_MAX_LENGTH = 256; static inline neug::transaction::Transaction DEFAULT_TRANSACTION = neug::transaction::Transaction( diff --git a/include/neug/compiler/gopt/g_type_utils.h b/include/neug/compiler/gopt/g_type_utils.h index bac5d3c94..2d6bb6b43 100644 --- a/include/neug/compiler/gopt/g_type_utils.h +++ b/include/neug/compiler/gopt/g_type_utils.h @@ -66,8 +66,16 @@ class GTypeUtils { auto stringType = node["string"]; if (stringType) { // denote varchar - if (stringType["var_char"] || stringType["long_text"]) { - return neug::common::LogicalType(neug::common::LogicalTypeID::STRING); + if (stringType["var_char"]) { + auto varChar = stringType["var_char"]; + auto maxLength = varChar["max_length"]; + if (maxLength && maxLength.IsScalar()) { + return neug::common::LogicalType::STRING(maxLength.as()); + } else { + return neug::common::LogicalType::STRING(); + } + } else if (stringType["long_text"]) { + return neug::common::LogicalType::STRING(); } } auto temporalType = node["temporal"]; @@ -115,8 +123,20 @@ class GTypeUtils { return YAML_NODE_DT_DOUBLE; case neug::common::LogicalTypeID::BOOL: return YAML_NODE_DT_BOOL; - case neug::common::LogicalTypeID::STRING: - return YAML_NODE_STRING_VARCHAR(neug::Constants::VARCHAR_MAX_LENGTH); + case neug::common::LogicalTypeID::STRING: { + size_t maxLen; + auto extraInfo = type.getExtraTypeInfo(); + if (extraInfo) { + auto stringTypeInfo = + extraInfo->constPtrCast(); + maxLen = stringTypeInfo->getMaxLength(); + } else { + maxLen = neug::common::LogicalType::getDefaultStringMaxLen(); + } + YAML::Node n; + n["string"]["var_char"]["max_length"] = maxLen; + return n; + } case neug::common::LogicalTypeID::DATE32: return YAML_NODE_TEMPORAL_DATE32(); case neug::common::LogicalTypeID::TIMESTAMP64: diff --git a/include/neug/compiler/tools/shell/include/keywords.h b/include/neug/compiler/tools/shell/include/keywords.h index 5e220d70a..a77c64130 100644 --- a/include/neug/compiler/tools/shell/include/keywords.h +++ b/include/neug/compiler/tools/shell/include/keywords.h @@ -1,6 +1,6 @@ #ifndef _keywordList // clang-format off -#define _keywordList {"ACYCLIC", "ANY", "ADD", "ALL", "ALTER", "AND", "AS", "ASC", "ASCENDING", "ATTACH", "BEGIN", "BY", "CALL", "CASE", "CAST", "CHECKPOINT", "COLUMN", "COMMENT", "COMMIT", "COMMIT_SKIP_CHECKPOINT", "CONTAINS", "COPY", "COUNT", "CREATE", "CYCLE", "DATABASE", "DBTYPE", "DEFAULT", "DELETE", "DESC", "DESCENDING", "DETACH", "DISTINCT", "DROP", "ELSE", "END", "ENDS", "EXISTS", "EXPLAIN", "EXPORT", "EXTENSION", "FALSE", "FROM", "GLOB", "GRAPH", "GROUP", "HEADERS", "HINT", "IMPORT", "IF", "IN", "INCREMENT", "INSTALL", "IS", "JOIN", "KEY", "LIMIT", "LOAD", "LOGICAL", "MACRO", "MATCH", "MAXVALUE", "MERGE", "MINVALUE", "MULTI_JOIN", "NO", "NODE", "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", "SHORTEST", "START", "STARTS", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", "YIELD"} -#define _keywordListLength 107 +#define _keywordList {"ACYCLIC", "ANY", "ADD", "ALL", "ALTER", "AND", "AS", "ASC", "ASCENDING", "ATTACH", "BEGIN", "BY", "CALL", "CASE", "CAST", "CHECKPOINT", "COLUMN", "COMMENT", "COMMIT", "COMMIT_SKIP_CHECKPOINT", "CONTAINS", "COPY", "COUNT", "CREATE", "CYCLE", "DATABASE", "DBTYPE", "DEFAULT", "DELETE", "DESC", "DESCENDING", "DETACH", "DISTINCT", "DROP", "ELSE", "END", "ENDS", "EXISTS", "EXPLAIN", "EXPORT", "EXTENSION", "FROM", "GLOB", "GRAPH", "GROUP", "HEADERS", "HINT", "IMPORT", "IF", "IN", "INCREMENT", "INSTALL", "IS", "JOIN", "KEY", "LIMIT", "LOAD", "LOGICAL", "MACRO", "MATCH", "MAXVALUE", "MERGE", "MINVALUE", "MULTI_JOIN", "NO", "NODE", "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", "SHORTEST", "START", "STARTS", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TYPE", "UNINSTALL", "UNION", "UNWIND", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", "YIELD"} +#define _keywordListLength 106 // clang-format on #endif diff --git a/src/compiler/antlr4/Cypher.g4 b/src/compiler/antlr4/Cypher.g4 index d94aebd5d..dbeea548a 100644 --- a/src/compiler/antlr4/Cypher.g4 +++ b/src/compiler/antlr4/Cypher.g4 @@ -174,13 +174,16 @@ nEUG_CreateNodeConstraint : PRIMARY SP KEY SP? '(' SP? oC_PropertyKeyName SP? ') DECIMAL: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ; +VARCHAR: ('V' | 'v') ('A' | 'a') ('R' | 'r') ('C' | 'c') ('H' | 'h') ('A' | 'a') ('R' | 'r'); + nEUG_DataType : oC_SymbolicName | nEUG_DataType nEUG_ListIdentifiers | UNION SP? '(' SP? nEUG_ColumnDefinitions SP? ')' | oC_SymbolicName SP? '(' SP? nEUG_ColumnDefinitions SP? ')' | oC_SymbolicName SP? '(' SP? nEUG_DataType SP? ',' SP? nEUG_DataType SP? ')' - | DECIMAL SP? '(' SP? oC_IntegerLiteral SP? ',' SP? oC_IntegerLiteral SP? ')' ; + | DECIMAL SP? '(' SP? oC_IntegerLiteral SP? ',' SP? oC_IntegerLiteral SP? ')' + | VARCHAR SP? '(' SP? oC_IntegerLiteral SP? ')'; nEUG_ListIdentifiers : nEUG_ListIdentifier ( nEUG_ListIdentifier )* ; diff --git a/src/compiler/common/types/types.cpp b/src/compiler/common/types/types.cpp index d372fb940..c1a6c04fd 100644 --- a/src/compiler/common/types/types.cpp +++ b/src/compiler/common/types/types.cpp @@ -343,6 +343,19 @@ uint32_t PhysicalTypeUtils::getFixedTypeSize(PhysicalTypeID physicalType) { } } +void StringTypeInfo::serializeInternal(Serializer& serializer) const {}; + +// The method will be invoked in `operator==` of LogicalType, which will be +// invoked after comparison of LogicalTypeId, we think the string type with +// different max_length are equal. +bool StringTypeInfo::operator==(const ExtraTypeInfo& other) const { + return true; +} + +std::unique_ptr StringTypeInfo::copy() const { + return std::make_unique(max_length); +} + bool DecimalTypeInfo::operator==(const ExtraTypeInfo& other) const { auto otherDecimalTypeInfo = neug_dynamic_cast(&other); if (otherDecimalTypeInfo) { @@ -744,6 +757,8 @@ static LogicalType parseUnionType(const std::string& trimmedStr, main::ClientContext* context = nullptr); static LogicalType parseDecimalType(const std::string& trimmedStr); +static LogicalType parseStringType(const std::string& trimmedStr); + bool LogicalType::isBuiltInType(const std::string& str) { auto trimmedStr = StringUtils::ltrim(StringUtils::rtrim(str)); auto upperDataTypeString = StringUtils::getUpper(trimmedStr); @@ -787,6 +802,10 @@ LogicalType LogicalType::convertFromString(const std::string& str, } else if (upperDataTypeString.starts_with("DECIMAL") || upperDataTypeString.starts_with("NUMERIC")) { type = parseDecimalType(trimmedStr); + } else if (upperDataTypeString == "STRING") { + type = LogicalType::STRING(); + } else if (upperDataTypeString.starts_with("VARCHAR")) { + type = parseStringType(trimmedStr); } else if (tryGetIDFromString(upperDataTypeString, type.typeID)) { type.physicalType = LogicalType::getPhysicalType(type.typeID, type.extraTypeInfo); @@ -1472,6 +1491,27 @@ LogicalType parseUnionType(const std::string& trimmedStr, return LogicalType::UNION(parseStructTypeInfo(trimmedStr, context)); } +LogicalType parseStringType(const std::string& trimmedStr) { + auto leftBracketPos = trimmedStr.find('('); + auto rightBracketPos = trimmedStr.find_last_of(')'); + if (leftBracketPos == std::string::npos || + rightBracketPos == std::string::npos) { + THROW_BINDER_EXCEPTION( + "Invalid format for VARCHAR type, should be VARCHAR(max_length). " + "Given: " + + trimmedStr); + } + auto maxLenStr = StringUtils::ltrim(StringUtils::rtrim(trimmedStr.substr( + leftBracketPos + 1, rightBracketPos - leftBracketPos - 1))); + auto maxLen = std::strtoll(maxLenStr.c_str(), nullptr, 0); + if (maxLen <= 0) { + THROW_BINDER_EXCEPTION( + "The max length of string must be a positive integer. Given: " + + maxLenStr); + } + return LogicalType::STRING(maxLen); +} + LogicalType parseDecimalType(const std::string& trimmedStr) { auto leftBracketPos = trimmedStr.find_last_of('('); auto rightBracketPos = trimmedStr.find_last_of(')'); @@ -1514,6 +1554,20 @@ LogicalType LogicalType::STRUCT(std::vector&& fields) { std::make_unique(std::move(fields))); } +LogicalType LogicalType::STRING() { return STRING(getDefaultStringMaxLen()); } + +LogicalType LogicalType::STRING(size_t max_length) { + size_t maxLimit = getMaxStringMaxLen(); + if (max_length > maxLimit) { + LOG(WARNING) << "The max length of string is greater than the maximum " + "limit, the maximum limit is " + << maxLimit; + max_length = maxLimit; + } + return LogicalType(LogicalTypeID::STRING, + std::make_unique(max_length)); +} + LogicalType LogicalType::RECURSIVE_REL( std::unique_ptr typeInfo) { return LogicalType(LogicalTypeID::RECURSIVE_REL, std::move(typeInfo)); diff --git a/src/compiler/gopt/g_type_converter.cpp b/src/compiler/gopt/g_type_converter.cpp index 5b84575c9..222d40b69 100644 --- a/src/compiler/gopt/g_type_converter.cpp +++ b/src/compiler/gopt/g_type_converter.cpp @@ -342,9 +342,21 @@ GPhysicalTypeConverter::convertSimpleLogicalType( break; } case common::LogicalTypeID::STRING: { + auto extraInfo = type.getExtraTypeInfo(); + size_t maxLen; + if (!extraInfo) { + LOG(WARNING) + << "Missing extra type info in string type, use default max length: " + << common::LogicalType::getDefaultStringMaxLen(); + maxLen = common::LogicalType::getDefaultStringMaxLen(); + } else { + auto stringTypeInfo = + extraInfo->constPtrCast(); + maxLen = stringTypeInfo->getMaxLength(); + } auto strType = std::make_unique<::common::String>(); auto varChar = std::make_unique<::common::String::VarChar>(); - varChar->set_max_length(neug::Constants::VARCHAR_MAX_LENGTH); + varChar->set_max_length(maxLen); strType->set_allocated_var_char(varChar.release()); result->set_allocated_string(strType.release()); break; diff --git a/src/compiler/scripts/antlr4/generate_grammar.cmake b/src/compiler/scripts/antlr4/generate_grammar.cmake index de766f83b..97e22c146 100644 --- a/src/compiler/scripts/antlr4/generate_grammar.cmake +++ b/src/compiler/scripts/antlr4/generate_grammar.cmake @@ -5,24 +5,6 @@ message(STATUS "Generating ANTLR4 Cypher grammar files...") find_package(Python3 REQUIRED COMPONENTS Interpreter) -set(HASH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/hash.md5") -if (NOT EXISTS ${HASH_FILE}) - file(WRITE ${HASH_FILE} "") -endif() -file(READ ${HASH_FILE} OLDHASH) - -#NOTE: Commented out by zhanglei, we regenerate the grammar files every time. -message(STATUS " generating keywords hash...") -execute_process( - COMMAND ${Python3_EXECUTABLE} hash.py ${ROOT_DIR}/src/compiler/antlr4/keywords.txt ${ROOT_DIR}/src/compiler/antlr4/Cypher.g4 OUTPUT_VARIABLE NEWHASH) - -if("${OLDHASH}" STREQUAL "${NEWHASH}") - message(INFO " Not regenerating grammar files as Cypher.g4 and keywords.txt is unchanged.") - return() # Exit. -endif() - -file(WRITE hash.md5 "${NEWHASH}") - message(STATUS " Regenerating grammar files...") if(NOT EXISTS antlr4.jar) @@ -35,10 +17,11 @@ endif() # create the directory for the generated grammar file(MAKE_DIRECTORY generated) +# Only require Java when we actually need to regenerate (after hash check). find_package(Java REQUIRED) # use script to generate final Cypher.g4 file and update tools/shell/include/keywords.h -execute_process(COMMAND ${Python3_EXECUTABLE} keywordhandler.py ${ROOT_DIR}/src/compiler/antlr4/Cypher.g4 ${ROOT_DIR}/src/compiler/antlr4/keywords.txt Cypher.g4 ${ROOT_DIR}/src/compiler/tools/shell/include/keywords.h) +execute_process(COMMAND ${Python3_EXECUTABLE} keywordhandler.py ${ROOT_DIR}/src/compiler/antlr4/Cypher.g4 ${ROOT_DIR}/src/compiler/antlr4/keywords.txt Cypher.g4 ${ROOT_DIR}/include/neug/compiler/tools/shell/include/keywords.h) # Generate files. message(INFO " Generating files...") diff --git a/third_party/antlr4_cypher/cypher_lexer.cpp b/third_party/antlr4_cypher/cypher_lexer.cpp index 1391e11eb..0b295437d 100644 --- a/third_party/antlr4_cypher/cypher_lexer.cpp +++ b/third_party/antlr4_cypher/cypher_lexer.cpp @@ -77,15 +77,15 @@ void cypherlexerLexerInitialize() { "SEQUENCE", "SET", "SHORTEST", "START", "STARTS", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TYPE", "UNINSTALL", "UNION", "UNWIND", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", - "YIELD", "DECIMAL", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", "MINUS", - "FACTORIAL", "COLON", "BTRUE", "BFALSE", "StringLiteral", "EscapedChar", - "DecimalInteger", "HexLetter", "HexDigit", "Digit", "NonZeroDigit", - "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", - "UnescapedSymbolicName", "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", - "SP", "WHITESPACE", "CypherComment", "FF", "EscapedSymbolicName_0", - "RS", "ID_Continue", "Comment_1", "StringLiteral_1", "Comment_3", - "Comment_2", "GS", "FS", "CR", "Sc", "SPACE", "Pc", "TAB", "StringLiteral_0", - "LF", "VT", "US", "ID_Start", "Unknown" + "YIELD", "DECIMAL", "VARCHAR", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", + "MINUS", "FACTORIAL", "COLON", "BTRUE", "BFALSE", "StringLiteral", + "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", "Digit", + "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", + "RegularDecimalReal", "UnescapedSymbolicName", "IdentifierStart", + "IdentifierPart", "EscapedSymbolicName", "SP", "WHITESPACE", "CypherComment", + "FF", "EscapedSymbolicName_0", "RS", "ID_Continue", "Comment_1", "StringLiteral_1", + "Comment_3", "Comment_2", "GS", "FS", "CR", "Sc", "SPACE", "Pc", "TAB", + "StringLiteral_0", "LF", "VT", "US", "ID_Start", "Unknown" }, std::vector{ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" @@ -106,7 +106,7 @@ void cypherlexerLexerInitialize() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", "", "", "'*'", "", "'!='", + "", "", "", "", "", "", "", "", "", "", "", "", "", "'*'", "", "'!='", "'-'", "'!'", "':'", "", "", "", "", "", "", "", "", "", "", "'0'" }, std::vector{ @@ -127,16 +127,17 @@ void cypherlexerLexerInitialize() { "SEQUENCE", "SET", "SHORTEST", "START", "STARTS", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TYPE", "UNINSTALL", "UNION", "UNWIND", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", - "YIELD", "DECIMAL", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", "MINUS", - "FACTORIAL", "COLON", "BTRUE", "BFALSE", "StringLiteral", "EscapedChar", - "DecimalInteger", "HexLetter", "HexDigit", "Digit", "NonZeroDigit", - "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", - "UnescapedSymbolicName", "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", - "SP", "WHITESPACE", "CypherComment", "Unknown" + "YIELD", "DECIMAL", "VARCHAR", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", + "MINUS", "FACTORIAL", "COLON", "BTRUE", "BFALSE", "StringLiteral", + "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", "Digit", + "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", + "RegularDecimalReal", "UnescapedSymbolicName", "IdentifierStart", + "IdentifierPart", "EscapedSymbolicName", "SP", "WHITESPACE", "CypherComment", + "Unknown" } ); static const int32_t serializedATNSegment[] = { - 4,0,180,1476,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,0,181,1486,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2, 14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2, 21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2, @@ -166,115 +167,116 @@ void cypherlexerLexerInitialize() { 7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180,2,181,7,181,2,182, 7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186,7,186,2,187,7,187,2,188, 7,188,2,189,7,189,2,190,7,190,2,191,7,191,2,192,7,192,2,193,7,193,2,194, - 7,194,2,195,7,195,2,196,7,196,2,197,7,197,2,198,7,198,2,199,7,199,1,0, - 1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1, - 9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,12,1,12,1,12, - 1,13,1,13,1,13,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1,17,1,17,1,17,1,18, - 1,18,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,22,1,22,1,23,1,23,1,24, - 1,24,1,25,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,28,1,29,1,29,1,30,1,30, - 1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36,1,37,1,37, - 1,38,1,38,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1,43,1,44,1,44, - 1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47, - 1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50, - 1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,54,1,54,1,54, - 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55, - 1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58, - 1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62, - 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64, - 1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65, - 1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66, - 1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68, - 1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70, - 1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72, - 1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76, - 1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78, - 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,80, - 1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83, - 1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84, - 1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86, - 1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,89, - 1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91, - 1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93, - 1,93,1,93,1,93,1,94,1,94,1,94,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96, - 1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98, - 1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,101,1,101, - 1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103, - 1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,105, - 1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109, - 1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111, - 1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114, - 1,114,1,114,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,117,1,117, - 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,119,1,119, - 1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122, - 1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124, - 1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126, - 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, + 7,194,2,195,7,195,2,196,7,196,2,197,7,197,2,198,7,198,2,199,7,199,2,200, + 7,200,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7, + 1,8,1,8,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,12, + 1,12,1,12,1,13,1,13,1,13,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1,17,1,17, + 1,17,1,18,1,18,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,22,1,22,1,23, + 1,23,1,24,1,24,1,25,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,28,1,29,1,29, + 1,30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36, + 1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1,43, + 1,44,1,44,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47, + 1,47,1,47,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50, + 1,50,1,50,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,54, + 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55, + 1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58, + 1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61, + 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62, + 1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64, + 1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65, + 1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66, + 1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68,1,68, + 1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70, + 1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72, + 1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74, + 1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77, + 1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79, + 1,79,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82, + 1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86, + 1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88, + 1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91, + 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93, + 1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,95,1,95,1,95,1,96,1,96,1,96, + 1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97, + 1,97,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100, + 1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,103, + 1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104, + 1,104,1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108, + 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109, + 1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,111,1,111,1,111, + 1,111,1,111,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,114, + 1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116, + 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118, + 1,119,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120, + 1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,124, + 1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127, + 1,127,1,127,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128, 1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128, - 1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128, - 1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130, - 1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,132, - 1,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,133,1,133, - 1,134,1,134,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,136, - 1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,138, - 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139, - 1,139,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,141, - 1,141,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145, - 1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1,147, - 1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148, - 1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,151, - 1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152,1,152,1,152, - 1,152,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,156, - 1,156,1,157,1,157,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,160,1,160, - 1,160,1,160,1,160,1,160,1,161,1,161,1,161,5,161,1247,8,161,10,161,12, - 161,1250,9,161,1,161,1,161,1,161,1,161,5,161,1256,8,161,10,161,12,161, - 1259,9,161,1,161,3,161,1262,8,161,1,162,1,162,1,162,1,162,1,162,1,162, - 1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162, - 3,162,1282,8,162,1,163,1,163,1,163,5,163,1287,8,163,10,163,12,163,1290, - 9,163,3,163,1292,8,163,1,164,3,164,1295,8,164,1,165,1,165,3,165,1299, - 8,165,1,166,1,166,3,166,1303,8,166,1,167,1,167,3,167,1307,8,167,1,168, - 1,168,1,169,1,169,1,170,4,170,1314,8,170,11,170,12,170,1315,1,170,4,170, - 1319,8,170,11,170,12,170,1320,1,170,1,170,4,170,1325,8,170,11,170,12, - 170,1326,1,170,1,170,4,170,1331,8,170,11,170,12,170,1332,3,170,1335,8, - 170,1,170,1,170,3,170,1339,8,170,1,170,4,170,1342,8,170,11,170,12,170, - 1343,1,171,5,171,1347,8,171,10,171,12,171,1350,9,171,1,171,1,171,4,171, - 1354,8,171,11,171,12,171,1355,1,172,1,172,5,172,1360,8,172,10,172,12, - 172,1363,9,172,1,173,1,173,3,173,1367,8,173,1,174,1,174,3,174,1371,8, - 174,1,175,1,175,5,175,1375,8,175,10,175,12,175,1378,9,175,1,175,4,175, - 1381,8,175,11,175,12,175,1382,1,176,4,176,1386,8,176,11,176,12,176,1387, - 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177, - 3,177,1402,8,177,1,178,1,178,1,178,1,178,1,178,1,178,5,178,1410,8,178, - 10,178,12,178,1413,9,178,1,178,1,178,1,178,1,178,1,178,1,178,5,178,1421, - 8,178,10,178,12,178,1424,9,178,1,178,3,178,1427,8,178,1,178,1,178,3,178, - 1431,8,178,3,178,1433,8,178,1,179,1,179,1,180,1,180,1,181,1,181,1,182, - 1,182,1,183,1,183,1,184,1,184,1,185,1,185,1,186,1,186,1,187,1,187,1,188, - 1,188,1,189,1,189,1,190,1,190,1,191,1,191,1,192,1,192,1,193,1,193,1,194, - 1,194,1,195,1,195,1,196,1,196,1,197,1,197,1,198,1,198,1,199,1,199,0,0, - 200,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27, - 14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25, - 51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, - 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48, - 97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117, - 59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137, - 69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157, - 79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177, - 89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197, - 99,199,100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215, - 108,217,109,219,110,221,111,223,112,225,113,227,114,229,115,231,116,233, - 117,235,118,237,119,239,120,241,121,243,122,245,123,247,124,249,125,251, - 126,253,127,255,128,257,129,259,130,261,131,263,132,265,133,267,134,269, - 135,271,136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287, - 144,289,145,291,146,293,147,295,148,297,149,299,150,301,151,303,152,305, - 153,307,154,309,155,311,156,313,157,315,158,317,159,319,160,321,161,323, - 162,325,163,327,164,329,165,331,166,333,167,335,168,337,169,339,170,341, - 171,343,172,345,173,347,174,349,175,351,176,353,177,355,178,357,179,359, - 0,361,0,363,0,365,0,367,0,369,0,371,0,373,0,375,0,377,0,379,0,381,0,383, - 0,385,0,387,0,389,0,391,0,393,0,395,0,397,0,399,180,1,0,48,2,0,65,65, + 1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129, + 1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, + 1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133, + 1,133,1,133,1,134,1,134,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135, + 1,135,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,138,1,138, + 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139, + 1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140, + 1,140,1,141,1,141,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142, + 1,142,1,142,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,145, + 1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146,1,147,1,147, + 1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148, + 1,148,1,148,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150,1,150,1,150, + 1,150,1,151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152, + 1,152,1,152,1,152,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,154, + 1,154,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,157,1,157,1,158, + 1,158,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,161, + 1,161,1,161,1,162,1,162,1,162,5,162,1257,8,162,10,162,12,162,1260,9,162, + 1,162,1,162,1,162,1,162,5,162,1266,8,162,10,162,12,162,1269,9,162,1,162, + 3,162,1272,8,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163, + 1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,3,163,1292,8,163, + 1,164,1,164,1,164,5,164,1297,8,164,10,164,12,164,1300,9,164,3,164,1302, + 8,164,1,165,3,165,1305,8,165,1,166,1,166,3,166,1309,8,166,1,167,1,167, + 3,167,1313,8,167,1,168,1,168,3,168,1317,8,168,1,169,1,169,1,170,1,170, + 1,171,4,171,1324,8,171,11,171,12,171,1325,1,171,4,171,1329,8,171,11,171, + 12,171,1330,1,171,1,171,4,171,1335,8,171,11,171,12,171,1336,1,171,1,171, + 4,171,1341,8,171,11,171,12,171,1342,3,171,1345,8,171,1,171,1,171,3,171, + 1349,8,171,1,171,4,171,1352,8,171,11,171,12,171,1353,1,172,5,172,1357, + 8,172,10,172,12,172,1360,9,172,1,172,1,172,4,172,1364,8,172,11,172,12, + 172,1365,1,173,1,173,5,173,1370,8,173,10,173,12,173,1373,9,173,1,174, + 1,174,3,174,1377,8,174,1,175,1,175,3,175,1381,8,175,1,176,1,176,5,176, + 1385,8,176,10,176,12,176,1388,9,176,1,176,4,176,1391,8,176,11,176,12, + 176,1392,1,177,4,177,1396,8,177,11,177,12,177,1397,1,178,1,178,1,178, + 1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,3,178,1412,8,178, + 1,179,1,179,1,179,1,179,1,179,1,179,5,179,1420,8,179,10,179,12,179,1423, + 9,179,1,179,1,179,1,179,1,179,1,179,1,179,5,179,1431,8,179,10,179,12, + 179,1434,9,179,1,179,3,179,1437,8,179,1,179,1,179,3,179,1441,8,179,3, + 179,1443,8,179,1,180,1,180,1,181,1,181,1,182,1,182,1,183,1,183,1,184, + 1,184,1,185,1,185,1,186,1,186,1,187,1,187,1,188,1,188,1,189,1,189,1,190, + 1,190,1,191,1,191,1,192,1,192,1,193,1,193,1,194,1,194,1,195,1,195,1,196, + 1,196,1,197,1,197,1,198,1,198,1,199,1,199,1,200,1,200,0,0,201,1,1,3,2, + 5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31, + 16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27, + 55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77, + 39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50, + 101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60, + 121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70, + 141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80, + 161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90, + 181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100, + 201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109, + 219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118, + 237,119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253,127, + 255,128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271,136, + 273,137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289,145, + 291,146,293,147,295,148,297,149,299,150,301,151,303,152,305,153,307,154, + 309,155,311,156,313,157,315,158,317,159,319,160,321,161,323,162,325,163, + 327,164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343,172, + 345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361,0, + 363,0,365,0,367,0,369,0,371,0,373,0,375,0,377,0,379,0,381,0,383,0,385, + 0,387,0,389,0,391,0,393,0,395,0,397,0,399,0,401,181,1,0,48,2,0,65,65, 97,97,2,0,67,67,99,99,2,0,89,89,121,121,2,0,76,76,108,108,2,0,73,73,105, 105,2,0,78,78,110,110,2,0,68,68,100,100,2,0,84,84,116,116,2,0,69,69,101, 101,2,0,82,82,114,114,2,0,83,83,115,115,2,0,71,71,103,103,2,0,72,72,104, @@ -520,7 +522,7 @@ void cypherlexerLexerInitialize() { 126572,126578,126580,126583,126585,126588,126590,126590,126592,126601, 126603,126619,126625,126627,126629,126633,126635,126651,131072,173791, 173824,177977,177984,178205,178208,183969,183984,191456,194560,195101, - 196608,201546,201552,205743,1500,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0, + 196608,201546,201552,205743,1510,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0, 0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1, 0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0, 0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0, @@ -555,331 +557,333 @@ void cypherlexerLexerInitialize() { 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0, 333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0, 343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0, - 353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,399,1,0,0,0,1,401,1,0,0,0,3, - 403,1,0,0,0,5,405,1,0,0,0,7,407,1,0,0,0,9,409,1,0,0,0,11,411,1,0,0,0, - 13,413,1,0,0,0,15,415,1,0,0,0,17,417,1,0,0,0,19,419,1,0,0,0,21,421,1, - 0,0,0,23,429,1,0,0,0,25,431,1,0,0,0,27,434,1,0,0,0,29,437,1,0,0,0,31, - 439,1,0,0,0,33,442,1,0,0,0,35,444,1,0,0,0,37,447,1,0,0,0,39,449,1,0,0, - 0,41,452,1,0,0,0,43,455,1,0,0,0,45,457,1,0,0,0,47,459,1,0,0,0,49,461, - 1,0,0,0,51,463,1,0,0,0,53,466,1,0,0,0,55,468,1,0,0,0,57,470,1,0,0,0,59, - 472,1,0,0,0,61,474,1,0,0,0,63,476,1,0,0,0,65,478,1,0,0,0,67,480,1,0,0, - 0,69,482,1,0,0,0,71,484,1,0,0,0,73,486,1,0,0,0,75,488,1,0,0,0,77,490, - 1,0,0,0,79,492,1,0,0,0,81,494,1,0,0,0,83,496,1,0,0,0,85,498,1,0,0,0,87, - 500,1,0,0,0,89,502,1,0,0,0,91,504,1,0,0,0,93,506,1,0,0,0,95,514,1,0,0, - 0,97,518,1,0,0,0,99,522,1,0,0,0,101,526,1,0,0,0,103,532,1,0,0,0,105,536, - 1,0,0,0,107,539,1,0,0,0,109,543,1,0,0,0,111,553,1,0,0,0,113,560,1,0,0, - 0,115,566,1,0,0,0,117,569,1,0,0,0,119,574,1,0,0,0,121,579,1,0,0,0,123, - 584,1,0,0,0,125,595,1,0,0,0,127,602,1,0,0,0,129,610,1,0,0,0,131,617,1, - 0,0,0,133,640,1,0,0,0,135,649,1,0,0,0,137,654,1,0,0,0,139,660,1,0,0,0, - 141,667,1,0,0,0,143,673,1,0,0,0,145,682,1,0,0,0,147,689,1,0,0,0,149,697, - 1,0,0,0,151,704,1,0,0,0,153,709,1,0,0,0,155,720,1,0,0,0,157,727,1,0,0, - 0,159,736,1,0,0,0,161,741,1,0,0,0,163,746,1,0,0,0,165,750,1,0,0,0,167, - 755,1,0,0,0,169,762,1,0,0,0,171,770,1,0,0,0,173,777,1,0,0,0,175,787,1, - 0,0,0,177,792,1,0,0,0,179,797,1,0,0,0,181,803,1,0,0,0,183,809,1,0,0,0, - 185,817,1,0,0,0,187,822,1,0,0,0,189,829,1,0,0,0,191,832,1,0,0,0,193,835, - 1,0,0,0,195,845,1,0,0,0,197,853,1,0,0,0,199,856,1,0,0,0,201,861,1,0,0, - 0,203,865,1,0,0,0,205,871,1,0,0,0,207,876,1,0,0,0,209,884,1,0,0,0,211, - 890,1,0,0,0,213,896,1,0,0,0,215,905,1,0,0,0,217,911,1,0,0,0,219,920,1, - 0,0,0,221,931,1,0,0,0,223,934,1,0,0,0,225,939,1,0,0,0,227,943,1,0,0,0, - 229,948,1,0,0,0,231,953,1,0,0,0,233,956,1,0,0,0,235,961,1,0,0,0,237,970, - 1,0,0,0,239,973,1,0,0,0,241,979,1,0,0,0,243,987,1,0,0,0,245,995,1,0,0, - 0,247,1003,1,0,0,0,249,1008,1,0,0,0,251,1012,1,0,0,0,253,1019,1,0,0,0, - 255,1026,1,0,0,0,257,1035,1,0,0,0,259,1060,1,0,0,0,261,1069,1,0,0,0,263, - 1073,1,0,0,0,265,1082,1,0,0,0,267,1088,1,0,0,0,269,1095,1,0,0,0,271,1101, - 1,0,0,0,273,1106,1,0,0,0,275,1109,1,0,0,0,277,1115,1,0,0,0,279,1127,1, - 0,0,0,281,1132,1,0,0,0,283,1142,1,0,0,0,285,1148,1,0,0,0,287,1155,1,0, - 0,0,289,1159,1,0,0,0,291,1164,1,0,0,0,293,1170,1,0,0,0,295,1175,1,0,0, - 0,297,1181,1,0,0,0,299,1191,1,0,0,0,301,1195,1,0,0,0,303,1202,1,0,0,0, - 305,1208,1,0,0,0,307,1216,1,0,0,0,309,1218,1,0,0,0,311,1223,1,0,0,0,313, - 1226,1,0,0,0,315,1228,1,0,0,0,317,1230,1,0,0,0,319,1232,1,0,0,0,321,1237, - 1,0,0,0,323,1261,1,0,0,0,325,1263,1,0,0,0,327,1291,1,0,0,0,329,1294,1, - 0,0,0,331,1298,1,0,0,0,333,1302,1,0,0,0,335,1306,1,0,0,0,337,1308,1,0, - 0,0,339,1310,1,0,0,0,341,1334,1,0,0,0,343,1348,1,0,0,0,345,1357,1,0,0, - 0,347,1366,1,0,0,0,349,1370,1,0,0,0,351,1380,1,0,0,0,353,1385,1,0,0,0, - 355,1401,1,0,0,0,357,1432,1,0,0,0,359,1434,1,0,0,0,361,1436,1,0,0,0,363, - 1438,1,0,0,0,365,1440,1,0,0,0,367,1442,1,0,0,0,369,1444,1,0,0,0,371,1446, - 1,0,0,0,373,1448,1,0,0,0,375,1450,1,0,0,0,377,1452,1,0,0,0,379,1454,1, - 0,0,0,381,1456,1,0,0,0,383,1458,1,0,0,0,385,1460,1,0,0,0,387,1462,1,0, - 0,0,389,1464,1,0,0,0,391,1466,1,0,0,0,393,1468,1,0,0,0,395,1470,1,0,0, - 0,397,1472,1,0,0,0,399,1474,1,0,0,0,401,402,5,59,0,0,402,2,1,0,0,0,403, - 404,5,40,0,0,404,4,1,0,0,0,405,406,5,41,0,0,406,6,1,0,0,0,407,408,5,44, - 0,0,408,8,1,0,0,0,409,410,5,46,0,0,410,10,1,0,0,0,411,412,5,61,0,0,412, - 12,1,0,0,0,413,414,5,91,0,0,414,14,1,0,0,0,415,416,5,93,0,0,416,16,1, - 0,0,0,417,418,5,123,0,0,418,18,1,0,0,0,419,420,5,125,0,0,420,20,1,0,0, - 0,421,422,5,40,0,0,422,423,5,32,0,0,423,424,5,83,0,0,424,425,5,80,0,0, - 425,426,5,63,0,0,426,427,5,32,0,0,427,428,5,41,0,0,428,22,1,0,0,0,429, - 430,5,124,0,0,430,24,1,0,0,0,431,432,5,46,0,0,432,433,5,46,0,0,433,26, - 1,0,0,0,434,435,5,60,0,0,435,436,5,62,0,0,436,28,1,0,0,0,437,438,5,60, - 0,0,438,30,1,0,0,0,439,440,5,60,0,0,440,441,5,61,0,0,441,32,1,0,0,0,442, - 443,5,62,0,0,443,34,1,0,0,0,444,445,5,62,0,0,445,446,5,61,0,0,446,36, - 1,0,0,0,447,448,5,38,0,0,448,38,1,0,0,0,449,450,5,62,0,0,450,451,5,62, - 0,0,451,40,1,0,0,0,452,453,5,60,0,0,453,454,5,60,0,0,454,42,1,0,0,0,455, - 456,5,43,0,0,456,44,1,0,0,0,457,458,5,47,0,0,458,46,1,0,0,0,459,460,5, - 37,0,0,460,48,1,0,0,0,461,462,5,94,0,0,462,50,1,0,0,0,463,464,5,61,0, - 0,464,465,5,126,0,0,465,52,1,0,0,0,466,467,5,36,0,0,467,54,1,0,0,0,468, - 469,5,10216,0,0,469,56,1,0,0,0,470,471,5,12296,0,0,471,58,1,0,0,0,472, - 473,5,65124,0,0,473,60,1,0,0,0,474,475,5,65308,0,0,475,62,1,0,0,0,476, - 477,5,10217,0,0,477,64,1,0,0,0,478,479,5,12297,0,0,479,66,1,0,0,0,480, - 481,5,65125,0,0,481,68,1,0,0,0,482,483,5,65310,0,0,483,70,1,0,0,0,484, - 485,5,173,0,0,485,72,1,0,0,0,486,487,5,8208,0,0,487,74,1,0,0,0,488,489, - 5,8209,0,0,489,76,1,0,0,0,490,491,5,8210,0,0,491,78,1,0,0,0,492,493,5, - 8211,0,0,493,80,1,0,0,0,494,495,5,8212,0,0,495,82,1,0,0,0,496,497,5,8213, - 0,0,497,84,1,0,0,0,498,499,5,8722,0,0,499,86,1,0,0,0,500,501,5,65112, - 0,0,501,88,1,0,0,0,502,503,5,65123,0,0,503,90,1,0,0,0,504,505,5,65293, - 0,0,505,92,1,0,0,0,506,507,7,0,0,0,507,508,7,1,0,0,508,509,7,2,0,0,509, - 510,7,1,0,0,510,511,7,3,0,0,511,512,7,4,0,0,512,513,7,1,0,0,513,94,1, - 0,0,0,514,515,7,0,0,0,515,516,7,5,0,0,516,517,7,2,0,0,517,96,1,0,0,0, - 518,519,7,0,0,0,519,520,7,6,0,0,520,521,7,6,0,0,521,98,1,0,0,0,522,523, - 7,0,0,0,523,524,7,3,0,0,524,525,7,3,0,0,525,100,1,0,0,0,526,527,7,0,0, - 0,527,528,7,3,0,0,528,529,7,7,0,0,529,530,7,8,0,0,530,531,7,9,0,0,531, - 102,1,0,0,0,532,533,7,0,0,0,533,534,7,5,0,0,534,535,7,6,0,0,535,104,1, - 0,0,0,536,537,7,0,0,0,537,538,7,10,0,0,538,106,1,0,0,0,539,540,7,0,0, - 0,540,541,7,10,0,0,541,542,7,1,0,0,542,108,1,0,0,0,543,544,7,0,0,0,544, - 545,7,10,0,0,545,546,7,1,0,0,546,547,7,8,0,0,547,548,7,5,0,0,548,549, - 7,6,0,0,549,550,7,4,0,0,550,551,7,5,0,0,551,552,7,11,0,0,552,110,1,0, - 0,0,553,554,7,0,0,0,554,555,7,7,0,0,555,556,7,7,0,0,556,557,7,0,0,0,557, - 558,7,1,0,0,558,559,7,12,0,0,559,112,1,0,0,0,560,561,7,13,0,0,561,562, - 7,8,0,0,562,563,7,11,0,0,563,564,7,4,0,0,564,565,7,5,0,0,565,114,1,0, - 0,0,566,567,7,13,0,0,567,568,7,2,0,0,568,116,1,0,0,0,569,570,7,1,0,0, - 570,571,7,0,0,0,571,572,7,3,0,0,572,573,7,3,0,0,573,118,1,0,0,0,574,575, - 7,1,0,0,575,576,7,0,0,0,576,577,7,10,0,0,577,578,7,8,0,0,578,120,1,0, - 0,0,579,580,7,1,0,0,580,581,7,0,0,0,581,582,7,10,0,0,582,583,7,7,0,0, - 583,122,1,0,0,0,584,585,7,1,0,0,585,586,7,12,0,0,586,587,7,8,0,0,587, - 588,7,1,0,0,588,589,7,14,0,0,589,590,7,15,0,0,590,591,7,16,0,0,591,592, - 7,4,0,0,592,593,7,5,0,0,593,594,7,7,0,0,594,124,1,0,0,0,595,596,7,1,0, - 0,596,597,7,16,0,0,597,598,7,3,0,0,598,599,7,17,0,0,599,600,7,18,0,0, - 600,601,7,5,0,0,601,126,1,0,0,0,602,603,7,1,0,0,603,604,7,16,0,0,604, - 605,7,18,0,0,605,606,7,18,0,0,606,607,7,8,0,0,607,608,7,5,0,0,608,609, - 7,7,0,0,609,128,1,0,0,0,610,611,7,1,0,0,611,612,7,16,0,0,612,613,7,18, - 0,0,613,614,7,18,0,0,614,615,7,4,0,0,615,616,7,7,0,0,616,130,1,0,0,0, - 617,618,7,1,0,0,618,619,7,16,0,0,619,620,7,18,0,0,620,621,7,18,0,0,621, - 622,7,4,0,0,622,623,7,7,0,0,623,624,5,95,0,0,624,625,7,10,0,0,625,626, - 7,14,0,0,626,627,7,4,0,0,627,628,7,15,0,0,628,629,5,95,0,0,629,630,7, - 1,0,0,630,631,7,12,0,0,631,632,7,8,0,0,632,633,7,1,0,0,633,634,7,14,0, - 0,634,635,7,15,0,0,635,636,7,16,0,0,636,637,7,4,0,0,637,638,7,5,0,0,638, - 639,7,7,0,0,639,132,1,0,0,0,640,641,7,1,0,0,641,642,7,16,0,0,642,643, - 7,5,0,0,643,644,7,7,0,0,644,645,7,0,0,0,645,646,7,4,0,0,646,647,7,5,0, - 0,647,648,7,10,0,0,648,134,1,0,0,0,649,650,7,1,0,0,650,651,7,16,0,0,651, - 652,7,15,0,0,652,653,7,2,0,0,653,136,1,0,0,0,654,655,7,1,0,0,655,656, - 7,16,0,0,656,657,7,17,0,0,657,658,7,5,0,0,658,659,7,7,0,0,659,138,1,0, - 0,0,660,661,7,1,0,0,661,662,7,9,0,0,662,663,7,8,0,0,663,664,7,0,0,0,664, - 665,7,7,0,0,665,666,7,8,0,0,666,140,1,0,0,0,667,668,7,1,0,0,668,669,7, - 2,0,0,669,670,7,1,0,0,670,671,7,3,0,0,671,672,7,8,0,0,672,142,1,0,0,0, - 673,674,7,6,0,0,674,675,7,0,0,0,675,676,7,7,0,0,676,677,7,0,0,0,677,678, - 7,13,0,0,678,679,7,0,0,0,679,680,7,10,0,0,680,681,7,8,0,0,681,144,1,0, - 0,0,682,683,7,6,0,0,683,684,7,13,0,0,684,685,7,7,0,0,685,686,7,2,0,0, - 686,687,7,15,0,0,687,688,7,8,0,0,688,146,1,0,0,0,689,690,7,6,0,0,690, - 691,7,8,0,0,691,692,7,19,0,0,692,693,7,0,0,0,693,694,7,17,0,0,694,695, - 7,3,0,0,695,696,7,7,0,0,696,148,1,0,0,0,697,698,7,6,0,0,698,699,7,8,0, - 0,699,700,7,3,0,0,700,701,7,8,0,0,701,702,7,7,0,0,702,703,7,8,0,0,703, - 150,1,0,0,0,704,705,7,6,0,0,705,706,7,8,0,0,706,707,7,10,0,0,707,708, - 7,1,0,0,708,152,1,0,0,0,709,710,7,6,0,0,710,711,7,8,0,0,711,712,7,10, - 0,0,712,713,7,1,0,0,713,714,7,8,0,0,714,715,7,5,0,0,715,716,7,6,0,0,716, - 717,7,4,0,0,717,718,7,5,0,0,718,719,7,11,0,0,719,154,1,0,0,0,720,721, - 7,6,0,0,721,722,7,8,0,0,722,723,7,7,0,0,723,724,7,0,0,0,724,725,7,1,0, - 0,725,726,7,12,0,0,726,156,1,0,0,0,727,728,7,6,0,0,728,729,7,4,0,0,729, - 730,7,10,0,0,730,731,7,7,0,0,731,732,7,4,0,0,732,733,7,5,0,0,733,734, - 7,1,0,0,734,735,7,7,0,0,735,158,1,0,0,0,736,737,7,6,0,0,737,738,7,9,0, - 0,738,739,7,16,0,0,739,740,7,15,0,0,740,160,1,0,0,0,741,742,7,8,0,0,742, - 743,7,3,0,0,743,744,7,10,0,0,744,745,7,8,0,0,745,162,1,0,0,0,746,747, - 7,8,0,0,747,748,7,5,0,0,748,749,7,6,0,0,749,164,1,0,0,0,750,751,7,8,0, - 0,751,752,7,5,0,0,752,753,7,6,0,0,753,754,7,10,0,0,754,166,1,0,0,0,755, - 756,7,8,0,0,756,757,7,20,0,0,757,758,7,4,0,0,758,759,7,10,0,0,759,760, - 7,7,0,0,760,761,7,10,0,0,761,168,1,0,0,0,762,763,7,8,0,0,763,764,7,20, - 0,0,764,765,7,15,0,0,765,766,7,3,0,0,766,767,7,0,0,0,767,768,7,4,0,0, - 768,769,7,5,0,0,769,170,1,0,0,0,770,771,7,8,0,0,771,772,7,20,0,0,772, - 773,7,15,0,0,773,774,7,16,0,0,774,775,7,9,0,0,775,776,7,7,0,0,776,172, - 1,0,0,0,777,778,7,8,0,0,778,779,7,20,0,0,779,780,7,7,0,0,780,781,7,8, - 0,0,781,782,7,5,0,0,782,783,7,10,0,0,783,784,7,4,0,0,784,785,7,16,0,0, - 785,786,7,5,0,0,786,174,1,0,0,0,787,788,7,19,0,0,788,789,7,9,0,0,789, - 790,7,16,0,0,790,791,7,18,0,0,791,176,1,0,0,0,792,793,7,11,0,0,793,794, - 7,3,0,0,794,795,7,16,0,0,795,796,7,13,0,0,796,178,1,0,0,0,797,798,7,11, - 0,0,798,799,7,9,0,0,799,800,7,0,0,0,800,801,7,15,0,0,801,802,7,12,0,0, - 802,180,1,0,0,0,803,804,7,11,0,0,804,805,7,9,0,0,805,806,7,16,0,0,806, - 807,7,17,0,0,807,808,7,15,0,0,808,182,1,0,0,0,809,810,7,12,0,0,810,811, - 7,8,0,0,811,812,7,0,0,0,812,813,7,6,0,0,813,814,7,8,0,0,814,815,7,9,0, - 0,815,816,7,10,0,0,816,184,1,0,0,0,817,818,7,12,0,0,818,819,7,4,0,0,819, - 820,7,5,0,0,820,821,7,7,0,0,821,186,1,0,0,0,822,823,7,4,0,0,823,824,7, - 18,0,0,824,825,7,15,0,0,825,826,7,16,0,0,826,827,7,9,0,0,827,828,7,7, - 0,0,828,188,1,0,0,0,829,830,7,4,0,0,830,831,7,19,0,0,831,190,1,0,0,0, - 832,833,7,4,0,0,833,834,7,5,0,0,834,192,1,0,0,0,835,836,7,4,0,0,836,837, - 7,5,0,0,837,838,7,1,0,0,838,839,7,9,0,0,839,840,7,8,0,0,840,841,7,18, - 0,0,841,842,7,8,0,0,842,843,7,5,0,0,843,844,7,7,0,0,844,194,1,0,0,0,845, - 846,7,4,0,0,846,847,7,5,0,0,847,848,7,10,0,0,848,849,7,7,0,0,849,850, - 7,0,0,0,850,851,7,3,0,0,851,852,7,3,0,0,852,196,1,0,0,0,853,854,7,4,0, - 0,854,855,7,10,0,0,855,198,1,0,0,0,856,857,7,21,0,0,857,858,7,16,0,0, - 858,859,7,4,0,0,859,860,7,5,0,0,860,200,1,0,0,0,861,862,7,14,0,0,862, - 863,7,8,0,0,863,864,7,2,0,0,864,202,1,0,0,0,865,866,7,3,0,0,866,867,7, - 4,0,0,867,868,7,18,0,0,868,869,7,4,0,0,869,870,7,7,0,0,870,204,1,0,0, - 0,871,872,7,3,0,0,872,873,7,16,0,0,873,874,7,0,0,0,874,875,7,6,0,0,875, - 206,1,0,0,0,876,877,7,3,0,0,877,878,7,16,0,0,878,879,7,11,0,0,879,880, - 7,4,0,0,880,881,7,1,0,0,881,882,7,0,0,0,882,883,7,3,0,0,883,208,1,0,0, - 0,884,885,7,18,0,0,885,886,7,0,0,0,886,887,7,1,0,0,887,888,7,9,0,0,888, - 889,7,16,0,0,889,210,1,0,0,0,890,891,7,18,0,0,891,892,7,0,0,0,892,893, - 7,7,0,0,893,894,7,1,0,0,894,895,7,12,0,0,895,212,1,0,0,0,896,897,7,18, - 0,0,897,898,7,0,0,0,898,899,7,20,0,0,899,900,7,22,0,0,900,901,7,0,0,0, - 901,902,7,3,0,0,902,903,7,17,0,0,903,904,7,8,0,0,904,214,1,0,0,0,905, - 906,7,18,0,0,906,907,7,8,0,0,907,908,7,9,0,0,908,909,7,11,0,0,909,910, - 7,8,0,0,910,216,1,0,0,0,911,912,7,18,0,0,912,913,7,4,0,0,913,914,7,5, - 0,0,914,915,7,22,0,0,915,916,7,0,0,0,916,917,7,3,0,0,917,918,7,17,0,0, - 918,919,7,8,0,0,919,218,1,0,0,0,920,921,7,18,0,0,921,922,7,17,0,0,922, - 923,7,3,0,0,923,924,7,7,0,0,924,925,7,4,0,0,925,926,5,95,0,0,926,927, - 7,21,0,0,927,928,7,16,0,0,928,929,7,4,0,0,929,930,7,5,0,0,930,220,1,0, - 0,0,931,932,7,5,0,0,932,933,7,16,0,0,933,222,1,0,0,0,934,935,7,5,0,0, - 935,936,7,16,0,0,936,937,7,6,0,0,937,938,7,8,0,0,938,224,1,0,0,0,939, - 940,7,5,0,0,940,941,7,16,0,0,941,942,7,7,0,0,942,226,1,0,0,0,943,944, - 7,5,0,0,944,945,7,16,0,0,945,946,7,5,0,0,946,947,7,8,0,0,947,228,1,0, - 0,0,948,949,7,5,0,0,949,950,7,17,0,0,950,951,7,3,0,0,951,952,7,3,0,0, - 952,230,1,0,0,0,953,954,7,16,0,0,954,955,7,5,0,0,955,232,1,0,0,0,956, - 957,7,16,0,0,957,958,7,5,0,0,958,959,7,3,0,0,959,960,7,2,0,0,960,234, - 1,0,0,0,961,962,7,16,0,0,962,963,7,15,0,0,963,964,7,7,0,0,964,965,7,4, - 0,0,965,966,7,16,0,0,966,967,7,5,0,0,967,968,7,0,0,0,968,969,7,3,0,0, - 969,236,1,0,0,0,970,971,7,16,0,0,971,972,7,9,0,0,972,238,1,0,0,0,973, - 974,7,16,0,0,974,975,7,9,0,0,975,976,7,6,0,0,976,977,7,8,0,0,977,978, - 7,9,0,0,978,240,1,0,0,0,979,980,7,15,0,0,980,981,7,9,0,0,981,982,7,4, - 0,0,982,983,7,18,0,0,983,984,7,0,0,0,984,985,7,9,0,0,985,986,7,2,0,0, - 986,242,1,0,0,0,987,988,7,15,0,0,988,989,7,9,0,0,989,990,7,16,0,0,990, - 991,7,19,0,0,991,992,7,4,0,0,992,993,7,3,0,0,993,994,7,8,0,0,994,244, - 1,0,0,0,995,996,7,15,0,0,996,997,7,9,0,0,997,998,7,16,0,0,998,999,7,21, - 0,0,999,1000,7,8,0,0,1000,1001,7,1,0,0,1001,1002,7,7,0,0,1002,246,1,0, - 0,0,1003,1004,7,9,0,0,1004,1005,7,8,0,0,1005,1006,7,0,0,0,1006,1007,7, - 6,0,0,1007,248,1,0,0,0,1008,1009,7,9,0,0,1009,1010,7,8,0,0,1010,1011, - 7,3,0,0,1011,250,1,0,0,0,1012,1013,7,9,0,0,1013,1014,7,8,0,0,1014,1015, - 7,5,0,0,1015,1016,7,0,0,0,1016,1017,7,18,0,0,1017,1018,7,8,0,0,1018,252, - 1,0,0,0,1019,1020,7,9,0,0,1020,1021,7,8,0,0,1021,1022,7,7,0,0,1022,1023, - 7,17,0,0,1023,1024,7,9,0,0,1024,1025,7,5,0,0,1025,254,1,0,0,0,1026,1027, - 7,9,0,0,1027,1028,7,16,0,0,1028,1029,7,3,0,0,1029,1030,7,3,0,0,1030,1031, - 7,13,0,0,1031,1032,7,0,0,0,1032,1033,7,1,0,0,1033,1034,7,14,0,0,1034, - 256,1,0,0,0,1035,1036,7,9,0,0,1036,1037,7,16,0,0,1037,1038,7,3,0,0,1038, - 1039,7,3,0,0,1039,1040,7,13,0,0,1040,1041,7,0,0,0,1041,1042,7,1,0,0,1042, - 1043,7,14,0,0,1043,1044,5,95,0,0,1044,1045,7,10,0,0,1045,1046,7,14,0, - 0,1046,1047,7,4,0,0,1047,1048,7,15,0,0,1048,1049,5,95,0,0,1049,1050,7, - 1,0,0,1050,1051,7,12,0,0,1051,1052,7,8,0,0,1052,1053,7,1,0,0,1053,1054, - 7,14,0,0,1054,1055,7,15,0,0,1055,1056,7,16,0,0,1056,1057,7,4,0,0,1057, - 1058,7,5,0,0,1058,1059,7,7,0,0,1059,258,1,0,0,0,1060,1061,7,10,0,0,1061, - 1062,7,8,0,0,1062,1063,7,23,0,0,1063,1064,7,17,0,0,1064,1065,7,8,0,0, - 1065,1066,7,5,0,0,1066,1067,7,1,0,0,1067,1068,7,8,0,0,1068,260,1,0,0, - 0,1069,1070,7,10,0,0,1070,1071,7,8,0,0,1071,1072,7,7,0,0,1072,262,1,0, - 0,0,1073,1074,7,10,0,0,1074,1075,7,12,0,0,1075,1076,7,16,0,0,1076,1077, - 7,9,0,0,1077,1078,7,7,0,0,1078,1079,7,8,0,0,1079,1080,7,10,0,0,1080,1081, - 7,7,0,0,1081,264,1,0,0,0,1082,1083,7,10,0,0,1083,1084,7,7,0,0,1084,1085, - 7,0,0,0,1085,1086,7,9,0,0,1086,1087,7,7,0,0,1087,266,1,0,0,0,1088,1089, - 7,10,0,0,1089,1090,7,7,0,0,1090,1091,7,0,0,0,1091,1092,7,9,0,0,1092,1093, - 7,7,0,0,1093,1094,7,10,0,0,1094,268,1,0,0,0,1095,1096,7,7,0,0,1096,1097, - 7,0,0,0,1097,1098,7,13,0,0,1098,1099,7,3,0,0,1099,1100,7,8,0,0,1100,270, - 1,0,0,0,1101,1102,7,7,0,0,1102,1103,7,12,0,0,1103,1104,7,8,0,0,1104,1105, - 7,5,0,0,1105,272,1,0,0,0,1106,1107,7,7,0,0,1107,1108,7,16,0,0,1108,274, - 1,0,0,0,1109,1110,7,7,0,0,1110,1111,7,9,0,0,1111,1112,7,0,0,0,1112,1113, - 7,4,0,0,1113,1114,7,3,0,0,1114,276,1,0,0,0,1115,1116,7,7,0,0,1116,1117, - 7,9,0,0,1117,1118,7,0,0,0,1118,1119,7,5,0,0,1119,1120,7,10,0,0,1120,1121, - 7,0,0,0,1121,1122,7,1,0,0,1122,1123,7,7,0,0,1123,1124,7,4,0,0,1124,1125, - 7,16,0,0,1125,1126,7,5,0,0,1126,278,1,0,0,0,1127,1128,7,7,0,0,1128,1129, - 7,2,0,0,1129,1130,7,15,0,0,1130,1131,7,8,0,0,1131,280,1,0,0,0,1132,1133, - 7,17,0,0,1133,1134,7,5,0,0,1134,1135,7,4,0,0,1135,1136,7,5,0,0,1136,1137, - 7,10,0,0,1137,1138,7,7,0,0,1138,1139,7,0,0,0,1139,1140,7,3,0,0,1140,1141, - 7,3,0,0,1141,282,1,0,0,0,1142,1143,7,17,0,0,1143,1144,7,5,0,0,1144,1145, - 7,4,0,0,1145,1146,7,16,0,0,1146,1147,7,5,0,0,1147,284,1,0,0,0,1148,1149, - 7,17,0,0,1149,1150,7,5,0,0,1150,1151,7,24,0,0,1151,1152,7,4,0,0,1152, - 1153,7,5,0,0,1153,1154,7,6,0,0,1154,286,1,0,0,0,1155,1156,7,17,0,0,1156, - 1157,7,10,0,0,1157,1158,7,8,0,0,1158,288,1,0,0,0,1159,1160,7,24,0,0,1160, - 1161,7,12,0,0,1161,1162,7,8,0,0,1162,1163,7,5,0,0,1163,290,1,0,0,0,1164, - 1165,7,24,0,0,1165,1166,7,12,0,0,1166,1167,7,8,0,0,1167,1168,7,9,0,0, - 1168,1169,7,8,0,0,1169,292,1,0,0,0,1170,1171,7,24,0,0,1171,1172,7,4,0, - 0,1172,1173,7,7,0,0,1173,1174,7,12,0,0,1174,294,1,0,0,0,1175,1176,7,24, - 0,0,1176,1177,7,9,0,0,1177,1178,7,4,0,0,1178,1179,7,7,0,0,1179,1180,7, - 8,0,0,1180,296,1,0,0,0,1181,1182,7,24,0,0,1182,1183,7,10,0,0,1183,1184, - 7,12,0,0,1184,1185,7,16,0,0,1185,1186,7,9,0,0,1186,1187,7,7,0,0,1187, - 1188,7,8,0,0,1188,1189,7,10,0,0,1189,1190,7,7,0,0,1190,298,1,0,0,0,1191, - 1192,7,20,0,0,1192,1193,7,16,0,0,1193,1194,7,9,0,0,1194,300,1,0,0,0,1195, - 1196,7,10,0,0,1196,1197,7,4,0,0,1197,1198,7,5,0,0,1198,1199,7,11,0,0, - 1199,1200,7,3,0,0,1200,1201,7,8,0,0,1201,302,1,0,0,0,1202,1203,7,2,0, - 0,1203,1204,7,4,0,0,1204,1205,7,8,0,0,1205,1206,7,3,0,0,1206,1207,7,6, - 0,0,1207,304,1,0,0,0,1208,1209,7,6,0,0,1209,1210,7,8,0,0,1210,1211,7, - 1,0,0,1211,1212,7,4,0,0,1212,1213,7,18,0,0,1213,1214,7,0,0,0,1214,1215, - 7,3,0,0,1215,306,1,0,0,0,1216,1217,5,42,0,0,1217,308,1,0,0,0,1218,1219, - 7,10,0,0,1219,1220,7,14,0,0,1220,1221,7,4,0,0,1221,1222,7,15,0,0,1222, - 310,1,0,0,0,1223,1224,5,33,0,0,1224,1225,5,61,0,0,1225,312,1,0,0,0,1226, - 1227,5,45,0,0,1227,314,1,0,0,0,1228,1229,5,33,0,0,1229,316,1,0,0,0,1230, - 1231,5,58,0,0,1231,318,1,0,0,0,1232,1233,7,7,0,0,1233,1234,7,9,0,0,1234, - 1235,7,17,0,0,1235,1236,7,8,0,0,1236,320,1,0,0,0,1237,1238,7,19,0,0,1238, - 1239,7,0,0,0,1239,1240,7,3,0,0,1240,1241,7,10,0,0,1241,1242,7,8,0,0,1242, - 322,1,0,0,0,1243,1248,5,34,0,0,1244,1247,3,389,194,0,1245,1247,3,325, - 162,0,1246,1244,1,0,0,0,1246,1245,1,0,0,0,1247,1250,1,0,0,0,1248,1246, - 1,0,0,0,1248,1249,1,0,0,0,1249,1251,1,0,0,0,1250,1248,1,0,0,0,1251,1262, - 5,34,0,0,1252,1257,5,39,0,0,1253,1256,3,369,184,0,1254,1256,3,325,162, - 0,1255,1253,1,0,0,0,1255,1254,1,0,0,0,1256,1259,1,0,0,0,1257,1255,1,0, - 0,0,1257,1258,1,0,0,0,1258,1260,1,0,0,0,1259,1257,1,0,0,0,1260,1262,5, - 39,0,0,1261,1243,1,0,0,0,1261,1252,1,0,0,0,1262,324,1,0,0,0,1263,1281, - 5,92,0,0,1264,1282,7,25,0,0,1265,1266,7,17,0,0,1266,1267,3,331,165,0, - 1267,1268,3,331,165,0,1268,1269,3,331,165,0,1269,1270,3,331,165,0,1270, - 1282,1,0,0,0,1271,1272,7,17,0,0,1272,1273,3,331,165,0,1273,1274,3,331, - 165,0,1274,1275,3,331,165,0,1275,1276,3,331,165,0,1276,1277,3,331,165, - 0,1277,1278,3,331,165,0,1278,1279,3,331,165,0,1279,1280,3,331,165,0,1280, - 1282,1,0,0,0,1281,1264,1,0,0,0,1281,1265,1,0,0,0,1281,1271,1,0,0,0,1282, - 326,1,0,0,0,1283,1292,3,339,169,0,1284,1288,3,335,167,0,1285,1287,3,333, - 166,0,1286,1285,1,0,0,0,1287,1290,1,0,0,0,1288,1286,1,0,0,0,1288,1289, - 1,0,0,0,1289,1292,1,0,0,0,1290,1288,1,0,0,0,1291,1283,1,0,0,0,1291,1284, - 1,0,0,0,1292,328,1,0,0,0,1293,1295,7,26,0,0,1294,1293,1,0,0,0,1295,330, - 1,0,0,0,1296,1299,3,333,166,0,1297,1299,3,329,164,0,1298,1296,1,0,0,0, - 1298,1297,1,0,0,0,1299,332,1,0,0,0,1300,1303,3,339,169,0,1301,1303,3, - 335,167,0,1302,1300,1,0,0,0,1302,1301,1,0,0,0,1303,334,1,0,0,0,1304,1307, - 3,337,168,0,1305,1307,2,56,57,0,1306,1304,1,0,0,0,1306,1305,1,0,0,0,1307, - 336,1,0,0,0,1308,1309,2,49,55,0,1309,338,1,0,0,0,1310,1311,5,48,0,0,1311, - 340,1,0,0,0,1312,1314,3,333,166,0,1313,1312,1,0,0,0,1314,1315,1,0,0,0, - 1315,1313,1,0,0,0,1315,1316,1,0,0,0,1316,1335,1,0,0,0,1317,1319,3,333, - 166,0,1318,1317,1,0,0,0,1319,1320,1,0,0,0,1320,1318,1,0,0,0,1320,1321, - 1,0,0,0,1321,1322,1,0,0,0,1322,1324,5,46,0,0,1323,1325,3,333,166,0,1324, - 1323,1,0,0,0,1325,1326,1,0,0,0,1326,1324,1,0,0,0,1326,1327,1,0,0,0,1327, - 1335,1,0,0,0,1328,1330,5,46,0,0,1329,1331,3,333,166,0,1330,1329,1,0,0, - 0,1331,1332,1,0,0,0,1332,1330,1,0,0,0,1332,1333,1,0,0,0,1333,1335,1,0, - 0,0,1334,1313,1,0,0,0,1334,1318,1,0,0,0,1334,1328,1,0,0,0,1335,1336,1, - 0,0,0,1336,1338,7,8,0,0,1337,1339,5,45,0,0,1338,1337,1,0,0,0,1338,1339, - 1,0,0,0,1339,1341,1,0,0,0,1340,1342,3,333,166,0,1341,1340,1,0,0,0,1342, - 1343,1,0,0,0,1343,1341,1,0,0,0,1343,1344,1,0,0,0,1344,342,1,0,0,0,1345, - 1347,3,333,166,0,1346,1345,1,0,0,0,1347,1350,1,0,0,0,1348,1346,1,0,0, - 0,1348,1349,1,0,0,0,1349,1351,1,0,0,0,1350,1348,1,0,0,0,1351,1353,5,46, - 0,0,1352,1354,3,333,166,0,1353,1352,1,0,0,0,1354,1355,1,0,0,0,1355,1353, - 1,0,0,0,1355,1356,1,0,0,0,1356,344,1,0,0,0,1357,1361,3,347,173,0,1358, - 1360,3,349,174,0,1359,1358,1,0,0,0,1360,1363,1,0,0,0,1361,1359,1,0,0, - 0,1361,1362,1,0,0,0,1362,346,1,0,0,0,1363,1361,1,0,0,0,1364,1367,3,397, - 198,0,1365,1367,3,385,192,0,1366,1364,1,0,0,0,1366,1365,1,0,0,0,1367, - 348,1,0,0,0,1368,1371,3,365,182,0,1369,1371,3,381,190,0,1370,1368,1,0, - 0,0,1370,1369,1,0,0,0,1371,350,1,0,0,0,1372,1376,5,96,0,0,1373,1375,3, - 361,180,0,1374,1373,1,0,0,0,1375,1378,1,0,0,0,1376,1374,1,0,0,0,1376, - 1377,1,0,0,0,1377,1379,1,0,0,0,1378,1376,1,0,0,0,1379,1381,5,96,0,0,1380, - 1372,1,0,0,0,1381,1382,1,0,0,0,1382,1380,1,0,0,0,1382,1383,1,0,0,0,1383, - 352,1,0,0,0,1384,1386,3,355,177,0,1385,1384,1,0,0,0,1386,1387,1,0,0,0, - 1387,1385,1,0,0,0,1387,1388,1,0,0,0,1388,354,1,0,0,0,1389,1402,3,383, - 191,0,1390,1402,3,387,193,0,1391,1402,3,391,195,0,1392,1402,3,393,196, - 0,1393,1402,3,359,179,0,1394,1402,3,379,189,0,1395,1402,3,377,188,0,1396, - 1402,3,375,187,0,1397,1402,3,363,181,0,1398,1402,3,395,197,0,1399,1402, - 7,27,0,0,1400,1402,3,357,178,0,1401,1389,1,0,0,0,1401,1390,1,0,0,0,1401, - 1391,1,0,0,0,1401,1392,1,0,0,0,1401,1393,1,0,0,0,1401,1394,1,0,0,0,1401, - 1395,1,0,0,0,1401,1396,1,0,0,0,1401,1397,1,0,0,0,1401,1398,1,0,0,0,1401, - 1399,1,0,0,0,1401,1400,1,0,0,0,1402,356,1,0,0,0,1403,1404,5,47,0,0,1404, - 1405,5,42,0,0,1405,1411,1,0,0,0,1406,1410,3,367,183,0,1407,1408,5,42, - 0,0,1408,1410,3,373,186,0,1409,1406,1,0,0,0,1409,1407,1,0,0,0,1410,1413, - 1,0,0,0,1411,1409,1,0,0,0,1411,1412,1,0,0,0,1412,1414,1,0,0,0,1413,1411, - 1,0,0,0,1414,1415,5,42,0,0,1415,1433,5,47,0,0,1416,1417,5,47,0,0,1417, - 1418,5,47,0,0,1418,1422,1,0,0,0,1419,1421,3,371,185,0,1420,1419,1,0,0, - 0,1421,1424,1,0,0,0,1422,1420,1,0,0,0,1422,1423,1,0,0,0,1423,1426,1,0, - 0,0,1424,1422,1,0,0,0,1425,1427,3,379,189,0,1426,1425,1,0,0,0,1426,1427, - 1,0,0,0,1427,1430,1,0,0,0,1428,1431,3,391,195,0,1429,1431,5,0,0,1,1430, - 1428,1,0,0,0,1430,1429,1,0,0,0,1431,1433,1,0,0,0,1432,1403,1,0,0,0,1432, - 1416,1,0,0,0,1433,358,1,0,0,0,1434,1435,7,28,0,0,1435,360,1,0,0,0,1436, - 1437,8,29,0,0,1437,362,1,0,0,0,1438,1439,7,30,0,0,1439,364,1,0,0,0,1440, - 1441,7,31,0,0,1441,366,1,0,0,0,1442,1443,8,32,0,0,1443,368,1,0,0,0,1444, - 1445,8,33,0,0,1445,370,1,0,0,0,1446,1447,8,34,0,0,1447,372,1,0,0,0,1448, - 1449,8,35,0,0,1449,374,1,0,0,0,1450,1451,7,36,0,0,1451,376,1,0,0,0,1452, - 1453,7,37,0,0,1453,378,1,0,0,0,1454,1455,7,38,0,0,1455,380,1,0,0,0,1456, - 1457,7,39,0,0,1457,382,1,0,0,0,1458,1459,7,40,0,0,1459,384,1,0,0,0,1460, - 1461,7,41,0,0,1461,386,1,0,0,0,1462,1463,7,42,0,0,1463,388,1,0,0,0,1464, - 1465,8,43,0,0,1465,390,1,0,0,0,1466,1467,7,44,0,0,1467,392,1,0,0,0,1468, - 1469,7,45,0,0,1469,394,1,0,0,0,1470,1471,7,46,0,0,1471,396,1,0,0,0,1472, - 1473,7,47,0,0,1473,398,1,0,0,0,1474,1475,9,0,0,0,1475,400,1,0,0,0,35, - 0,1246,1248,1255,1257,1261,1281,1288,1291,1294,1298,1302,1306,1315,1320, - 1326,1332,1334,1338,1343,1348,1355,1361,1366,1370,1376,1382,1387,1401, - 1409,1411,1422,1426,1430,1432,0 + 353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,401,1,0,0,0,1, + 403,1,0,0,0,3,405,1,0,0,0,5,407,1,0,0,0,7,409,1,0,0,0,9,411,1,0,0,0,11, + 413,1,0,0,0,13,415,1,0,0,0,15,417,1,0,0,0,17,419,1,0,0,0,19,421,1,0,0, + 0,21,423,1,0,0,0,23,431,1,0,0,0,25,433,1,0,0,0,27,436,1,0,0,0,29,439, + 1,0,0,0,31,441,1,0,0,0,33,444,1,0,0,0,35,446,1,0,0,0,37,449,1,0,0,0,39, + 451,1,0,0,0,41,454,1,0,0,0,43,457,1,0,0,0,45,459,1,0,0,0,47,461,1,0,0, + 0,49,463,1,0,0,0,51,465,1,0,0,0,53,468,1,0,0,0,55,470,1,0,0,0,57,472, + 1,0,0,0,59,474,1,0,0,0,61,476,1,0,0,0,63,478,1,0,0,0,65,480,1,0,0,0,67, + 482,1,0,0,0,69,484,1,0,0,0,71,486,1,0,0,0,73,488,1,0,0,0,75,490,1,0,0, + 0,77,492,1,0,0,0,79,494,1,0,0,0,81,496,1,0,0,0,83,498,1,0,0,0,85,500, + 1,0,0,0,87,502,1,0,0,0,89,504,1,0,0,0,91,506,1,0,0,0,93,508,1,0,0,0,95, + 516,1,0,0,0,97,520,1,0,0,0,99,524,1,0,0,0,101,528,1,0,0,0,103,534,1,0, + 0,0,105,538,1,0,0,0,107,541,1,0,0,0,109,545,1,0,0,0,111,555,1,0,0,0,113, + 562,1,0,0,0,115,568,1,0,0,0,117,571,1,0,0,0,119,576,1,0,0,0,121,581,1, + 0,0,0,123,586,1,0,0,0,125,597,1,0,0,0,127,604,1,0,0,0,129,612,1,0,0,0, + 131,619,1,0,0,0,133,642,1,0,0,0,135,651,1,0,0,0,137,656,1,0,0,0,139,662, + 1,0,0,0,141,669,1,0,0,0,143,675,1,0,0,0,145,684,1,0,0,0,147,691,1,0,0, + 0,149,699,1,0,0,0,151,706,1,0,0,0,153,711,1,0,0,0,155,722,1,0,0,0,157, + 729,1,0,0,0,159,738,1,0,0,0,161,743,1,0,0,0,163,748,1,0,0,0,165,752,1, + 0,0,0,167,757,1,0,0,0,169,764,1,0,0,0,171,772,1,0,0,0,173,779,1,0,0,0, + 175,789,1,0,0,0,177,794,1,0,0,0,179,799,1,0,0,0,181,805,1,0,0,0,183,811, + 1,0,0,0,185,819,1,0,0,0,187,824,1,0,0,0,189,831,1,0,0,0,191,834,1,0,0, + 0,193,837,1,0,0,0,195,847,1,0,0,0,197,855,1,0,0,0,199,858,1,0,0,0,201, + 863,1,0,0,0,203,867,1,0,0,0,205,873,1,0,0,0,207,878,1,0,0,0,209,886,1, + 0,0,0,211,892,1,0,0,0,213,898,1,0,0,0,215,907,1,0,0,0,217,913,1,0,0,0, + 219,922,1,0,0,0,221,933,1,0,0,0,223,936,1,0,0,0,225,941,1,0,0,0,227,945, + 1,0,0,0,229,950,1,0,0,0,231,955,1,0,0,0,233,958,1,0,0,0,235,963,1,0,0, + 0,237,972,1,0,0,0,239,975,1,0,0,0,241,981,1,0,0,0,243,989,1,0,0,0,245, + 997,1,0,0,0,247,1005,1,0,0,0,249,1010,1,0,0,0,251,1014,1,0,0,0,253,1021, + 1,0,0,0,255,1028,1,0,0,0,257,1037,1,0,0,0,259,1062,1,0,0,0,261,1071,1, + 0,0,0,263,1075,1,0,0,0,265,1084,1,0,0,0,267,1090,1,0,0,0,269,1097,1,0, + 0,0,271,1103,1,0,0,0,273,1108,1,0,0,0,275,1111,1,0,0,0,277,1117,1,0,0, + 0,279,1129,1,0,0,0,281,1134,1,0,0,0,283,1144,1,0,0,0,285,1150,1,0,0,0, + 287,1157,1,0,0,0,289,1161,1,0,0,0,291,1166,1,0,0,0,293,1172,1,0,0,0,295, + 1177,1,0,0,0,297,1183,1,0,0,0,299,1193,1,0,0,0,301,1197,1,0,0,0,303,1204, + 1,0,0,0,305,1210,1,0,0,0,307,1218,1,0,0,0,309,1226,1,0,0,0,311,1228,1, + 0,0,0,313,1233,1,0,0,0,315,1236,1,0,0,0,317,1238,1,0,0,0,319,1240,1,0, + 0,0,321,1242,1,0,0,0,323,1247,1,0,0,0,325,1271,1,0,0,0,327,1273,1,0,0, + 0,329,1301,1,0,0,0,331,1304,1,0,0,0,333,1308,1,0,0,0,335,1312,1,0,0,0, + 337,1316,1,0,0,0,339,1318,1,0,0,0,341,1320,1,0,0,0,343,1344,1,0,0,0,345, + 1358,1,0,0,0,347,1367,1,0,0,0,349,1376,1,0,0,0,351,1380,1,0,0,0,353,1390, + 1,0,0,0,355,1395,1,0,0,0,357,1411,1,0,0,0,359,1442,1,0,0,0,361,1444,1, + 0,0,0,363,1446,1,0,0,0,365,1448,1,0,0,0,367,1450,1,0,0,0,369,1452,1,0, + 0,0,371,1454,1,0,0,0,373,1456,1,0,0,0,375,1458,1,0,0,0,377,1460,1,0,0, + 0,379,1462,1,0,0,0,381,1464,1,0,0,0,383,1466,1,0,0,0,385,1468,1,0,0,0, + 387,1470,1,0,0,0,389,1472,1,0,0,0,391,1474,1,0,0,0,393,1476,1,0,0,0,395, + 1478,1,0,0,0,397,1480,1,0,0,0,399,1482,1,0,0,0,401,1484,1,0,0,0,403,404, + 5,59,0,0,404,2,1,0,0,0,405,406,5,40,0,0,406,4,1,0,0,0,407,408,5,41,0, + 0,408,6,1,0,0,0,409,410,5,44,0,0,410,8,1,0,0,0,411,412,5,46,0,0,412,10, + 1,0,0,0,413,414,5,61,0,0,414,12,1,0,0,0,415,416,5,91,0,0,416,14,1,0,0, + 0,417,418,5,93,0,0,418,16,1,0,0,0,419,420,5,123,0,0,420,18,1,0,0,0,421, + 422,5,125,0,0,422,20,1,0,0,0,423,424,5,40,0,0,424,425,5,32,0,0,425,426, + 5,83,0,0,426,427,5,80,0,0,427,428,5,63,0,0,428,429,5,32,0,0,429,430,5, + 41,0,0,430,22,1,0,0,0,431,432,5,124,0,0,432,24,1,0,0,0,433,434,5,46,0, + 0,434,435,5,46,0,0,435,26,1,0,0,0,436,437,5,60,0,0,437,438,5,62,0,0,438, + 28,1,0,0,0,439,440,5,60,0,0,440,30,1,0,0,0,441,442,5,60,0,0,442,443,5, + 61,0,0,443,32,1,0,0,0,444,445,5,62,0,0,445,34,1,0,0,0,446,447,5,62,0, + 0,447,448,5,61,0,0,448,36,1,0,0,0,449,450,5,38,0,0,450,38,1,0,0,0,451, + 452,5,62,0,0,452,453,5,62,0,0,453,40,1,0,0,0,454,455,5,60,0,0,455,456, + 5,60,0,0,456,42,1,0,0,0,457,458,5,43,0,0,458,44,1,0,0,0,459,460,5,47, + 0,0,460,46,1,0,0,0,461,462,5,37,0,0,462,48,1,0,0,0,463,464,5,94,0,0,464, + 50,1,0,0,0,465,466,5,61,0,0,466,467,5,126,0,0,467,52,1,0,0,0,468,469, + 5,36,0,0,469,54,1,0,0,0,470,471,5,10216,0,0,471,56,1,0,0,0,472,473,5, + 12296,0,0,473,58,1,0,0,0,474,475,5,65124,0,0,475,60,1,0,0,0,476,477,5, + 65308,0,0,477,62,1,0,0,0,478,479,5,10217,0,0,479,64,1,0,0,0,480,481,5, + 12297,0,0,481,66,1,0,0,0,482,483,5,65125,0,0,483,68,1,0,0,0,484,485,5, + 65310,0,0,485,70,1,0,0,0,486,487,5,173,0,0,487,72,1,0,0,0,488,489,5,8208, + 0,0,489,74,1,0,0,0,490,491,5,8209,0,0,491,76,1,0,0,0,492,493,5,8210,0, + 0,493,78,1,0,0,0,494,495,5,8211,0,0,495,80,1,0,0,0,496,497,5,8212,0,0, + 497,82,1,0,0,0,498,499,5,8213,0,0,499,84,1,0,0,0,500,501,5,8722,0,0,501, + 86,1,0,0,0,502,503,5,65112,0,0,503,88,1,0,0,0,504,505,5,65123,0,0,505, + 90,1,0,0,0,506,507,5,65293,0,0,507,92,1,0,0,0,508,509,7,0,0,0,509,510, + 7,1,0,0,510,511,7,2,0,0,511,512,7,1,0,0,512,513,7,3,0,0,513,514,7,4,0, + 0,514,515,7,1,0,0,515,94,1,0,0,0,516,517,7,0,0,0,517,518,7,5,0,0,518, + 519,7,2,0,0,519,96,1,0,0,0,520,521,7,0,0,0,521,522,7,6,0,0,522,523,7, + 6,0,0,523,98,1,0,0,0,524,525,7,0,0,0,525,526,7,3,0,0,526,527,7,3,0,0, + 527,100,1,0,0,0,528,529,7,0,0,0,529,530,7,3,0,0,530,531,7,7,0,0,531,532, + 7,8,0,0,532,533,7,9,0,0,533,102,1,0,0,0,534,535,7,0,0,0,535,536,7,5,0, + 0,536,537,7,6,0,0,537,104,1,0,0,0,538,539,7,0,0,0,539,540,7,10,0,0,540, + 106,1,0,0,0,541,542,7,0,0,0,542,543,7,10,0,0,543,544,7,1,0,0,544,108, + 1,0,0,0,545,546,7,0,0,0,546,547,7,10,0,0,547,548,7,1,0,0,548,549,7,8, + 0,0,549,550,7,5,0,0,550,551,7,6,0,0,551,552,7,4,0,0,552,553,7,5,0,0,553, + 554,7,11,0,0,554,110,1,0,0,0,555,556,7,0,0,0,556,557,7,7,0,0,557,558, + 7,7,0,0,558,559,7,0,0,0,559,560,7,1,0,0,560,561,7,12,0,0,561,112,1,0, + 0,0,562,563,7,13,0,0,563,564,7,8,0,0,564,565,7,11,0,0,565,566,7,4,0,0, + 566,567,7,5,0,0,567,114,1,0,0,0,568,569,7,13,0,0,569,570,7,2,0,0,570, + 116,1,0,0,0,571,572,7,1,0,0,572,573,7,0,0,0,573,574,7,3,0,0,574,575,7, + 3,0,0,575,118,1,0,0,0,576,577,7,1,0,0,577,578,7,0,0,0,578,579,7,10,0, + 0,579,580,7,8,0,0,580,120,1,0,0,0,581,582,7,1,0,0,582,583,7,0,0,0,583, + 584,7,10,0,0,584,585,7,7,0,0,585,122,1,0,0,0,586,587,7,1,0,0,587,588, + 7,12,0,0,588,589,7,8,0,0,589,590,7,1,0,0,590,591,7,14,0,0,591,592,7,15, + 0,0,592,593,7,16,0,0,593,594,7,4,0,0,594,595,7,5,0,0,595,596,7,7,0,0, + 596,124,1,0,0,0,597,598,7,1,0,0,598,599,7,16,0,0,599,600,7,3,0,0,600, + 601,7,17,0,0,601,602,7,18,0,0,602,603,7,5,0,0,603,126,1,0,0,0,604,605, + 7,1,0,0,605,606,7,16,0,0,606,607,7,18,0,0,607,608,7,18,0,0,608,609,7, + 8,0,0,609,610,7,5,0,0,610,611,7,7,0,0,611,128,1,0,0,0,612,613,7,1,0,0, + 613,614,7,16,0,0,614,615,7,18,0,0,615,616,7,18,0,0,616,617,7,4,0,0,617, + 618,7,7,0,0,618,130,1,0,0,0,619,620,7,1,0,0,620,621,7,16,0,0,621,622, + 7,18,0,0,622,623,7,18,0,0,623,624,7,4,0,0,624,625,7,7,0,0,625,626,5,95, + 0,0,626,627,7,10,0,0,627,628,7,14,0,0,628,629,7,4,0,0,629,630,7,15,0, + 0,630,631,5,95,0,0,631,632,7,1,0,0,632,633,7,12,0,0,633,634,7,8,0,0,634, + 635,7,1,0,0,635,636,7,14,0,0,636,637,7,15,0,0,637,638,7,16,0,0,638,639, + 7,4,0,0,639,640,7,5,0,0,640,641,7,7,0,0,641,132,1,0,0,0,642,643,7,1,0, + 0,643,644,7,16,0,0,644,645,7,5,0,0,645,646,7,7,0,0,646,647,7,0,0,0,647, + 648,7,4,0,0,648,649,7,5,0,0,649,650,7,10,0,0,650,134,1,0,0,0,651,652, + 7,1,0,0,652,653,7,16,0,0,653,654,7,15,0,0,654,655,7,2,0,0,655,136,1,0, + 0,0,656,657,7,1,0,0,657,658,7,16,0,0,658,659,7,17,0,0,659,660,7,5,0,0, + 660,661,7,7,0,0,661,138,1,0,0,0,662,663,7,1,0,0,663,664,7,9,0,0,664,665, + 7,8,0,0,665,666,7,0,0,0,666,667,7,7,0,0,667,668,7,8,0,0,668,140,1,0,0, + 0,669,670,7,1,0,0,670,671,7,2,0,0,671,672,7,1,0,0,672,673,7,3,0,0,673, + 674,7,8,0,0,674,142,1,0,0,0,675,676,7,6,0,0,676,677,7,0,0,0,677,678,7, + 7,0,0,678,679,7,0,0,0,679,680,7,13,0,0,680,681,7,0,0,0,681,682,7,10,0, + 0,682,683,7,8,0,0,683,144,1,0,0,0,684,685,7,6,0,0,685,686,7,13,0,0,686, + 687,7,7,0,0,687,688,7,2,0,0,688,689,7,15,0,0,689,690,7,8,0,0,690,146, + 1,0,0,0,691,692,7,6,0,0,692,693,7,8,0,0,693,694,7,19,0,0,694,695,7,0, + 0,0,695,696,7,17,0,0,696,697,7,3,0,0,697,698,7,7,0,0,698,148,1,0,0,0, + 699,700,7,6,0,0,700,701,7,8,0,0,701,702,7,3,0,0,702,703,7,8,0,0,703,704, + 7,7,0,0,704,705,7,8,0,0,705,150,1,0,0,0,706,707,7,6,0,0,707,708,7,8,0, + 0,708,709,7,10,0,0,709,710,7,1,0,0,710,152,1,0,0,0,711,712,7,6,0,0,712, + 713,7,8,0,0,713,714,7,10,0,0,714,715,7,1,0,0,715,716,7,8,0,0,716,717, + 7,5,0,0,717,718,7,6,0,0,718,719,7,4,0,0,719,720,7,5,0,0,720,721,7,11, + 0,0,721,154,1,0,0,0,722,723,7,6,0,0,723,724,7,8,0,0,724,725,7,7,0,0,725, + 726,7,0,0,0,726,727,7,1,0,0,727,728,7,12,0,0,728,156,1,0,0,0,729,730, + 7,6,0,0,730,731,7,4,0,0,731,732,7,10,0,0,732,733,7,7,0,0,733,734,7,4, + 0,0,734,735,7,5,0,0,735,736,7,1,0,0,736,737,7,7,0,0,737,158,1,0,0,0,738, + 739,7,6,0,0,739,740,7,9,0,0,740,741,7,16,0,0,741,742,7,15,0,0,742,160, + 1,0,0,0,743,744,7,8,0,0,744,745,7,3,0,0,745,746,7,10,0,0,746,747,7,8, + 0,0,747,162,1,0,0,0,748,749,7,8,0,0,749,750,7,5,0,0,750,751,7,6,0,0,751, + 164,1,0,0,0,752,753,7,8,0,0,753,754,7,5,0,0,754,755,7,6,0,0,755,756,7, + 10,0,0,756,166,1,0,0,0,757,758,7,8,0,0,758,759,7,20,0,0,759,760,7,4,0, + 0,760,761,7,10,0,0,761,762,7,7,0,0,762,763,7,10,0,0,763,168,1,0,0,0,764, + 765,7,8,0,0,765,766,7,20,0,0,766,767,7,15,0,0,767,768,7,3,0,0,768,769, + 7,0,0,0,769,770,7,4,0,0,770,771,7,5,0,0,771,170,1,0,0,0,772,773,7,8,0, + 0,773,774,7,20,0,0,774,775,7,15,0,0,775,776,7,16,0,0,776,777,7,9,0,0, + 777,778,7,7,0,0,778,172,1,0,0,0,779,780,7,8,0,0,780,781,7,20,0,0,781, + 782,7,7,0,0,782,783,7,8,0,0,783,784,7,5,0,0,784,785,7,10,0,0,785,786, + 7,4,0,0,786,787,7,16,0,0,787,788,7,5,0,0,788,174,1,0,0,0,789,790,7,19, + 0,0,790,791,7,9,0,0,791,792,7,16,0,0,792,793,7,18,0,0,793,176,1,0,0,0, + 794,795,7,11,0,0,795,796,7,3,0,0,796,797,7,16,0,0,797,798,7,13,0,0,798, + 178,1,0,0,0,799,800,7,11,0,0,800,801,7,9,0,0,801,802,7,0,0,0,802,803, + 7,15,0,0,803,804,7,12,0,0,804,180,1,0,0,0,805,806,7,11,0,0,806,807,7, + 9,0,0,807,808,7,16,0,0,808,809,7,17,0,0,809,810,7,15,0,0,810,182,1,0, + 0,0,811,812,7,12,0,0,812,813,7,8,0,0,813,814,7,0,0,0,814,815,7,6,0,0, + 815,816,7,8,0,0,816,817,7,9,0,0,817,818,7,10,0,0,818,184,1,0,0,0,819, + 820,7,12,0,0,820,821,7,4,0,0,821,822,7,5,0,0,822,823,7,7,0,0,823,186, + 1,0,0,0,824,825,7,4,0,0,825,826,7,18,0,0,826,827,7,15,0,0,827,828,7,16, + 0,0,828,829,7,9,0,0,829,830,7,7,0,0,830,188,1,0,0,0,831,832,7,4,0,0,832, + 833,7,19,0,0,833,190,1,0,0,0,834,835,7,4,0,0,835,836,7,5,0,0,836,192, + 1,0,0,0,837,838,7,4,0,0,838,839,7,5,0,0,839,840,7,1,0,0,840,841,7,9,0, + 0,841,842,7,8,0,0,842,843,7,18,0,0,843,844,7,8,0,0,844,845,7,5,0,0,845, + 846,7,7,0,0,846,194,1,0,0,0,847,848,7,4,0,0,848,849,7,5,0,0,849,850,7, + 10,0,0,850,851,7,7,0,0,851,852,7,0,0,0,852,853,7,3,0,0,853,854,7,3,0, + 0,854,196,1,0,0,0,855,856,7,4,0,0,856,857,7,10,0,0,857,198,1,0,0,0,858, + 859,7,21,0,0,859,860,7,16,0,0,860,861,7,4,0,0,861,862,7,5,0,0,862,200, + 1,0,0,0,863,864,7,14,0,0,864,865,7,8,0,0,865,866,7,2,0,0,866,202,1,0, + 0,0,867,868,7,3,0,0,868,869,7,4,0,0,869,870,7,18,0,0,870,871,7,4,0,0, + 871,872,7,7,0,0,872,204,1,0,0,0,873,874,7,3,0,0,874,875,7,16,0,0,875, + 876,7,0,0,0,876,877,7,6,0,0,877,206,1,0,0,0,878,879,7,3,0,0,879,880,7, + 16,0,0,880,881,7,11,0,0,881,882,7,4,0,0,882,883,7,1,0,0,883,884,7,0,0, + 0,884,885,7,3,0,0,885,208,1,0,0,0,886,887,7,18,0,0,887,888,7,0,0,0,888, + 889,7,1,0,0,889,890,7,9,0,0,890,891,7,16,0,0,891,210,1,0,0,0,892,893, + 7,18,0,0,893,894,7,0,0,0,894,895,7,7,0,0,895,896,7,1,0,0,896,897,7,12, + 0,0,897,212,1,0,0,0,898,899,7,18,0,0,899,900,7,0,0,0,900,901,7,20,0,0, + 901,902,7,22,0,0,902,903,7,0,0,0,903,904,7,3,0,0,904,905,7,17,0,0,905, + 906,7,8,0,0,906,214,1,0,0,0,907,908,7,18,0,0,908,909,7,8,0,0,909,910, + 7,9,0,0,910,911,7,11,0,0,911,912,7,8,0,0,912,216,1,0,0,0,913,914,7,18, + 0,0,914,915,7,4,0,0,915,916,7,5,0,0,916,917,7,22,0,0,917,918,7,0,0,0, + 918,919,7,3,0,0,919,920,7,17,0,0,920,921,7,8,0,0,921,218,1,0,0,0,922, + 923,7,18,0,0,923,924,7,17,0,0,924,925,7,3,0,0,925,926,7,7,0,0,926,927, + 7,4,0,0,927,928,5,95,0,0,928,929,7,21,0,0,929,930,7,16,0,0,930,931,7, + 4,0,0,931,932,7,5,0,0,932,220,1,0,0,0,933,934,7,5,0,0,934,935,7,16,0, + 0,935,222,1,0,0,0,936,937,7,5,0,0,937,938,7,16,0,0,938,939,7,6,0,0,939, + 940,7,8,0,0,940,224,1,0,0,0,941,942,7,5,0,0,942,943,7,16,0,0,943,944, + 7,7,0,0,944,226,1,0,0,0,945,946,7,5,0,0,946,947,7,16,0,0,947,948,7,5, + 0,0,948,949,7,8,0,0,949,228,1,0,0,0,950,951,7,5,0,0,951,952,7,17,0,0, + 952,953,7,3,0,0,953,954,7,3,0,0,954,230,1,0,0,0,955,956,7,16,0,0,956, + 957,7,5,0,0,957,232,1,0,0,0,958,959,7,16,0,0,959,960,7,5,0,0,960,961, + 7,3,0,0,961,962,7,2,0,0,962,234,1,0,0,0,963,964,7,16,0,0,964,965,7,15, + 0,0,965,966,7,7,0,0,966,967,7,4,0,0,967,968,7,16,0,0,968,969,7,5,0,0, + 969,970,7,0,0,0,970,971,7,3,0,0,971,236,1,0,0,0,972,973,7,16,0,0,973, + 974,7,9,0,0,974,238,1,0,0,0,975,976,7,16,0,0,976,977,7,9,0,0,977,978, + 7,6,0,0,978,979,7,8,0,0,979,980,7,9,0,0,980,240,1,0,0,0,981,982,7,15, + 0,0,982,983,7,9,0,0,983,984,7,4,0,0,984,985,7,18,0,0,985,986,7,0,0,0, + 986,987,7,9,0,0,987,988,7,2,0,0,988,242,1,0,0,0,989,990,7,15,0,0,990, + 991,7,9,0,0,991,992,7,16,0,0,992,993,7,19,0,0,993,994,7,4,0,0,994,995, + 7,3,0,0,995,996,7,8,0,0,996,244,1,0,0,0,997,998,7,15,0,0,998,999,7,9, + 0,0,999,1000,7,16,0,0,1000,1001,7,21,0,0,1001,1002,7,8,0,0,1002,1003, + 7,1,0,0,1003,1004,7,7,0,0,1004,246,1,0,0,0,1005,1006,7,9,0,0,1006,1007, + 7,8,0,0,1007,1008,7,0,0,0,1008,1009,7,6,0,0,1009,248,1,0,0,0,1010,1011, + 7,9,0,0,1011,1012,7,8,0,0,1012,1013,7,3,0,0,1013,250,1,0,0,0,1014,1015, + 7,9,0,0,1015,1016,7,8,0,0,1016,1017,7,5,0,0,1017,1018,7,0,0,0,1018,1019, + 7,18,0,0,1019,1020,7,8,0,0,1020,252,1,0,0,0,1021,1022,7,9,0,0,1022,1023, + 7,8,0,0,1023,1024,7,7,0,0,1024,1025,7,17,0,0,1025,1026,7,9,0,0,1026,1027, + 7,5,0,0,1027,254,1,0,0,0,1028,1029,7,9,0,0,1029,1030,7,16,0,0,1030,1031, + 7,3,0,0,1031,1032,7,3,0,0,1032,1033,7,13,0,0,1033,1034,7,0,0,0,1034,1035, + 7,1,0,0,1035,1036,7,14,0,0,1036,256,1,0,0,0,1037,1038,7,9,0,0,1038,1039, + 7,16,0,0,1039,1040,7,3,0,0,1040,1041,7,3,0,0,1041,1042,7,13,0,0,1042, + 1043,7,0,0,0,1043,1044,7,1,0,0,1044,1045,7,14,0,0,1045,1046,5,95,0,0, + 1046,1047,7,10,0,0,1047,1048,7,14,0,0,1048,1049,7,4,0,0,1049,1050,7,15, + 0,0,1050,1051,5,95,0,0,1051,1052,7,1,0,0,1052,1053,7,12,0,0,1053,1054, + 7,8,0,0,1054,1055,7,1,0,0,1055,1056,7,14,0,0,1056,1057,7,15,0,0,1057, + 1058,7,16,0,0,1058,1059,7,4,0,0,1059,1060,7,5,0,0,1060,1061,7,7,0,0,1061, + 258,1,0,0,0,1062,1063,7,10,0,0,1063,1064,7,8,0,0,1064,1065,7,23,0,0,1065, + 1066,7,17,0,0,1066,1067,7,8,0,0,1067,1068,7,5,0,0,1068,1069,7,1,0,0,1069, + 1070,7,8,0,0,1070,260,1,0,0,0,1071,1072,7,10,0,0,1072,1073,7,8,0,0,1073, + 1074,7,7,0,0,1074,262,1,0,0,0,1075,1076,7,10,0,0,1076,1077,7,12,0,0,1077, + 1078,7,16,0,0,1078,1079,7,9,0,0,1079,1080,7,7,0,0,1080,1081,7,8,0,0,1081, + 1082,7,10,0,0,1082,1083,7,7,0,0,1083,264,1,0,0,0,1084,1085,7,10,0,0,1085, + 1086,7,7,0,0,1086,1087,7,0,0,0,1087,1088,7,9,0,0,1088,1089,7,7,0,0,1089, + 266,1,0,0,0,1090,1091,7,10,0,0,1091,1092,7,7,0,0,1092,1093,7,0,0,0,1093, + 1094,7,9,0,0,1094,1095,7,7,0,0,1095,1096,7,10,0,0,1096,268,1,0,0,0,1097, + 1098,7,7,0,0,1098,1099,7,0,0,0,1099,1100,7,13,0,0,1100,1101,7,3,0,0,1101, + 1102,7,8,0,0,1102,270,1,0,0,0,1103,1104,7,7,0,0,1104,1105,7,12,0,0,1105, + 1106,7,8,0,0,1106,1107,7,5,0,0,1107,272,1,0,0,0,1108,1109,7,7,0,0,1109, + 1110,7,16,0,0,1110,274,1,0,0,0,1111,1112,7,7,0,0,1112,1113,7,9,0,0,1113, + 1114,7,0,0,0,1114,1115,7,4,0,0,1115,1116,7,3,0,0,1116,276,1,0,0,0,1117, + 1118,7,7,0,0,1118,1119,7,9,0,0,1119,1120,7,0,0,0,1120,1121,7,5,0,0,1121, + 1122,7,10,0,0,1122,1123,7,0,0,0,1123,1124,7,1,0,0,1124,1125,7,7,0,0,1125, + 1126,7,4,0,0,1126,1127,7,16,0,0,1127,1128,7,5,0,0,1128,278,1,0,0,0,1129, + 1130,7,7,0,0,1130,1131,7,2,0,0,1131,1132,7,15,0,0,1132,1133,7,8,0,0,1133, + 280,1,0,0,0,1134,1135,7,17,0,0,1135,1136,7,5,0,0,1136,1137,7,4,0,0,1137, + 1138,7,5,0,0,1138,1139,7,10,0,0,1139,1140,7,7,0,0,1140,1141,7,0,0,0,1141, + 1142,7,3,0,0,1142,1143,7,3,0,0,1143,282,1,0,0,0,1144,1145,7,17,0,0,1145, + 1146,7,5,0,0,1146,1147,7,4,0,0,1147,1148,7,16,0,0,1148,1149,7,5,0,0,1149, + 284,1,0,0,0,1150,1151,7,17,0,0,1151,1152,7,5,0,0,1152,1153,7,24,0,0,1153, + 1154,7,4,0,0,1154,1155,7,5,0,0,1155,1156,7,6,0,0,1156,286,1,0,0,0,1157, + 1158,7,17,0,0,1158,1159,7,10,0,0,1159,1160,7,8,0,0,1160,288,1,0,0,0,1161, + 1162,7,24,0,0,1162,1163,7,12,0,0,1163,1164,7,8,0,0,1164,1165,7,5,0,0, + 1165,290,1,0,0,0,1166,1167,7,24,0,0,1167,1168,7,12,0,0,1168,1169,7,8, + 0,0,1169,1170,7,9,0,0,1170,1171,7,8,0,0,1171,292,1,0,0,0,1172,1173,7, + 24,0,0,1173,1174,7,4,0,0,1174,1175,7,7,0,0,1175,1176,7,12,0,0,1176,294, + 1,0,0,0,1177,1178,7,24,0,0,1178,1179,7,9,0,0,1179,1180,7,4,0,0,1180,1181, + 7,7,0,0,1181,1182,7,8,0,0,1182,296,1,0,0,0,1183,1184,7,24,0,0,1184,1185, + 7,10,0,0,1185,1186,7,12,0,0,1186,1187,7,16,0,0,1187,1188,7,9,0,0,1188, + 1189,7,7,0,0,1189,1190,7,8,0,0,1190,1191,7,10,0,0,1191,1192,7,7,0,0,1192, + 298,1,0,0,0,1193,1194,7,20,0,0,1194,1195,7,16,0,0,1195,1196,7,9,0,0,1196, + 300,1,0,0,0,1197,1198,7,10,0,0,1198,1199,7,4,0,0,1199,1200,7,5,0,0,1200, + 1201,7,11,0,0,1201,1202,7,3,0,0,1202,1203,7,8,0,0,1203,302,1,0,0,0,1204, + 1205,7,2,0,0,1205,1206,7,4,0,0,1206,1207,7,8,0,0,1207,1208,7,3,0,0,1208, + 1209,7,6,0,0,1209,304,1,0,0,0,1210,1211,7,6,0,0,1211,1212,7,8,0,0,1212, + 1213,7,1,0,0,1213,1214,7,4,0,0,1214,1215,7,18,0,0,1215,1216,7,0,0,0,1216, + 1217,7,3,0,0,1217,306,1,0,0,0,1218,1219,7,22,0,0,1219,1220,7,0,0,0,1220, + 1221,7,9,0,0,1221,1222,7,1,0,0,1222,1223,7,12,0,0,1223,1224,7,0,0,0,1224, + 1225,7,9,0,0,1225,308,1,0,0,0,1226,1227,5,42,0,0,1227,310,1,0,0,0,1228, + 1229,7,10,0,0,1229,1230,7,14,0,0,1230,1231,7,4,0,0,1231,1232,7,15,0,0, + 1232,312,1,0,0,0,1233,1234,5,33,0,0,1234,1235,5,61,0,0,1235,314,1,0,0, + 0,1236,1237,5,45,0,0,1237,316,1,0,0,0,1238,1239,5,33,0,0,1239,318,1,0, + 0,0,1240,1241,5,58,0,0,1241,320,1,0,0,0,1242,1243,7,7,0,0,1243,1244,7, + 9,0,0,1244,1245,7,17,0,0,1245,1246,7,8,0,0,1246,322,1,0,0,0,1247,1248, + 7,19,0,0,1248,1249,7,0,0,0,1249,1250,7,3,0,0,1250,1251,7,10,0,0,1251, + 1252,7,8,0,0,1252,324,1,0,0,0,1253,1258,5,34,0,0,1254,1257,3,391,195, + 0,1255,1257,3,327,163,0,1256,1254,1,0,0,0,1256,1255,1,0,0,0,1257,1260, + 1,0,0,0,1258,1256,1,0,0,0,1258,1259,1,0,0,0,1259,1261,1,0,0,0,1260,1258, + 1,0,0,0,1261,1272,5,34,0,0,1262,1267,5,39,0,0,1263,1266,3,371,185,0,1264, + 1266,3,327,163,0,1265,1263,1,0,0,0,1265,1264,1,0,0,0,1266,1269,1,0,0, + 0,1267,1265,1,0,0,0,1267,1268,1,0,0,0,1268,1270,1,0,0,0,1269,1267,1,0, + 0,0,1270,1272,5,39,0,0,1271,1253,1,0,0,0,1271,1262,1,0,0,0,1272,326,1, + 0,0,0,1273,1291,5,92,0,0,1274,1292,7,25,0,0,1275,1276,7,17,0,0,1276,1277, + 3,333,166,0,1277,1278,3,333,166,0,1278,1279,3,333,166,0,1279,1280,3,333, + 166,0,1280,1292,1,0,0,0,1281,1282,7,17,0,0,1282,1283,3,333,166,0,1283, + 1284,3,333,166,0,1284,1285,3,333,166,0,1285,1286,3,333,166,0,1286,1287, + 3,333,166,0,1287,1288,3,333,166,0,1288,1289,3,333,166,0,1289,1290,3,333, + 166,0,1290,1292,1,0,0,0,1291,1274,1,0,0,0,1291,1275,1,0,0,0,1291,1281, + 1,0,0,0,1292,328,1,0,0,0,1293,1302,3,341,170,0,1294,1298,3,337,168,0, + 1295,1297,3,335,167,0,1296,1295,1,0,0,0,1297,1300,1,0,0,0,1298,1296,1, + 0,0,0,1298,1299,1,0,0,0,1299,1302,1,0,0,0,1300,1298,1,0,0,0,1301,1293, + 1,0,0,0,1301,1294,1,0,0,0,1302,330,1,0,0,0,1303,1305,7,26,0,0,1304,1303, + 1,0,0,0,1305,332,1,0,0,0,1306,1309,3,335,167,0,1307,1309,3,331,165,0, + 1308,1306,1,0,0,0,1308,1307,1,0,0,0,1309,334,1,0,0,0,1310,1313,3,341, + 170,0,1311,1313,3,337,168,0,1312,1310,1,0,0,0,1312,1311,1,0,0,0,1313, + 336,1,0,0,0,1314,1317,3,339,169,0,1315,1317,2,56,57,0,1316,1314,1,0,0, + 0,1316,1315,1,0,0,0,1317,338,1,0,0,0,1318,1319,2,49,55,0,1319,340,1,0, + 0,0,1320,1321,5,48,0,0,1321,342,1,0,0,0,1322,1324,3,335,167,0,1323,1322, + 1,0,0,0,1324,1325,1,0,0,0,1325,1323,1,0,0,0,1325,1326,1,0,0,0,1326,1345, + 1,0,0,0,1327,1329,3,335,167,0,1328,1327,1,0,0,0,1329,1330,1,0,0,0,1330, + 1328,1,0,0,0,1330,1331,1,0,0,0,1331,1332,1,0,0,0,1332,1334,5,46,0,0,1333, + 1335,3,335,167,0,1334,1333,1,0,0,0,1335,1336,1,0,0,0,1336,1334,1,0,0, + 0,1336,1337,1,0,0,0,1337,1345,1,0,0,0,1338,1340,5,46,0,0,1339,1341,3, + 335,167,0,1340,1339,1,0,0,0,1341,1342,1,0,0,0,1342,1340,1,0,0,0,1342, + 1343,1,0,0,0,1343,1345,1,0,0,0,1344,1323,1,0,0,0,1344,1328,1,0,0,0,1344, + 1338,1,0,0,0,1345,1346,1,0,0,0,1346,1348,7,8,0,0,1347,1349,5,45,0,0,1348, + 1347,1,0,0,0,1348,1349,1,0,0,0,1349,1351,1,0,0,0,1350,1352,3,335,167, + 0,1351,1350,1,0,0,0,1352,1353,1,0,0,0,1353,1351,1,0,0,0,1353,1354,1,0, + 0,0,1354,344,1,0,0,0,1355,1357,3,335,167,0,1356,1355,1,0,0,0,1357,1360, + 1,0,0,0,1358,1356,1,0,0,0,1358,1359,1,0,0,0,1359,1361,1,0,0,0,1360,1358, + 1,0,0,0,1361,1363,5,46,0,0,1362,1364,3,335,167,0,1363,1362,1,0,0,0,1364, + 1365,1,0,0,0,1365,1363,1,0,0,0,1365,1366,1,0,0,0,1366,346,1,0,0,0,1367, + 1371,3,349,174,0,1368,1370,3,351,175,0,1369,1368,1,0,0,0,1370,1373,1, + 0,0,0,1371,1369,1,0,0,0,1371,1372,1,0,0,0,1372,348,1,0,0,0,1373,1371, + 1,0,0,0,1374,1377,3,399,199,0,1375,1377,3,387,193,0,1376,1374,1,0,0,0, + 1376,1375,1,0,0,0,1377,350,1,0,0,0,1378,1381,3,367,183,0,1379,1381,3, + 383,191,0,1380,1378,1,0,0,0,1380,1379,1,0,0,0,1381,352,1,0,0,0,1382,1386, + 5,96,0,0,1383,1385,3,363,181,0,1384,1383,1,0,0,0,1385,1388,1,0,0,0,1386, + 1384,1,0,0,0,1386,1387,1,0,0,0,1387,1389,1,0,0,0,1388,1386,1,0,0,0,1389, + 1391,5,96,0,0,1390,1382,1,0,0,0,1391,1392,1,0,0,0,1392,1390,1,0,0,0,1392, + 1393,1,0,0,0,1393,354,1,0,0,0,1394,1396,3,357,178,0,1395,1394,1,0,0,0, + 1396,1397,1,0,0,0,1397,1395,1,0,0,0,1397,1398,1,0,0,0,1398,356,1,0,0, + 0,1399,1412,3,385,192,0,1400,1412,3,389,194,0,1401,1412,3,393,196,0,1402, + 1412,3,395,197,0,1403,1412,3,361,180,0,1404,1412,3,381,190,0,1405,1412, + 3,379,189,0,1406,1412,3,377,188,0,1407,1412,3,365,182,0,1408,1412,3,397, + 198,0,1409,1412,7,27,0,0,1410,1412,3,359,179,0,1411,1399,1,0,0,0,1411, + 1400,1,0,0,0,1411,1401,1,0,0,0,1411,1402,1,0,0,0,1411,1403,1,0,0,0,1411, + 1404,1,0,0,0,1411,1405,1,0,0,0,1411,1406,1,0,0,0,1411,1407,1,0,0,0,1411, + 1408,1,0,0,0,1411,1409,1,0,0,0,1411,1410,1,0,0,0,1412,358,1,0,0,0,1413, + 1414,5,47,0,0,1414,1415,5,42,0,0,1415,1421,1,0,0,0,1416,1420,3,369,184, + 0,1417,1418,5,42,0,0,1418,1420,3,375,187,0,1419,1416,1,0,0,0,1419,1417, + 1,0,0,0,1420,1423,1,0,0,0,1421,1419,1,0,0,0,1421,1422,1,0,0,0,1422,1424, + 1,0,0,0,1423,1421,1,0,0,0,1424,1425,5,42,0,0,1425,1443,5,47,0,0,1426, + 1427,5,47,0,0,1427,1428,5,47,0,0,1428,1432,1,0,0,0,1429,1431,3,373,186, + 0,1430,1429,1,0,0,0,1431,1434,1,0,0,0,1432,1430,1,0,0,0,1432,1433,1,0, + 0,0,1433,1436,1,0,0,0,1434,1432,1,0,0,0,1435,1437,3,381,190,0,1436,1435, + 1,0,0,0,1436,1437,1,0,0,0,1437,1440,1,0,0,0,1438,1441,3,393,196,0,1439, + 1441,5,0,0,1,1440,1438,1,0,0,0,1440,1439,1,0,0,0,1441,1443,1,0,0,0,1442, + 1413,1,0,0,0,1442,1426,1,0,0,0,1443,360,1,0,0,0,1444,1445,7,28,0,0,1445, + 362,1,0,0,0,1446,1447,8,29,0,0,1447,364,1,0,0,0,1448,1449,7,30,0,0,1449, + 366,1,0,0,0,1450,1451,7,31,0,0,1451,368,1,0,0,0,1452,1453,8,32,0,0,1453, + 370,1,0,0,0,1454,1455,8,33,0,0,1455,372,1,0,0,0,1456,1457,8,34,0,0,1457, + 374,1,0,0,0,1458,1459,8,35,0,0,1459,376,1,0,0,0,1460,1461,7,36,0,0,1461, + 378,1,0,0,0,1462,1463,7,37,0,0,1463,380,1,0,0,0,1464,1465,7,38,0,0,1465, + 382,1,0,0,0,1466,1467,7,39,0,0,1467,384,1,0,0,0,1468,1469,7,40,0,0,1469, + 386,1,0,0,0,1470,1471,7,41,0,0,1471,388,1,0,0,0,1472,1473,7,42,0,0,1473, + 390,1,0,0,0,1474,1475,8,43,0,0,1475,392,1,0,0,0,1476,1477,7,44,0,0,1477, + 394,1,0,0,0,1478,1479,7,45,0,0,1479,396,1,0,0,0,1480,1481,7,46,0,0,1481, + 398,1,0,0,0,1482,1483,7,47,0,0,1483,400,1,0,0,0,1484,1485,9,0,0,0,1485, + 402,1,0,0,0,35,0,1256,1258,1265,1267,1271,1291,1298,1301,1304,1308,1312, + 1316,1325,1330,1336,1342,1344,1348,1353,1358,1365,1371,1376,1380,1386, + 1392,1397,1411,1419,1421,1432,1436,1440,1442,0 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); diff --git a/third_party/antlr4_cypher/cypher_parser.cpp b/third_party/antlr4_cypher/cypher_parser.cpp index 6d4663b4b..2a63e611e 100644 --- a/third_party/antlr4_cypher/cypher_parser.cpp +++ b/third_party/antlr4_cypher/cypher_parser.cpp @@ -112,7 +112,7 @@ void cypherParserInitialize() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", "", "", "'*'", "", "'!='", + "", "", "", "", "", "", "", "", "", "", "", "", "", "'*'", "", "'!='", "'-'", "'!'", "':'", "", "", "", "", "", "", "", "", "", "", "'0'" }, std::vector{ @@ -133,16 +133,17 @@ void cypherParserInitialize() { "SEQUENCE", "SET", "SHORTEST", "START", "STARTS", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TYPE", "UNINSTALL", "UNION", "UNWIND", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", - "YIELD", "DECIMAL", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", "MINUS", - "FACTORIAL", "COLON", "BTRUE", "BFALSE", "StringLiteral", "EscapedChar", - "DecimalInteger", "HexLetter", "HexDigit", "Digit", "NonZeroDigit", - "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", - "UnescapedSymbolicName", "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", - "SP", "WHITESPACE", "CypherComment", "Unknown" + "YIELD", "DECIMAL", "VARCHAR", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", + "MINUS", "FACTORIAL", "COLON", "BTRUE", "BFALSE", "StringLiteral", + "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", "Digit", + "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", + "RegularDecimalReal", "UnescapedSymbolicName", "IdentifierStart", + "IdentifierPart", "EscapedSymbolicName", "SP", "WHITESPACE", "CypherComment", + "Unknown" } ); static const int32_t serializedATNSegment[] = { - 4,1,180,2868,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, + 4,1,181,2882,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, 2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21, 7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28, @@ -235,1026 +236,1032 @@ void cypherParserInitialize() { 8,48,1,48,1,48,3,48,1151,8,48,1,48,1,48,3,48,1155,8,48,1,48,1,48,3,48, 1159,8,48,1,48,1,48,1,48,1,48,3,48,1165,8,48,1,48,1,48,3,48,1169,8,48, 1,48,1,48,3,48,1173,8,48,1,48,1,48,3,48,1177,8,48,1,48,1,48,3,48,1181, - 8,48,1,48,1,48,3,48,1185,8,48,1,48,1,48,5,48,1189,8,48,10,48,12,48,1192, - 9,48,1,49,1,49,5,49,1196,8,49,10,49,12,49,1199,9,49,1,50,1,50,3,50,1203, - 8,50,1,50,1,50,1,51,1,51,3,51,1209,8,51,1,52,1,52,1,52,3,52,1214,8,52, - 1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54, - 1,54,3,54,1231,8,54,1,55,1,55,1,55,3,55,1236,8,55,1,56,1,56,1,56,1,56, - 3,56,1242,8,56,1,56,1,56,3,56,1246,8,56,1,57,1,57,1,57,1,57,1,57,1,57, - 1,57,3,57,1255,8,57,1,58,1,58,1,58,1,58,3,58,1261,8,58,1,58,1,58,3,58, - 1265,8,58,1,59,1,59,1,60,1,60,3,60,1271,8,60,1,60,5,60,1274,8,60,10,60, - 12,60,1277,9,60,1,60,1,60,3,60,1281,8,60,4,60,1283,8,60,11,60,12,60,1284, - 1,60,1,60,1,60,1,60,3,60,1291,8,60,1,61,1,61,1,61,1,61,3,61,1297,8,61, - 1,61,1,61,1,61,3,61,1302,8,61,1,61,3,61,1305,8,61,1,62,1,62,3,62,1309, - 8,62,5,62,1311,8,62,10,62,12,62,1314,9,62,1,62,1,62,1,62,3,62,1319,8, - 62,1,63,1,63,3,63,1323,8,63,1,63,1,63,3,63,1327,8,63,1,63,1,63,3,63,1331, - 8,63,1,63,5,63,1334,8,63,10,63,12,63,1337,9,63,1,63,3,63,1340,8,63,1, - 63,1,63,1,64,1,64,3,64,1346,8,64,1,64,1,64,3,64,1350,8,64,1,64,1,64,3, - 64,1354,8,64,1,64,1,64,3,64,1358,8,64,1,64,5,64,1361,8,64,10,64,12,64, - 1364,9,64,1,64,3,64,1367,8,64,1,64,1,64,1,64,1,64,3,64,1373,8,64,1,65, - 1,65,3,65,1377,8,65,1,66,1,66,3,66,1381,8,66,5,66,1383,8,66,10,66,12, - 66,1386,9,66,1,66,1,66,1,66,3,66,1391,8,66,5,66,1393,8,66,10,66,12,66, - 1396,9,66,1,66,1,66,3,66,1400,8,66,1,66,5,66,1403,8,66,10,66,12,66,1406, - 9,66,1,66,3,66,1409,8,66,1,66,3,66,1412,8,66,3,66,1414,8,66,1,67,1,67, - 3,67,1418,8,67,4,67,1420,8,67,11,67,12,67,1421,1,67,1,67,1,68,1,68,3, - 68,1428,8,68,5,68,1430,8,68,10,68,12,68,1433,9,68,1,68,1,68,3,68,1437, - 8,68,5,68,1439,8,68,10,68,12,68,1442,9,68,1,68,1,68,1,69,1,69,1,69,1, - 69,3,69,1450,8,69,1,70,1,70,1,70,1,70,3,70,1456,8,70,1,71,1,71,1,71,1, - 71,1,71,1,71,3,71,1464,8,71,1,71,1,71,3,71,1468,8,71,1,71,1,71,3,71,1472, - 8,71,1,71,1,71,3,71,1476,8,71,1,71,1,71,1,71,1,71,1,71,3,71,1483,8,71, - 1,71,1,71,3,71,1487,8,71,1,71,1,71,3,71,1491,8,71,1,71,1,71,3,71,1495, - 8,71,1,71,3,71,1498,8,71,1,71,3,71,1501,8,71,1,72,1,72,1,72,1,72,1,72, - 3,72,1508,8,72,1,72,1,72,1,73,1,73,3,73,1514,8,73,1,73,1,73,3,73,1518, - 8,73,1,73,5,73,1521,8,73,10,73,12,73,1524,9,73,1,74,1,74,1,74,1,74,3, - 74,1530,8,74,1,74,3,74,1533,8,74,1,74,3,74,1536,8,74,1,74,1,74,1,74,3, - 74,1541,8,74,1,75,1,75,3,75,1545,8,75,1,75,1,75,3,75,1549,8,75,1,75,1, - 75,1,75,3,75,1554,8,75,1,75,1,75,3,75,1558,8,75,1,76,1,76,1,76,1,76,1, - 77,1,77,1,77,3,77,1567,8,77,1,77,1,77,3,77,1571,8,77,1,77,1,77,1,77,3, - 77,1576,8,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1588, - 8,77,11,77,12,77,1589,5,77,1592,8,77,10,77,12,77,1595,9,77,1,78,1,78, - 3,78,1599,8,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,3,79,1609,8,79, - 1,79,1,79,1,80,1,80,3,80,1615,8,80,1,80,1,80,1,80,5,80,1620,8,80,10,80, - 12,80,1623,9,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,3,81, - 1635,8,81,1,82,1,82,3,82,1639,8,82,1,82,1,82,3,82,1643,8,82,1,82,1,82, - 3,82,1647,8,82,1,82,5,82,1650,8,82,10,82,12,82,1653,9,82,1,83,1,83,3, - 83,1657,8,83,1,83,1,83,3,83,1661,8,83,1,83,1,83,1,84,1,84,3,84,1667,8, - 84,1,84,1,84,3,84,1671,8,84,1,84,1,84,3,84,1675,8,84,1,84,1,84,3,84,1679, - 8,84,1,84,5,84,1682,8,84,10,84,12,84,1685,9,84,1,85,1,85,1,85,3,85,1690, - 8,85,1,85,3,85,1693,8,85,1,86,1,86,1,86,1,87,3,87,1699,8,87,1,87,3,87, - 1702,8,87,1,87,1,87,1,87,1,87,3,87,1708,8,87,1,87,1,87,3,87,1712,8,87, - 1,87,1,87,3,87,1716,8,87,1,88,1,88,3,88,1720,8,88,1,88,1,88,3,88,1724, - 8,88,1,88,5,88,1727,8,88,10,88,12,88,1730,9,88,1,88,1,88,3,88,1734,8, - 88,1,88,1,88,3,88,1738,8,88,1,88,5,88,1741,8,88,10,88,12,88,1744,9,88, - 3,88,1746,8,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,3,89,1755,8,89,1,90, - 1,90,1,90,1,90,1,90,1,90,1,90,3,90,1764,8,90,1,90,5,90,1767,8,90,10,90, - 12,90,1770,9,90,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93,1,93,3,93, - 1782,8,93,1,93,3,93,1785,8,93,1,94,1,94,1,94,1,94,1,95,1,95,3,95,1793, - 8,95,1,95,1,95,3,95,1797,8,95,1,95,5,95,1800,8,95,10,95,12,95,1803,9, - 95,1,96,1,96,3,96,1807,8,96,1,96,1,96,3,96,1811,8,96,1,96,1,96,1,96,3, - 96,1816,8,96,1,97,1,97,1,98,1,98,3,98,1822,8,98,1,98,5,98,1825,8,98,10, - 98,12,98,1828,9,98,1,98,1,98,1,98,1,98,3,98,1834,8,98,1,99,1,99,3,99, - 1838,8,99,1,99,1,99,3,99,1842,8,99,3,99,1844,8,99,1,99,1,99,3,99,1848, - 8,99,3,99,1850,8,99,1,99,1,99,3,99,1854,8,99,3,99,1856,8,99,1,99,1,99, - 1,100,1,100,3,100,1862,8,100,1,100,1,100,1,101,1,101,3,101,1868,8,101, - 1,101,1,101,3,101,1872,8,101,1,101,3,101,1875,8,101,1,101,3,101,1878, - 8,101,1,101,1,101,1,101,1,101,3,101,1884,8,101,1,101,3,101,1887,8,101, - 1,101,3,101,1890,8,101,1,101,1,101,3,101,1894,8,101,1,101,1,101,1,101, - 1,101,3,101,1900,8,101,1,101,3,101,1903,8,101,1,101,3,101,1906,8,101, - 1,101,1,101,3,101,1910,8,101,1,102,1,102,3,102,1914,8,102,1,102,1,102, - 3,102,1918,8,102,3,102,1920,8,102,1,102,1,102,3,102,1924,8,102,3,102, - 1926,8,102,1,102,1,102,3,102,1930,8,102,3,102,1932,8,102,1,102,1,102, - 3,102,1936,8,102,3,102,1938,8,102,1,102,1,102,1,103,1,103,3,103,1944, - 8,103,1,103,1,103,3,103,1948,8,103,1,103,1,103,3,103,1952,8,103,1,103, - 1,103,3,103,1956,8,103,1,103,1,103,3,103,1960,8,103,1,103,1,103,3,103, - 1964,8,103,1,103,1,103,3,103,1968,8,103,1,103,1,103,3,103,1972,8,103, - 5,103,1974,8,103,10,103,12,103,1977,9,103,3,103,1979,8,103,1,103,1,103, - 1,104,1,104,3,104,1985,8,104,1,104,1,104,3,104,1989,8,104,1,104,1,104, - 3,104,1993,8,104,1,104,3,104,1996,8,104,1,104,5,104,1999,8,104,10,104, - 12,104,2002,9,104,1,105,1,105,3,105,2006,8,105,1,105,5,105,2009,8,105, - 10,105,12,105,2012,9,105,1,106,1,106,3,106,2016,8,106,1,106,1,106,1,107, - 1,107,3,107,2022,8,107,1,107,3,107,2025,8,107,1,107,3,107,2028,8,107, - 1,107,3,107,2031,8,107,1,107,3,107,2034,8,107,1,107,3,107,2037,8,107, - 1,108,1,108,3,108,2041,8,108,1,108,1,108,3,108,2045,8,108,1,108,1,108, - 3,108,2049,8,108,1,108,1,108,3,108,2053,8,108,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,1,108,3,108,2063,8,108,1,109,3,109,2066,8,109,1,109, - 3,109,2069,8,109,1,109,1,109,3,109,2073,8,109,1,109,3,109,2076,8,109, - 1,109,3,109,2079,8,109,1,110,1,110,3,110,2083,8,110,1,110,1,110,3,110, - 2087,8,110,1,110,1,110,3,110,2091,8,110,1,110,1,110,3,110,2095,8,110, - 1,110,1,110,3,110,2099,8,110,1,110,1,110,3,110,2103,8,110,3,110,2105, - 8,110,1,110,3,110,2108,8,110,1,110,1,110,3,110,2112,8,110,1,110,1,110, - 3,110,2116,8,110,1,110,1,110,3,110,2120,8,110,1,110,1,110,3,110,2124, - 8,110,3,110,2126,8,110,1,110,1,110,1,111,1,111,3,111,2132,8,111,1,111, - 3,111,2135,8,111,1,111,3,111,2138,8,111,1,111,1,111,1,112,1,112,1,113, - 1,113,1,114,1,114,1,115,1,115,1,116,1,116,1,117,1,117,1,117,1,117,1,117, - 5,117,2157,8,117,10,117,12,117,2160,9,117,1,118,1,118,1,118,1,118,1,118, - 5,118,2167,8,118,10,118,12,118,2170,9,118,1,119,1,119,1,119,1,119,1,119, - 5,119,2177,8,119,10,119,12,119,2180,9,119,1,120,1,120,3,120,2184,8,120, - 5,120,2186,8,120,10,120,12,120,2189,9,120,1,120,1,120,1,121,1,121,3,121, - 2195,8,121,1,121,1,121,3,121,2199,8,121,1,121,1,121,3,121,2203,8,121, - 1,121,1,121,3,121,2207,8,121,1,121,1,121,3,121,2211,8,121,1,121,1,121, - 1,121,1,121,1,121,1,121,3,121,2219,8,121,1,121,1,121,3,121,2223,8,121, - 1,121,1,121,3,121,2227,8,121,1,121,1,121,3,121,2231,8,121,1,121,1,121, - 4,121,2235,8,121,11,121,12,121,2236,1,121,1,121,3,121,2241,8,121,1,122, - 1,122,1,123,1,123,3,123,2247,8,123,1,123,1,123,3,123,2251,8,123,1,123, - 5,123,2254,8,123,10,123,12,123,2257,9,123,1,124,1,124,3,124,2261,8,124, - 1,124,1,124,3,124,2265,8,124,1,124,5,124,2268,8,124,10,124,12,124,2271, - 9,124,1,125,1,125,3,125,2275,8,125,1,125,1,125,3,125,2279,8,125,1,125, - 1,125,5,125,2283,8,125,10,125,12,125,2286,9,125,1,126,1,126,1,127,1,127, - 3,127,2292,8,127,1,127,1,127,3,127,2296,8,127,1,127,1,127,5,127,2300, - 8,127,10,127,12,127,2303,9,127,1,128,1,128,1,129,1,129,3,129,2309,8,129, - 1,129,1,129,3,129,2313,8,129,1,129,1,129,5,129,2317,8,129,10,129,12,129, - 2320,9,129,1,130,1,130,1,131,1,131,3,131,2326,8,131,1,131,1,131,3,131, - 2330,8,131,1,131,5,131,2333,8,131,10,131,12,131,2336,9,131,1,132,1,132, - 3,132,2340,8,132,5,132,2342,8,132,10,132,12,132,2345,9,132,1,132,1,132, - 3,132,2349,8,132,1,132,3,132,2352,8,132,1,133,1,133,1,133,4,133,2357, - 8,133,11,133,12,133,2358,1,133,3,133,2362,8,133,1,134,1,134,1,134,3,134, - 2367,8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,2376,8,134, - 1,134,1,134,3,134,2380,8,134,1,134,3,134,2383,8,134,1,135,1,135,1,135, - 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,3,135,2396,8,135,1,135, - 3,135,2399,8,135,1,135,1,135,1,136,3,136,2404,8,136,1,136,1,136,1,137, - 1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,3,137,2418,8,137, - 1,138,1,138,3,138,2422,8,138,1,138,5,138,2425,8,138,10,138,12,138,2428, - 9,138,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,3,139,2439, - 8,139,1,140,1,140,3,140,2443,8,140,1,140,1,140,3,140,2447,8,140,1,140, - 1,140,3,140,2451,8,140,1,140,1,140,1,140,1,140,3,140,2457,8,140,1,140, - 1,140,3,140,2461,8,140,1,140,1,140,3,140,2465,8,140,1,140,1,140,1,140, - 1,140,3,140,2471,8,140,1,140,1,140,3,140,2475,8,140,1,140,1,140,3,140, - 2479,8,140,1,140,1,140,1,140,1,140,3,140,2485,8,140,1,140,1,140,3,140, - 2489,8,140,1,140,1,140,3,140,2493,8,140,1,140,1,140,3,140,2497,8,140, - 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,143,1,143, - 1,143,1,143,1,143,1,143,3,143,2515,8,143,1,144,1,144,1,145,1,145,3,145, - 2521,8,145,1,145,1,145,3,145,2525,8,145,1,145,1,145,3,145,2529,8,145, - 5,145,2531,8,145,10,145,12,145,2534,9,145,3,145,2536,8,145,1,145,1,145, - 1,146,1,146,3,146,2542,8,146,1,146,3,146,2545,8,146,1,147,1,147,3,147, - 2549,8,147,1,147,1,147,3,147,2553,8,147,1,147,1,147,3,147,2557,8,147, - 1,147,1,147,3,147,2561,8,147,5,147,2563,8,147,10,147,12,147,2566,9,147, - 1,147,1,147,1,148,1,148,3,148,2572,8,148,1,148,3,148,2575,8,148,1,148, - 1,148,3,148,2579,8,148,1,148,1,148,1,149,1,149,3,149,2585,8,149,1,149, - 1,149,3,149,2589,8,149,1,149,1,149,1,150,1,150,3,150,2595,8,150,1,150, - 1,150,3,150,2599,8,150,1,150,1,150,3,150,2603,8,150,1,150,1,150,1,150, - 3,150,2608,8,150,1,150,1,150,3,150,2612,8,150,1,150,1,150,3,150,2616, - 8,150,1,150,1,150,3,150,2620,8,150,1,150,1,150,1,150,3,150,2625,8,150, - 1,150,3,150,2628,8,150,1,150,3,150,2631,8,150,1,150,1,150,1,150,1,150, - 3,150,2637,8,150,1,150,1,150,3,150,2641,8,150,1,150,1,150,3,150,2645, - 8,150,3,150,2647,8,150,1,150,1,150,3,150,2651,8,150,1,150,1,150,3,150, - 2655,8,150,1,150,1,150,3,150,2659,8,150,5,150,2661,8,150,10,150,12,150, - 2664,9,150,3,150,2666,8,150,1,150,1,150,3,150,2670,8,150,1,151,1,151, - 1,152,1,152,3,152,2676,8,152,1,152,1,152,1,152,3,152,2681,8,152,3,152, - 2683,8,152,1,152,1,152,3,152,2687,8,152,1,153,1,153,3,153,2691,8,153, - 1,153,1,153,1,153,3,153,2696,8,153,1,153,1,153,3,153,2700,8,153,1,154, - 1,154,1,154,3,154,2705,8,154,1,154,1,154,3,154,2709,8,154,1,154,1,154, - 3,154,2713,8,154,1,154,1,154,3,154,2717,8,154,5,154,2719,8,154,10,154, - 12,154,2722,9,154,1,154,1,154,3,154,2726,8,154,1,155,1,155,3,155,2730, - 8,155,1,155,4,155,2733,8,155,11,155,12,155,2734,1,156,1,156,3,156,2739, - 8,156,1,156,1,156,3,156,2743,8,156,1,156,1,156,3,156,2747,8,156,1,156, - 1,156,3,156,2751,8,156,1,156,3,156,2754,8,156,1,156,3,156,2757,8,156, - 1,156,3,156,2760,8,156,1,156,3,156,2763,8,156,1,156,1,156,1,157,1,157, - 3,157,2769,8,157,1,157,1,157,3,157,2773,8,157,1,158,1,158,3,158,2777, - 8,158,1,158,4,158,2780,8,158,11,158,12,158,2781,1,158,1,158,3,158,2786, - 8,158,1,158,1,158,3,158,2790,8,158,1,158,4,158,2793,8,158,11,158,12,158, - 2794,3,158,2797,8,158,1,158,3,158,2800,8,158,1,158,1,158,3,158,2804,8, - 158,1,158,3,158,2807,8,158,1,158,3,158,2810,8,158,1,158,1,158,1,159,1, - 159,3,159,2816,8,159,1,159,1,159,3,159,2820,8,159,1,159,1,159,3,159,2824, - 8,159,1,159,1,159,1,160,1,160,1,161,1,161,3,161,2832,8,161,1,162,1,162, - 1,162,3,162,2837,8,162,1,163,1,163,3,163,2841,8,163,1,163,1,163,1,164, - 1,164,1,165,1,165,1,166,1,166,1,167,1,167,1,168,1,168,1,168,1,168,1,168, - 3,168,2858,8,168,1,169,1,169,1,170,1,170,1,171,1,171,1,172,1,172,1,172, - 0,2,96,154,173,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38, - 40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84, - 86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122, - 124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158, - 160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194, - 196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230, - 232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266, - 268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302, - 304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338, - 340,342,344,0,13,2,0,130,130,135,135,2,0,54,55,76,77,2,0,6,6,14,18,1, - 0,20,21,2,0,22,22,157,157,2,0,23,24,154,154,1,0,160,161,2,0,69,69,84, - 84,1,0,171,172,28,0,49,49,51,51,53,53,56,59,62,62,64,65,67,69,71,72,75, - 75,78,78,80,80,85,88,90,90,94,95,97,97,99,99,101,104,106,109,111,112, - 123,128,130,131,133,133,137,137,139,140,144,144,148,148,152,153,155,155, - 2,0,15,15,28,31,2,0,17,17,32,35,2,0,36,46,157,157,3256,0,346,1,0,0,0, - 2,366,1,0,0,0,4,398,1,0,0,0,6,400,1,0,0,0,8,426,1,0,0,0,10,473,1,0,0, - 0,12,475,1,0,0,0,14,505,1,0,0,0,16,535,1,0,0,0,18,555,1,0,0,0,20,561, - 1,0,0,0,22,612,1,0,0,0,24,614,1,0,0,0,26,628,1,0,0,0,28,632,1,0,0,0,30, - 651,1,0,0,0,32,653,1,0,0,0,34,665,1,0,0,0,36,708,1,0,0,0,38,722,1,0,0, - 0,40,766,1,0,0,0,42,768,1,0,0,0,44,774,1,0,0,0,46,809,1,0,0,0,48,873, - 1,0,0,0,50,887,1,0,0,0,52,895,1,0,0,0,54,912,1,0,0,0,56,929,1,0,0,0,58, - 931,1,0,0,0,60,951,1,0,0,0,62,962,1,0,0,0,64,964,1,0,0,0,66,977,1,0,0, - 0,68,981,1,0,0,0,70,985,1,0,0,0,72,996,1,0,0,0,74,1008,1,0,0,0,76,1010, - 1,0,0,0,78,1024,1,0,0,0,80,1028,1,0,0,0,82,1037,1,0,0,0,84,1043,1,0,0, - 0,86,1051,1,0,0,0,88,1065,1,0,0,0,90,1069,1,0,0,0,92,1083,1,0,0,0,94, - 1094,1,0,0,0,96,1184,1,0,0,0,98,1193,1,0,0,0,100,1200,1,0,0,0,102,1208, - 1,0,0,0,104,1210,1,0,0,0,106,1215,1,0,0,0,108,1230,1,0,0,0,110,1235,1, - 0,0,0,112,1237,1,0,0,0,114,1247,1,0,0,0,116,1256,1,0,0,0,118,1266,1,0, - 0,0,120,1290,1,0,0,0,122,1304,1,0,0,0,124,1312,1,0,0,0,126,1320,1,0,0, - 0,128,1372,1,0,0,0,130,1376,1,0,0,0,132,1413,1,0,0,0,134,1419,1,0,0,0, - 136,1431,1,0,0,0,138,1449,1,0,0,0,140,1455,1,0,0,0,142,1457,1,0,0,0,144, - 1507,1,0,0,0,146,1511,1,0,0,0,148,1525,1,0,0,0,150,1544,1,0,0,0,152,1559, - 1,0,0,0,154,1575,1,0,0,0,156,1596,1,0,0,0,158,1606,1,0,0,0,160,1612,1, - 0,0,0,162,1634,1,0,0,0,164,1636,1,0,0,0,166,1654,1,0,0,0,168,1666,1,0, - 0,0,170,1686,1,0,0,0,172,1694,1,0,0,0,174,1701,1,0,0,0,176,1745,1,0,0, - 0,178,1754,1,0,0,0,180,1756,1,0,0,0,182,1771,1,0,0,0,184,1775,1,0,0,0, - 186,1779,1,0,0,0,188,1786,1,0,0,0,190,1790,1,0,0,0,192,1815,1,0,0,0,194, - 1817,1,0,0,0,196,1833,1,0,0,0,198,1835,1,0,0,0,200,1859,1,0,0,0,202,1909, - 1,0,0,0,204,1911,1,0,0,0,206,1941,1,0,0,0,208,1982,1,0,0,0,210,2003,1, - 0,0,0,212,2013,1,0,0,0,214,2019,1,0,0,0,216,2062,1,0,0,0,218,2078,1,0, - 0,0,220,2080,1,0,0,0,222,2129,1,0,0,0,224,2141,1,0,0,0,226,2143,1,0,0, - 0,228,2145,1,0,0,0,230,2147,1,0,0,0,232,2149,1,0,0,0,234,2151,1,0,0,0, - 236,2161,1,0,0,0,238,2171,1,0,0,0,240,2187,1,0,0,0,242,2240,1,0,0,0,244, - 2242,1,0,0,0,246,2244,1,0,0,0,248,2258,1,0,0,0,250,2272,1,0,0,0,252,2287, - 1,0,0,0,254,2289,1,0,0,0,256,2304,1,0,0,0,258,2306,1,0,0,0,260,2321,1, - 0,0,0,262,2323,1,0,0,0,264,2343,1,0,0,0,266,2353,1,0,0,0,268,2382,1,0, - 0,0,270,2395,1,0,0,0,272,2403,1,0,0,0,274,2417,1,0,0,0,276,2419,1,0,0, - 0,278,2438,1,0,0,0,280,2496,1,0,0,0,282,2498,1,0,0,0,284,2502,1,0,0,0, - 286,2514,1,0,0,0,288,2516,1,0,0,0,290,2518,1,0,0,0,292,2539,1,0,0,0,294, - 2546,1,0,0,0,296,2571,1,0,0,0,298,2582,1,0,0,0,300,2669,1,0,0,0,302,2671, - 1,0,0,0,304,2686,1,0,0,0,306,2688,1,0,0,0,308,2725,1,0,0,0,310,2727,1, - 0,0,0,312,2736,1,0,0,0,314,2766,1,0,0,0,316,2796,1,0,0,0,318,2813,1,0, - 0,0,320,2827,1,0,0,0,322,2831,1,0,0,0,324,2833,1,0,0,0,326,2838,1,0,0, - 0,328,2844,1,0,0,0,330,2846,1,0,0,0,332,2848,1,0,0,0,334,2850,1,0,0,0, - 336,2857,1,0,0,0,338,2859,1,0,0,0,340,2861,1,0,0,0,342,2863,1,0,0,0,344, - 2865,1,0,0,0,346,357,3,2,1,0,347,349,5,177,0,0,348,347,1,0,0,0,348,349, - 1,0,0,0,349,350,1,0,0,0,350,352,5,1,0,0,351,353,5,177,0,0,352,351,1,0, - 0,0,352,353,1,0,0,0,353,354,1,0,0,0,354,356,3,2,1,0,355,348,1,0,0,0,356, - 359,1,0,0,0,357,355,1,0,0,0,357,358,1,0,0,0,358,361,1,0,0,0,359,357,1, - 0,0,0,360,362,5,177,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362,363,1,0,0, - 0,363,364,5,0,0,1,364,1,1,0,0,0,365,367,3,102,51,0,366,365,1,0,0,0,366, - 367,1,0,0,0,367,369,1,0,0,0,368,370,5,177,0,0,369,368,1,0,0,0,369,370, - 1,0,0,0,370,371,1,0,0,0,371,376,3,4,2,0,372,374,5,177,0,0,373,372,1,0, - 0,0,373,374,1,0,0,0,374,375,1,0,0,0,375,377,5,1,0,0,376,373,1,0,0,0,376, - 377,1,0,0,0,377,3,1,0,0,0,378,399,3,118,59,0,379,399,3,44,22,0,380,399, - 3,46,23,0,381,399,3,52,26,0,382,399,3,54,27,0,383,399,3,70,35,0,384,399, - 3,72,36,0,385,399,3,6,3,0,386,399,3,12,6,0,387,399,3,14,7,0,388,399,3, - 30,15,0,389,399,3,34,17,0,390,399,3,32,16,0,391,399,3,108,54,0,392,399, - 3,110,55,0,393,399,3,16,8,0,394,399,3,18,9,0,395,399,3,20,10,0,396,399, - 3,26,13,0,397,399,3,28,14,0,398,378,1,0,0,0,398,379,1,0,0,0,398,380,1, - 0,0,0,398,381,1,0,0,0,398,382,1,0,0,0,398,383,1,0,0,0,398,384,1,0,0,0, - 398,385,1,0,0,0,398,386,1,0,0,0,398,387,1,0,0,0,398,388,1,0,0,0,398,389, - 1,0,0,0,398,390,1,0,0,0,398,391,1,0,0,0,398,392,1,0,0,0,398,393,1,0,0, - 0,398,394,1,0,0,0,398,395,1,0,0,0,398,396,1,0,0,0,398,397,1,0,0,0,399, - 5,1,0,0,0,400,401,5,68,0,0,401,402,5,177,0,0,402,404,3,334,167,0,403, - 405,3,8,4,0,404,403,1,0,0,0,404,405,1,0,0,0,405,406,1,0,0,0,406,407,5, - 177,0,0,407,408,5,88,0,0,408,409,5,177,0,0,409,423,3,10,5,0,410,412,5, - 177,0,0,411,410,1,0,0,0,411,412,1,0,0,0,412,413,1,0,0,0,413,415,5,2,0, - 0,414,416,5,177,0,0,415,414,1,0,0,0,415,416,1,0,0,0,416,417,1,0,0,0,417, - 419,3,24,12,0,418,420,5,177,0,0,419,418,1,0,0,0,419,420,1,0,0,0,420,421, - 1,0,0,0,421,422,5,3,0,0,422,424,1,0,0,0,423,411,1,0,0,0,423,424,1,0,0, - 0,424,7,1,0,0,0,425,427,5,177,0,0,426,425,1,0,0,0,426,427,1,0,0,0,427, - 428,1,0,0,0,428,430,5,2,0,0,429,431,5,177,0,0,430,429,1,0,0,0,430,431, - 1,0,0,0,431,449,1,0,0,0,432,443,3,334,167,0,433,435,5,177,0,0,434,433, - 1,0,0,0,434,435,1,0,0,0,435,436,1,0,0,0,436,438,5,4,0,0,437,439,5,177, - 0,0,438,437,1,0,0,0,438,439,1,0,0,0,439,440,1,0,0,0,440,442,3,334,167, - 0,441,434,1,0,0,0,442,445,1,0,0,0,443,441,1,0,0,0,443,444,1,0,0,0,444, - 447,1,0,0,0,445,443,1,0,0,0,446,448,5,177,0,0,447,446,1,0,0,0,447,448, - 1,0,0,0,448,450,1,0,0,0,449,432,1,0,0,0,449,450,1,0,0,0,450,451,1,0,0, - 0,451,452,5,3,0,0,452,9,1,0,0,0,453,474,3,40,20,0,454,456,5,2,0,0,455, - 457,5,177,0,0,456,455,1,0,0,0,456,457,1,0,0,0,457,458,1,0,0,0,458,460, - 3,118,59,0,459,461,5,177,0,0,460,459,1,0,0,0,460,461,1,0,0,0,461,462, - 1,0,0,0,462,463,5,3,0,0,463,474,1,0,0,0,464,474,3,320,160,0,465,466,3, - 320,160,0,466,468,5,5,0,0,467,469,5,177,0,0,468,467,1,0,0,0,468,469,1, - 0,0,0,469,470,1,0,0,0,470,471,3,334,167,0,471,474,1,0,0,0,472,474,3,300, - 150,0,473,453,1,0,0,0,473,454,1,0,0,0,473,464,1,0,0,0,473,465,1,0,0,0, - 473,472,1,0,0,0,474,11,1,0,0,0,475,476,5,68,0,0,476,477,5,177,0,0,477, - 478,3,334,167,0,478,479,5,177,0,0,479,480,5,88,0,0,480,481,5,177,0,0, - 481,483,5,2,0,0,482,484,5,177,0,0,483,482,1,0,0,0,483,484,1,0,0,0,484, - 485,1,0,0,0,485,496,5,162,0,0,486,488,5,177,0,0,487,486,1,0,0,0,487,488, - 1,0,0,0,488,489,1,0,0,0,489,491,5,4,0,0,490,492,5,177,0,0,491,490,1,0, - 0,0,491,492,1,0,0,0,492,493,1,0,0,0,493,495,5,162,0,0,494,487,1,0,0,0, - 495,498,1,0,0,0,496,494,1,0,0,0,496,497,1,0,0,0,497,499,1,0,0,0,498,496, - 1,0,0,0,499,500,5,3,0,0,500,501,5,177,0,0,501,502,5,58,0,0,502,503,5, - 177,0,0,503,504,5,63,0,0,504,13,1,0,0,0,505,506,5,68,0,0,506,507,5,177, - 0,0,507,509,5,2,0,0,508,510,5,177,0,0,509,508,1,0,0,0,509,510,1,0,0,0, - 510,511,1,0,0,0,511,513,3,118,59,0,512,514,5,177,0,0,513,512,1,0,0,0, - 513,514,1,0,0,0,514,515,1,0,0,0,515,516,5,3,0,0,516,517,5,177,0,0,517, - 518,5,137,0,0,518,519,5,177,0,0,519,533,5,162,0,0,520,522,5,177,0,0,521, - 520,1,0,0,0,521,522,1,0,0,0,522,523,1,0,0,0,523,525,5,2,0,0,524,526,5, - 177,0,0,525,524,1,0,0,0,525,526,1,0,0,0,526,527,1,0,0,0,527,529,3,24, - 12,0,528,530,5,177,0,0,529,528,1,0,0,0,529,530,1,0,0,0,530,531,1,0,0, - 0,531,532,5,3,0,0,532,534,1,0,0,0,533,521,1,0,0,0,533,534,1,0,0,0,534, - 15,1,0,0,0,535,536,5,86,0,0,536,537,5,177,0,0,537,538,5,72,0,0,538,539, - 5,177,0,0,539,553,5,162,0,0,540,542,5,177,0,0,541,540,1,0,0,0,541,542, - 1,0,0,0,542,543,1,0,0,0,543,545,5,2,0,0,544,546,5,177,0,0,545,544,1,0, - 0,0,545,546,1,0,0,0,546,547,1,0,0,0,547,549,3,24,12,0,548,550,5,177,0, - 0,549,548,1,0,0,0,549,550,1,0,0,0,550,551,1,0,0,0,551,552,5,3,0,0,552, - 554,1,0,0,0,553,541,1,0,0,0,553,554,1,0,0,0,554,17,1,0,0,0,555,556,5, - 94,0,0,556,557,5,177,0,0,557,558,5,72,0,0,558,559,5,177,0,0,559,560,5, - 162,0,0,560,19,1,0,0,0,561,562,5,56,0,0,562,563,5,177,0,0,563,568,5,162, - 0,0,564,565,5,177,0,0,565,566,5,53,0,0,566,567,5,177,0,0,567,569,3,334, - 167,0,568,564,1,0,0,0,568,569,1,0,0,0,569,570,1,0,0,0,570,571,5,177,0, - 0,571,573,5,2,0,0,572,574,5,177,0,0,573,572,1,0,0,0,573,574,1,0,0,0,574, - 575,1,0,0,0,575,576,5,73,0,0,576,577,5,177,0,0,577,586,3,336,168,0,578, - 580,5,177,0,0,579,578,1,0,0,0,579,580,1,0,0,0,580,581,1,0,0,0,581,583, - 5,4,0,0,582,584,5,177,0,0,583,582,1,0,0,0,583,584,1,0,0,0,584,585,1,0, - 0,0,585,587,3,24,12,0,586,579,1,0,0,0,586,587,1,0,0,0,587,589,1,0,0,0, - 588,590,5,177,0,0,589,588,1,0,0,0,589,590,1,0,0,0,590,591,1,0,0,0,591, - 592,5,3,0,0,592,21,1,0,0,0,593,607,3,336,168,0,594,596,5,177,0,0,595, - 594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,599,5,6,0,0,598,600,5, - 177,0,0,599,598,1,0,0,0,599,600,1,0,0,0,600,608,1,0,0,0,601,603,5,177, - 0,0,602,601,1,0,0,0,603,606,1,0,0,0,604,602,1,0,0,0,604,605,1,0,0,0,605, - 608,1,0,0,0,606,604,1,0,0,0,607,595,1,0,0,0,607,604,1,0,0,0,608,609,1, - 0,0,0,609,610,3,286,143,0,610,613,1,0,0,0,611,613,3,336,168,0,612,593, - 1,0,0,0,612,611,1,0,0,0,613,23,1,0,0,0,614,625,3,22,11,0,615,617,5,177, - 0,0,616,615,1,0,0,0,616,617,1,0,0,0,617,618,1,0,0,0,618,620,5,4,0,0,619, - 621,5,177,0,0,620,619,1,0,0,0,620,621,1,0,0,0,621,622,1,0,0,0,622,624, - 3,22,11,0,623,616,1,0,0,0,624,627,1,0,0,0,625,623,1,0,0,0,625,626,1,0, - 0,0,626,25,1,0,0,0,627,625,1,0,0,0,628,629,5,78,0,0,629,630,5,177,0,0, - 630,631,3,334,167,0,631,27,1,0,0,0,632,633,5,144,0,0,633,634,5,177,0, - 0,634,635,3,334,167,0,635,29,1,0,0,0,636,637,5,59,0,0,637,638,5,177,0, - 0,638,640,3,336,168,0,639,641,5,177,0,0,640,639,1,0,0,0,640,641,1,0,0, - 0,641,642,1,0,0,0,642,644,5,6,0,0,643,645,5,177,0,0,644,643,1,0,0,0,644, - 645,1,0,0,0,645,646,1,0,0,0,646,647,3,232,116,0,647,652,1,0,0,0,648,649, - 5,59,0,0,649,650,5,177,0,0,650,652,3,300,150,0,651,636,1,0,0,0,651,648, - 1,0,0,0,652,31,1,0,0,0,653,654,5,64,0,0,654,655,5,177,0,0,655,656,5,116, - 0,0,656,657,5,177,0,0,657,658,5,135,0,0,658,659,5,177,0,0,659,660,3,334, - 167,0,660,661,5,177,0,0,661,662,5,99,0,0,662,663,5,177,0,0,663,664,5, - 162,0,0,664,33,1,0,0,0,665,666,5,70,0,0,666,667,5,177,0,0,667,668,5,105, - 0,0,668,669,5,177,0,0,669,671,3,302,151,0,670,672,5,177,0,0,671,670,1, - 0,0,0,671,672,1,0,0,0,672,673,1,0,0,0,673,675,5,2,0,0,674,676,5,177,0, - 0,675,674,1,0,0,0,675,676,1,0,0,0,676,678,1,0,0,0,677,679,3,36,18,0,678, - 677,1,0,0,0,678,679,1,0,0,0,679,681,1,0,0,0,680,682,5,177,0,0,681,680, - 1,0,0,0,681,682,1,0,0,0,682,684,1,0,0,0,683,685,3,38,19,0,684,683,1,0, - 0,0,684,685,1,0,0,0,685,696,1,0,0,0,686,688,5,177,0,0,687,686,1,0,0,0, - 687,688,1,0,0,0,688,689,1,0,0,0,689,691,5,4,0,0,690,692,5,177,0,0,691, - 690,1,0,0,0,691,692,1,0,0,0,692,693,1,0,0,0,693,695,3,38,19,0,694,687, - 1,0,0,0,695,698,1,0,0,0,696,694,1,0,0,0,696,697,1,0,0,0,697,700,1,0,0, - 0,698,696,1,0,0,0,699,701,5,177,0,0,700,699,1,0,0,0,700,701,1,0,0,0,701, - 702,1,0,0,0,702,703,5,3,0,0,703,704,5,177,0,0,704,705,5,53,0,0,705,706, - 5,177,0,0,706,707,3,232,116,0,707,35,1,0,0,0,708,719,3,336,168,0,709, - 711,5,177,0,0,710,709,1,0,0,0,710,711,1,0,0,0,711,712,1,0,0,0,712,714, - 5,4,0,0,713,715,5,177,0,0,714,713,1,0,0,0,714,715,1,0,0,0,715,716,1,0, - 0,0,716,718,3,336,168,0,717,710,1,0,0,0,718,721,1,0,0,0,719,717,1,0,0, - 0,719,720,1,0,0,0,720,37,1,0,0,0,721,719,1,0,0,0,722,724,3,336,168,0, - 723,725,5,177,0,0,724,723,1,0,0,0,724,725,1,0,0,0,725,726,1,0,0,0,726, - 727,5,159,0,0,727,729,5,6,0,0,728,730,5,177,0,0,729,728,1,0,0,0,729,730, - 1,0,0,0,730,731,1,0,0,0,731,732,3,286,143,0,732,39,1,0,0,0,733,735,5, - 7,0,0,734,736,5,177,0,0,735,734,1,0,0,0,735,736,1,0,0,0,736,737,1,0,0, - 0,737,748,5,162,0,0,738,740,5,177,0,0,739,738,1,0,0,0,739,740,1,0,0,0, - 740,741,1,0,0,0,741,743,5,4,0,0,742,744,5,177,0,0,743,742,1,0,0,0,743, - 744,1,0,0,0,744,745,1,0,0,0,745,747,5,162,0,0,746,739,1,0,0,0,747,750, - 1,0,0,0,748,746,1,0,0,0,748,749,1,0,0,0,749,751,1,0,0,0,750,748,1,0,0, - 0,751,767,5,8,0,0,752,767,5,162,0,0,753,755,5,89,0,0,754,756,5,177,0, - 0,755,754,1,0,0,0,755,756,1,0,0,0,756,757,1,0,0,0,757,759,5,2,0,0,758, - 760,5,177,0,0,759,758,1,0,0,0,759,760,1,0,0,0,760,761,1,0,0,0,761,763, - 5,162,0,0,762,764,5,177,0,0,763,762,1,0,0,0,763,764,1,0,0,0,764,765,1, - 0,0,0,765,767,5,3,0,0,766,733,1,0,0,0,766,752,1,0,0,0,766,753,1,0,0,0, - 767,41,1,0,0,0,768,769,5,95,0,0,769,770,5,177,0,0,770,771,5,113,0,0,771, - 772,5,177,0,0,772,773,5,84,0,0,773,43,1,0,0,0,774,775,5,70,0,0,775,776, - 5,177,0,0,776,777,5,112,0,0,777,778,5,177,0,0,778,779,5,135,0,0,779,783, - 5,177,0,0,780,781,3,42,21,0,781,782,5,177,0,0,782,784,1,0,0,0,783,780, - 1,0,0,0,783,784,1,0,0,0,784,785,1,0,0,0,785,787,3,334,167,0,786,788,5, - 177,0,0,787,786,1,0,0,0,787,788,1,0,0,0,788,789,1,0,0,0,789,791,5,2,0, - 0,790,792,5,177,0,0,791,790,1,0,0,0,791,792,1,0,0,0,792,793,1,0,0,0,793, - 795,3,90,45,0,794,796,5,177,0,0,795,794,1,0,0,0,795,796,1,0,0,0,796,802, - 1,0,0,0,797,799,5,4,0,0,798,800,5,177,0,0,799,798,1,0,0,0,799,800,1,0, - 0,0,800,801,1,0,0,0,801,803,3,94,47,0,802,797,1,0,0,0,802,803,1,0,0,0, - 803,805,1,0,0,0,804,806,5,177,0,0,805,804,1,0,0,0,805,806,1,0,0,0,806, - 807,1,0,0,0,807,808,5,3,0,0,808,45,1,0,0,0,809,810,5,70,0,0,810,811,5, - 177,0,0,811,812,5,125,0,0,812,813,5,177,0,0,813,816,5,135,0,0,814,815, - 5,177,0,0,815,817,5,91,0,0,816,814,1,0,0,0,816,817,1,0,0,0,817,820,1, - 0,0,0,818,819,5,177,0,0,819,821,3,42,21,0,820,818,1,0,0,0,820,821,1,0, - 0,0,821,822,1,0,0,0,822,823,5,177,0,0,823,825,3,334,167,0,824,826,5,177, - 0,0,825,824,1,0,0,0,825,826,1,0,0,0,826,827,1,0,0,0,827,829,5,2,0,0,828, - 830,5,177,0,0,829,828,1,0,0,0,829,830,1,0,0,0,830,831,1,0,0,0,831,833, - 3,48,24,0,832,834,5,177,0,0,833,832,1,0,0,0,833,834,1,0,0,0,834,843,1, - 0,0,0,835,837,5,4,0,0,836,838,5,177,0,0,837,836,1,0,0,0,837,838,1,0,0, - 0,838,839,1,0,0,0,839,841,3,90,45,0,840,842,5,177,0,0,841,840,1,0,0,0, - 841,842,1,0,0,0,842,844,1,0,0,0,843,835,1,0,0,0,843,844,1,0,0,0,844,853, - 1,0,0,0,845,847,5,4,0,0,846,848,5,177,0,0,847,846,1,0,0,0,847,848,1,0, - 0,0,848,849,1,0,0,0,849,851,3,336,168,0,850,852,5,177,0,0,851,850,1,0, - 0,0,851,852,1,0,0,0,852,854,1,0,0,0,853,845,1,0,0,0,853,854,1,0,0,0,854, - 855,1,0,0,0,855,871,5,3,0,0,856,857,5,177,0,0,857,859,5,147,0,0,858,860, - 5,177,0,0,859,858,1,0,0,0,859,860,1,0,0,0,860,861,1,0,0,0,861,863,5,2, - 0,0,862,864,5,177,0,0,863,862,1,0,0,0,863,864,1,0,0,0,864,865,1,0,0,0, - 865,867,3,24,12,0,866,868,5,177,0,0,867,866,1,0,0,0,867,868,1,0,0,0,868, - 869,1,0,0,0,869,870,5,3,0,0,870,872,1,0,0,0,871,856,1,0,0,0,871,872,1, - 0,0,0,872,47,1,0,0,0,873,884,3,50,25,0,874,876,5,177,0,0,875,874,1,0, - 0,0,875,876,1,0,0,0,876,877,1,0,0,0,877,879,5,4,0,0,878,880,5,177,0,0, - 879,878,1,0,0,0,879,880,1,0,0,0,880,881,1,0,0,0,881,883,3,50,25,0,882, - 875,1,0,0,0,883,886,1,0,0,0,884,882,1,0,0,0,884,885,1,0,0,0,885,49,1, - 0,0,0,886,884,1,0,0,0,887,888,5,88,0,0,888,889,5,177,0,0,889,890,3,334, - 167,0,890,891,5,177,0,0,891,892,5,137,0,0,892,893,5,177,0,0,893,894,3, - 334,167,0,894,51,1,0,0,0,895,896,5,70,0,0,896,897,5,177,0,0,897,898,5, - 130,0,0,898,902,5,177,0,0,899,900,3,42,21,0,900,901,5,177,0,0,901,903, - 1,0,0,0,902,899,1,0,0,0,902,903,1,0,0,0,903,904,1,0,0,0,904,909,3,334, - 167,0,905,906,5,177,0,0,906,908,3,56,28,0,907,905,1,0,0,0,908,911,1,0, - 0,0,909,907,1,0,0,0,909,910,1,0,0,0,910,53,1,0,0,0,911,909,1,0,0,0,912, - 913,5,70,0,0,913,914,5,177,0,0,914,915,5,140,0,0,915,916,5,177,0,0,916, - 917,3,334,167,0,917,918,5,177,0,0,918,919,5,53,0,0,919,920,5,177,0,0, - 920,922,3,96,48,0,921,923,5,177,0,0,922,921,1,0,0,0,922,923,1,0,0,0,923, - 55,1,0,0,0,924,930,3,58,29,0,925,930,3,60,30,0,926,930,3,62,31,0,927, - 930,3,64,32,0,928,930,3,66,33,0,929,924,1,0,0,0,929,925,1,0,0,0,929,926, - 1,0,0,0,929,927,1,0,0,0,929,928,1,0,0,0,930,57,1,0,0,0,931,932,5,97,0, - 0,932,935,5,177,0,0,933,934,5,58,0,0,934,936,5,177,0,0,935,933,1,0,0, - 0,935,936,1,0,0,0,936,938,1,0,0,0,937,939,5,157,0,0,938,937,1,0,0,0,938, - 939,1,0,0,0,939,940,1,0,0,0,940,941,3,330,165,0,941,59,1,0,0,0,942,943, - 5,111,0,0,943,944,5,177,0,0,944,952,5,109,0,0,945,946,5,109,0,0,946,948, - 5,177,0,0,947,949,5,157,0,0,948,947,1,0,0,0,948,949,1,0,0,0,949,950,1, - 0,0,0,950,952,3,330,165,0,951,942,1,0,0,0,951,945,1,0,0,0,952,61,1,0, - 0,0,953,954,5,111,0,0,954,955,5,177,0,0,955,963,5,107,0,0,956,957,5,107, - 0,0,957,959,5,177,0,0,958,960,5,157,0,0,959,958,1,0,0,0,959,960,1,0,0, - 0,960,961,1,0,0,0,961,963,3,330,165,0,962,953,1,0,0,0,962,956,1,0,0,0, - 963,63,1,0,0,0,964,965,5,133,0,0,965,968,5,177,0,0,966,967,5,147,0,0, - 967,969,5,177,0,0,968,966,1,0,0,0,968,969,1,0,0,0,969,971,1,0,0,0,970, - 972,5,157,0,0,971,970,1,0,0,0,971,972,1,0,0,0,972,973,1,0,0,0,973,974, - 3,330,165,0,974,65,1,0,0,0,975,976,5,111,0,0,976,978,5,177,0,0,977,975, - 1,0,0,0,977,978,1,0,0,0,978,979,1,0,0,0,979,980,5,71,0,0,980,67,1,0,0, - 0,981,982,5,95,0,0,982,983,5,177,0,0,983,984,5,84,0,0,984,69,1,0,0,0, - 985,986,5,80,0,0,986,987,5,177,0,0,987,988,7,0,0,0,988,992,5,177,0,0, - 989,990,3,68,34,0,990,991,5,177,0,0,991,993,1,0,0,0,992,989,1,0,0,0,992, - 993,1,0,0,0,993,994,1,0,0,0,994,995,3,334,167,0,995,71,1,0,0,0,996,997, - 5,51,0,0,997,998,5,177,0,0,998,999,5,135,0,0,999,1000,5,177,0,0,1000, - 1001,3,334,167,0,1001,1002,5,177,0,0,1002,1003,3,74,37,0,1003,73,1,0, - 0,0,1004,1009,3,76,38,0,1005,1009,3,80,40,0,1006,1009,3,82,41,0,1007, - 1009,3,84,42,0,1008,1004,1,0,0,0,1008,1005,1,0,0,0,1008,1006,1,0,0,0, - 1008,1007,1,0,0,0,1009,75,1,0,0,0,1010,1011,5,49,0,0,1011,1015,5,177, - 0,0,1012,1013,3,42,21,0,1013,1014,5,177,0,0,1014,1016,1,0,0,0,1015,1012, - 1,0,0,0,1015,1016,1,0,0,0,1016,1017,1,0,0,0,1017,1018,3,328,164,0,1018, - 1019,5,177,0,0,1019,1022,3,96,48,0,1020,1021,5,177,0,0,1021,1023,3,78, - 39,0,1022,1020,1,0,0,0,1022,1023,1,0,0,0,1023,77,1,0,0,0,1024,1025,5, - 74,0,0,1025,1026,5,177,0,0,1026,1027,3,232,116,0,1027,79,1,0,0,0,1028, - 1029,5,80,0,0,1029,1033,5,177,0,0,1030,1031,3,68,34,0,1031,1032,5,177, - 0,0,1032,1034,1,0,0,0,1033,1030,1,0,0,0,1033,1034,1,0,0,0,1034,1035,1, - 0,0,0,1035,1036,3,328,164,0,1036,81,1,0,0,0,1037,1038,5,126,0,0,1038, - 1039,5,177,0,0,1039,1040,5,137,0,0,1040,1041,5,177,0,0,1041,1042,3,334, - 167,0,1042,83,1,0,0,0,1043,1044,5,126,0,0,1044,1045,5,177,0,0,1045,1046, - 3,328,164,0,1046,1047,5,177,0,0,1047,1048,5,137,0,0,1048,1049,5,177,0, - 0,1049,1050,3,328,164,0,1050,85,1,0,0,0,1051,1062,3,88,44,0,1052,1054, - 5,177,0,0,1053,1052,1,0,0,0,1053,1054,1,0,0,0,1054,1055,1,0,0,0,1055, - 1057,5,4,0,0,1056,1058,5,177,0,0,1057,1056,1,0,0,0,1057,1058,1,0,0,0, - 1058,1059,1,0,0,0,1059,1061,3,88,44,0,1060,1053,1,0,0,0,1061,1064,1,0, - 0,0,1062,1060,1,0,0,0,1062,1063,1,0,0,0,1063,87,1,0,0,0,1064,1062,1,0, - 0,0,1065,1066,3,328,164,0,1066,1067,5,177,0,0,1067,1068,3,96,48,0,1068, - 89,1,0,0,0,1069,1080,3,92,46,0,1070,1072,5,177,0,0,1071,1070,1,0,0,0, - 1071,1072,1,0,0,0,1072,1073,1,0,0,0,1073,1075,5,4,0,0,1074,1076,5,177, - 0,0,1075,1074,1,0,0,0,1075,1076,1,0,0,0,1076,1077,1,0,0,0,1077,1079,3, - 92,46,0,1078,1071,1,0,0,0,1079,1082,1,0,0,0,1080,1078,1,0,0,0,1080,1081, - 1,0,0,0,1081,91,1,0,0,0,1082,1080,1,0,0,0,1083,1086,3,88,44,0,1084,1085, - 5,177,0,0,1085,1087,3,78,39,0,1086,1084,1,0,0,0,1086,1087,1,0,0,0,1087, - 1092,1,0,0,0,1088,1089,5,177,0,0,1089,1090,5,121,0,0,1090,1091,5,177, - 0,0,1091,1093,5,101,0,0,1092,1088,1,0,0,0,1092,1093,1,0,0,0,1093,93,1, - 0,0,0,1094,1095,5,121,0,0,1095,1096,5,177,0,0,1096,1098,5,101,0,0,1097, - 1099,5,177,0,0,1098,1097,1,0,0,0,1098,1099,1,0,0,0,1099,1100,1,0,0,0, - 1100,1102,5,2,0,0,1101,1103,5,177,0,0,1102,1101,1,0,0,0,1102,1103,1,0, - 0,0,1103,1104,1,0,0,0,1104,1106,3,328,164,0,1105,1107,5,177,0,0,1106, - 1105,1,0,0,0,1106,1107,1,0,0,0,1107,1108,1,0,0,0,1108,1109,5,3,0,0,1109, - 95,1,0,0,0,1110,1111,6,48,-1,0,1111,1185,3,336,168,0,1112,1114,5,142, - 0,0,1113,1115,5,177,0,0,1114,1113,1,0,0,0,1114,1115,1,0,0,0,1115,1116, - 1,0,0,0,1116,1118,5,2,0,0,1117,1119,5,177,0,0,1118,1117,1,0,0,0,1118, - 1119,1,0,0,0,1119,1120,1,0,0,0,1120,1122,3,86,43,0,1121,1123,5,177,0, - 0,1122,1121,1,0,0,0,1122,1123,1,0,0,0,1123,1124,1,0,0,0,1124,1125,5,3, - 0,0,1125,1185,1,0,0,0,1126,1128,3,336,168,0,1127,1129,5,177,0,0,1128, - 1127,1,0,0,0,1128,1129,1,0,0,0,1129,1130,1,0,0,0,1130,1132,5,2,0,0,1131, - 1133,5,177,0,0,1132,1131,1,0,0,0,1132,1133,1,0,0,0,1133,1134,1,0,0,0, - 1134,1136,3,86,43,0,1135,1137,5,177,0,0,1136,1135,1,0,0,0,1136,1137,1, - 0,0,0,1137,1138,1,0,0,0,1138,1139,5,3,0,0,1139,1185,1,0,0,0,1140,1142, - 3,336,168,0,1141,1143,5,177,0,0,1142,1141,1,0,0,0,1142,1143,1,0,0,0,1143, - 1144,1,0,0,0,1144,1146,5,2,0,0,1145,1147,5,177,0,0,1146,1145,1,0,0,0, - 1146,1147,1,0,0,0,1147,1148,1,0,0,0,1148,1150,3,96,48,0,1149,1151,5,177, - 0,0,1150,1149,1,0,0,0,1150,1151,1,0,0,0,1151,1152,1,0,0,0,1152,1154,5, - 4,0,0,1153,1155,5,177,0,0,1154,1153,1,0,0,0,1154,1155,1,0,0,0,1155,1156, - 1,0,0,0,1156,1158,3,96,48,0,1157,1159,5,177,0,0,1158,1157,1,0,0,0,1158, - 1159,1,0,0,0,1159,1160,1,0,0,0,1160,1161,5,3,0,0,1161,1185,1,0,0,0,1162, - 1164,5,153,0,0,1163,1165,5,177,0,0,1164,1163,1,0,0,0,1164,1165,1,0,0, - 0,1165,1166,1,0,0,0,1166,1168,5,2,0,0,1167,1169,5,177,0,0,1168,1167,1, - 0,0,0,1168,1169,1,0,0,0,1169,1170,1,0,0,0,1170,1172,3,330,165,0,1171, - 1173,5,177,0,0,1172,1171,1,0,0,0,1172,1173,1,0,0,0,1173,1174,1,0,0,0, - 1174,1176,5,4,0,0,1175,1177,5,177,0,0,1176,1175,1,0,0,0,1176,1177,1,0, - 0,0,1177,1178,1,0,0,0,1178,1180,3,330,165,0,1179,1181,5,177,0,0,1180, - 1179,1,0,0,0,1180,1181,1,0,0,0,1181,1182,1,0,0,0,1182,1183,5,3,0,0,1183, - 1185,1,0,0,0,1184,1110,1,0,0,0,1184,1112,1,0,0,0,1184,1126,1,0,0,0,1184, - 1140,1,0,0,0,1184,1162,1,0,0,0,1185,1190,1,0,0,0,1186,1187,10,5,0,0,1187, - 1189,3,98,49,0,1188,1186,1,0,0,0,1189,1192,1,0,0,0,1190,1188,1,0,0,0, - 1190,1191,1,0,0,0,1191,97,1,0,0,0,1192,1190,1,0,0,0,1193,1197,3,100,50, - 0,1194,1196,3,100,50,0,1195,1194,1,0,0,0,1196,1199,1,0,0,0,1197,1195, - 1,0,0,0,1197,1198,1,0,0,0,1198,99,1,0,0,0,1199,1197,1,0,0,0,1200,1202, - 5,7,0,0,1201,1203,3,330,165,0,1202,1201,1,0,0,0,1202,1203,1,0,0,0,1203, - 1204,1,0,0,0,1204,1205,5,8,0,0,1205,101,1,0,0,0,1206,1209,3,104,52,0, - 1207,1209,3,106,53,0,1208,1206,1,0,0,0,1208,1207,1,0,0,0,1209,103,1,0, - 0,0,1210,1213,5,85,0,0,1211,1212,5,177,0,0,1212,1214,5,104,0,0,1213,1211, - 1,0,0,0,1213,1214,1,0,0,0,1214,105,1,0,0,0,1215,1216,5,122,0,0,1216,107, - 1,0,0,0,1217,1218,5,57,0,0,1218,1219,5,177,0,0,1219,1231,5,139,0,0,1220, - 1221,5,57,0,0,1221,1222,5,177,0,0,1222,1223,5,139,0,0,1223,1224,5,177, - 0,0,1224,1225,5,124,0,0,1225,1226,5,177,0,0,1226,1231,5,117,0,0,1227, - 1231,5,65,0,0,1228,1231,5,128,0,0,1229,1231,5,62,0,0,1230,1217,1,0,0, - 0,1230,1220,1,0,0,0,1230,1227,1,0,0,0,1230,1228,1,0,0,0,1230,1229,1,0, - 0,0,1231,109,1,0,0,0,1232,1236,3,112,56,0,1233,1236,3,114,57,0,1234,1236, - 3,116,58,0,1235,1232,1,0,0,0,1235,1233,1,0,0,0,1235,1234,1,0,0,0,1236, - 111,1,0,0,0,1237,1238,5,103,0,0,1238,1241,5,177,0,0,1239,1240,5,87,0, - 0,1240,1242,5,177,0,0,1241,1239,1,0,0,0,1241,1242,1,0,0,0,1242,1245,1, - 0,0,0,1243,1246,5,162,0,0,1244,1246,3,320,160,0,1245,1243,1,0,0,0,1245, - 1244,1,0,0,0,1246,113,1,0,0,0,1247,1248,5,98,0,0,1248,1249,5,177,0,0, - 1249,1254,3,320,160,0,1250,1251,5,177,0,0,1251,1252,5,88,0,0,1252,1253, - 5,177,0,0,1253,1255,5,162,0,0,1254,1250,1,0,0,0,1254,1255,1,0,0,0,1255, - 115,1,0,0,0,1256,1257,5,141,0,0,1257,1260,5,177,0,0,1258,1259,5,87,0, - 0,1259,1261,5,177,0,0,1260,1258,1,0,0,0,1260,1261,1,0,0,0,1261,1264,1, - 0,0,0,1262,1265,5,162,0,0,1263,1265,3,320,160,0,1264,1262,1,0,0,0,1264, - 1263,1,0,0,0,1265,117,1,0,0,0,1266,1267,3,120,60,0,1267,119,1,0,0,0,1268, - 1275,3,130,65,0,1269,1271,5,177,0,0,1270,1269,1,0,0,0,1270,1271,1,0,0, - 0,1271,1272,1,0,0,0,1272,1274,3,122,61,0,1273,1270,1,0,0,0,1274,1277, - 1,0,0,0,1275,1273,1,0,0,0,1275,1276,1,0,0,0,1276,1291,1,0,0,0,1277,1275, - 1,0,0,0,1278,1280,3,172,86,0,1279,1281,5,177,0,0,1280,1279,1,0,0,0,1280, - 1281,1,0,0,0,1281,1283,1,0,0,0,1282,1278,1,0,0,0,1283,1284,1,0,0,0,1284, - 1282,1,0,0,0,1284,1285,1,0,0,0,1285,1286,1,0,0,0,1286,1287,3,130,65,0, - 1287,1288,6,60,-1,0,1288,1291,1,0,0,0,1289,1291,3,124,62,0,1290,1268, - 1,0,0,0,1290,1282,1,0,0,0,1290,1289,1,0,0,0,1291,121,1,0,0,0,1292,1293, - 5,142,0,0,1293,1294,5,177,0,0,1294,1296,5,50,0,0,1295,1297,5,177,0,0, - 1296,1295,1,0,0,0,1296,1297,1,0,0,0,1297,1298,1,0,0,0,1298,1305,3,130, - 65,0,1299,1301,5,142,0,0,1300,1302,5,177,0,0,1301,1300,1,0,0,0,1301,1302, - 1,0,0,0,1302,1303,1,0,0,0,1303,1305,3,130,65,0,1304,1292,1,0,0,0,1304, - 1299,1,0,0,0,1305,123,1,0,0,0,1306,1308,3,136,68,0,1307,1309,5,177,0, - 0,1308,1307,1,0,0,0,1308,1309,1,0,0,0,1309,1311,1,0,0,0,1310,1306,1,0, - 0,0,1311,1314,1,0,0,0,1312,1310,1,0,0,0,1312,1313,1,0,0,0,1313,1315,1, - 0,0,0,1314,1312,1,0,0,0,1315,1318,3,126,63,0,1316,1317,5,177,0,0,1317, - 1319,3,130,65,0,1318,1316,1,0,0,0,1318,1319,1,0,0,0,1319,125,1,0,0,0, - 1320,1322,3,128,64,0,1321,1323,5,177,0,0,1322,1321,1,0,0,0,1322,1323, - 1,0,0,0,1323,1324,1,0,0,0,1324,1326,5,9,0,0,1325,1327,5,177,0,0,1326, - 1325,1,0,0,0,1326,1327,1,0,0,0,1327,1328,1,0,0,0,1328,1335,3,130,65,0, - 1329,1331,5,177,0,0,1330,1329,1,0,0,0,1330,1331,1,0,0,0,1331,1332,1,0, - 0,0,1332,1334,3,122,61,0,1333,1330,1,0,0,0,1334,1337,1,0,0,0,1335,1333, - 1,0,0,0,1335,1336,1,0,0,0,1336,1339,1,0,0,0,1337,1335,1,0,0,0,1338,1340, - 5,177,0,0,1339,1338,1,0,0,0,1339,1340,1,0,0,0,1340,1341,1,0,0,0,1341, - 1342,5,10,0,0,1342,127,1,0,0,0,1343,1345,5,59,0,0,1344,1346,5,177,0,0, - 1345,1344,1,0,0,0,1345,1346,1,0,0,0,1346,1347,1,0,0,0,1347,1349,5,2,0, - 0,1348,1350,5,177,0,0,1349,1348,1,0,0,0,1349,1350,1,0,0,0,1350,1351,1, - 0,0,0,1351,1362,3,232,116,0,1352,1354,5,177,0,0,1353,1352,1,0,0,0,1353, - 1354,1,0,0,0,1354,1355,1,0,0,0,1355,1357,5,4,0,0,1356,1358,5,177,0,0, - 1357,1356,1,0,0,0,1357,1358,1,0,0,0,1358,1359,1,0,0,0,1359,1361,3,232, - 116,0,1360,1353,1,0,0,0,1361,1364,1,0,0,0,1362,1360,1,0,0,0,1362,1363, - 1,0,0,0,1363,1366,1,0,0,0,1364,1362,1,0,0,0,1365,1367,5,177,0,0,1366, - 1365,1,0,0,0,1366,1367,1,0,0,0,1367,1368,1,0,0,0,1368,1369,5,3,0,0,1369, - 1373,1,0,0,0,1370,1371,5,59,0,0,1371,1373,5,11,0,0,1372,1343,1,0,0,0, - 1372,1370,1,0,0,0,1373,129,1,0,0,0,1374,1377,3,132,66,0,1375,1377,3,134, - 67,0,1376,1374,1,0,0,0,1376,1375,1,0,0,0,1377,131,1,0,0,0,1378,1380,3, - 140,70,0,1379,1381,5,177,0,0,1380,1379,1,0,0,0,1380,1381,1,0,0,0,1381, - 1383,1,0,0,0,1382,1378,1,0,0,0,1383,1386,1,0,0,0,1384,1382,1,0,0,0,1384, - 1385,1,0,0,0,1385,1387,1,0,0,0,1386,1384,1,0,0,0,1387,1414,3,172,86,0, - 1388,1390,3,140,70,0,1389,1391,5,177,0,0,1390,1389,1,0,0,0,1390,1391, - 1,0,0,0,1391,1393,1,0,0,0,1392,1388,1,0,0,0,1393,1396,1,0,0,0,1394,1392, - 1,0,0,0,1394,1395,1,0,0,0,1395,1397,1,0,0,0,1396,1394,1,0,0,0,1397,1404, - 3,138,69,0,1398,1400,5,177,0,0,1399,1398,1,0,0,0,1399,1400,1,0,0,0,1400, - 1401,1,0,0,0,1401,1403,3,138,69,0,1402,1399,1,0,0,0,1403,1406,1,0,0,0, - 1404,1402,1,0,0,0,1404,1405,1,0,0,0,1405,1411,1,0,0,0,1406,1404,1,0,0, - 0,1407,1409,5,177,0,0,1408,1407,1,0,0,0,1408,1409,1,0,0,0,1409,1410,1, - 0,0,0,1410,1412,3,172,86,0,1411,1408,1,0,0,0,1411,1412,1,0,0,0,1412,1414, - 1,0,0,0,1413,1384,1,0,0,0,1413,1394,1,0,0,0,1414,133,1,0,0,0,1415,1417, - 3,136,68,0,1416,1418,5,177,0,0,1417,1416,1,0,0,0,1417,1418,1,0,0,0,1418, - 1420,1,0,0,0,1419,1415,1,0,0,0,1420,1421,1,0,0,0,1421,1419,1,0,0,0,1421, - 1422,1,0,0,0,1422,1423,1,0,0,0,1423,1424,3,132,66,0,1424,135,1,0,0,0, - 1425,1427,3,140,70,0,1426,1428,5,177,0,0,1427,1426,1,0,0,0,1427,1428, - 1,0,0,0,1428,1430,1,0,0,0,1429,1425,1,0,0,0,1430,1433,1,0,0,0,1431,1429, - 1,0,0,0,1431,1432,1,0,0,0,1432,1440,1,0,0,0,1433,1431,1,0,0,0,1434,1436, - 3,138,69,0,1435,1437,5,177,0,0,1436,1435,1,0,0,0,1436,1437,1,0,0,0,1437, - 1439,1,0,0,0,1438,1434,1,0,0,0,1439,1442,1,0,0,0,1440,1438,1,0,0,0,1440, - 1441,1,0,0,0,1441,1443,1,0,0,0,1442,1440,1,0,0,0,1443,1444,3,170,85,0, - 1444,137,1,0,0,0,1445,1450,3,158,79,0,1446,1450,3,160,80,0,1447,1450, - 3,164,82,0,1448,1450,3,168,84,0,1449,1445,1,0,0,0,1449,1446,1,0,0,0,1449, - 1447,1,0,0,0,1449,1448,1,0,0,0,1450,139,1,0,0,0,1451,1456,3,150,75,0, - 1452,1456,3,156,78,0,1453,1456,3,148,74,0,1454,1456,3,142,71,0,1455,1451, - 1,0,0,0,1455,1452,1,0,0,0,1455,1453,1,0,0,0,1455,1454,1,0,0,0,1456,141, - 1,0,0,0,1457,1475,5,103,0,0,1458,1459,5,177,0,0,1459,1460,5,147,0,0,1460, - 1461,5,177,0,0,1461,1463,5,92,0,0,1462,1464,5,177,0,0,1463,1462,1,0,0, - 0,1463,1464,1,0,0,0,1464,1465,1,0,0,0,1465,1467,5,2,0,0,1466,1468,5,177, - 0,0,1467,1466,1,0,0,0,1467,1468,1,0,0,0,1468,1469,1,0,0,0,1469,1471,3, - 86,43,0,1470,1472,5,177,0,0,1471,1470,1,0,0,0,1471,1472,1,0,0,0,1472, - 1473,1,0,0,0,1473,1474,5,3,0,0,1474,1476,1,0,0,0,1475,1458,1,0,0,0,1475, - 1476,1,0,0,0,1476,1477,1,0,0,0,1477,1478,5,177,0,0,1478,1479,5,88,0,0, - 1479,1480,5,177,0,0,1480,1494,3,10,5,0,1481,1483,5,177,0,0,1482,1481, - 1,0,0,0,1482,1483,1,0,0,0,1483,1484,1,0,0,0,1484,1486,5,2,0,0,1485,1487, - 5,177,0,0,1486,1485,1,0,0,0,1486,1487,1,0,0,0,1487,1488,1,0,0,0,1488, - 1490,3,24,12,0,1489,1491,5,177,0,0,1490,1489,1,0,0,0,1490,1491,1,0,0, - 0,1491,1492,1,0,0,0,1492,1493,5,3,0,0,1493,1495,1,0,0,0,1494,1482,1,0, - 0,0,1494,1495,1,0,0,0,1495,1500,1,0,0,0,1496,1498,5,177,0,0,1497,1496, - 1,0,0,0,1497,1498,1,0,0,0,1498,1499,1,0,0,0,1499,1501,3,188,94,0,1500, - 1497,1,0,0,0,1500,1501,1,0,0,0,1501,143,1,0,0,0,1502,1503,3,320,160,0, - 1503,1504,5,177,0,0,1504,1505,5,53,0,0,1505,1506,5,177,0,0,1506,1508, - 1,0,0,0,1507,1502,1,0,0,0,1507,1508,1,0,0,0,1508,1509,1,0,0,0,1509,1510, - 3,320,160,0,1510,145,1,0,0,0,1511,1522,3,144,72,0,1512,1514,5,177,0,0, - 1513,1512,1,0,0,0,1513,1514,1,0,0,0,1514,1515,1,0,0,0,1515,1517,5,4,0, - 0,1516,1518,5,177,0,0,1517,1516,1,0,0,0,1517,1518,1,0,0,0,1518,1519,1, - 0,0,0,1519,1521,3,144,72,0,1520,1513,1,0,0,0,1521,1524,1,0,0,0,1522,1520, - 1,0,0,0,1522,1523,1,0,0,0,1523,147,1,0,0,0,1524,1522,1,0,0,0,1525,1526, - 5,59,0,0,1526,1527,5,177,0,0,1527,1532,3,300,150,0,1528,1530,5,177,0, - 0,1529,1528,1,0,0,0,1529,1530,1,0,0,0,1530,1531,1,0,0,0,1531,1533,3,188, - 94,0,1532,1529,1,0,0,0,1532,1533,1,0,0,0,1533,1540,1,0,0,0,1534,1536, - 5,177,0,0,1535,1534,1,0,0,0,1535,1536,1,0,0,0,1536,1537,1,0,0,0,1537, - 1538,5,152,0,0,1538,1539,5,177,0,0,1539,1541,3,146,73,0,1540,1535,1,0, - 0,0,1540,1541,1,0,0,0,1541,149,1,0,0,0,1542,1543,5,118,0,0,1543,1545, - 5,177,0,0,1544,1542,1,0,0,0,1544,1545,1,0,0,0,1545,1546,1,0,0,0,1546, - 1548,5,106,0,0,1547,1549,5,177,0,0,1548,1547,1,0,0,0,1548,1549,1,0,0, - 0,1549,1550,1,0,0,0,1550,1553,3,190,95,0,1551,1552,5,177,0,0,1552,1554, - 3,188,94,0,1553,1551,1,0,0,0,1553,1554,1,0,0,0,1554,1557,1,0,0,0,1555, - 1556,5,177,0,0,1556,1558,3,152,76,0,1557,1555,1,0,0,0,1557,1558,1,0,0, - 0,1558,151,1,0,0,0,1559,1560,5,93,0,0,1560,1561,5,177,0,0,1561,1562,3, - 154,77,0,1562,153,1,0,0,0,1563,1564,6,77,-1,0,1564,1566,5,2,0,0,1565, - 1567,5,177,0,0,1566,1565,1,0,0,0,1566,1567,1,0,0,0,1567,1568,1,0,0,0, - 1568,1570,3,154,77,0,1569,1571,5,177,0,0,1570,1569,1,0,0,0,1570,1571, - 1,0,0,0,1571,1572,1,0,0,0,1572,1573,5,3,0,0,1573,1576,1,0,0,0,1574,1576, - 3,334,167,0,1575,1563,1,0,0,0,1575,1574,1,0,0,0,1576,1593,1,0,0,0,1577, - 1578,10,4,0,0,1578,1579,5,177,0,0,1579,1580,5,100,0,0,1580,1581,5,177, - 0,0,1581,1592,3,154,77,5,1582,1587,10,3,0,0,1583,1584,5,177,0,0,1584, - 1585,5,110,0,0,1585,1586,5,177,0,0,1586,1588,3,334,167,0,1587,1583,1, - 0,0,0,1588,1589,1,0,0,0,1589,1587,1,0,0,0,1589,1590,1,0,0,0,1590,1592, - 1,0,0,0,1591,1577,1,0,0,0,1591,1582,1,0,0,0,1592,1595,1,0,0,0,1593,1591, - 1,0,0,0,1593,1594,1,0,0,0,1594,155,1,0,0,0,1595,1593,1,0,0,0,1596,1598, - 5,143,0,0,1597,1599,5,177,0,0,1598,1597,1,0,0,0,1598,1599,1,0,0,0,1599, - 1600,1,0,0,0,1600,1601,3,232,116,0,1601,1602,5,177,0,0,1602,1603,5,53, - 0,0,1603,1604,5,177,0,0,1604,1605,3,320,160,0,1605,157,1,0,0,0,1606,1608, - 5,70,0,0,1607,1609,5,177,0,0,1608,1607,1,0,0,0,1608,1609,1,0,0,0,1609, - 1610,1,0,0,0,1610,1611,3,190,95,0,1611,159,1,0,0,0,1612,1614,5,108,0, - 0,1613,1615,5,177,0,0,1614,1613,1,0,0,0,1614,1615,1,0,0,0,1615,1616,1, - 0,0,0,1616,1621,3,190,95,0,1617,1618,5,177,0,0,1618,1620,3,162,81,0,1619, - 1617,1,0,0,0,1620,1623,1,0,0,0,1621,1619,1,0,0,0,1621,1622,1,0,0,0,1622, - 161,1,0,0,0,1623,1621,1,0,0,0,1624,1625,5,116,0,0,1625,1626,5,177,0,0, - 1626,1627,5,106,0,0,1627,1628,5,177,0,0,1628,1635,3,164,82,0,1629,1630, - 5,116,0,0,1630,1631,5,177,0,0,1631,1632,5,70,0,0,1632,1633,5,177,0,0, - 1633,1635,3,164,82,0,1634,1624,1,0,0,0,1634,1629,1,0,0,0,1635,163,1,0, - 0,0,1636,1638,5,131,0,0,1637,1639,5,177,0,0,1638,1637,1,0,0,0,1638,1639, - 1,0,0,0,1639,1640,1,0,0,0,1640,1651,3,166,83,0,1641,1643,5,177,0,0,1642, - 1641,1,0,0,0,1642,1643,1,0,0,0,1643,1644,1,0,0,0,1644,1646,5,4,0,0,1645, - 1647,5,177,0,0,1646,1645,1,0,0,0,1646,1647,1,0,0,0,1647,1648,1,0,0,0, - 1648,1650,3,166,83,0,1649,1642,1,0,0,0,1650,1653,1,0,0,0,1651,1649,1, - 0,0,0,1651,1652,1,0,0,0,1652,165,1,0,0,0,1653,1651,1,0,0,0,1654,1656, - 3,326,163,0,1655,1657,5,177,0,0,1656,1655,1,0,0,0,1656,1657,1,0,0,0,1657, - 1658,1,0,0,0,1658,1660,5,6,0,0,1659,1661,5,177,0,0,1660,1659,1,0,0,0, - 1660,1661,1,0,0,0,1661,1662,1,0,0,0,1662,1663,3,232,116,0,1663,167,1, - 0,0,0,1664,1665,5,78,0,0,1665,1667,5,177,0,0,1666,1664,1,0,0,0,1666,1667, - 1,0,0,0,1667,1668,1,0,0,0,1668,1670,5,75,0,0,1669,1671,5,177,0,0,1670, - 1669,1,0,0,0,1670,1671,1,0,0,0,1671,1672,1,0,0,0,1672,1683,3,232,116, - 0,1673,1675,5,177,0,0,1674,1673,1,0,0,0,1674,1675,1,0,0,0,1675,1676,1, - 0,0,0,1676,1678,5,4,0,0,1677,1679,5,177,0,0,1678,1677,1,0,0,0,1678,1679, - 1,0,0,0,1679,1680,1,0,0,0,1680,1682,3,232,116,0,1681,1674,1,0,0,0,1682, - 1685,1,0,0,0,1683,1681,1,0,0,0,1683,1684,1,0,0,0,1684,169,1,0,0,0,1685, - 1683,1,0,0,0,1686,1687,5,147,0,0,1687,1692,3,174,87,0,1688,1690,5,177, - 0,0,1689,1688,1,0,0,0,1689,1690,1,0,0,0,1690,1691,1,0,0,0,1691,1693,3, - 188,94,0,1692,1689,1,0,0,0,1692,1693,1,0,0,0,1693,171,1,0,0,0,1694,1695, - 5,127,0,0,1695,1696,3,174,87,0,1696,173,1,0,0,0,1697,1699,5,177,0,0,1698, - 1697,1,0,0,0,1698,1699,1,0,0,0,1699,1700,1,0,0,0,1700,1702,5,79,0,0,1701, - 1698,1,0,0,0,1701,1702,1,0,0,0,1702,1703,1,0,0,0,1703,1704,5,177,0,0, - 1704,1707,3,176,88,0,1705,1706,5,177,0,0,1706,1708,3,180,90,0,1707,1705, - 1,0,0,0,1707,1708,1,0,0,0,1708,1711,1,0,0,0,1709,1710,5,177,0,0,1710, - 1712,3,182,91,0,1711,1709,1,0,0,0,1711,1712,1,0,0,0,1712,1715,1,0,0,0, - 1713,1714,5,177,0,0,1714,1716,3,184,92,0,1715,1713,1,0,0,0,1715,1716, - 1,0,0,0,1716,175,1,0,0,0,1717,1728,5,154,0,0,1718,1720,5,177,0,0,1719, - 1718,1,0,0,0,1719,1720,1,0,0,0,1720,1721,1,0,0,0,1721,1723,5,4,0,0,1722, - 1724,5,177,0,0,1723,1722,1,0,0,0,1723,1724,1,0,0,0,1724,1725,1,0,0,0, - 1725,1727,3,178,89,0,1726,1719,1,0,0,0,1727,1730,1,0,0,0,1728,1726,1, - 0,0,0,1728,1729,1,0,0,0,1729,1746,1,0,0,0,1730,1728,1,0,0,0,1731,1742, - 3,178,89,0,1732,1734,5,177,0,0,1733,1732,1,0,0,0,1733,1734,1,0,0,0,1734, - 1735,1,0,0,0,1735,1737,5,4,0,0,1736,1738,5,177,0,0,1737,1736,1,0,0,0, - 1737,1738,1,0,0,0,1738,1739,1,0,0,0,1739,1741,3,178,89,0,1740,1733,1, - 0,0,0,1741,1744,1,0,0,0,1742,1740,1,0,0,0,1742,1743,1,0,0,0,1743,1746, - 1,0,0,0,1744,1742,1,0,0,0,1745,1717,1,0,0,0,1745,1731,1,0,0,0,1746,177, - 1,0,0,0,1747,1748,3,232,116,0,1748,1749,5,177,0,0,1749,1750,5,53,0,0, - 1750,1751,5,177,0,0,1751,1752,3,320,160,0,1752,1755,1,0,0,0,1753,1755, - 3,232,116,0,1754,1747,1,0,0,0,1754,1753,1,0,0,0,1755,179,1,0,0,0,1756, - 1757,5,120,0,0,1757,1758,5,177,0,0,1758,1759,5,58,0,0,1759,1760,5,177, - 0,0,1760,1768,3,186,93,0,1761,1763,5,4,0,0,1762,1764,5,177,0,0,1763,1762, - 1,0,0,0,1763,1764,1,0,0,0,1764,1765,1,0,0,0,1765,1767,3,186,93,0,1766, - 1761,1,0,0,0,1767,1770,1,0,0,0,1768,1766,1,0,0,0,1768,1769,1,0,0,0,1769, - 181,1,0,0,0,1770,1768,1,0,0,0,1771,1772,5,155,0,0,1772,1773,5,177,0,0, - 1773,1774,3,232,116,0,1774,183,1,0,0,0,1775,1776,5,102,0,0,1776,1777, - 5,177,0,0,1777,1778,3,232,116,0,1778,185,1,0,0,0,1779,1784,3,232,116, - 0,1780,1782,5,177,0,0,1781,1780,1,0,0,0,1781,1782,1,0,0,0,1782,1783,1, - 0,0,0,1783,1785,7,1,0,0,1784,1781,1,0,0,0,1784,1785,1,0,0,0,1785,187, - 1,0,0,0,1786,1787,5,146,0,0,1787,1788,5,177,0,0,1788,1789,3,232,116,0, - 1789,189,1,0,0,0,1790,1801,3,192,96,0,1791,1793,5,177,0,0,1792,1791,1, - 0,0,0,1792,1793,1,0,0,0,1793,1794,1,0,0,0,1794,1796,5,4,0,0,1795,1797, - 5,177,0,0,1796,1795,1,0,0,0,1796,1797,1,0,0,0,1797,1798,1,0,0,0,1798, - 1800,3,192,96,0,1799,1792,1,0,0,0,1800,1803,1,0,0,0,1801,1799,1,0,0,0, - 1801,1802,1,0,0,0,1802,191,1,0,0,0,1803,1801,1,0,0,0,1804,1806,3,320, - 160,0,1805,1807,5,177,0,0,1806,1805,1,0,0,0,1806,1807,1,0,0,0,1807,1808, - 1,0,0,0,1808,1810,5,6,0,0,1809,1811,5,177,0,0,1810,1809,1,0,0,0,1810, - 1811,1,0,0,0,1811,1812,1,0,0,0,1812,1813,3,194,97,0,1813,1816,1,0,0,0, - 1814,1816,3,194,97,0,1815,1804,1,0,0,0,1815,1814,1,0,0,0,1816,193,1,0, - 0,0,1817,1818,3,196,98,0,1818,195,1,0,0,0,1819,1826,3,198,99,0,1820,1822, - 5,177,0,0,1821,1820,1,0,0,0,1821,1822,1,0,0,0,1822,1823,1,0,0,0,1823, - 1825,3,200,100,0,1824,1821,1,0,0,0,1825,1828,1,0,0,0,1826,1824,1,0,0, - 0,1826,1827,1,0,0,0,1827,1834,1,0,0,0,1828,1826,1,0,0,0,1829,1830,5,2, - 0,0,1830,1831,3,196,98,0,1831,1832,5,3,0,0,1832,1834,1,0,0,0,1833,1819, - 1,0,0,0,1833,1829,1,0,0,0,1834,197,1,0,0,0,1835,1837,5,2,0,0,1836,1838, - 5,177,0,0,1837,1836,1,0,0,0,1837,1838,1,0,0,0,1838,1843,1,0,0,0,1839, - 1841,3,320,160,0,1840,1842,5,177,0,0,1841,1840,1,0,0,0,1841,1842,1,0, - 0,0,1842,1844,1,0,0,0,1843,1839,1,0,0,0,1843,1844,1,0,0,0,1844,1849,1, - 0,0,0,1845,1847,3,210,105,0,1846,1848,5,177,0,0,1847,1846,1,0,0,0,1847, - 1848,1,0,0,0,1848,1850,1,0,0,0,1849,1845,1,0,0,0,1849,1850,1,0,0,0,1850, - 1855,1,0,0,0,1851,1853,3,206,103,0,1852,1854,5,177,0,0,1853,1852,1,0, - 0,0,1853,1854,1,0,0,0,1854,1856,1,0,0,0,1855,1851,1,0,0,0,1855,1856,1, - 0,0,0,1856,1857,1,0,0,0,1857,1858,5,3,0,0,1858,199,1,0,0,0,1859,1861, - 3,202,101,0,1860,1862,5,177,0,0,1861,1860,1,0,0,0,1861,1862,1,0,0,0,1862, - 1863,1,0,0,0,1863,1864,3,198,99,0,1864,201,1,0,0,0,1865,1867,3,340,170, - 0,1866,1868,5,177,0,0,1867,1866,1,0,0,0,1867,1868,1,0,0,0,1868,1869,1, - 0,0,0,1869,1871,3,344,172,0,1870,1872,5,177,0,0,1871,1870,1,0,0,0,1871, - 1872,1,0,0,0,1872,1874,1,0,0,0,1873,1875,3,204,102,0,1874,1873,1,0,0, - 0,1874,1875,1,0,0,0,1875,1877,1,0,0,0,1876,1878,5,177,0,0,1877,1876,1, - 0,0,0,1877,1878,1,0,0,0,1878,1879,1,0,0,0,1879,1880,3,344,172,0,1880, - 1910,1,0,0,0,1881,1883,3,344,172,0,1882,1884,5,177,0,0,1883,1882,1,0, - 0,0,1883,1884,1,0,0,0,1884,1886,1,0,0,0,1885,1887,3,204,102,0,1886,1885, - 1,0,0,0,1886,1887,1,0,0,0,1887,1889,1,0,0,0,1888,1890,5,177,0,0,1889, - 1888,1,0,0,0,1889,1890,1,0,0,0,1890,1891,1,0,0,0,1891,1893,3,344,172, - 0,1892,1894,5,177,0,0,1893,1892,1,0,0,0,1893,1894,1,0,0,0,1894,1895,1, - 0,0,0,1895,1896,3,342,171,0,1896,1910,1,0,0,0,1897,1899,3,344,172,0,1898, - 1900,5,177,0,0,1899,1898,1,0,0,0,1899,1900,1,0,0,0,1900,1902,1,0,0,0, - 1901,1903,3,204,102,0,1902,1901,1,0,0,0,1902,1903,1,0,0,0,1903,1905,1, - 0,0,0,1904,1906,5,177,0,0,1905,1904,1,0,0,0,1905,1906,1,0,0,0,1906,1907, - 1,0,0,0,1907,1908,3,344,172,0,1908,1910,1,0,0,0,1909,1865,1,0,0,0,1909, - 1881,1,0,0,0,1909,1897,1,0,0,0,1910,203,1,0,0,0,1911,1913,5,7,0,0,1912, - 1914,5,177,0,0,1913,1912,1,0,0,0,1913,1914,1,0,0,0,1914,1919,1,0,0,0, - 1915,1917,3,320,160,0,1916,1918,5,177,0,0,1917,1916,1,0,0,0,1917,1918, - 1,0,0,0,1918,1920,1,0,0,0,1919,1915,1,0,0,0,1919,1920,1,0,0,0,1920,1925, - 1,0,0,0,1921,1923,3,208,104,0,1922,1924,5,177,0,0,1923,1922,1,0,0,0,1923, - 1924,1,0,0,0,1924,1926,1,0,0,0,1925,1921,1,0,0,0,1925,1926,1,0,0,0,1926, - 1931,1,0,0,0,1927,1929,3,214,107,0,1928,1930,5,177,0,0,1929,1928,1,0, - 0,0,1929,1930,1,0,0,0,1930,1932,1,0,0,0,1931,1927,1,0,0,0,1931,1932,1, - 0,0,0,1932,1937,1,0,0,0,1933,1935,3,206,103,0,1934,1936,5,177,0,0,1935, - 1934,1,0,0,0,1935,1936,1,0,0,0,1936,1938,1,0,0,0,1937,1933,1,0,0,0,1937, - 1938,1,0,0,0,1938,1939,1,0,0,0,1939,1940,5,8,0,0,1940,205,1,0,0,0,1941, - 1943,5,9,0,0,1942,1944,5,177,0,0,1943,1942,1,0,0,0,1943,1944,1,0,0,0, - 1944,1978,1,0,0,0,1945,1947,3,328,164,0,1946,1948,5,177,0,0,1947,1946, - 1,0,0,0,1947,1948,1,0,0,0,1948,1949,1,0,0,0,1949,1951,5,159,0,0,1950, - 1952,5,177,0,0,1951,1950,1,0,0,0,1951,1952,1,0,0,0,1952,1953,1,0,0,0, - 1953,1955,3,232,116,0,1954,1956,5,177,0,0,1955,1954,1,0,0,0,1955,1956, - 1,0,0,0,1956,1975,1,0,0,0,1957,1959,5,4,0,0,1958,1960,5,177,0,0,1959, - 1958,1,0,0,0,1959,1960,1,0,0,0,1960,1961,1,0,0,0,1961,1963,3,328,164, - 0,1962,1964,5,177,0,0,1963,1962,1,0,0,0,1963,1964,1,0,0,0,1964,1965,1, - 0,0,0,1965,1967,5,159,0,0,1966,1968,5,177,0,0,1967,1966,1,0,0,0,1967, - 1968,1,0,0,0,1968,1969,1,0,0,0,1969,1971,3,232,116,0,1970,1972,5,177, - 0,0,1971,1970,1,0,0,0,1971,1972,1,0,0,0,1972,1974,1,0,0,0,1973,1957,1, - 0,0,0,1974,1977,1,0,0,0,1975,1973,1,0,0,0,1975,1976,1,0,0,0,1976,1979, - 1,0,0,0,1977,1975,1,0,0,0,1978,1945,1,0,0,0,1978,1979,1,0,0,0,1979,1980, - 1,0,0,0,1980,1981,5,10,0,0,1981,207,1,0,0,0,1982,1984,5,159,0,0,1983, - 1985,5,177,0,0,1984,1983,1,0,0,0,1984,1985,1,0,0,0,1985,1986,1,0,0,0, - 1986,2000,3,230,115,0,1987,1989,5,177,0,0,1988,1987,1,0,0,0,1988,1989, - 1,0,0,0,1989,1990,1,0,0,0,1990,1992,5,12,0,0,1991,1993,5,159,0,0,1992, - 1991,1,0,0,0,1992,1993,1,0,0,0,1993,1995,1,0,0,0,1994,1996,5,177,0,0, - 1995,1994,1,0,0,0,1995,1996,1,0,0,0,1996,1997,1,0,0,0,1997,1999,3,230, - 115,0,1998,1988,1,0,0,0,1999,2002,1,0,0,0,2000,1998,1,0,0,0,2000,2001, - 1,0,0,0,2001,209,1,0,0,0,2002,2000,1,0,0,0,2003,2010,3,212,106,0,2004, - 2006,5,177,0,0,2005,2004,1,0,0,0,2005,2006,1,0,0,0,2006,2007,1,0,0,0, - 2007,2009,3,212,106,0,2008,2005,1,0,0,0,2009,2012,1,0,0,0,2010,2008,1, - 0,0,0,2010,2011,1,0,0,0,2011,211,1,0,0,0,2012,2010,1,0,0,0,2013,2015, - 5,159,0,0,2014,2016,5,177,0,0,2015,2014,1,0,0,0,2015,2016,1,0,0,0,2016, - 2017,1,0,0,0,2017,2018,3,228,114,0,2018,213,1,0,0,0,2019,2024,5,154,0, - 0,2020,2022,5,177,0,0,2021,2020,1,0,0,0,2021,2022,1,0,0,0,2022,2023,1, - 0,0,0,2023,2025,3,216,108,0,2024,2021,1,0,0,0,2024,2025,1,0,0,0,2025, - 2030,1,0,0,0,2026,2028,5,177,0,0,2027,2026,1,0,0,0,2027,2028,1,0,0,0, - 2028,2029,1,0,0,0,2029,2031,3,218,109,0,2030,2027,1,0,0,0,2030,2031,1, - 0,0,0,2031,2036,1,0,0,0,2032,2034,5,177,0,0,2033,2032,1,0,0,0,2033,2034, - 1,0,0,0,2034,2035,1,0,0,0,2035,2037,3,220,110,0,2036,2033,1,0,0,0,2036, - 2037,1,0,0,0,2037,215,1,0,0,0,2038,2039,5,50,0,0,2039,2041,5,177,0,0, - 2040,2038,1,0,0,0,2040,2041,1,0,0,0,2041,2042,1,0,0,0,2042,2044,5,149, - 0,0,2043,2045,5,177,0,0,2044,2043,1,0,0,0,2044,2045,1,0,0,0,2045,2046, - 1,0,0,0,2046,2048,5,2,0,0,2047,2049,5,177,0,0,2048,2047,1,0,0,0,2048, - 2049,1,0,0,0,2049,2050,1,0,0,0,2050,2052,3,328,164,0,2051,2053,5,177, - 0,0,2052,2051,1,0,0,0,2052,2053,1,0,0,0,2053,2054,1,0,0,0,2054,2055,5, - 3,0,0,2055,2063,1,0,0,0,2056,2063,5,132,0,0,2057,2058,5,50,0,0,2058,2059, - 5,177,0,0,2059,2063,5,132,0,0,2060,2063,5,138,0,0,2061,2063,5,47,0,0, - 2062,2040,1,0,0,0,2062,2056,1,0,0,0,2062,2057,1,0,0,0,2062,2060,1,0,0, - 0,2062,2061,1,0,0,0,2063,217,1,0,0,0,2064,2066,3,224,112,0,2065,2064, - 1,0,0,0,2065,2066,1,0,0,0,2066,2068,1,0,0,0,2067,2069,5,177,0,0,2068, - 2067,1,0,0,0,2068,2069,1,0,0,0,2069,2070,1,0,0,0,2070,2072,5,13,0,0,2071, - 2073,5,177,0,0,2072,2071,1,0,0,0,2072,2073,1,0,0,0,2073,2075,1,0,0,0, - 2074,2076,3,226,113,0,2075,2074,1,0,0,0,2075,2076,1,0,0,0,2076,2079,1, - 0,0,0,2077,2079,3,330,165,0,2078,2065,1,0,0,0,2078,2077,1,0,0,0,2079, - 219,1,0,0,0,2080,2082,5,2,0,0,2081,2083,5,177,0,0,2082,2081,1,0,0,0,2082, - 2083,1,0,0,0,2083,2084,1,0,0,0,2084,2086,3,320,160,0,2085,2087,5,177, - 0,0,2086,2085,1,0,0,0,2086,2087,1,0,0,0,2087,2088,1,0,0,0,2088,2090,5, - 4,0,0,2089,2091,5,177,0,0,2090,2089,1,0,0,0,2090,2091,1,0,0,0,2091,2092, - 1,0,0,0,2092,2104,3,320,160,0,2093,2095,5,177,0,0,2094,2093,1,0,0,0,2094, - 2095,1,0,0,0,2095,2096,1,0,0,0,2096,2098,5,12,0,0,2097,2099,5,177,0,0, - 2098,2097,1,0,0,0,2098,2099,1,0,0,0,2099,2100,1,0,0,0,2100,2102,3,188, - 94,0,2101,2103,5,177,0,0,2102,2101,1,0,0,0,2102,2103,1,0,0,0,2103,2105, - 1,0,0,0,2104,2094,1,0,0,0,2104,2105,1,0,0,0,2105,2125,1,0,0,0,2106,2108, - 5,177,0,0,2107,2106,1,0,0,0,2107,2108,1,0,0,0,2108,2109,1,0,0,0,2109, - 2111,5,12,0,0,2110,2112,5,177,0,0,2111,2110,1,0,0,0,2111,2112,1,0,0,0, - 2112,2113,1,0,0,0,2113,2115,3,222,111,0,2114,2116,5,177,0,0,2115,2114, - 1,0,0,0,2115,2116,1,0,0,0,2116,2117,1,0,0,0,2117,2119,5,4,0,0,2118,2120, - 5,177,0,0,2119,2118,1,0,0,0,2119,2120,1,0,0,0,2120,2121,1,0,0,0,2121, - 2123,3,222,111,0,2122,2124,5,177,0,0,2123,2122,1,0,0,0,2123,2124,1,0, - 0,0,2124,2126,1,0,0,0,2125,2107,1,0,0,0,2125,2126,1,0,0,0,2126,2127,1, - 0,0,0,2127,2128,5,3,0,0,2128,221,1,0,0,0,2129,2131,5,9,0,0,2130,2132, - 5,177,0,0,2131,2130,1,0,0,0,2131,2132,1,0,0,0,2132,2134,1,0,0,0,2133, - 2135,3,176,88,0,2134,2133,1,0,0,0,2134,2135,1,0,0,0,2135,2137,1,0,0,0, - 2136,2138,5,177,0,0,2137,2136,1,0,0,0,2137,2138,1,0,0,0,2138,2139,1,0, - 0,0,2139,2140,5,10,0,0,2140,223,1,0,0,0,2141,2142,5,164,0,0,2142,225, - 1,0,0,0,2143,2144,5,164,0,0,2144,227,1,0,0,0,2145,2146,3,334,167,0,2146, - 229,1,0,0,0,2147,2148,3,334,167,0,2148,231,1,0,0,0,2149,2150,3,234,117, - 0,2150,233,1,0,0,0,2151,2158,3,236,118,0,2152,2153,5,177,0,0,2153,2154, - 5,119,0,0,2154,2155,5,177,0,0,2155,2157,3,236,118,0,2156,2152,1,0,0,0, - 2157,2160,1,0,0,0,2158,2156,1,0,0,0,2158,2159,1,0,0,0,2159,235,1,0,0, - 0,2160,2158,1,0,0,0,2161,2168,3,238,119,0,2162,2163,5,177,0,0,2163,2164, - 5,150,0,0,2164,2165,5,177,0,0,2165,2167,3,238,119,0,2166,2162,1,0,0,0, - 2167,2170,1,0,0,0,2168,2166,1,0,0,0,2168,2169,1,0,0,0,2169,237,1,0,0, - 0,2170,2168,1,0,0,0,2171,2178,3,240,120,0,2172,2173,5,177,0,0,2173,2174, - 5,52,0,0,2174,2175,5,177,0,0,2175,2177,3,240,120,0,2176,2172,1,0,0,0, - 2177,2180,1,0,0,0,2178,2176,1,0,0,0,2178,2179,1,0,0,0,2179,239,1,0,0, - 0,2180,2178,1,0,0,0,2181,2183,5,113,0,0,2182,2184,5,177,0,0,2183,2182, - 1,0,0,0,2183,2184,1,0,0,0,2184,2186,1,0,0,0,2185,2181,1,0,0,0,2186,2189, - 1,0,0,0,2187,2185,1,0,0,0,2187,2188,1,0,0,0,2188,2190,1,0,0,0,2189,2187, - 1,0,0,0,2190,2191,3,242,121,0,2191,241,1,0,0,0,2192,2202,3,246,123,0, - 2193,2195,5,177,0,0,2194,2193,1,0,0,0,2194,2195,1,0,0,0,2195,2196,1,0, - 0,0,2196,2198,3,244,122,0,2197,2199,5,177,0,0,2198,2197,1,0,0,0,2198, - 2199,1,0,0,0,2199,2200,1,0,0,0,2200,2201,3,246,123,0,2201,2203,1,0,0, - 0,2202,2194,1,0,0,0,2202,2203,1,0,0,0,2203,2241,1,0,0,0,2204,2206,3,246, - 123,0,2205,2207,5,177,0,0,2206,2205,1,0,0,0,2206,2207,1,0,0,0,2207,2208, - 1,0,0,0,2208,2210,5,156,0,0,2209,2211,5,177,0,0,2210,2209,1,0,0,0,2210, - 2211,1,0,0,0,2211,2212,1,0,0,0,2212,2213,3,246,123,0,2213,2214,1,0,0, - 0,2214,2215,6,121,-1,0,2215,2241,1,0,0,0,2216,2218,3,246,123,0,2217,2219, - 5,177,0,0,2218,2217,1,0,0,0,2218,2219,1,0,0,0,2219,2220,1,0,0,0,2220, - 2222,3,244,122,0,2221,2223,5,177,0,0,2222,2221,1,0,0,0,2222,2223,1,0, - 0,0,2223,2224,1,0,0,0,2224,2234,3,246,123,0,2225,2227,5,177,0,0,2226, - 2225,1,0,0,0,2226,2227,1,0,0,0,2227,2228,1,0,0,0,2228,2230,3,244,122, - 0,2229,2231,5,177,0,0,2230,2229,1,0,0,0,2230,2231,1,0,0,0,2231,2232,1, - 0,0,0,2232,2233,3,246,123,0,2233,2235,1,0,0,0,2234,2226,1,0,0,0,2235, - 2236,1,0,0,0,2236,2234,1,0,0,0,2236,2237,1,0,0,0,2237,2238,1,0,0,0,2238, - 2239,6,121,-1,0,2239,2241,1,0,0,0,2240,2192,1,0,0,0,2240,2204,1,0,0,0, - 2240,2216,1,0,0,0,2241,243,1,0,0,0,2242,2243,7,2,0,0,2243,245,1,0,0,0, - 2244,2255,3,248,124,0,2245,2247,5,177,0,0,2246,2245,1,0,0,0,2246,2247, - 1,0,0,0,2247,2248,1,0,0,0,2248,2250,5,12,0,0,2249,2251,5,177,0,0,2250, - 2249,1,0,0,0,2250,2251,1,0,0,0,2251,2252,1,0,0,0,2252,2254,3,248,124, - 0,2253,2246,1,0,0,0,2254,2257,1,0,0,0,2255,2253,1,0,0,0,2255,2256,1,0, - 0,0,2256,247,1,0,0,0,2257,2255,1,0,0,0,2258,2269,3,250,125,0,2259,2261, - 5,177,0,0,2260,2259,1,0,0,0,2260,2261,1,0,0,0,2261,2262,1,0,0,0,2262, - 2264,5,19,0,0,2263,2265,5,177,0,0,2264,2263,1,0,0,0,2264,2265,1,0,0,0, - 2265,2266,1,0,0,0,2266,2268,3,250,125,0,2267,2260,1,0,0,0,2268,2271,1, - 0,0,0,2269,2267,1,0,0,0,2269,2270,1,0,0,0,2270,249,1,0,0,0,2271,2269, - 1,0,0,0,2272,2284,3,254,127,0,2273,2275,5,177,0,0,2274,2273,1,0,0,0,2274, - 2275,1,0,0,0,2275,2276,1,0,0,0,2276,2278,3,252,126,0,2277,2279,5,177, - 0,0,2278,2277,1,0,0,0,2278,2279,1,0,0,0,2279,2280,1,0,0,0,2280,2281,3, - 254,127,0,2281,2283,1,0,0,0,2282,2274,1,0,0,0,2283,2286,1,0,0,0,2284, - 2282,1,0,0,0,2284,2285,1,0,0,0,2285,251,1,0,0,0,2286,2284,1,0,0,0,2287, - 2288,7,3,0,0,2288,253,1,0,0,0,2289,2301,3,258,129,0,2290,2292,5,177,0, - 0,2291,2290,1,0,0,0,2291,2292,1,0,0,0,2292,2293,1,0,0,0,2293,2295,3,256, - 128,0,2294,2296,5,177,0,0,2295,2294,1,0,0,0,2295,2296,1,0,0,0,2296,2297, - 1,0,0,0,2297,2298,3,258,129,0,2298,2300,1,0,0,0,2299,2291,1,0,0,0,2300, - 2303,1,0,0,0,2301,2299,1,0,0,0,2301,2302,1,0,0,0,2302,255,1,0,0,0,2303, - 2301,1,0,0,0,2304,2305,7,4,0,0,2305,257,1,0,0,0,2306,2318,3,262,131,0, - 2307,2309,5,177,0,0,2308,2307,1,0,0,0,2308,2309,1,0,0,0,2309,2310,1,0, - 0,0,2310,2312,3,260,130,0,2311,2313,5,177,0,0,2312,2311,1,0,0,0,2312, - 2313,1,0,0,0,2313,2314,1,0,0,0,2314,2315,3,262,131,0,2315,2317,1,0,0, - 0,2316,2308,1,0,0,0,2317,2320,1,0,0,0,2318,2316,1,0,0,0,2318,2319,1,0, - 0,0,2319,259,1,0,0,0,2320,2318,1,0,0,0,2321,2322,7,5,0,0,2322,261,1,0, - 0,0,2323,2334,3,264,132,0,2324,2326,5,177,0,0,2325,2324,1,0,0,0,2325, - 2326,1,0,0,0,2326,2327,1,0,0,0,2327,2329,5,25,0,0,2328,2330,5,177,0,0, - 2329,2328,1,0,0,0,2329,2330,1,0,0,0,2330,2331,1,0,0,0,2331,2333,3,264, - 132,0,2332,2325,1,0,0,0,2333,2336,1,0,0,0,2334,2332,1,0,0,0,2334,2335, - 1,0,0,0,2335,263,1,0,0,0,2336,2334,1,0,0,0,2337,2339,5,157,0,0,2338,2340, - 5,177,0,0,2339,2338,1,0,0,0,2339,2340,1,0,0,0,2340,2342,1,0,0,0,2341, - 2337,1,0,0,0,2342,2345,1,0,0,0,2343,2341,1,0,0,0,2343,2344,1,0,0,0,2344, - 2346,1,0,0,0,2345,2343,1,0,0,0,2346,2351,3,266,133,0,2347,2349,5,177, - 0,0,2348,2347,1,0,0,0,2348,2349,1,0,0,0,2349,2350,1,0,0,0,2350,2352,5, - 158,0,0,2351,2348,1,0,0,0,2351,2352,1,0,0,0,2352,265,1,0,0,0,2353,2361, - 3,276,138,0,2354,2362,3,270,135,0,2355,2357,3,268,134,0,2356,2355,1,0, - 0,0,2357,2358,1,0,0,0,2358,2356,1,0,0,0,2358,2359,1,0,0,0,2359,2362,1, - 0,0,0,2360,2362,3,274,137,0,2361,2354,1,0,0,0,2361,2356,1,0,0,0,2361, - 2360,1,0,0,0,2361,2362,1,0,0,0,2362,267,1,0,0,0,2363,2364,5,177,0,0,2364, - 2366,5,96,0,0,2365,2367,5,177,0,0,2366,2365,1,0,0,0,2366,2367,1,0,0,0, - 2367,2368,1,0,0,0,2368,2383,3,276,138,0,2369,2370,5,7,0,0,2370,2371,3, - 232,116,0,2371,2372,5,8,0,0,2372,2383,1,0,0,0,2373,2375,5,7,0,0,2374, - 2376,3,232,116,0,2375,2374,1,0,0,0,2375,2376,1,0,0,0,2376,2377,1,0,0, - 0,2377,2379,5,159,0,0,2378,2380,3,232,116,0,2379,2378,1,0,0,0,2379,2380, - 1,0,0,0,2380,2381,1,0,0,0,2381,2383,5,8,0,0,2382,2363,1,0,0,0,2382,2369, - 1,0,0,0,2382,2373,1,0,0,0,2383,269,1,0,0,0,2384,2396,3,272,136,0,2385, - 2386,5,177,0,0,2386,2387,5,134,0,0,2387,2388,5,177,0,0,2388,2396,5,147, - 0,0,2389,2390,5,177,0,0,2390,2391,5,83,0,0,2391,2392,5,177,0,0,2392,2396, - 5,147,0,0,2393,2394,5,177,0,0,2394,2396,5,67,0,0,2395,2384,1,0,0,0,2395, - 2385,1,0,0,0,2395,2389,1,0,0,0,2395,2393,1,0,0,0,2396,2398,1,0,0,0,2397, - 2399,5,177,0,0,2398,2397,1,0,0,0,2398,2399,1,0,0,0,2399,2400,1,0,0,0, - 2400,2401,3,276,138,0,2401,271,1,0,0,0,2402,2404,5,177,0,0,2403,2402, - 1,0,0,0,2403,2404,1,0,0,0,2404,2405,1,0,0,0,2405,2406,5,26,0,0,2406,273, - 1,0,0,0,2407,2408,5,177,0,0,2408,2409,5,99,0,0,2409,2410,5,177,0,0,2410, - 2418,5,115,0,0,2411,2412,5,177,0,0,2412,2413,5,99,0,0,2413,2414,5,177, - 0,0,2414,2415,5,113,0,0,2415,2416,5,177,0,0,2416,2418,5,115,0,0,2417, - 2407,1,0,0,0,2417,2411,1,0,0,0,2418,275,1,0,0,0,2419,2426,3,278,139,0, - 2420,2422,5,177,0,0,2421,2420,1,0,0,0,2421,2422,1,0,0,0,2422,2423,1,0, - 0,0,2423,2425,3,314,157,0,2424,2421,1,0,0,0,2425,2428,1,0,0,0,2426,2424, - 1,0,0,0,2426,2427,1,0,0,0,2427,277,1,0,0,0,2428,2426,1,0,0,0,2429,2439, - 3,286,143,0,2430,2439,3,324,162,0,2431,2439,3,316,158,0,2432,2439,3,298, - 149,0,2433,2439,3,300,150,0,2434,2439,3,310,155,0,2435,2439,3,312,156, - 0,2436,2439,3,320,160,0,2437,2439,3,280,140,0,2438,2429,1,0,0,0,2438, - 2430,1,0,0,0,2438,2431,1,0,0,0,2438,2432,1,0,0,0,2438,2433,1,0,0,0,2438, - 2434,1,0,0,0,2438,2435,1,0,0,0,2438,2436,1,0,0,0,2438,2437,1,0,0,0,2439, - 279,1,0,0,0,2440,2442,5,50,0,0,2441,2443,5,177,0,0,2442,2441,1,0,0,0, - 2442,2443,1,0,0,0,2443,2444,1,0,0,0,2444,2446,5,2,0,0,2445,2447,5,177, - 0,0,2446,2445,1,0,0,0,2446,2447,1,0,0,0,2447,2448,1,0,0,0,2448,2450,3, - 282,141,0,2449,2451,5,177,0,0,2450,2449,1,0,0,0,2450,2451,1,0,0,0,2451, - 2452,1,0,0,0,2452,2453,5,3,0,0,2453,2497,1,0,0,0,2454,2456,5,48,0,0,2455, - 2457,5,177,0,0,2456,2455,1,0,0,0,2456,2457,1,0,0,0,2457,2458,1,0,0,0, - 2458,2460,5,2,0,0,2459,2461,5,177,0,0,2460,2459,1,0,0,0,2460,2461,1,0, - 0,0,2461,2462,1,0,0,0,2462,2464,3,282,141,0,2463,2465,5,177,0,0,2464, - 2463,1,0,0,0,2464,2465,1,0,0,0,2465,2466,1,0,0,0,2466,2467,5,3,0,0,2467, - 2497,1,0,0,0,2468,2470,5,114,0,0,2469,2471,5,177,0,0,2470,2469,1,0,0, - 0,2470,2471,1,0,0,0,2471,2472,1,0,0,0,2472,2474,5,2,0,0,2473,2475,5,177, - 0,0,2474,2473,1,0,0,0,2474,2475,1,0,0,0,2475,2476,1,0,0,0,2476,2478,3, - 282,141,0,2477,2479,5,177,0,0,2478,2477,1,0,0,0,2478,2479,1,0,0,0,2479, - 2480,1,0,0,0,2480,2481,5,3,0,0,2481,2497,1,0,0,0,2482,2484,5,151,0,0, - 2483,2485,5,177,0,0,2484,2483,1,0,0,0,2484,2485,1,0,0,0,2485,2486,1,0, - 0,0,2486,2488,5,2,0,0,2487,2489,5,177,0,0,2488,2487,1,0,0,0,2488,2489, - 1,0,0,0,2489,2490,1,0,0,0,2490,2492,3,282,141,0,2491,2493,5,177,0,0,2492, - 2491,1,0,0,0,2492,2493,1,0,0,0,2493,2494,1,0,0,0,2494,2495,5,3,0,0,2495, - 2497,1,0,0,0,2496,2440,1,0,0,0,2496,2454,1,0,0,0,2496,2468,1,0,0,0,2496, - 2482,1,0,0,0,2497,281,1,0,0,0,2498,2499,3,284,142,0,2499,2500,5,177,0, - 0,2500,2501,3,188,94,0,2501,283,1,0,0,0,2502,2503,3,320,160,0,2503,2504, - 5,177,0,0,2504,2505,5,96,0,0,2505,2506,5,177,0,0,2506,2507,3,232,116, - 0,2507,285,1,0,0,0,2508,2515,3,322,161,0,2509,2515,5,162,0,0,2510,2515, - 3,288,144,0,2511,2515,5,115,0,0,2512,2515,3,290,145,0,2513,2515,3,294, - 147,0,2514,2508,1,0,0,0,2514,2509,1,0,0,0,2514,2510,1,0,0,0,2514,2511, - 1,0,0,0,2514,2512,1,0,0,0,2514,2513,1,0,0,0,2515,287,1,0,0,0,2516,2517, - 7,6,0,0,2517,289,1,0,0,0,2518,2520,5,7,0,0,2519,2521,5,177,0,0,2520,2519, - 1,0,0,0,2520,2521,1,0,0,0,2521,2535,1,0,0,0,2522,2524,3,232,116,0,2523, - 2525,5,177,0,0,2524,2523,1,0,0,0,2524,2525,1,0,0,0,2525,2532,1,0,0,0, - 2526,2528,3,292,146,0,2527,2529,5,177,0,0,2528,2527,1,0,0,0,2528,2529, - 1,0,0,0,2529,2531,1,0,0,0,2530,2526,1,0,0,0,2531,2534,1,0,0,0,2532,2530, - 1,0,0,0,2532,2533,1,0,0,0,2533,2536,1,0,0,0,2534,2532,1,0,0,0,2535,2522, - 1,0,0,0,2535,2536,1,0,0,0,2536,2537,1,0,0,0,2537,2538,5,8,0,0,2538,291, - 1,0,0,0,2539,2541,5,4,0,0,2540,2542,5,177,0,0,2541,2540,1,0,0,0,2541, - 2542,1,0,0,0,2542,2544,1,0,0,0,2543,2545,3,232,116,0,2544,2543,1,0,0, - 0,2544,2545,1,0,0,0,2545,293,1,0,0,0,2546,2548,5,9,0,0,2547,2549,5,177, - 0,0,2548,2547,1,0,0,0,2548,2549,1,0,0,0,2549,2550,1,0,0,0,2550,2552,3, - 296,148,0,2551,2553,5,177,0,0,2552,2551,1,0,0,0,2552,2553,1,0,0,0,2553, - 2564,1,0,0,0,2554,2556,5,4,0,0,2555,2557,5,177,0,0,2556,2555,1,0,0,0, - 2556,2557,1,0,0,0,2557,2558,1,0,0,0,2558,2560,3,296,148,0,2559,2561,5, - 177,0,0,2560,2559,1,0,0,0,2560,2561,1,0,0,0,2561,2563,1,0,0,0,2562,2554, - 1,0,0,0,2563,2566,1,0,0,0,2564,2562,1,0,0,0,2564,2565,1,0,0,0,2565,2567, - 1,0,0,0,2566,2564,1,0,0,0,2567,2568,5,10,0,0,2568,295,1,0,0,0,2569,2572, - 3,336,168,0,2570,2572,5,162,0,0,2571,2569,1,0,0,0,2571,2570,1,0,0,0,2572, - 2574,1,0,0,0,2573,2575,5,177,0,0,2574,2573,1,0,0,0,2574,2575,1,0,0,0, - 2575,2576,1,0,0,0,2576,2578,5,159,0,0,2577,2579,5,177,0,0,2578,2577,1, - 0,0,0,2578,2579,1,0,0,0,2579,2580,1,0,0,0,2580,2581,3,232,116,0,2581, - 297,1,0,0,0,2582,2584,5,2,0,0,2583,2585,5,177,0,0,2584,2583,1,0,0,0,2584, - 2585,1,0,0,0,2585,2586,1,0,0,0,2586,2588,3,232,116,0,2587,2589,5,177, - 0,0,2588,2587,1,0,0,0,2588,2589,1,0,0,0,2589,2590,1,0,0,0,2590,2591,5, - 3,0,0,2591,299,1,0,0,0,2592,2594,5,69,0,0,2593,2595,5,177,0,0,2594,2593, - 1,0,0,0,2594,2595,1,0,0,0,2595,2596,1,0,0,0,2596,2598,5,2,0,0,2597,2599, - 5,177,0,0,2598,2597,1,0,0,0,2598,2599,1,0,0,0,2599,2600,1,0,0,0,2600, - 2602,5,154,0,0,2601,2603,5,177,0,0,2602,2601,1,0,0,0,2602,2603,1,0,0, - 0,2603,2604,1,0,0,0,2604,2670,5,3,0,0,2605,2607,5,61,0,0,2606,2608,5, - 177,0,0,2607,2606,1,0,0,0,2607,2608,1,0,0,0,2608,2609,1,0,0,0,2609,2611, - 5,2,0,0,2610,2612,5,177,0,0,2611,2610,1,0,0,0,2611,2612,1,0,0,0,2612, - 2613,1,0,0,0,2613,2615,3,304,152,0,2614,2616,5,177,0,0,2615,2614,1,0, - 0,0,2615,2616,1,0,0,0,2616,2627,1,0,0,0,2617,2619,5,53,0,0,2618,2620, - 5,177,0,0,2619,2618,1,0,0,0,2619,2620,1,0,0,0,2620,2621,1,0,0,0,2621, - 2628,3,96,48,0,2622,2624,5,4,0,0,2623,2625,5,177,0,0,2624,2623,1,0,0, - 0,2624,2625,1,0,0,0,2625,2626,1,0,0,0,2626,2628,3,304,152,0,2627,2617, - 1,0,0,0,2627,2622,1,0,0,0,2628,2630,1,0,0,0,2629,2631,5,177,0,0,2630, - 2629,1,0,0,0,2630,2631,1,0,0,0,2631,2632,1,0,0,0,2632,2633,5,3,0,0,2633, - 2670,1,0,0,0,2634,2636,3,302,151,0,2635,2637,5,177,0,0,2636,2635,1,0, - 0,0,2636,2637,1,0,0,0,2637,2638,1,0,0,0,2638,2640,5,2,0,0,2639,2641,5, - 177,0,0,2640,2639,1,0,0,0,2640,2641,1,0,0,0,2641,2646,1,0,0,0,2642,2644, - 5,79,0,0,2643,2645,5,177,0,0,2644,2643,1,0,0,0,2644,2645,1,0,0,0,2645, - 2647,1,0,0,0,2646,2642,1,0,0,0,2646,2647,1,0,0,0,2647,2665,1,0,0,0,2648, - 2650,3,304,152,0,2649,2651,5,177,0,0,2650,2649,1,0,0,0,2650,2651,1,0, - 0,0,2651,2662,1,0,0,0,2652,2654,5,4,0,0,2653,2655,5,177,0,0,2654,2653, - 1,0,0,0,2654,2655,1,0,0,0,2655,2656,1,0,0,0,2656,2658,3,304,152,0,2657, - 2659,5,177,0,0,2658,2657,1,0,0,0,2658,2659,1,0,0,0,2659,2661,1,0,0,0, - 2660,2652,1,0,0,0,2661,2664,1,0,0,0,2662,2660,1,0,0,0,2662,2663,1,0,0, - 0,2663,2666,1,0,0,0,2664,2662,1,0,0,0,2665,2648,1,0,0,0,2665,2666,1,0, - 0,0,2666,2667,1,0,0,0,2667,2668,5,3,0,0,2668,2670,1,0,0,0,2669,2592,1, - 0,0,0,2669,2605,1,0,0,0,2669,2634,1,0,0,0,2670,301,1,0,0,0,2671,2672, - 3,336,168,0,2672,303,1,0,0,0,2673,2675,3,336,168,0,2674,2676,5,177,0, - 0,2675,2674,1,0,0,0,2675,2676,1,0,0,0,2676,2677,1,0,0,0,2677,2678,5,159, - 0,0,2678,2680,5,6,0,0,2679,2681,5,177,0,0,2680,2679,1,0,0,0,2680,2681, - 1,0,0,0,2681,2683,1,0,0,0,2682,2673,1,0,0,0,2682,2683,1,0,0,0,2683,2684, - 1,0,0,0,2684,2687,3,232,116,0,2685,2687,3,306,153,0,2686,2682,1,0,0,0, - 2686,2685,1,0,0,0,2687,305,1,0,0,0,2688,2690,3,308,154,0,2689,2691,5, - 177,0,0,2690,2689,1,0,0,0,2690,2691,1,0,0,0,2691,2692,1,0,0,0,2692,2693, - 5,157,0,0,2693,2695,5,17,0,0,2694,2696,5,177,0,0,2695,2694,1,0,0,0,2695, - 2696,1,0,0,0,2696,2697,1,0,0,0,2697,2699,3,232,116,0,2698,2700,5,177, - 0,0,2699,2698,1,0,0,0,2699,2700,1,0,0,0,2700,307,1,0,0,0,2701,2726,3, - 336,168,0,2702,2704,5,2,0,0,2703,2705,5,177,0,0,2704,2703,1,0,0,0,2704, - 2705,1,0,0,0,2705,2706,1,0,0,0,2706,2708,3,336,168,0,2707,2709,5,177, - 0,0,2708,2707,1,0,0,0,2708,2709,1,0,0,0,2709,2720,1,0,0,0,2710,2712,5, - 4,0,0,2711,2713,5,177,0,0,2712,2711,1,0,0,0,2712,2713,1,0,0,0,2713,2714, - 1,0,0,0,2714,2716,3,336,168,0,2715,2717,5,177,0,0,2716,2715,1,0,0,0,2716, - 2717,1,0,0,0,2717,2719,1,0,0,0,2718,2710,1,0,0,0,2719,2722,1,0,0,0,2720, - 2718,1,0,0,0,2720,2721,1,0,0,0,2721,2723,1,0,0,0,2722,2720,1,0,0,0,2723, - 2724,5,3,0,0,2724,2726,1,0,0,0,2725,2701,1,0,0,0,2725,2702,1,0,0,0,2726, - 309,1,0,0,0,2727,2732,3,198,99,0,2728,2730,5,177,0,0,2729,2728,1,0,0, - 0,2729,2730,1,0,0,0,2730,2731,1,0,0,0,2731,2733,3,200,100,0,2732,2729, - 1,0,0,0,2733,2734,1,0,0,0,2734,2732,1,0,0,0,2734,2735,1,0,0,0,2735,311, - 1,0,0,0,2736,2738,7,7,0,0,2737,2739,5,177,0,0,2738,2737,1,0,0,0,2738, - 2739,1,0,0,0,2739,2740,1,0,0,0,2740,2742,5,9,0,0,2741,2743,5,177,0,0, - 2742,2741,1,0,0,0,2742,2743,1,0,0,0,2743,2744,1,0,0,0,2744,2746,5,106, - 0,0,2745,2747,5,177,0,0,2746,2745,1,0,0,0,2746,2747,1,0,0,0,2747,2748, - 1,0,0,0,2748,2753,3,190,95,0,2749,2751,5,177,0,0,2750,2749,1,0,0,0,2750, - 2751,1,0,0,0,2751,2752,1,0,0,0,2752,2754,3,188,94,0,2753,2750,1,0,0,0, - 2753,2754,1,0,0,0,2754,2759,1,0,0,0,2755,2757,5,177,0,0,2756,2755,1,0, - 0,0,2756,2757,1,0,0,0,2757,2758,1,0,0,0,2758,2760,3,152,76,0,2759,2756, - 1,0,0,0,2759,2760,1,0,0,0,2760,2762,1,0,0,0,2761,2763,5,177,0,0,2762, - 2761,1,0,0,0,2762,2763,1,0,0,0,2763,2764,1,0,0,0,2764,2765,5,10,0,0,2765, - 313,1,0,0,0,2766,2768,5,5,0,0,2767,2769,5,177,0,0,2768,2767,1,0,0,0,2768, - 2769,1,0,0,0,2769,2772,1,0,0,0,2770,2773,3,328,164,0,2771,2773,5,154, - 0,0,2772,2770,1,0,0,0,2772,2771,1,0,0,0,2773,315,1,0,0,0,2774,2779,5, - 60,0,0,2775,2777,5,177,0,0,2776,2775,1,0,0,0,2776,2777,1,0,0,0,2777,2778, - 1,0,0,0,2778,2780,3,318,159,0,2779,2776,1,0,0,0,2780,2781,1,0,0,0,2781, - 2779,1,0,0,0,2781,2782,1,0,0,0,2782,2797,1,0,0,0,2783,2785,5,60,0,0,2784, - 2786,5,177,0,0,2785,2784,1,0,0,0,2785,2786,1,0,0,0,2786,2787,1,0,0,0, - 2787,2792,3,232,116,0,2788,2790,5,177,0,0,2789,2788,1,0,0,0,2789,2790, - 1,0,0,0,2790,2791,1,0,0,0,2791,2793,3,318,159,0,2792,2789,1,0,0,0,2793, - 2794,1,0,0,0,2794,2792,1,0,0,0,2794,2795,1,0,0,0,2795,2797,1,0,0,0,2796, - 2774,1,0,0,0,2796,2783,1,0,0,0,2797,2806,1,0,0,0,2798,2800,5,177,0,0, - 2799,2798,1,0,0,0,2799,2800,1,0,0,0,2800,2801,1,0,0,0,2801,2803,5,81, - 0,0,2802,2804,5,177,0,0,2803,2802,1,0,0,0,2803,2804,1,0,0,0,2804,2805, - 1,0,0,0,2805,2807,3,232,116,0,2806,2799,1,0,0,0,2806,2807,1,0,0,0,2807, - 2809,1,0,0,0,2808,2810,5,177,0,0,2809,2808,1,0,0,0,2809,2810,1,0,0,0, - 2810,2811,1,0,0,0,2811,2812,5,82,0,0,2812,317,1,0,0,0,2813,2815,5,145, - 0,0,2814,2816,5,177,0,0,2815,2814,1,0,0,0,2815,2816,1,0,0,0,2816,2817, - 1,0,0,0,2817,2819,3,232,116,0,2818,2820,5,177,0,0,2819,2818,1,0,0,0,2819, - 2820,1,0,0,0,2820,2821,1,0,0,0,2821,2823,5,136,0,0,2822,2824,5,177,0, - 0,2823,2822,1,0,0,0,2823,2824,1,0,0,0,2824,2825,1,0,0,0,2825,2826,3,232, - 116,0,2826,319,1,0,0,0,2827,2828,3,336,168,0,2828,321,1,0,0,0,2829,2832, - 3,332,166,0,2830,2832,3,330,165,0,2831,2829,1,0,0,0,2831,2830,1,0,0,0, - 2832,323,1,0,0,0,2833,2836,5,27,0,0,2834,2837,3,336,168,0,2835,2837,5, - 164,0,0,2836,2834,1,0,0,0,2836,2835,1,0,0,0,2837,325,1,0,0,0,2838,2840, - 3,278,139,0,2839,2841,5,177,0,0,2840,2839,1,0,0,0,2840,2841,1,0,0,0,2841, - 2842,1,0,0,0,2842,2843,3,314,157,0,2843,327,1,0,0,0,2844,2845,3,334,167, - 0,2845,329,1,0,0,0,2846,2847,5,164,0,0,2847,331,1,0,0,0,2848,2849,7,8, - 0,0,2849,333,1,0,0,0,2850,2851,3,336,168,0,2851,335,1,0,0,0,2852,2858, - 5,173,0,0,2853,2854,5,176,0,0,2854,2858,6,168,-1,0,2855,2858,5,165,0, - 0,2856,2858,3,338,169,0,2857,2852,1,0,0,0,2857,2853,1,0,0,0,2857,2855, - 1,0,0,0,2857,2856,1,0,0,0,2858,337,1,0,0,0,2859,2860,7,9,0,0,2860,339, - 1,0,0,0,2861,2862,7,10,0,0,2862,341,1,0,0,0,2863,2864,7,11,0,0,2864,343, - 1,0,0,0,2865,2866,7,12,0,0,2866,345,1,0,0,0,497,348,352,357,361,366,369, + 8,48,1,48,1,48,1,48,1,48,3,48,1187,8,48,1,48,1,48,3,48,1191,8,48,1,48, + 1,48,3,48,1195,8,48,1,48,1,48,3,48,1199,8,48,1,48,1,48,5,48,1203,8,48, + 10,48,12,48,1206,9,48,1,49,1,49,5,49,1210,8,49,10,49,12,49,1213,9,49, + 1,50,1,50,3,50,1217,8,50,1,50,1,50,1,51,1,51,3,51,1223,8,51,1,52,1,52, + 1,52,3,52,1228,8,52,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54, + 1,54,1,54,1,54,1,54,1,54,3,54,1245,8,54,1,55,1,55,1,55,3,55,1250,8,55, + 1,56,1,56,1,56,1,56,3,56,1256,8,56,1,56,1,56,3,56,1260,8,56,1,57,1,57, + 1,57,1,57,1,57,1,57,1,57,3,57,1269,8,57,1,58,1,58,1,58,1,58,3,58,1275, + 8,58,1,58,1,58,3,58,1279,8,58,1,59,1,59,1,60,1,60,3,60,1285,8,60,1,60, + 5,60,1288,8,60,10,60,12,60,1291,9,60,1,60,1,60,3,60,1295,8,60,4,60,1297, + 8,60,11,60,12,60,1298,1,60,1,60,1,60,1,60,3,60,1305,8,60,1,61,1,61,1, + 61,1,61,3,61,1311,8,61,1,61,1,61,1,61,3,61,1316,8,61,1,61,3,61,1319,8, + 61,1,62,1,62,3,62,1323,8,62,5,62,1325,8,62,10,62,12,62,1328,9,62,1,62, + 1,62,1,62,3,62,1333,8,62,1,63,1,63,3,63,1337,8,63,1,63,1,63,3,63,1341, + 8,63,1,63,1,63,3,63,1345,8,63,1,63,5,63,1348,8,63,10,63,12,63,1351,9, + 63,1,63,3,63,1354,8,63,1,63,1,63,1,64,1,64,3,64,1360,8,64,1,64,1,64,3, + 64,1364,8,64,1,64,1,64,3,64,1368,8,64,1,64,1,64,3,64,1372,8,64,1,64,5, + 64,1375,8,64,10,64,12,64,1378,9,64,1,64,3,64,1381,8,64,1,64,1,64,1,64, + 1,64,3,64,1387,8,64,1,65,1,65,3,65,1391,8,65,1,66,1,66,3,66,1395,8,66, + 5,66,1397,8,66,10,66,12,66,1400,9,66,1,66,1,66,1,66,3,66,1405,8,66,5, + 66,1407,8,66,10,66,12,66,1410,9,66,1,66,1,66,3,66,1414,8,66,1,66,5,66, + 1417,8,66,10,66,12,66,1420,9,66,1,66,3,66,1423,8,66,1,66,3,66,1426,8, + 66,3,66,1428,8,66,1,67,1,67,3,67,1432,8,67,4,67,1434,8,67,11,67,12,67, + 1435,1,67,1,67,1,68,1,68,3,68,1442,8,68,5,68,1444,8,68,10,68,12,68,1447, + 9,68,1,68,1,68,3,68,1451,8,68,5,68,1453,8,68,10,68,12,68,1456,9,68,1, + 68,1,68,1,69,1,69,1,69,1,69,3,69,1464,8,69,1,70,1,70,1,70,1,70,3,70,1470, + 8,70,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1478,8,71,1,71,1,71,3,71,1482, + 8,71,1,71,1,71,3,71,1486,8,71,1,71,1,71,3,71,1490,8,71,1,71,1,71,1,71, + 1,71,1,71,3,71,1497,8,71,1,71,1,71,3,71,1501,8,71,1,71,1,71,3,71,1505, + 8,71,1,71,1,71,3,71,1509,8,71,1,71,3,71,1512,8,71,1,71,3,71,1515,8,71, + 1,72,1,72,1,72,1,72,1,72,3,72,1522,8,72,1,72,1,72,1,73,1,73,3,73,1528, + 8,73,1,73,1,73,3,73,1532,8,73,1,73,5,73,1535,8,73,10,73,12,73,1538,9, + 73,1,74,1,74,1,74,1,74,3,74,1544,8,74,1,74,3,74,1547,8,74,1,74,3,74,1550, + 8,74,1,74,1,74,1,74,3,74,1555,8,74,1,75,1,75,3,75,1559,8,75,1,75,1,75, + 3,75,1563,8,75,1,75,1,75,1,75,3,75,1568,8,75,1,75,1,75,3,75,1572,8,75, + 1,76,1,76,1,76,1,76,1,77,1,77,1,77,3,77,1581,8,77,1,77,1,77,3,77,1585, + 8,77,1,77,1,77,1,77,3,77,1590,8,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77, + 1,77,1,77,1,77,4,77,1602,8,77,11,77,12,77,1603,5,77,1606,8,77,10,77,12, + 77,1609,9,77,1,78,1,78,3,78,1613,8,78,1,78,1,78,1,78,1,78,1,78,1,78,1, + 79,1,79,3,79,1623,8,79,1,79,1,79,1,80,1,80,3,80,1629,8,80,1,80,1,80,1, + 80,5,80,1634,8,80,10,80,12,80,1637,9,80,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,1,81,1,81,3,81,1649,8,81,1,82,1,82,3,82,1653,8,82,1,82,1,82, + 3,82,1657,8,82,1,82,1,82,3,82,1661,8,82,1,82,5,82,1664,8,82,10,82,12, + 82,1667,9,82,1,83,1,83,3,83,1671,8,83,1,83,1,83,3,83,1675,8,83,1,83,1, + 83,1,84,1,84,3,84,1681,8,84,1,84,1,84,3,84,1685,8,84,1,84,1,84,3,84,1689, + 8,84,1,84,1,84,3,84,1693,8,84,1,84,5,84,1696,8,84,10,84,12,84,1699,9, + 84,1,85,1,85,1,85,3,85,1704,8,85,1,85,3,85,1707,8,85,1,86,1,86,1,86,1, + 87,3,87,1713,8,87,1,87,3,87,1716,8,87,1,87,1,87,1,87,1,87,3,87,1722,8, + 87,1,87,1,87,3,87,1726,8,87,1,87,1,87,3,87,1730,8,87,1,88,1,88,3,88,1734, + 8,88,1,88,1,88,3,88,1738,8,88,1,88,5,88,1741,8,88,10,88,12,88,1744,9, + 88,1,88,1,88,3,88,1748,8,88,1,88,1,88,3,88,1752,8,88,1,88,5,88,1755,8, + 88,10,88,12,88,1758,9,88,3,88,1760,8,88,1,89,1,89,1,89,1,89,1,89,1,89, + 1,89,3,89,1769,8,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,1778,8,90, + 1,90,5,90,1781,8,90,10,90,12,90,1784,9,90,1,91,1,91,1,91,1,91,1,92,1, + 92,1,92,1,92,1,93,1,93,3,93,1796,8,93,1,93,3,93,1799,8,93,1,94,1,94,1, + 94,1,94,1,95,1,95,3,95,1807,8,95,1,95,1,95,3,95,1811,8,95,1,95,5,95,1814, + 8,95,10,95,12,95,1817,9,95,1,96,1,96,3,96,1821,8,96,1,96,1,96,3,96,1825, + 8,96,1,96,1,96,1,96,3,96,1830,8,96,1,97,1,97,1,98,1,98,3,98,1836,8,98, + 1,98,5,98,1839,8,98,10,98,12,98,1842,9,98,1,98,1,98,1,98,1,98,3,98,1848, + 8,98,1,99,1,99,3,99,1852,8,99,1,99,1,99,3,99,1856,8,99,3,99,1858,8,99, + 1,99,1,99,3,99,1862,8,99,3,99,1864,8,99,1,99,1,99,3,99,1868,8,99,3,99, + 1870,8,99,1,99,1,99,1,100,1,100,3,100,1876,8,100,1,100,1,100,1,101,1, + 101,3,101,1882,8,101,1,101,1,101,3,101,1886,8,101,1,101,3,101,1889,8, + 101,1,101,3,101,1892,8,101,1,101,1,101,1,101,1,101,3,101,1898,8,101,1, + 101,3,101,1901,8,101,1,101,3,101,1904,8,101,1,101,1,101,3,101,1908,8, + 101,1,101,1,101,1,101,1,101,3,101,1914,8,101,1,101,3,101,1917,8,101,1, + 101,3,101,1920,8,101,1,101,1,101,3,101,1924,8,101,1,102,1,102,3,102,1928, + 8,102,1,102,1,102,3,102,1932,8,102,3,102,1934,8,102,1,102,1,102,3,102, + 1938,8,102,3,102,1940,8,102,1,102,1,102,3,102,1944,8,102,3,102,1946,8, + 102,1,102,1,102,3,102,1950,8,102,3,102,1952,8,102,1,102,1,102,1,103,1, + 103,3,103,1958,8,103,1,103,1,103,3,103,1962,8,103,1,103,1,103,3,103,1966, + 8,103,1,103,1,103,3,103,1970,8,103,1,103,1,103,3,103,1974,8,103,1,103, + 1,103,3,103,1978,8,103,1,103,1,103,3,103,1982,8,103,1,103,1,103,3,103, + 1986,8,103,5,103,1988,8,103,10,103,12,103,1991,9,103,3,103,1993,8,103, + 1,103,1,103,1,104,1,104,3,104,1999,8,104,1,104,1,104,3,104,2003,8,104, + 1,104,1,104,3,104,2007,8,104,1,104,3,104,2010,8,104,1,104,5,104,2013, + 8,104,10,104,12,104,2016,9,104,1,105,1,105,3,105,2020,8,105,1,105,5,105, + 2023,8,105,10,105,12,105,2026,9,105,1,106,1,106,3,106,2030,8,106,1,106, + 1,106,1,107,1,107,3,107,2036,8,107,1,107,3,107,2039,8,107,1,107,3,107, + 2042,8,107,1,107,3,107,2045,8,107,1,107,3,107,2048,8,107,1,107,3,107, + 2051,8,107,1,108,1,108,3,108,2055,8,108,1,108,1,108,3,108,2059,8,108, + 1,108,1,108,3,108,2063,8,108,1,108,1,108,3,108,2067,8,108,1,108,1,108, + 1,108,1,108,1,108,1,108,1,108,1,108,3,108,2077,8,108,1,109,3,109,2080, + 8,109,1,109,3,109,2083,8,109,1,109,1,109,3,109,2087,8,109,1,109,3,109, + 2090,8,109,1,109,3,109,2093,8,109,1,110,1,110,3,110,2097,8,110,1,110, + 1,110,3,110,2101,8,110,1,110,1,110,3,110,2105,8,110,1,110,1,110,3,110, + 2109,8,110,1,110,1,110,3,110,2113,8,110,1,110,1,110,3,110,2117,8,110, + 3,110,2119,8,110,1,110,3,110,2122,8,110,1,110,1,110,3,110,2126,8,110, + 1,110,1,110,3,110,2130,8,110,1,110,1,110,3,110,2134,8,110,1,110,1,110, + 3,110,2138,8,110,3,110,2140,8,110,1,110,1,110,1,111,1,111,3,111,2146, + 8,111,1,111,3,111,2149,8,111,1,111,3,111,2152,8,111,1,111,1,111,1,112, + 1,112,1,113,1,113,1,114,1,114,1,115,1,115,1,116,1,116,1,117,1,117,1,117, + 1,117,1,117,5,117,2171,8,117,10,117,12,117,2174,9,117,1,118,1,118,1,118, + 1,118,1,118,5,118,2181,8,118,10,118,12,118,2184,9,118,1,119,1,119,1,119, + 1,119,1,119,5,119,2191,8,119,10,119,12,119,2194,9,119,1,120,1,120,3,120, + 2198,8,120,5,120,2200,8,120,10,120,12,120,2203,9,120,1,120,1,120,1,121, + 1,121,3,121,2209,8,121,1,121,1,121,3,121,2213,8,121,1,121,1,121,3,121, + 2217,8,121,1,121,1,121,3,121,2221,8,121,1,121,1,121,3,121,2225,8,121, + 1,121,1,121,1,121,1,121,1,121,1,121,3,121,2233,8,121,1,121,1,121,3,121, + 2237,8,121,1,121,1,121,3,121,2241,8,121,1,121,1,121,3,121,2245,8,121, + 1,121,1,121,4,121,2249,8,121,11,121,12,121,2250,1,121,1,121,3,121,2255, + 8,121,1,122,1,122,1,123,1,123,3,123,2261,8,123,1,123,1,123,3,123,2265, + 8,123,1,123,5,123,2268,8,123,10,123,12,123,2271,9,123,1,124,1,124,3,124, + 2275,8,124,1,124,1,124,3,124,2279,8,124,1,124,5,124,2282,8,124,10,124, + 12,124,2285,9,124,1,125,1,125,3,125,2289,8,125,1,125,1,125,3,125,2293, + 8,125,1,125,1,125,5,125,2297,8,125,10,125,12,125,2300,9,125,1,126,1,126, + 1,127,1,127,3,127,2306,8,127,1,127,1,127,3,127,2310,8,127,1,127,1,127, + 5,127,2314,8,127,10,127,12,127,2317,9,127,1,128,1,128,1,129,1,129,3,129, + 2323,8,129,1,129,1,129,3,129,2327,8,129,1,129,1,129,5,129,2331,8,129, + 10,129,12,129,2334,9,129,1,130,1,130,1,131,1,131,3,131,2340,8,131,1,131, + 1,131,3,131,2344,8,131,1,131,5,131,2347,8,131,10,131,12,131,2350,9,131, + 1,132,1,132,3,132,2354,8,132,5,132,2356,8,132,10,132,12,132,2359,9,132, + 1,132,1,132,3,132,2363,8,132,1,132,3,132,2366,8,132,1,133,1,133,1,133, + 4,133,2371,8,133,11,133,12,133,2372,1,133,3,133,2376,8,133,1,134,1,134, + 1,134,3,134,2381,8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134, + 2390,8,134,1,134,1,134,3,134,2394,8,134,1,134,3,134,2397,8,134,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,3,135,2410, + 8,135,1,135,3,135,2413,8,135,1,135,1,135,1,136,3,136,2418,8,136,1,136, + 1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,3,137, + 2432,8,137,1,138,1,138,3,138,2436,8,138,1,138,5,138,2439,8,138,10,138, + 12,138,2442,9,138,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139, + 3,139,2453,8,139,1,140,1,140,3,140,2457,8,140,1,140,1,140,3,140,2461, + 8,140,1,140,1,140,3,140,2465,8,140,1,140,1,140,1,140,1,140,3,140,2471, + 8,140,1,140,1,140,3,140,2475,8,140,1,140,1,140,3,140,2479,8,140,1,140, + 1,140,1,140,1,140,3,140,2485,8,140,1,140,1,140,3,140,2489,8,140,1,140, + 1,140,3,140,2493,8,140,1,140,1,140,1,140,1,140,3,140,2499,8,140,1,140, + 1,140,3,140,2503,8,140,1,140,1,140,3,140,2507,8,140,1,140,1,140,3,140, + 2511,8,140,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142, + 1,143,1,143,1,143,1,143,1,143,1,143,3,143,2529,8,143,1,144,1,144,1,145, + 1,145,3,145,2535,8,145,1,145,1,145,3,145,2539,8,145,1,145,1,145,3,145, + 2543,8,145,5,145,2545,8,145,10,145,12,145,2548,9,145,3,145,2550,8,145, + 1,145,1,145,1,146,1,146,3,146,2556,8,146,1,146,3,146,2559,8,146,1,147, + 1,147,3,147,2563,8,147,1,147,1,147,3,147,2567,8,147,1,147,1,147,3,147, + 2571,8,147,1,147,1,147,3,147,2575,8,147,5,147,2577,8,147,10,147,12,147, + 2580,9,147,1,147,1,147,1,148,1,148,3,148,2586,8,148,1,148,3,148,2589, + 8,148,1,148,1,148,3,148,2593,8,148,1,148,1,148,1,149,1,149,3,149,2599, + 8,149,1,149,1,149,3,149,2603,8,149,1,149,1,149,1,150,1,150,3,150,2609, + 8,150,1,150,1,150,3,150,2613,8,150,1,150,1,150,3,150,2617,8,150,1,150, + 1,150,1,150,3,150,2622,8,150,1,150,1,150,3,150,2626,8,150,1,150,1,150, + 3,150,2630,8,150,1,150,1,150,3,150,2634,8,150,1,150,1,150,1,150,3,150, + 2639,8,150,1,150,3,150,2642,8,150,1,150,3,150,2645,8,150,1,150,1,150, + 1,150,1,150,3,150,2651,8,150,1,150,1,150,3,150,2655,8,150,1,150,1,150, + 3,150,2659,8,150,3,150,2661,8,150,1,150,1,150,3,150,2665,8,150,1,150, + 1,150,3,150,2669,8,150,1,150,1,150,3,150,2673,8,150,5,150,2675,8,150, + 10,150,12,150,2678,9,150,3,150,2680,8,150,1,150,1,150,3,150,2684,8,150, + 1,151,1,151,1,152,1,152,3,152,2690,8,152,1,152,1,152,1,152,3,152,2695, + 8,152,3,152,2697,8,152,1,152,1,152,3,152,2701,8,152,1,153,1,153,3,153, + 2705,8,153,1,153,1,153,1,153,3,153,2710,8,153,1,153,1,153,3,153,2714, + 8,153,1,154,1,154,1,154,3,154,2719,8,154,1,154,1,154,3,154,2723,8,154, + 1,154,1,154,3,154,2727,8,154,1,154,1,154,3,154,2731,8,154,5,154,2733, + 8,154,10,154,12,154,2736,9,154,1,154,1,154,3,154,2740,8,154,1,155,1,155, + 3,155,2744,8,155,1,155,4,155,2747,8,155,11,155,12,155,2748,1,156,1,156, + 3,156,2753,8,156,1,156,1,156,3,156,2757,8,156,1,156,1,156,3,156,2761, + 8,156,1,156,1,156,3,156,2765,8,156,1,156,3,156,2768,8,156,1,156,3,156, + 2771,8,156,1,156,3,156,2774,8,156,1,156,3,156,2777,8,156,1,156,1,156, + 1,157,1,157,3,157,2783,8,157,1,157,1,157,3,157,2787,8,157,1,158,1,158, + 3,158,2791,8,158,1,158,4,158,2794,8,158,11,158,12,158,2795,1,158,1,158, + 3,158,2800,8,158,1,158,1,158,3,158,2804,8,158,1,158,4,158,2807,8,158, + 11,158,12,158,2808,3,158,2811,8,158,1,158,3,158,2814,8,158,1,158,1,158, + 3,158,2818,8,158,1,158,3,158,2821,8,158,1,158,3,158,2824,8,158,1,158, + 1,158,1,159,1,159,3,159,2830,8,159,1,159,1,159,3,159,2834,8,159,1,159, + 1,159,3,159,2838,8,159,1,159,1,159,1,160,1,160,1,161,1,161,3,161,2846, + 8,161,1,162,1,162,1,162,3,162,2851,8,162,1,163,1,163,3,163,2855,8,163, + 1,163,1,163,1,164,1,164,1,165,1,165,1,166,1,166,1,167,1,167,1,168,1,168, + 1,168,1,168,1,168,3,168,2872,8,168,1,169,1,169,1,170,1,170,1,171,1,171, + 1,172,1,172,1,172,0,2,96,154,173,0,2,4,6,8,10,12,14,16,18,20,22,24,26, + 28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72, + 74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114, + 116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150, + 152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186, + 188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222, + 224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258, + 260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294, + 296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330, + 332,334,336,338,340,342,344,0,13,2,0,130,130,135,135,2,0,54,55,76,77, + 2,0,6,6,14,18,1,0,20,21,2,0,22,22,158,158,2,0,23,24,155,155,1,0,161,162, + 2,0,69,69,84,84,1,0,172,173,28,0,49,49,51,51,53,53,56,59,62,62,64,65, + 67,69,71,72,75,75,78,78,80,80,85,88,90,90,94,95,97,97,99,99,101,104,106, + 109,111,112,123,128,130,131,133,133,137,137,139,140,144,144,148,148,152, + 153,156,156,2,0,15,15,28,31,2,0,17,17,32,35,2,0,36,46,158,158,3274,0, + 346,1,0,0,0,2,366,1,0,0,0,4,398,1,0,0,0,6,400,1,0,0,0,8,426,1,0,0,0,10, + 473,1,0,0,0,12,475,1,0,0,0,14,505,1,0,0,0,16,535,1,0,0,0,18,555,1,0,0, + 0,20,561,1,0,0,0,22,612,1,0,0,0,24,614,1,0,0,0,26,628,1,0,0,0,28,632, + 1,0,0,0,30,651,1,0,0,0,32,653,1,0,0,0,34,665,1,0,0,0,36,708,1,0,0,0,38, + 722,1,0,0,0,40,766,1,0,0,0,42,768,1,0,0,0,44,774,1,0,0,0,46,809,1,0,0, + 0,48,873,1,0,0,0,50,887,1,0,0,0,52,895,1,0,0,0,54,912,1,0,0,0,56,929, + 1,0,0,0,58,931,1,0,0,0,60,951,1,0,0,0,62,962,1,0,0,0,64,964,1,0,0,0,66, + 977,1,0,0,0,68,981,1,0,0,0,70,985,1,0,0,0,72,996,1,0,0,0,74,1008,1,0, + 0,0,76,1010,1,0,0,0,78,1024,1,0,0,0,80,1028,1,0,0,0,82,1037,1,0,0,0,84, + 1043,1,0,0,0,86,1051,1,0,0,0,88,1065,1,0,0,0,90,1069,1,0,0,0,92,1083, + 1,0,0,0,94,1094,1,0,0,0,96,1198,1,0,0,0,98,1207,1,0,0,0,100,1214,1,0, + 0,0,102,1222,1,0,0,0,104,1224,1,0,0,0,106,1229,1,0,0,0,108,1244,1,0,0, + 0,110,1249,1,0,0,0,112,1251,1,0,0,0,114,1261,1,0,0,0,116,1270,1,0,0,0, + 118,1280,1,0,0,0,120,1304,1,0,0,0,122,1318,1,0,0,0,124,1326,1,0,0,0,126, + 1334,1,0,0,0,128,1386,1,0,0,0,130,1390,1,0,0,0,132,1427,1,0,0,0,134,1433, + 1,0,0,0,136,1445,1,0,0,0,138,1463,1,0,0,0,140,1469,1,0,0,0,142,1471,1, + 0,0,0,144,1521,1,0,0,0,146,1525,1,0,0,0,148,1539,1,0,0,0,150,1558,1,0, + 0,0,152,1573,1,0,0,0,154,1589,1,0,0,0,156,1610,1,0,0,0,158,1620,1,0,0, + 0,160,1626,1,0,0,0,162,1648,1,0,0,0,164,1650,1,0,0,0,166,1668,1,0,0,0, + 168,1680,1,0,0,0,170,1700,1,0,0,0,172,1708,1,0,0,0,174,1715,1,0,0,0,176, + 1759,1,0,0,0,178,1768,1,0,0,0,180,1770,1,0,0,0,182,1785,1,0,0,0,184,1789, + 1,0,0,0,186,1793,1,0,0,0,188,1800,1,0,0,0,190,1804,1,0,0,0,192,1829,1, + 0,0,0,194,1831,1,0,0,0,196,1847,1,0,0,0,198,1849,1,0,0,0,200,1873,1,0, + 0,0,202,1923,1,0,0,0,204,1925,1,0,0,0,206,1955,1,0,0,0,208,1996,1,0,0, + 0,210,2017,1,0,0,0,212,2027,1,0,0,0,214,2033,1,0,0,0,216,2076,1,0,0,0, + 218,2092,1,0,0,0,220,2094,1,0,0,0,222,2143,1,0,0,0,224,2155,1,0,0,0,226, + 2157,1,0,0,0,228,2159,1,0,0,0,230,2161,1,0,0,0,232,2163,1,0,0,0,234,2165, + 1,0,0,0,236,2175,1,0,0,0,238,2185,1,0,0,0,240,2201,1,0,0,0,242,2254,1, + 0,0,0,244,2256,1,0,0,0,246,2258,1,0,0,0,248,2272,1,0,0,0,250,2286,1,0, + 0,0,252,2301,1,0,0,0,254,2303,1,0,0,0,256,2318,1,0,0,0,258,2320,1,0,0, + 0,260,2335,1,0,0,0,262,2337,1,0,0,0,264,2357,1,0,0,0,266,2367,1,0,0,0, + 268,2396,1,0,0,0,270,2409,1,0,0,0,272,2417,1,0,0,0,274,2431,1,0,0,0,276, + 2433,1,0,0,0,278,2452,1,0,0,0,280,2510,1,0,0,0,282,2512,1,0,0,0,284,2516, + 1,0,0,0,286,2528,1,0,0,0,288,2530,1,0,0,0,290,2532,1,0,0,0,292,2553,1, + 0,0,0,294,2560,1,0,0,0,296,2585,1,0,0,0,298,2596,1,0,0,0,300,2683,1,0, + 0,0,302,2685,1,0,0,0,304,2700,1,0,0,0,306,2702,1,0,0,0,308,2739,1,0,0, + 0,310,2741,1,0,0,0,312,2750,1,0,0,0,314,2780,1,0,0,0,316,2810,1,0,0,0, + 318,2827,1,0,0,0,320,2841,1,0,0,0,322,2845,1,0,0,0,324,2847,1,0,0,0,326, + 2852,1,0,0,0,328,2858,1,0,0,0,330,2860,1,0,0,0,332,2862,1,0,0,0,334,2864, + 1,0,0,0,336,2871,1,0,0,0,338,2873,1,0,0,0,340,2875,1,0,0,0,342,2877,1, + 0,0,0,344,2879,1,0,0,0,346,357,3,2,1,0,347,349,5,178,0,0,348,347,1,0, + 0,0,348,349,1,0,0,0,349,350,1,0,0,0,350,352,5,1,0,0,351,353,5,178,0,0, + 352,351,1,0,0,0,352,353,1,0,0,0,353,354,1,0,0,0,354,356,3,2,1,0,355,348, + 1,0,0,0,356,359,1,0,0,0,357,355,1,0,0,0,357,358,1,0,0,0,358,361,1,0,0, + 0,359,357,1,0,0,0,360,362,5,178,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362, + 363,1,0,0,0,363,364,5,0,0,1,364,1,1,0,0,0,365,367,3,102,51,0,366,365, + 1,0,0,0,366,367,1,0,0,0,367,369,1,0,0,0,368,370,5,178,0,0,369,368,1,0, + 0,0,369,370,1,0,0,0,370,371,1,0,0,0,371,376,3,4,2,0,372,374,5,178,0,0, + 373,372,1,0,0,0,373,374,1,0,0,0,374,375,1,0,0,0,375,377,5,1,0,0,376,373, + 1,0,0,0,376,377,1,0,0,0,377,3,1,0,0,0,378,399,3,118,59,0,379,399,3,44, + 22,0,380,399,3,46,23,0,381,399,3,52,26,0,382,399,3,54,27,0,383,399,3, + 70,35,0,384,399,3,72,36,0,385,399,3,6,3,0,386,399,3,12,6,0,387,399,3, + 14,7,0,388,399,3,30,15,0,389,399,3,34,17,0,390,399,3,32,16,0,391,399, + 3,108,54,0,392,399,3,110,55,0,393,399,3,16,8,0,394,399,3,18,9,0,395,399, + 3,20,10,0,396,399,3,26,13,0,397,399,3,28,14,0,398,378,1,0,0,0,398,379, + 1,0,0,0,398,380,1,0,0,0,398,381,1,0,0,0,398,382,1,0,0,0,398,383,1,0,0, + 0,398,384,1,0,0,0,398,385,1,0,0,0,398,386,1,0,0,0,398,387,1,0,0,0,398, + 388,1,0,0,0,398,389,1,0,0,0,398,390,1,0,0,0,398,391,1,0,0,0,398,392,1, + 0,0,0,398,393,1,0,0,0,398,394,1,0,0,0,398,395,1,0,0,0,398,396,1,0,0,0, + 398,397,1,0,0,0,399,5,1,0,0,0,400,401,5,68,0,0,401,402,5,178,0,0,402, + 404,3,334,167,0,403,405,3,8,4,0,404,403,1,0,0,0,404,405,1,0,0,0,405,406, + 1,0,0,0,406,407,5,178,0,0,407,408,5,88,0,0,408,409,5,178,0,0,409,423, + 3,10,5,0,410,412,5,178,0,0,411,410,1,0,0,0,411,412,1,0,0,0,412,413,1, + 0,0,0,413,415,5,2,0,0,414,416,5,178,0,0,415,414,1,0,0,0,415,416,1,0,0, + 0,416,417,1,0,0,0,417,419,3,24,12,0,418,420,5,178,0,0,419,418,1,0,0,0, + 419,420,1,0,0,0,420,421,1,0,0,0,421,422,5,3,0,0,422,424,1,0,0,0,423,411, + 1,0,0,0,423,424,1,0,0,0,424,7,1,0,0,0,425,427,5,178,0,0,426,425,1,0,0, + 0,426,427,1,0,0,0,427,428,1,0,0,0,428,430,5,2,0,0,429,431,5,178,0,0,430, + 429,1,0,0,0,430,431,1,0,0,0,431,449,1,0,0,0,432,443,3,334,167,0,433,435, + 5,178,0,0,434,433,1,0,0,0,434,435,1,0,0,0,435,436,1,0,0,0,436,438,5,4, + 0,0,437,439,5,178,0,0,438,437,1,0,0,0,438,439,1,0,0,0,439,440,1,0,0,0, + 440,442,3,334,167,0,441,434,1,0,0,0,442,445,1,0,0,0,443,441,1,0,0,0,443, + 444,1,0,0,0,444,447,1,0,0,0,445,443,1,0,0,0,446,448,5,178,0,0,447,446, + 1,0,0,0,447,448,1,0,0,0,448,450,1,0,0,0,449,432,1,0,0,0,449,450,1,0,0, + 0,450,451,1,0,0,0,451,452,5,3,0,0,452,9,1,0,0,0,453,474,3,40,20,0,454, + 456,5,2,0,0,455,457,5,178,0,0,456,455,1,0,0,0,456,457,1,0,0,0,457,458, + 1,0,0,0,458,460,3,118,59,0,459,461,5,178,0,0,460,459,1,0,0,0,460,461, + 1,0,0,0,461,462,1,0,0,0,462,463,5,3,0,0,463,474,1,0,0,0,464,474,3,320, + 160,0,465,466,3,320,160,0,466,468,5,5,0,0,467,469,5,178,0,0,468,467,1, + 0,0,0,468,469,1,0,0,0,469,470,1,0,0,0,470,471,3,334,167,0,471,474,1,0, + 0,0,472,474,3,300,150,0,473,453,1,0,0,0,473,454,1,0,0,0,473,464,1,0,0, + 0,473,465,1,0,0,0,473,472,1,0,0,0,474,11,1,0,0,0,475,476,5,68,0,0,476, + 477,5,178,0,0,477,478,3,334,167,0,478,479,5,178,0,0,479,480,5,88,0,0, + 480,481,5,178,0,0,481,483,5,2,0,0,482,484,5,178,0,0,483,482,1,0,0,0,483, + 484,1,0,0,0,484,485,1,0,0,0,485,496,5,163,0,0,486,488,5,178,0,0,487,486, + 1,0,0,0,487,488,1,0,0,0,488,489,1,0,0,0,489,491,5,4,0,0,490,492,5,178, + 0,0,491,490,1,0,0,0,491,492,1,0,0,0,492,493,1,0,0,0,493,495,5,163,0,0, + 494,487,1,0,0,0,495,498,1,0,0,0,496,494,1,0,0,0,496,497,1,0,0,0,497,499, + 1,0,0,0,498,496,1,0,0,0,499,500,5,3,0,0,500,501,5,178,0,0,501,502,5,58, + 0,0,502,503,5,178,0,0,503,504,5,63,0,0,504,13,1,0,0,0,505,506,5,68,0, + 0,506,507,5,178,0,0,507,509,5,2,0,0,508,510,5,178,0,0,509,508,1,0,0,0, + 509,510,1,0,0,0,510,511,1,0,0,0,511,513,3,118,59,0,512,514,5,178,0,0, + 513,512,1,0,0,0,513,514,1,0,0,0,514,515,1,0,0,0,515,516,5,3,0,0,516,517, + 5,178,0,0,517,518,5,137,0,0,518,519,5,178,0,0,519,533,5,163,0,0,520,522, + 5,178,0,0,521,520,1,0,0,0,521,522,1,0,0,0,522,523,1,0,0,0,523,525,5,2, + 0,0,524,526,5,178,0,0,525,524,1,0,0,0,525,526,1,0,0,0,526,527,1,0,0,0, + 527,529,3,24,12,0,528,530,5,178,0,0,529,528,1,0,0,0,529,530,1,0,0,0,530, + 531,1,0,0,0,531,532,5,3,0,0,532,534,1,0,0,0,533,521,1,0,0,0,533,534,1, + 0,0,0,534,15,1,0,0,0,535,536,5,86,0,0,536,537,5,178,0,0,537,538,5,72, + 0,0,538,539,5,178,0,0,539,553,5,163,0,0,540,542,5,178,0,0,541,540,1,0, + 0,0,541,542,1,0,0,0,542,543,1,0,0,0,543,545,5,2,0,0,544,546,5,178,0,0, + 545,544,1,0,0,0,545,546,1,0,0,0,546,547,1,0,0,0,547,549,3,24,12,0,548, + 550,5,178,0,0,549,548,1,0,0,0,549,550,1,0,0,0,550,551,1,0,0,0,551,552, + 5,3,0,0,552,554,1,0,0,0,553,541,1,0,0,0,553,554,1,0,0,0,554,17,1,0,0, + 0,555,556,5,94,0,0,556,557,5,178,0,0,557,558,5,72,0,0,558,559,5,178,0, + 0,559,560,5,163,0,0,560,19,1,0,0,0,561,562,5,56,0,0,562,563,5,178,0,0, + 563,568,5,163,0,0,564,565,5,178,0,0,565,566,5,53,0,0,566,567,5,178,0, + 0,567,569,3,334,167,0,568,564,1,0,0,0,568,569,1,0,0,0,569,570,1,0,0,0, + 570,571,5,178,0,0,571,573,5,2,0,0,572,574,5,178,0,0,573,572,1,0,0,0,573, + 574,1,0,0,0,574,575,1,0,0,0,575,576,5,73,0,0,576,577,5,178,0,0,577,586, + 3,336,168,0,578,580,5,178,0,0,579,578,1,0,0,0,579,580,1,0,0,0,580,581, + 1,0,0,0,581,583,5,4,0,0,582,584,5,178,0,0,583,582,1,0,0,0,583,584,1,0, + 0,0,584,585,1,0,0,0,585,587,3,24,12,0,586,579,1,0,0,0,586,587,1,0,0,0, + 587,589,1,0,0,0,588,590,5,178,0,0,589,588,1,0,0,0,589,590,1,0,0,0,590, + 591,1,0,0,0,591,592,5,3,0,0,592,21,1,0,0,0,593,607,3,336,168,0,594,596, + 5,178,0,0,595,594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,599,5,6, + 0,0,598,600,5,178,0,0,599,598,1,0,0,0,599,600,1,0,0,0,600,608,1,0,0,0, + 601,603,5,178,0,0,602,601,1,0,0,0,603,606,1,0,0,0,604,602,1,0,0,0,604, + 605,1,0,0,0,605,608,1,0,0,0,606,604,1,0,0,0,607,595,1,0,0,0,607,604,1, + 0,0,0,608,609,1,0,0,0,609,610,3,286,143,0,610,613,1,0,0,0,611,613,3,336, + 168,0,612,593,1,0,0,0,612,611,1,0,0,0,613,23,1,0,0,0,614,625,3,22,11, + 0,615,617,5,178,0,0,616,615,1,0,0,0,616,617,1,0,0,0,617,618,1,0,0,0,618, + 620,5,4,0,0,619,621,5,178,0,0,620,619,1,0,0,0,620,621,1,0,0,0,621,622, + 1,0,0,0,622,624,3,22,11,0,623,616,1,0,0,0,624,627,1,0,0,0,625,623,1,0, + 0,0,625,626,1,0,0,0,626,25,1,0,0,0,627,625,1,0,0,0,628,629,5,78,0,0,629, + 630,5,178,0,0,630,631,3,334,167,0,631,27,1,0,0,0,632,633,5,144,0,0,633, + 634,5,178,0,0,634,635,3,334,167,0,635,29,1,0,0,0,636,637,5,59,0,0,637, + 638,5,178,0,0,638,640,3,336,168,0,639,641,5,178,0,0,640,639,1,0,0,0,640, + 641,1,0,0,0,641,642,1,0,0,0,642,644,5,6,0,0,643,645,5,178,0,0,644,643, + 1,0,0,0,644,645,1,0,0,0,645,646,1,0,0,0,646,647,3,232,116,0,647,652,1, + 0,0,0,648,649,5,59,0,0,649,650,5,178,0,0,650,652,3,300,150,0,651,636, + 1,0,0,0,651,648,1,0,0,0,652,31,1,0,0,0,653,654,5,64,0,0,654,655,5,178, + 0,0,655,656,5,116,0,0,656,657,5,178,0,0,657,658,5,135,0,0,658,659,5,178, + 0,0,659,660,3,334,167,0,660,661,5,178,0,0,661,662,5,99,0,0,662,663,5, + 178,0,0,663,664,5,163,0,0,664,33,1,0,0,0,665,666,5,70,0,0,666,667,5,178, + 0,0,667,668,5,105,0,0,668,669,5,178,0,0,669,671,3,302,151,0,670,672,5, + 178,0,0,671,670,1,0,0,0,671,672,1,0,0,0,672,673,1,0,0,0,673,675,5,2,0, + 0,674,676,5,178,0,0,675,674,1,0,0,0,675,676,1,0,0,0,676,678,1,0,0,0,677, + 679,3,36,18,0,678,677,1,0,0,0,678,679,1,0,0,0,679,681,1,0,0,0,680,682, + 5,178,0,0,681,680,1,0,0,0,681,682,1,0,0,0,682,684,1,0,0,0,683,685,3,38, + 19,0,684,683,1,0,0,0,684,685,1,0,0,0,685,696,1,0,0,0,686,688,5,178,0, + 0,687,686,1,0,0,0,687,688,1,0,0,0,688,689,1,0,0,0,689,691,5,4,0,0,690, + 692,5,178,0,0,691,690,1,0,0,0,691,692,1,0,0,0,692,693,1,0,0,0,693,695, + 3,38,19,0,694,687,1,0,0,0,695,698,1,0,0,0,696,694,1,0,0,0,696,697,1,0, + 0,0,697,700,1,0,0,0,698,696,1,0,0,0,699,701,5,178,0,0,700,699,1,0,0,0, + 700,701,1,0,0,0,701,702,1,0,0,0,702,703,5,3,0,0,703,704,5,178,0,0,704, + 705,5,53,0,0,705,706,5,178,0,0,706,707,3,232,116,0,707,35,1,0,0,0,708, + 719,3,336,168,0,709,711,5,178,0,0,710,709,1,0,0,0,710,711,1,0,0,0,711, + 712,1,0,0,0,712,714,5,4,0,0,713,715,5,178,0,0,714,713,1,0,0,0,714,715, + 1,0,0,0,715,716,1,0,0,0,716,718,3,336,168,0,717,710,1,0,0,0,718,721,1, + 0,0,0,719,717,1,0,0,0,719,720,1,0,0,0,720,37,1,0,0,0,721,719,1,0,0,0, + 722,724,3,336,168,0,723,725,5,178,0,0,724,723,1,0,0,0,724,725,1,0,0,0, + 725,726,1,0,0,0,726,727,5,160,0,0,727,729,5,6,0,0,728,730,5,178,0,0,729, + 728,1,0,0,0,729,730,1,0,0,0,730,731,1,0,0,0,731,732,3,286,143,0,732,39, + 1,0,0,0,733,735,5,7,0,0,734,736,5,178,0,0,735,734,1,0,0,0,735,736,1,0, + 0,0,736,737,1,0,0,0,737,748,5,163,0,0,738,740,5,178,0,0,739,738,1,0,0, + 0,739,740,1,0,0,0,740,741,1,0,0,0,741,743,5,4,0,0,742,744,5,178,0,0,743, + 742,1,0,0,0,743,744,1,0,0,0,744,745,1,0,0,0,745,747,5,163,0,0,746,739, + 1,0,0,0,747,750,1,0,0,0,748,746,1,0,0,0,748,749,1,0,0,0,749,751,1,0,0, + 0,750,748,1,0,0,0,751,767,5,8,0,0,752,767,5,163,0,0,753,755,5,89,0,0, + 754,756,5,178,0,0,755,754,1,0,0,0,755,756,1,0,0,0,756,757,1,0,0,0,757, + 759,5,2,0,0,758,760,5,178,0,0,759,758,1,0,0,0,759,760,1,0,0,0,760,761, + 1,0,0,0,761,763,5,163,0,0,762,764,5,178,0,0,763,762,1,0,0,0,763,764,1, + 0,0,0,764,765,1,0,0,0,765,767,5,3,0,0,766,733,1,0,0,0,766,752,1,0,0,0, + 766,753,1,0,0,0,767,41,1,0,0,0,768,769,5,95,0,0,769,770,5,178,0,0,770, + 771,5,113,0,0,771,772,5,178,0,0,772,773,5,84,0,0,773,43,1,0,0,0,774,775, + 5,70,0,0,775,776,5,178,0,0,776,777,5,112,0,0,777,778,5,178,0,0,778,779, + 5,135,0,0,779,783,5,178,0,0,780,781,3,42,21,0,781,782,5,178,0,0,782,784, + 1,0,0,0,783,780,1,0,0,0,783,784,1,0,0,0,784,785,1,0,0,0,785,787,3,334, + 167,0,786,788,5,178,0,0,787,786,1,0,0,0,787,788,1,0,0,0,788,789,1,0,0, + 0,789,791,5,2,0,0,790,792,5,178,0,0,791,790,1,0,0,0,791,792,1,0,0,0,792, + 793,1,0,0,0,793,795,3,90,45,0,794,796,5,178,0,0,795,794,1,0,0,0,795,796, + 1,0,0,0,796,802,1,0,0,0,797,799,5,4,0,0,798,800,5,178,0,0,799,798,1,0, + 0,0,799,800,1,0,0,0,800,801,1,0,0,0,801,803,3,94,47,0,802,797,1,0,0,0, + 802,803,1,0,0,0,803,805,1,0,0,0,804,806,5,178,0,0,805,804,1,0,0,0,805, + 806,1,0,0,0,806,807,1,0,0,0,807,808,5,3,0,0,808,45,1,0,0,0,809,810,5, + 70,0,0,810,811,5,178,0,0,811,812,5,125,0,0,812,813,5,178,0,0,813,816, + 5,135,0,0,814,815,5,178,0,0,815,817,5,91,0,0,816,814,1,0,0,0,816,817, + 1,0,0,0,817,820,1,0,0,0,818,819,5,178,0,0,819,821,3,42,21,0,820,818,1, + 0,0,0,820,821,1,0,0,0,821,822,1,0,0,0,822,823,5,178,0,0,823,825,3,334, + 167,0,824,826,5,178,0,0,825,824,1,0,0,0,825,826,1,0,0,0,826,827,1,0,0, + 0,827,829,5,2,0,0,828,830,5,178,0,0,829,828,1,0,0,0,829,830,1,0,0,0,830, + 831,1,0,0,0,831,833,3,48,24,0,832,834,5,178,0,0,833,832,1,0,0,0,833,834, + 1,0,0,0,834,843,1,0,0,0,835,837,5,4,0,0,836,838,5,178,0,0,837,836,1,0, + 0,0,837,838,1,0,0,0,838,839,1,0,0,0,839,841,3,90,45,0,840,842,5,178,0, + 0,841,840,1,0,0,0,841,842,1,0,0,0,842,844,1,0,0,0,843,835,1,0,0,0,843, + 844,1,0,0,0,844,853,1,0,0,0,845,847,5,4,0,0,846,848,5,178,0,0,847,846, + 1,0,0,0,847,848,1,0,0,0,848,849,1,0,0,0,849,851,3,336,168,0,850,852,5, + 178,0,0,851,850,1,0,0,0,851,852,1,0,0,0,852,854,1,0,0,0,853,845,1,0,0, + 0,853,854,1,0,0,0,854,855,1,0,0,0,855,871,5,3,0,0,856,857,5,178,0,0,857, + 859,5,147,0,0,858,860,5,178,0,0,859,858,1,0,0,0,859,860,1,0,0,0,860,861, + 1,0,0,0,861,863,5,2,0,0,862,864,5,178,0,0,863,862,1,0,0,0,863,864,1,0, + 0,0,864,865,1,0,0,0,865,867,3,24,12,0,866,868,5,178,0,0,867,866,1,0,0, + 0,867,868,1,0,0,0,868,869,1,0,0,0,869,870,5,3,0,0,870,872,1,0,0,0,871, + 856,1,0,0,0,871,872,1,0,0,0,872,47,1,0,0,0,873,884,3,50,25,0,874,876, + 5,178,0,0,875,874,1,0,0,0,875,876,1,0,0,0,876,877,1,0,0,0,877,879,5,4, + 0,0,878,880,5,178,0,0,879,878,1,0,0,0,879,880,1,0,0,0,880,881,1,0,0,0, + 881,883,3,50,25,0,882,875,1,0,0,0,883,886,1,0,0,0,884,882,1,0,0,0,884, + 885,1,0,0,0,885,49,1,0,0,0,886,884,1,0,0,0,887,888,5,88,0,0,888,889,5, + 178,0,0,889,890,3,334,167,0,890,891,5,178,0,0,891,892,5,137,0,0,892,893, + 5,178,0,0,893,894,3,334,167,0,894,51,1,0,0,0,895,896,5,70,0,0,896,897, + 5,178,0,0,897,898,5,130,0,0,898,902,5,178,0,0,899,900,3,42,21,0,900,901, + 5,178,0,0,901,903,1,0,0,0,902,899,1,0,0,0,902,903,1,0,0,0,903,904,1,0, + 0,0,904,909,3,334,167,0,905,906,5,178,0,0,906,908,3,56,28,0,907,905,1, + 0,0,0,908,911,1,0,0,0,909,907,1,0,0,0,909,910,1,0,0,0,910,53,1,0,0,0, + 911,909,1,0,0,0,912,913,5,70,0,0,913,914,5,178,0,0,914,915,5,140,0,0, + 915,916,5,178,0,0,916,917,3,334,167,0,917,918,5,178,0,0,918,919,5,53, + 0,0,919,920,5,178,0,0,920,922,3,96,48,0,921,923,5,178,0,0,922,921,1,0, + 0,0,922,923,1,0,0,0,923,55,1,0,0,0,924,930,3,58,29,0,925,930,3,60,30, + 0,926,930,3,62,31,0,927,930,3,64,32,0,928,930,3,66,33,0,929,924,1,0,0, + 0,929,925,1,0,0,0,929,926,1,0,0,0,929,927,1,0,0,0,929,928,1,0,0,0,930, + 57,1,0,0,0,931,932,5,97,0,0,932,935,5,178,0,0,933,934,5,58,0,0,934,936, + 5,178,0,0,935,933,1,0,0,0,935,936,1,0,0,0,936,938,1,0,0,0,937,939,5,158, + 0,0,938,937,1,0,0,0,938,939,1,0,0,0,939,940,1,0,0,0,940,941,3,330,165, + 0,941,59,1,0,0,0,942,943,5,111,0,0,943,944,5,178,0,0,944,952,5,109,0, + 0,945,946,5,109,0,0,946,948,5,178,0,0,947,949,5,158,0,0,948,947,1,0,0, + 0,948,949,1,0,0,0,949,950,1,0,0,0,950,952,3,330,165,0,951,942,1,0,0,0, + 951,945,1,0,0,0,952,61,1,0,0,0,953,954,5,111,0,0,954,955,5,178,0,0,955, + 963,5,107,0,0,956,957,5,107,0,0,957,959,5,178,0,0,958,960,5,158,0,0,959, + 958,1,0,0,0,959,960,1,0,0,0,960,961,1,0,0,0,961,963,3,330,165,0,962,953, + 1,0,0,0,962,956,1,0,0,0,963,63,1,0,0,0,964,965,5,133,0,0,965,968,5,178, + 0,0,966,967,5,147,0,0,967,969,5,178,0,0,968,966,1,0,0,0,968,969,1,0,0, + 0,969,971,1,0,0,0,970,972,5,158,0,0,971,970,1,0,0,0,971,972,1,0,0,0,972, + 973,1,0,0,0,973,974,3,330,165,0,974,65,1,0,0,0,975,976,5,111,0,0,976, + 978,5,178,0,0,977,975,1,0,0,0,977,978,1,0,0,0,978,979,1,0,0,0,979,980, + 5,71,0,0,980,67,1,0,0,0,981,982,5,95,0,0,982,983,5,178,0,0,983,984,5, + 84,0,0,984,69,1,0,0,0,985,986,5,80,0,0,986,987,5,178,0,0,987,988,7,0, + 0,0,988,992,5,178,0,0,989,990,3,68,34,0,990,991,5,178,0,0,991,993,1,0, + 0,0,992,989,1,0,0,0,992,993,1,0,0,0,993,994,1,0,0,0,994,995,3,334,167, + 0,995,71,1,0,0,0,996,997,5,51,0,0,997,998,5,178,0,0,998,999,5,135,0,0, + 999,1000,5,178,0,0,1000,1001,3,334,167,0,1001,1002,5,178,0,0,1002,1003, + 3,74,37,0,1003,73,1,0,0,0,1004,1009,3,76,38,0,1005,1009,3,80,40,0,1006, + 1009,3,82,41,0,1007,1009,3,84,42,0,1008,1004,1,0,0,0,1008,1005,1,0,0, + 0,1008,1006,1,0,0,0,1008,1007,1,0,0,0,1009,75,1,0,0,0,1010,1011,5,49, + 0,0,1011,1015,5,178,0,0,1012,1013,3,42,21,0,1013,1014,5,178,0,0,1014, + 1016,1,0,0,0,1015,1012,1,0,0,0,1015,1016,1,0,0,0,1016,1017,1,0,0,0,1017, + 1018,3,328,164,0,1018,1019,5,178,0,0,1019,1022,3,96,48,0,1020,1021,5, + 178,0,0,1021,1023,3,78,39,0,1022,1020,1,0,0,0,1022,1023,1,0,0,0,1023, + 77,1,0,0,0,1024,1025,5,74,0,0,1025,1026,5,178,0,0,1026,1027,3,232,116, + 0,1027,79,1,0,0,0,1028,1029,5,80,0,0,1029,1033,5,178,0,0,1030,1031,3, + 68,34,0,1031,1032,5,178,0,0,1032,1034,1,0,0,0,1033,1030,1,0,0,0,1033, + 1034,1,0,0,0,1034,1035,1,0,0,0,1035,1036,3,328,164,0,1036,81,1,0,0,0, + 1037,1038,5,126,0,0,1038,1039,5,178,0,0,1039,1040,5,137,0,0,1040,1041, + 5,178,0,0,1041,1042,3,334,167,0,1042,83,1,0,0,0,1043,1044,5,126,0,0,1044, + 1045,5,178,0,0,1045,1046,3,328,164,0,1046,1047,5,178,0,0,1047,1048,5, + 137,0,0,1048,1049,5,178,0,0,1049,1050,3,328,164,0,1050,85,1,0,0,0,1051, + 1062,3,88,44,0,1052,1054,5,178,0,0,1053,1052,1,0,0,0,1053,1054,1,0,0, + 0,1054,1055,1,0,0,0,1055,1057,5,4,0,0,1056,1058,5,178,0,0,1057,1056,1, + 0,0,0,1057,1058,1,0,0,0,1058,1059,1,0,0,0,1059,1061,3,88,44,0,1060,1053, + 1,0,0,0,1061,1064,1,0,0,0,1062,1060,1,0,0,0,1062,1063,1,0,0,0,1063,87, + 1,0,0,0,1064,1062,1,0,0,0,1065,1066,3,328,164,0,1066,1067,5,178,0,0,1067, + 1068,3,96,48,0,1068,89,1,0,0,0,1069,1080,3,92,46,0,1070,1072,5,178,0, + 0,1071,1070,1,0,0,0,1071,1072,1,0,0,0,1072,1073,1,0,0,0,1073,1075,5,4, + 0,0,1074,1076,5,178,0,0,1075,1074,1,0,0,0,1075,1076,1,0,0,0,1076,1077, + 1,0,0,0,1077,1079,3,92,46,0,1078,1071,1,0,0,0,1079,1082,1,0,0,0,1080, + 1078,1,0,0,0,1080,1081,1,0,0,0,1081,91,1,0,0,0,1082,1080,1,0,0,0,1083, + 1086,3,88,44,0,1084,1085,5,178,0,0,1085,1087,3,78,39,0,1086,1084,1,0, + 0,0,1086,1087,1,0,0,0,1087,1092,1,0,0,0,1088,1089,5,178,0,0,1089,1090, + 5,121,0,0,1090,1091,5,178,0,0,1091,1093,5,101,0,0,1092,1088,1,0,0,0,1092, + 1093,1,0,0,0,1093,93,1,0,0,0,1094,1095,5,121,0,0,1095,1096,5,178,0,0, + 1096,1098,5,101,0,0,1097,1099,5,178,0,0,1098,1097,1,0,0,0,1098,1099,1, + 0,0,0,1099,1100,1,0,0,0,1100,1102,5,2,0,0,1101,1103,5,178,0,0,1102,1101, + 1,0,0,0,1102,1103,1,0,0,0,1103,1104,1,0,0,0,1104,1106,3,328,164,0,1105, + 1107,5,178,0,0,1106,1105,1,0,0,0,1106,1107,1,0,0,0,1107,1108,1,0,0,0, + 1108,1109,5,3,0,0,1109,95,1,0,0,0,1110,1111,6,48,-1,0,1111,1199,3,336, + 168,0,1112,1114,5,142,0,0,1113,1115,5,178,0,0,1114,1113,1,0,0,0,1114, + 1115,1,0,0,0,1115,1116,1,0,0,0,1116,1118,5,2,0,0,1117,1119,5,178,0,0, + 1118,1117,1,0,0,0,1118,1119,1,0,0,0,1119,1120,1,0,0,0,1120,1122,3,86, + 43,0,1121,1123,5,178,0,0,1122,1121,1,0,0,0,1122,1123,1,0,0,0,1123,1124, + 1,0,0,0,1124,1125,5,3,0,0,1125,1199,1,0,0,0,1126,1128,3,336,168,0,1127, + 1129,5,178,0,0,1128,1127,1,0,0,0,1128,1129,1,0,0,0,1129,1130,1,0,0,0, + 1130,1132,5,2,0,0,1131,1133,5,178,0,0,1132,1131,1,0,0,0,1132,1133,1,0, + 0,0,1133,1134,1,0,0,0,1134,1136,3,86,43,0,1135,1137,5,178,0,0,1136,1135, + 1,0,0,0,1136,1137,1,0,0,0,1137,1138,1,0,0,0,1138,1139,5,3,0,0,1139,1199, + 1,0,0,0,1140,1142,3,336,168,0,1141,1143,5,178,0,0,1142,1141,1,0,0,0,1142, + 1143,1,0,0,0,1143,1144,1,0,0,0,1144,1146,5,2,0,0,1145,1147,5,178,0,0, + 1146,1145,1,0,0,0,1146,1147,1,0,0,0,1147,1148,1,0,0,0,1148,1150,3,96, + 48,0,1149,1151,5,178,0,0,1150,1149,1,0,0,0,1150,1151,1,0,0,0,1151,1152, + 1,0,0,0,1152,1154,5,4,0,0,1153,1155,5,178,0,0,1154,1153,1,0,0,0,1154, + 1155,1,0,0,0,1155,1156,1,0,0,0,1156,1158,3,96,48,0,1157,1159,5,178,0, + 0,1158,1157,1,0,0,0,1158,1159,1,0,0,0,1159,1160,1,0,0,0,1160,1161,5,3, + 0,0,1161,1199,1,0,0,0,1162,1164,5,153,0,0,1163,1165,5,178,0,0,1164,1163, + 1,0,0,0,1164,1165,1,0,0,0,1165,1166,1,0,0,0,1166,1168,5,2,0,0,1167,1169, + 5,178,0,0,1168,1167,1,0,0,0,1168,1169,1,0,0,0,1169,1170,1,0,0,0,1170, + 1172,3,330,165,0,1171,1173,5,178,0,0,1172,1171,1,0,0,0,1172,1173,1,0, + 0,0,1173,1174,1,0,0,0,1174,1176,5,4,0,0,1175,1177,5,178,0,0,1176,1175, + 1,0,0,0,1176,1177,1,0,0,0,1177,1178,1,0,0,0,1178,1180,3,330,165,0,1179, + 1181,5,178,0,0,1180,1179,1,0,0,0,1180,1181,1,0,0,0,1181,1182,1,0,0,0, + 1182,1183,5,3,0,0,1183,1199,1,0,0,0,1184,1186,5,154,0,0,1185,1187,5,178, + 0,0,1186,1185,1,0,0,0,1186,1187,1,0,0,0,1187,1188,1,0,0,0,1188,1190,5, + 2,0,0,1189,1191,5,178,0,0,1190,1189,1,0,0,0,1190,1191,1,0,0,0,1191,1192, + 1,0,0,0,1192,1194,3,330,165,0,1193,1195,5,178,0,0,1194,1193,1,0,0,0,1194, + 1195,1,0,0,0,1195,1196,1,0,0,0,1196,1197,5,3,0,0,1197,1199,1,0,0,0,1198, + 1110,1,0,0,0,1198,1112,1,0,0,0,1198,1126,1,0,0,0,1198,1140,1,0,0,0,1198, + 1162,1,0,0,0,1198,1184,1,0,0,0,1199,1204,1,0,0,0,1200,1201,10,6,0,0,1201, + 1203,3,98,49,0,1202,1200,1,0,0,0,1203,1206,1,0,0,0,1204,1202,1,0,0,0, + 1204,1205,1,0,0,0,1205,97,1,0,0,0,1206,1204,1,0,0,0,1207,1211,3,100,50, + 0,1208,1210,3,100,50,0,1209,1208,1,0,0,0,1210,1213,1,0,0,0,1211,1209, + 1,0,0,0,1211,1212,1,0,0,0,1212,99,1,0,0,0,1213,1211,1,0,0,0,1214,1216, + 5,7,0,0,1215,1217,3,330,165,0,1216,1215,1,0,0,0,1216,1217,1,0,0,0,1217, + 1218,1,0,0,0,1218,1219,5,8,0,0,1219,101,1,0,0,0,1220,1223,3,104,52,0, + 1221,1223,3,106,53,0,1222,1220,1,0,0,0,1222,1221,1,0,0,0,1223,103,1,0, + 0,0,1224,1227,5,85,0,0,1225,1226,5,178,0,0,1226,1228,5,104,0,0,1227,1225, + 1,0,0,0,1227,1228,1,0,0,0,1228,105,1,0,0,0,1229,1230,5,122,0,0,1230,107, + 1,0,0,0,1231,1232,5,57,0,0,1232,1233,5,178,0,0,1233,1245,5,139,0,0,1234, + 1235,5,57,0,0,1235,1236,5,178,0,0,1236,1237,5,139,0,0,1237,1238,5,178, + 0,0,1238,1239,5,124,0,0,1239,1240,5,178,0,0,1240,1245,5,117,0,0,1241, + 1245,5,65,0,0,1242,1245,5,128,0,0,1243,1245,5,62,0,0,1244,1231,1,0,0, + 0,1244,1234,1,0,0,0,1244,1241,1,0,0,0,1244,1242,1,0,0,0,1244,1243,1,0, + 0,0,1245,109,1,0,0,0,1246,1250,3,112,56,0,1247,1250,3,114,57,0,1248,1250, + 3,116,58,0,1249,1246,1,0,0,0,1249,1247,1,0,0,0,1249,1248,1,0,0,0,1250, + 111,1,0,0,0,1251,1252,5,103,0,0,1252,1255,5,178,0,0,1253,1254,5,87,0, + 0,1254,1256,5,178,0,0,1255,1253,1,0,0,0,1255,1256,1,0,0,0,1256,1259,1, + 0,0,0,1257,1260,5,163,0,0,1258,1260,3,320,160,0,1259,1257,1,0,0,0,1259, + 1258,1,0,0,0,1260,113,1,0,0,0,1261,1262,5,98,0,0,1262,1263,5,178,0,0, + 1263,1268,3,320,160,0,1264,1265,5,178,0,0,1265,1266,5,88,0,0,1266,1267, + 5,178,0,0,1267,1269,5,163,0,0,1268,1264,1,0,0,0,1268,1269,1,0,0,0,1269, + 115,1,0,0,0,1270,1271,5,141,0,0,1271,1274,5,178,0,0,1272,1273,5,87,0, + 0,1273,1275,5,178,0,0,1274,1272,1,0,0,0,1274,1275,1,0,0,0,1275,1278,1, + 0,0,0,1276,1279,5,163,0,0,1277,1279,3,320,160,0,1278,1276,1,0,0,0,1278, + 1277,1,0,0,0,1279,117,1,0,0,0,1280,1281,3,120,60,0,1281,119,1,0,0,0,1282, + 1289,3,130,65,0,1283,1285,5,178,0,0,1284,1283,1,0,0,0,1284,1285,1,0,0, + 0,1285,1286,1,0,0,0,1286,1288,3,122,61,0,1287,1284,1,0,0,0,1288,1291, + 1,0,0,0,1289,1287,1,0,0,0,1289,1290,1,0,0,0,1290,1305,1,0,0,0,1291,1289, + 1,0,0,0,1292,1294,3,172,86,0,1293,1295,5,178,0,0,1294,1293,1,0,0,0,1294, + 1295,1,0,0,0,1295,1297,1,0,0,0,1296,1292,1,0,0,0,1297,1298,1,0,0,0,1298, + 1296,1,0,0,0,1298,1299,1,0,0,0,1299,1300,1,0,0,0,1300,1301,3,130,65,0, + 1301,1302,6,60,-1,0,1302,1305,1,0,0,0,1303,1305,3,124,62,0,1304,1282, + 1,0,0,0,1304,1296,1,0,0,0,1304,1303,1,0,0,0,1305,121,1,0,0,0,1306,1307, + 5,142,0,0,1307,1308,5,178,0,0,1308,1310,5,50,0,0,1309,1311,5,178,0,0, + 1310,1309,1,0,0,0,1310,1311,1,0,0,0,1311,1312,1,0,0,0,1312,1319,3,130, + 65,0,1313,1315,5,142,0,0,1314,1316,5,178,0,0,1315,1314,1,0,0,0,1315,1316, + 1,0,0,0,1316,1317,1,0,0,0,1317,1319,3,130,65,0,1318,1306,1,0,0,0,1318, + 1313,1,0,0,0,1319,123,1,0,0,0,1320,1322,3,136,68,0,1321,1323,5,178,0, + 0,1322,1321,1,0,0,0,1322,1323,1,0,0,0,1323,1325,1,0,0,0,1324,1320,1,0, + 0,0,1325,1328,1,0,0,0,1326,1324,1,0,0,0,1326,1327,1,0,0,0,1327,1329,1, + 0,0,0,1328,1326,1,0,0,0,1329,1332,3,126,63,0,1330,1331,5,178,0,0,1331, + 1333,3,130,65,0,1332,1330,1,0,0,0,1332,1333,1,0,0,0,1333,125,1,0,0,0, + 1334,1336,3,128,64,0,1335,1337,5,178,0,0,1336,1335,1,0,0,0,1336,1337, + 1,0,0,0,1337,1338,1,0,0,0,1338,1340,5,9,0,0,1339,1341,5,178,0,0,1340, + 1339,1,0,0,0,1340,1341,1,0,0,0,1341,1342,1,0,0,0,1342,1349,3,130,65,0, + 1343,1345,5,178,0,0,1344,1343,1,0,0,0,1344,1345,1,0,0,0,1345,1346,1,0, + 0,0,1346,1348,3,122,61,0,1347,1344,1,0,0,0,1348,1351,1,0,0,0,1349,1347, + 1,0,0,0,1349,1350,1,0,0,0,1350,1353,1,0,0,0,1351,1349,1,0,0,0,1352,1354, + 5,178,0,0,1353,1352,1,0,0,0,1353,1354,1,0,0,0,1354,1355,1,0,0,0,1355, + 1356,5,10,0,0,1356,127,1,0,0,0,1357,1359,5,59,0,0,1358,1360,5,178,0,0, + 1359,1358,1,0,0,0,1359,1360,1,0,0,0,1360,1361,1,0,0,0,1361,1363,5,2,0, + 0,1362,1364,5,178,0,0,1363,1362,1,0,0,0,1363,1364,1,0,0,0,1364,1365,1, + 0,0,0,1365,1376,3,232,116,0,1366,1368,5,178,0,0,1367,1366,1,0,0,0,1367, + 1368,1,0,0,0,1368,1369,1,0,0,0,1369,1371,5,4,0,0,1370,1372,5,178,0,0, + 1371,1370,1,0,0,0,1371,1372,1,0,0,0,1372,1373,1,0,0,0,1373,1375,3,232, + 116,0,1374,1367,1,0,0,0,1375,1378,1,0,0,0,1376,1374,1,0,0,0,1376,1377, + 1,0,0,0,1377,1380,1,0,0,0,1378,1376,1,0,0,0,1379,1381,5,178,0,0,1380, + 1379,1,0,0,0,1380,1381,1,0,0,0,1381,1382,1,0,0,0,1382,1383,5,3,0,0,1383, + 1387,1,0,0,0,1384,1385,5,59,0,0,1385,1387,5,11,0,0,1386,1357,1,0,0,0, + 1386,1384,1,0,0,0,1387,129,1,0,0,0,1388,1391,3,132,66,0,1389,1391,3,134, + 67,0,1390,1388,1,0,0,0,1390,1389,1,0,0,0,1391,131,1,0,0,0,1392,1394,3, + 140,70,0,1393,1395,5,178,0,0,1394,1393,1,0,0,0,1394,1395,1,0,0,0,1395, + 1397,1,0,0,0,1396,1392,1,0,0,0,1397,1400,1,0,0,0,1398,1396,1,0,0,0,1398, + 1399,1,0,0,0,1399,1401,1,0,0,0,1400,1398,1,0,0,0,1401,1428,3,172,86,0, + 1402,1404,3,140,70,0,1403,1405,5,178,0,0,1404,1403,1,0,0,0,1404,1405, + 1,0,0,0,1405,1407,1,0,0,0,1406,1402,1,0,0,0,1407,1410,1,0,0,0,1408,1406, + 1,0,0,0,1408,1409,1,0,0,0,1409,1411,1,0,0,0,1410,1408,1,0,0,0,1411,1418, + 3,138,69,0,1412,1414,5,178,0,0,1413,1412,1,0,0,0,1413,1414,1,0,0,0,1414, + 1415,1,0,0,0,1415,1417,3,138,69,0,1416,1413,1,0,0,0,1417,1420,1,0,0,0, + 1418,1416,1,0,0,0,1418,1419,1,0,0,0,1419,1425,1,0,0,0,1420,1418,1,0,0, + 0,1421,1423,5,178,0,0,1422,1421,1,0,0,0,1422,1423,1,0,0,0,1423,1424,1, + 0,0,0,1424,1426,3,172,86,0,1425,1422,1,0,0,0,1425,1426,1,0,0,0,1426,1428, + 1,0,0,0,1427,1398,1,0,0,0,1427,1408,1,0,0,0,1428,133,1,0,0,0,1429,1431, + 3,136,68,0,1430,1432,5,178,0,0,1431,1430,1,0,0,0,1431,1432,1,0,0,0,1432, + 1434,1,0,0,0,1433,1429,1,0,0,0,1434,1435,1,0,0,0,1435,1433,1,0,0,0,1435, + 1436,1,0,0,0,1436,1437,1,0,0,0,1437,1438,3,132,66,0,1438,135,1,0,0,0, + 1439,1441,3,140,70,0,1440,1442,5,178,0,0,1441,1440,1,0,0,0,1441,1442, + 1,0,0,0,1442,1444,1,0,0,0,1443,1439,1,0,0,0,1444,1447,1,0,0,0,1445,1443, + 1,0,0,0,1445,1446,1,0,0,0,1446,1454,1,0,0,0,1447,1445,1,0,0,0,1448,1450, + 3,138,69,0,1449,1451,5,178,0,0,1450,1449,1,0,0,0,1450,1451,1,0,0,0,1451, + 1453,1,0,0,0,1452,1448,1,0,0,0,1453,1456,1,0,0,0,1454,1452,1,0,0,0,1454, + 1455,1,0,0,0,1455,1457,1,0,0,0,1456,1454,1,0,0,0,1457,1458,3,170,85,0, + 1458,137,1,0,0,0,1459,1464,3,158,79,0,1460,1464,3,160,80,0,1461,1464, + 3,164,82,0,1462,1464,3,168,84,0,1463,1459,1,0,0,0,1463,1460,1,0,0,0,1463, + 1461,1,0,0,0,1463,1462,1,0,0,0,1464,139,1,0,0,0,1465,1470,3,150,75,0, + 1466,1470,3,156,78,0,1467,1470,3,148,74,0,1468,1470,3,142,71,0,1469,1465, + 1,0,0,0,1469,1466,1,0,0,0,1469,1467,1,0,0,0,1469,1468,1,0,0,0,1470,141, + 1,0,0,0,1471,1489,5,103,0,0,1472,1473,5,178,0,0,1473,1474,5,147,0,0,1474, + 1475,5,178,0,0,1475,1477,5,92,0,0,1476,1478,5,178,0,0,1477,1476,1,0,0, + 0,1477,1478,1,0,0,0,1478,1479,1,0,0,0,1479,1481,5,2,0,0,1480,1482,5,178, + 0,0,1481,1480,1,0,0,0,1481,1482,1,0,0,0,1482,1483,1,0,0,0,1483,1485,3, + 86,43,0,1484,1486,5,178,0,0,1485,1484,1,0,0,0,1485,1486,1,0,0,0,1486, + 1487,1,0,0,0,1487,1488,5,3,0,0,1488,1490,1,0,0,0,1489,1472,1,0,0,0,1489, + 1490,1,0,0,0,1490,1491,1,0,0,0,1491,1492,5,178,0,0,1492,1493,5,88,0,0, + 1493,1494,5,178,0,0,1494,1508,3,10,5,0,1495,1497,5,178,0,0,1496,1495, + 1,0,0,0,1496,1497,1,0,0,0,1497,1498,1,0,0,0,1498,1500,5,2,0,0,1499,1501, + 5,178,0,0,1500,1499,1,0,0,0,1500,1501,1,0,0,0,1501,1502,1,0,0,0,1502, + 1504,3,24,12,0,1503,1505,5,178,0,0,1504,1503,1,0,0,0,1504,1505,1,0,0, + 0,1505,1506,1,0,0,0,1506,1507,5,3,0,0,1507,1509,1,0,0,0,1508,1496,1,0, + 0,0,1508,1509,1,0,0,0,1509,1514,1,0,0,0,1510,1512,5,178,0,0,1511,1510, + 1,0,0,0,1511,1512,1,0,0,0,1512,1513,1,0,0,0,1513,1515,3,188,94,0,1514, + 1511,1,0,0,0,1514,1515,1,0,0,0,1515,143,1,0,0,0,1516,1517,3,320,160,0, + 1517,1518,5,178,0,0,1518,1519,5,53,0,0,1519,1520,5,178,0,0,1520,1522, + 1,0,0,0,1521,1516,1,0,0,0,1521,1522,1,0,0,0,1522,1523,1,0,0,0,1523,1524, + 3,320,160,0,1524,145,1,0,0,0,1525,1536,3,144,72,0,1526,1528,5,178,0,0, + 1527,1526,1,0,0,0,1527,1528,1,0,0,0,1528,1529,1,0,0,0,1529,1531,5,4,0, + 0,1530,1532,5,178,0,0,1531,1530,1,0,0,0,1531,1532,1,0,0,0,1532,1533,1, + 0,0,0,1533,1535,3,144,72,0,1534,1527,1,0,0,0,1535,1538,1,0,0,0,1536,1534, + 1,0,0,0,1536,1537,1,0,0,0,1537,147,1,0,0,0,1538,1536,1,0,0,0,1539,1540, + 5,59,0,0,1540,1541,5,178,0,0,1541,1546,3,300,150,0,1542,1544,5,178,0, + 0,1543,1542,1,0,0,0,1543,1544,1,0,0,0,1544,1545,1,0,0,0,1545,1547,3,188, + 94,0,1546,1543,1,0,0,0,1546,1547,1,0,0,0,1547,1554,1,0,0,0,1548,1550, + 5,178,0,0,1549,1548,1,0,0,0,1549,1550,1,0,0,0,1550,1551,1,0,0,0,1551, + 1552,5,152,0,0,1552,1553,5,178,0,0,1553,1555,3,146,73,0,1554,1549,1,0, + 0,0,1554,1555,1,0,0,0,1555,149,1,0,0,0,1556,1557,5,118,0,0,1557,1559, + 5,178,0,0,1558,1556,1,0,0,0,1558,1559,1,0,0,0,1559,1560,1,0,0,0,1560, + 1562,5,106,0,0,1561,1563,5,178,0,0,1562,1561,1,0,0,0,1562,1563,1,0,0, + 0,1563,1564,1,0,0,0,1564,1567,3,190,95,0,1565,1566,5,178,0,0,1566,1568, + 3,188,94,0,1567,1565,1,0,0,0,1567,1568,1,0,0,0,1568,1571,1,0,0,0,1569, + 1570,5,178,0,0,1570,1572,3,152,76,0,1571,1569,1,0,0,0,1571,1572,1,0,0, + 0,1572,151,1,0,0,0,1573,1574,5,93,0,0,1574,1575,5,178,0,0,1575,1576,3, + 154,77,0,1576,153,1,0,0,0,1577,1578,6,77,-1,0,1578,1580,5,2,0,0,1579, + 1581,5,178,0,0,1580,1579,1,0,0,0,1580,1581,1,0,0,0,1581,1582,1,0,0,0, + 1582,1584,3,154,77,0,1583,1585,5,178,0,0,1584,1583,1,0,0,0,1584,1585, + 1,0,0,0,1585,1586,1,0,0,0,1586,1587,5,3,0,0,1587,1590,1,0,0,0,1588,1590, + 3,334,167,0,1589,1577,1,0,0,0,1589,1588,1,0,0,0,1590,1607,1,0,0,0,1591, + 1592,10,4,0,0,1592,1593,5,178,0,0,1593,1594,5,100,0,0,1594,1595,5,178, + 0,0,1595,1606,3,154,77,5,1596,1601,10,3,0,0,1597,1598,5,178,0,0,1598, + 1599,5,110,0,0,1599,1600,5,178,0,0,1600,1602,3,334,167,0,1601,1597,1, + 0,0,0,1602,1603,1,0,0,0,1603,1601,1,0,0,0,1603,1604,1,0,0,0,1604,1606, + 1,0,0,0,1605,1591,1,0,0,0,1605,1596,1,0,0,0,1606,1609,1,0,0,0,1607,1605, + 1,0,0,0,1607,1608,1,0,0,0,1608,155,1,0,0,0,1609,1607,1,0,0,0,1610,1612, + 5,143,0,0,1611,1613,5,178,0,0,1612,1611,1,0,0,0,1612,1613,1,0,0,0,1613, + 1614,1,0,0,0,1614,1615,3,232,116,0,1615,1616,5,178,0,0,1616,1617,5,53, + 0,0,1617,1618,5,178,0,0,1618,1619,3,320,160,0,1619,157,1,0,0,0,1620,1622, + 5,70,0,0,1621,1623,5,178,0,0,1622,1621,1,0,0,0,1622,1623,1,0,0,0,1623, + 1624,1,0,0,0,1624,1625,3,190,95,0,1625,159,1,0,0,0,1626,1628,5,108,0, + 0,1627,1629,5,178,0,0,1628,1627,1,0,0,0,1628,1629,1,0,0,0,1629,1630,1, + 0,0,0,1630,1635,3,190,95,0,1631,1632,5,178,0,0,1632,1634,3,162,81,0,1633, + 1631,1,0,0,0,1634,1637,1,0,0,0,1635,1633,1,0,0,0,1635,1636,1,0,0,0,1636, + 161,1,0,0,0,1637,1635,1,0,0,0,1638,1639,5,116,0,0,1639,1640,5,178,0,0, + 1640,1641,5,106,0,0,1641,1642,5,178,0,0,1642,1649,3,164,82,0,1643,1644, + 5,116,0,0,1644,1645,5,178,0,0,1645,1646,5,70,0,0,1646,1647,5,178,0,0, + 1647,1649,3,164,82,0,1648,1638,1,0,0,0,1648,1643,1,0,0,0,1649,163,1,0, + 0,0,1650,1652,5,131,0,0,1651,1653,5,178,0,0,1652,1651,1,0,0,0,1652,1653, + 1,0,0,0,1653,1654,1,0,0,0,1654,1665,3,166,83,0,1655,1657,5,178,0,0,1656, + 1655,1,0,0,0,1656,1657,1,0,0,0,1657,1658,1,0,0,0,1658,1660,5,4,0,0,1659, + 1661,5,178,0,0,1660,1659,1,0,0,0,1660,1661,1,0,0,0,1661,1662,1,0,0,0, + 1662,1664,3,166,83,0,1663,1656,1,0,0,0,1664,1667,1,0,0,0,1665,1663,1, + 0,0,0,1665,1666,1,0,0,0,1666,165,1,0,0,0,1667,1665,1,0,0,0,1668,1670, + 3,326,163,0,1669,1671,5,178,0,0,1670,1669,1,0,0,0,1670,1671,1,0,0,0,1671, + 1672,1,0,0,0,1672,1674,5,6,0,0,1673,1675,5,178,0,0,1674,1673,1,0,0,0, + 1674,1675,1,0,0,0,1675,1676,1,0,0,0,1676,1677,3,232,116,0,1677,167,1, + 0,0,0,1678,1679,5,78,0,0,1679,1681,5,178,0,0,1680,1678,1,0,0,0,1680,1681, + 1,0,0,0,1681,1682,1,0,0,0,1682,1684,5,75,0,0,1683,1685,5,178,0,0,1684, + 1683,1,0,0,0,1684,1685,1,0,0,0,1685,1686,1,0,0,0,1686,1697,3,232,116, + 0,1687,1689,5,178,0,0,1688,1687,1,0,0,0,1688,1689,1,0,0,0,1689,1690,1, + 0,0,0,1690,1692,5,4,0,0,1691,1693,5,178,0,0,1692,1691,1,0,0,0,1692,1693, + 1,0,0,0,1693,1694,1,0,0,0,1694,1696,3,232,116,0,1695,1688,1,0,0,0,1696, + 1699,1,0,0,0,1697,1695,1,0,0,0,1697,1698,1,0,0,0,1698,169,1,0,0,0,1699, + 1697,1,0,0,0,1700,1701,5,147,0,0,1701,1706,3,174,87,0,1702,1704,5,178, + 0,0,1703,1702,1,0,0,0,1703,1704,1,0,0,0,1704,1705,1,0,0,0,1705,1707,3, + 188,94,0,1706,1703,1,0,0,0,1706,1707,1,0,0,0,1707,171,1,0,0,0,1708,1709, + 5,127,0,0,1709,1710,3,174,87,0,1710,173,1,0,0,0,1711,1713,5,178,0,0,1712, + 1711,1,0,0,0,1712,1713,1,0,0,0,1713,1714,1,0,0,0,1714,1716,5,79,0,0,1715, + 1712,1,0,0,0,1715,1716,1,0,0,0,1716,1717,1,0,0,0,1717,1718,5,178,0,0, + 1718,1721,3,176,88,0,1719,1720,5,178,0,0,1720,1722,3,180,90,0,1721,1719, + 1,0,0,0,1721,1722,1,0,0,0,1722,1725,1,0,0,0,1723,1724,5,178,0,0,1724, + 1726,3,182,91,0,1725,1723,1,0,0,0,1725,1726,1,0,0,0,1726,1729,1,0,0,0, + 1727,1728,5,178,0,0,1728,1730,3,184,92,0,1729,1727,1,0,0,0,1729,1730, + 1,0,0,0,1730,175,1,0,0,0,1731,1742,5,155,0,0,1732,1734,5,178,0,0,1733, + 1732,1,0,0,0,1733,1734,1,0,0,0,1734,1735,1,0,0,0,1735,1737,5,4,0,0,1736, + 1738,5,178,0,0,1737,1736,1,0,0,0,1737,1738,1,0,0,0,1738,1739,1,0,0,0, + 1739,1741,3,178,89,0,1740,1733,1,0,0,0,1741,1744,1,0,0,0,1742,1740,1, + 0,0,0,1742,1743,1,0,0,0,1743,1760,1,0,0,0,1744,1742,1,0,0,0,1745,1756, + 3,178,89,0,1746,1748,5,178,0,0,1747,1746,1,0,0,0,1747,1748,1,0,0,0,1748, + 1749,1,0,0,0,1749,1751,5,4,0,0,1750,1752,5,178,0,0,1751,1750,1,0,0,0, + 1751,1752,1,0,0,0,1752,1753,1,0,0,0,1753,1755,3,178,89,0,1754,1747,1, + 0,0,0,1755,1758,1,0,0,0,1756,1754,1,0,0,0,1756,1757,1,0,0,0,1757,1760, + 1,0,0,0,1758,1756,1,0,0,0,1759,1731,1,0,0,0,1759,1745,1,0,0,0,1760,177, + 1,0,0,0,1761,1762,3,232,116,0,1762,1763,5,178,0,0,1763,1764,5,53,0,0, + 1764,1765,5,178,0,0,1765,1766,3,320,160,0,1766,1769,1,0,0,0,1767,1769, + 3,232,116,0,1768,1761,1,0,0,0,1768,1767,1,0,0,0,1769,179,1,0,0,0,1770, + 1771,5,120,0,0,1771,1772,5,178,0,0,1772,1773,5,58,0,0,1773,1774,5,178, + 0,0,1774,1782,3,186,93,0,1775,1777,5,4,0,0,1776,1778,5,178,0,0,1777,1776, + 1,0,0,0,1777,1778,1,0,0,0,1778,1779,1,0,0,0,1779,1781,3,186,93,0,1780, + 1775,1,0,0,0,1781,1784,1,0,0,0,1782,1780,1,0,0,0,1782,1783,1,0,0,0,1783, + 181,1,0,0,0,1784,1782,1,0,0,0,1785,1786,5,156,0,0,1786,1787,5,178,0,0, + 1787,1788,3,232,116,0,1788,183,1,0,0,0,1789,1790,5,102,0,0,1790,1791, + 5,178,0,0,1791,1792,3,232,116,0,1792,185,1,0,0,0,1793,1798,3,232,116, + 0,1794,1796,5,178,0,0,1795,1794,1,0,0,0,1795,1796,1,0,0,0,1796,1797,1, + 0,0,0,1797,1799,7,1,0,0,1798,1795,1,0,0,0,1798,1799,1,0,0,0,1799,187, + 1,0,0,0,1800,1801,5,146,0,0,1801,1802,5,178,0,0,1802,1803,3,232,116,0, + 1803,189,1,0,0,0,1804,1815,3,192,96,0,1805,1807,5,178,0,0,1806,1805,1, + 0,0,0,1806,1807,1,0,0,0,1807,1808,1,0,0,0,1808,1810,5,4,0,0,1809,1811, + 5,178,0,0,1810,1809,1,0,0,0,1810,1811,1,0,0,0,1811,1812,1,0,0,0,1812, + 1814,3,192,96,0,1813,1806,1,0,0,0,1814,1817,1,0,0,0,1815,1813,1,0,0,0, + 1815,1816,1,0,0,0,1816,191,1,0,0,0,1817,1815,1,0,0,0,1818,1820,3,320, + 160,0,1819,1821,5,178,0,0,1820,1819,1,0,0,0,1820,1821,1,0,0,0,1821,1822, + 1,0,0,0,1822,1824,5,6,0,0,1823,1825,5,178,0,0,1824,1823,1,0,0,0,1824, + 1825,1,0,0,0,1825,1826,1,0,0,0,1826,1827,3,194,97,0,1827,1830,1,0,0,0, + 1828,1830,3,194,97,0,1829,1818,1,0,0,0,1829,1828,1,0,0,0,1830,193,1,0, + 0,0,1831,1832,3,196,98,0,1832,195,1,0,0,0,1833,1840,3,198,99,0,1834,1836, + 5,178,0,0,1835,1834,1,0,0,0,1835,1836,1,0,0,0,1836,1837,1,0,0,0,1837, + 1839,3,200,100,0,1838,1835,1,0,0,0,1839,1842,1,0,0,0,1840,1838,1,0,0, + 0,1840,1841,1,0,0,0,1841,1848,1,0,0,0,1842,1840,1,0,0,0,1843,1844,5,2, + 0,0,1844,1845,3,196,98,0,1845,1846,5,3,0,0,1846,1848,1,0,0,0,1847,1833, + 1,0,0,0,1847,1843,1,0,0,0,1848,197,1,0,0,0,1849,1851,5,2,0,0,1850,1852, + 5,178,0,0,1851,1850,1,0,0,0,1851,1852,1,0,0,0,1852,1857,1,0,0,0,1853, + 1855,3,320,160,0,1854,1856,5,178,0,0,1855,1854,1,0,0,0,1855,1856,1,0, + 0,0,1856,1858,1,0,0,0,1857,1853,1,0,0,0,1857,1858,1,0,0,0,1858,1863,1, + 0,0,0,1859,1861,3,210,105,0,1860,1862,5,178,0,0,1861,1860,1,0,0,0,1861, + 1862,1,0,0,0,1862,1864,1,0,0,0,1863,1859,1,0,0,0,1863,1864,1,0,0,0,1864, + 1869,1,0,0,0,1865,1867,3,206,103,0,1866,1868,5,178,0,0,1867,1866,1,0, + 0,0,1867,1868,1,0,0,0,1868,1870,1,0,0,0,1869,1865,1,0,0,0,1869,1870,1, + 0,0,0,1870,1871,1,0,0,0,1871,1872,5,3,0,0,1872,199,1,0,0,0,1873,1875, + 3,202,101,0,1874,1876,5,178,0,0,1875,1874,1,0,0,0,1875,1876,1,0,0,0,1876, + 1877,1,0,0,0,1877,1878,3,198,99,0,1878,201,1,0,0,0,1879,1881,3,340,170, + 0,1880,1882,5,178,0,0,1881,1880,1,0,0,0,1881,1882,1,0,0,0,1882,1883,1, + 0,0,0,1883,1885,3,344,172,0,1884,1886,5,178,0,0,1885,1884,1,0,0,0,1885, + 1886,1,0,0,0,1886,1888,1,0,0,0,1887,1889,3,204,102,0,1888,1887,1,0,0, + 0,1888,1889,1,0,0,0,1889,1891,1,0,0,0,1890,1892,5,178,0,0,1891,1890,1, + 0,0,0,1891,1892,1,0,0,0,1892,1893,1,0,0,0,1893,1894,3,344,172,0,1894, + 1924,1,0,0,0,1895,1897,3,344,172,0,1896,1898,5,178,0,0,1897,1896,1,0, + 0,0,1897,1898,1,0,0,0,1898,1900,1,0,0,0,1899,1901,3,204,102,0,1900,1899, + 1,0,0,0,1900,1901,1,0,0,0,1901,1903,1,0,0,0,1902,1904,5,178,0,0,1903, + 1902,1,0,0,0,1903,1904,1,0,0,0,1904,1905,1,0,0,0,1905,1907,3,344,172, + 0,1906,1908,5,178,0,0,1907,1906,1,0,0,0,1907,1908,1,0,0,0,1908,1909,1, + 0,0,0,1909,1910,3,342,171,0,1910,1924,1,0,0,0,1911,1913,3,344,172,0,1912, + 1914,5,178,0,0,1913,1912,1,0,0,0,1913,1914,1,0,0,0,1914,1916,1,0,0,0, + 1915,1917,3,204,102,0,1916,1915,1,0,0,0,1916,1917,1,0,0,0,1917,1919,1, + 0,0,0,1918,1920,5,178,0,0,1919,1918,1,0,0,0,1919,1920,1,0,0,0,1920,1921, + 1,0,0,0,1921,1922,3,344,172,0,1922,1924,1,0,0,0,1923,1879,1,0,0,0,1923, + 1895,1,0,0,0,1923,1911,1,0,0,0,1924,203,1,0,0,0,1925,1927,5,7,0,0,1926, + 1928,5,178,0,0,1927,1926,1,0,0,0,1927,1928,1,0,0,0,1928,1933,1,0,0,0, + 1929,1931,3,320,160,0,1930,1932,5,178,0,0,1931,1930,1,0,0,0,1931,1932, + 1,0,0,0,1932,1934,1,0,0,0,1933,1929,1,0,0,0,1933,1934,1,0,0,0,1934,1939, + 1,0,0,0,1935,1937,3,208,104,0,1936,1938,5,178,0,0,1937,1936,1,0,0,0,1937, + 1938,1,0,0,0,1938,1940,1,0,0,0,1939,1935,1,0,0,0,1939,1940,1,0,0,0,1940, + 1945,1,0,0,0,1941,1943,3,214,107,0,1942,1944,5,178,0,0,1943,1942,1,0, + 0,0,1943,1944,1,0,0,0,1944,1946,1,0,0,0,1945,1941,1,0,0,0,1945,1946,1, + 0,0,0,1946,1951,1,0,0,0,1947,1949,3,206,103,0,1948,1950,5,178,0,0,1949, + 1948,1,0,0,0,1949,1950,1,0,0,0,1950,1952,1,0,0,0,1951,1947,1,0,0,0,1951, + 1952,1,0,0,0,1952,1953,1,0,0,0,1953,1954,5,8,0,0,1954,205,1,0,0,0,1955, + 1957,5,9,0,0,1956,1958,5,178,0,0,1957,1956,1,0,0,0,1957,1958,1,0,0,0, + 1958,1992,1,0,0,0,1959,1961,3,328,164,0,1960,1962,5,178,0,0,1961,1960, + 1,0,0,0,1961,1962,1,0,0,0,1962,1963,1,0,0,0,1963,1965,5,160,0,0,1964, + 1966,5,178,0,0,1965,1964,1,0,0,0,1965,1966,1,0,0,0,1966,1967,1,0,0,0, + 1967,1969,3,232,116,0,1968,1970,5,178,0,0,1969,1968,1,0,0,0,1969,1970, + 1,0,0,0,1970,1989,1,0,0,0,1971,1973,5,4,0,0,1972,1974,5,178,0,0,1973, + 1972,1,0,0,0,1973,1974,1,0,0,0,1974,1975,1,0,0,0,1975,1977,3,328,164, + 0,1976,1978,5,178,0,0,1977,1976,1,0,0,0,1977,1978,1,0,0,0,1978,1979,1, + 0,0,0,1979,1981,5,160,0,0,1980,1982,5,178,0,0,1981,1980,1,0,0,0,1981, + 1982,1,0,0,0,1982,1983,1,0,0,0,1983,1985,3,232,116,0,1984,1986,5,178, + 0,0,1985,1984,1,0,0,0,1985,1986,1,0,0,0,1986,1988,1,0,0,0,1987,1971,1, + 0,0,0,1988,1991,1,0,0,0,1989,1987,1,0,0,0,1989,1990,1,0,0,0,1990,1993, + 1,0,0,0,1991,1989,1,0,0,0,1992,1959,1,0,0,0,1992,1993,1,0,0,0,1993,1994, + 1,0,0,0,1994,1995,5,10,0,0,1995,207,1,0,0,0,1996,1998,5,160,0,0,1997, + 1999,5,178,0,0,1998,1997,1,0,0,0,1998,1999,1,0,0,0,1999,2000,1,0,0,0, + 2000,2014,3,230,115,0,2001,2003,5,178,0,0,2002,2001,1,0,0,0,2002,2003, + 1,0,0,0,2003,2004,1,0,0,0,2004,2006,5,12,0,0,2005,2007,5,160,0,0,2006, + 2005,1,0,0,0,2006,2007,1,0,0,0,2007,2009,1,0,0,0,2008,2010,5,178,0,0, + 2009,2008,1,0,0,0,2009,2010,1,0,0,0,2010,2011,1,0,0,0,2011,2013,3,230, + 115,0,2012,2002,1,0,0,0,2013,2016,1,0,0,0,2014,2012,1,0,0,0,2014,2015, + 1,0,0,0,2015,209,1,0,0,0,2016,2014,1,0,0,0,2017,2024,3,212,106,0,2018, + 2020,5,178,0,0,2019,2018,1,0,0,0,2019,2020,1,0,0,0,2020,2021,1,0,0,0, + 2021,2023,3,212,106,0,2022,2019,1,0,0,0,2023,2026,1,0,0,0,2024,2022,1, + 0,0,0,2024,2025,1,0,0,0,2025,211,1,0,0,0,2026,2024,1,0,0,0,2027,2029, + 5,160,0,0,2028,2030,5,178,0,0,2029,2028,1,0,0,0,2029,2030,1,0,0,0,2030, + 2031,1,0,0,0,2031,2032,3,228,114,0,2032,213,1,0,0,0,2033,2038,5,155,0, + 0,2034,2036,5,178,0,0,2035,2034,1,0,0,0,2035,2036,1,0,0,0,2036,2037,1, + 0,0,0,2037,2039,3,216,108,0,2038,2035,1,0,0,0,2038,2039,1,0,0,0,2039, + 2044,1,0,0,0,2040,2042,5,178,0,0,2041,2040,1,0,0,0,2041,2042,1,0,0,0, + 2042,2043,1,0,0,0,2043,2045,3,218,109,0,2044,2041,1,0,0,0,2044,2045,1, + 0,0,0,2045,2050,1,0,0,0,2046,2048,5,178,0,0,2047,2046,1,0,0,0,2047,2048, + 1,0,0,0,2048,2049,1,0,0,0,2049,2051,3,220,110,0,2050,2047,1,0,0,0,2050, + 2051,1,0,0,0,2051,215,1,0,0,0,2052,2053,5,50,0,0,2053,2055,5,178,0,0, + 2054,2052,1,0,0,0,2054,2055,1,0,0,0,2055,2056,1,0,0,0,2056,2058,5,149, + 0,0,2057,2059,5,178,0,0,2058,2057,1,0,0,0,2058,2059,1,0,0,0,2059,2060, + 1,0,0,0,2060,2062,5,2,0,0,2061,2063,5,178,0,0,2062,2061,1,0,0,0,2062, + 2063,1,0,0,0,2063,2064,1,0,0,0,2064,2066,3,328,164,0,2065,2067,5,178, + 0,0,2066,2065,1,0,0,0,2066,2067,1,0,0,0,2067,2068,1,0,0,0,2068,2069,5, + 3,0,0,2069,2077,1,0,0,0,2070,2077,5,132,0,0,2071,2072,5,50,0,0,2072,2073, + 5,178,0,0,2073,2077,5,132,0,0,2074,2077,5,138,0,0,2075,2077,5,47,0,0, + 2076,2054,1,0,0,0,2076,2070,1,0,0,0,2076,2071,1,0,0,0,2076,2074,1,0,0, + 0,2076,2075,1,0,0,0,2077,217,1,0,0,0,2078,2080,3,224,112,0,2079,2078, + 1,0,0,0,2079,2080,1,0,0,0,2080,2082,1,0,0,0,2081,2083,5,178,0,0,2082, + 2081,1,0,0,0,2082,2083,1,0,0,0,2083,2084,1,0,0,0,2084,2086,5,13,0,0,2085, + 2087,5,178,0,0,2086,2085,1,0,0,0,2086,2087,1,0,0,0,2087,2089,1,0,0,0, + 2088,2090,3,226,113,0,2089,2088,1,0,0,0,2089,2090,1,0,0,0,2090,2093,1, + 0,0,0,2091,2093,3,330,165,0,2092,2079,1,0,0,0,2092,2091,1,0,0,0,2093, + 219,1,0,0,0,2094,2096,5,2,0,0,2095,2097,5,178,0,0,2096,2095,1,0,0,0,2096, + 2097,1,0,0,0,2097,2098,1,0,0,0,2098,2100,3,320,160,0,2099,2101,5,178, + 0,0,2100,2099,1,0,0,0,2100,2101,1,0,0,0,2101,2102,1,0,0,0,2102,2104,5, + 4,0,0,2103,2105,5,178,0,0,2104,2103,1,0,0,0,2104,2105,1,0,0,0,2105,2106, + 1,0,0,0,2106,2118,3,320,160,0,2107,2109,5,178,0,0,2108,2107,1,0,0,0,2108, + 2109,1,0,0,0,2109,2110,1,0,0,0,2110,2112,5,12,0,0,2111,2113,5,178,0,0, + 2112,2111,1,0,0,0,2112,2113,1,0,0,0,2113,2114,1,0,0,0,2114,2116,3,188, + 94,0,2115,2117,5,178,0,0,2116,2115,1,0,0,0,2116,2117,1,0,0,0,2117,2119, + 1,0,0,0,2118,2108,1,0,0,0,2118,2119,1,0,0,0,2119,2139,1,0,0,0,2120,2122, + 5,178,0,0,2121,2120,1,0,0,0,2121,2122,1,0,0,0,2122,2123,1,0,0,0,2123, + 2125,5,12,0,0,2124,2126,5,178,0,0,2125,2124,1,0,0,0,2125,2126,1,0,0,0, + 2126,2127,1,0,0,0,2127,2129,3,222,111,0,2128,2130,5,178,0,0,2129,2128, + 1,0,0,0,2129,2130,1,0,0,0,2130,2131,1,0,0,0,2131,2133,5,4,0,0,2132,2134, + 5,178,0,0,2133,2132,1,0,0,0,2133,2134,1,0,0,0,2134,2135,1,0,0,0,2135, + 2137,3,222,111,0,2136,2138,5,178,0,0,2137,2136,1,0,0,0,2137,2138,1,0, + 0,0,2138,2140,1,0,0,0,2139,2121,1,0,0,0,2139,2140,1,0,0,0,2140,2141,1, + 0,0,0,2141,2142,5,3,0,0,2142,221,1,0,0,0,2143,2145,5,9,0,0,2144,2146, + 5,178,0,0,2145,2144,1,0,0,0,2145,2146,1,0,0,0,2146,2148,1,0,0,0,2147, + 2149,3,176,88,0,2148,2147,1,0,0,0,2148,2149,1,0,0,0,2149,2151,1,0,0,0, + 2150,2152,5,178,0,0,2151,2150,1,0,0,0,2151,2152,1,0,0,0,2152,2153,1,0, + 0,0,2153,2154,5,10,0,0,2154,223,1,0,0,0,2155,2156,5,165,0,0,2156,225, + 1,0,0,0,2157,2158,5,165,0,0,2158,227,1,0,0,0,2159,2160,3,334,167,0,2160, + 229,1,0,0,0,2161,2162,3,334,167,0,2162,231,1,0,0,0,2163,2164,3,234,117, + 0,2164,233,1,0,0,0,2165,2172,3,236,118,0,2166,2167,5,178,0,0,2167,2168, + 5,119,0,0,2168,2169,5,178,0,0,2169,2171,3,236,118,0,2170,2166,1,0,0,0, + 2171,2174,1,0,0,0,2172,2170,1,0,0,0,2172,2173,1,0,0,0,2173,235,1,0,0, + 0,2174,2172,1,0,0,0,2175,2182,3,238,119,0,2176,2177,5,178,0,0,2177,2178, + 5,150,0,0,2178,2179,5,178,0,0,2179,2181,3,238,119,0,2180,2176,1,0,0,0, + 2181,2184,1,0,0,0,2182,2180,1,0,0,0,2182,2183,1,0,0,0,2183,237,1,0,0, + 0,2184,2182,1,0,0,0,2185,2192,3,240,120,0,2186,2187,5,178,0,0,2187,2188, + 5,52,0,0,2188,2189,5,178,0,0,2189,2191,3,240,120,0,2190,2186,1,0,0,0, + 2191,2194,1,0,0,0,2192,2190,1,0,0,0,2192,2193,1,0,0,0,2193,239,1,0,0, + 0,2194,2192,1,0,0,0,2195,2197,5,113,0,0,2196,2198,5,178,0,0,2197,2196, + 1,0,0,0,2197,2198,1,0,0,0,2198,2200,1,0,0,0,2199,2195,1,0,0,0,2200,2203, + 1,0,0,0,2201,2199,1,0,0,0,2201,2202,1,0,0,0,2202,2204,1,0,0,0,2203,2201, + 1,0,0,0,2204,2205,3,242,121,0,2205,241,1,0,0,0,2206,2216,3,246,123,0, + 2207,2209,5,178,0,0,2208,2207,1,0,0,0,2208,2209,1,0,0,0,2209,2210,1,0, + 0,0,2210,2212,3,244,122,0,2211,2213,5,178,0,0,2212,2211,1,0,0,0,2212, + 2213,1,0,0,0,2213,2214,1,0,0,0,2214,2215,3,246,123,0,2215,2217,1,0,0, + 0,2216,2208,1,0,0,0,2216,2217,1,0,0,0,2217,2255,1,0,0,0,2218,2220,3,246, + 123,0,2219,2221,5,178,0,0,2220,2219,1,0,0,0,2220,2221,1,0,0,0,2221,2222, + 1,0,0,0,2222,2224,5,157,0,0,2223,2225,5,178,0,0,2224,2223,1,0,0,0,2224, + 2225,1,0,0,0,2225,2226,1,0,0,0,2226,2227,3,246,123,0,2227,2228,1,0,0, + 0,2228,2229,6,121,-1,0,2229,2255,1,0,0,0,2230,2232,3,246,123,0,2231,2233, + 5,178,0,0,2232,2231,1,0,0,0,2232,2233,1,0,0,0,2233,2234,1,0,0,0,2234, + 2236,3,244,122,0,2235,2237,5,178,0,0,2236,2235,1,0,0,0,2236,2237,1,0, + 0,0,2237,2238,1,0,0,0,2238,2248,3,246,123,0,2239,2241,5,178,0,0,2240, + 2239,1,0,0,0,2240,2241,1,0,0,0,2241,2242,1,0,0,0,2242,2244,3,244,122, + 0,2243,2245,5,178,0,0,2244,2243,1,0,0,0,2244,2245,1,0,0,0,2245,2246,1, + 0,0,0,2246,2247,3,246,123,0,2247,2249,1,0,0,0,2248,2240,1,0,0,0,2249, + 2250,1,0,0,0,2250,2248,1,0,0,0,2250,2251,1,0,0,0,2251,2252,1,0,0,0,2252, + 2253,6,121,-1,0,2253,2255,1,0,0,0,2254,2206,1,0,0,0,2254,2218,1,0,0,0, + 2254,2230,1,0,0,0,2255,243,1,0,0,0,2256,2257,7,2,0,0,2257,245,1,0,0,0, + 2258,2269,3,248,124,0,2259,2261,5,178,0,0,2260,2259,1,0,0,0,2260,2261, + 1,0,0,0,2261,2262,1,0,0,0,2262,2264,5,12,0,0,2263,2265,5,178,0,0,2264, + 2263,1,0,0,0,2264,2265,1,0,0,0,2265,2266,1,0,0,0,2266,2268,3,248,124, + 0,2267,2260,1,0,0,0,2268,2271,1,0,0,0,2269,2267,1,0,0,0,2269,2270,1,0, + 0,0,2270,247,1,0,0,0,2271,2269,1,0,0,0,2272,2283,3,250,125,0,2273,2275, + 5,178,0,0,2274,2273,1,0,0,0,2274,2275,1,0,0,0,2275,2276,1,0,0,0,2276, + 2278,5,19,0,0,2277,2279,5,178,0,0,2278,2277,1,0,0,0,2278,2279,1,0,0,0, + 2279,2280,1,0,0,0,2280,2282,3,250,125,0,2281,2274,1,0,0,0,2282,2285,1, + 0,0,0,2283,2281,1,0,0,0,2283,2284,1,0,0,0,2284,249,1,0,0,0,2285,2283, + 1,0,0,0,2286,2298,3,254,127,0,2287,2289,5,178,0,0,2288,2287,1,0,0,0,2288, + 2289,1,0,0,0,2289,2290,1,0,0,0,2290,2292,3,252,126,0,2291,2293,5,178, + 0,0,2292,2291,1,0,0,0,2292,2293,1,0,0,0,2293,2294,1,0,0,0,2294,2295,3, + 254,127,0,2295,2297,1,0,0,0,2296,2288,1,0,0,0,2297,2300,1,0,0,0,2298, + 2296,1,0,0,0,2298,2299,1,0,0,0,2299,251,1,0,0,0,2300,2298,1,0,0,0,2301, + 2302,7,3,0,0,2302,253,1,0,0,0,2303,2315,3,258,129,0,2304,2306,5,178,0, + 0,2305,2304,1,0,0,0,2305,2306,1,0,0,0,2306,2307,1,0,0,0,2307,2309,3,256, + 128,0,2308,2310,5,178,0,0,2309,2308,1,0,0,0,2309,2310,1,0,0,0,2310,2311, + 1,0,0,0,2311,2312,3,258,129,0,2312,2314,1,0,0,0,2313,2305,1,0,0,0,2314, + 2317,1,0,0,0,2315,2313,1,0,0,0,2315,2316,1,0,0,0,2316,255,1,0,0,0,2317, + 2315,1,0,0,0,2318,2319,7,4,0,0,2319,257,1,0,0,0,2320,2332,3,262,131,0, + 2321,2323,5,178,0,0,2322,2321,1,0,0,0,2322,2323,1,0,0,0,2323,2324,1,0, + 0,0,2324,2326,3,260,130,0,2325,2327,5,178,0,0,2326,2325,1,0,0,0,2326, + 2327,1,0,0,0,2327,2328,1,0,0,0,2328,2329,3,262,131,0,2329,2331,1,0,0, + 0,2330,2322,1,0,0,0,2331,2334,1,0,0,0,2332,2330,1,0,0,0,2332,2333,1,0, + 0,0,2333,259,1,0,0,0,2334,2332,1,0,0,0,2335,2336,7,5,0,0,2336,261,1,0, + 0,0,2337,2348,3,264,132,0,2338,2340,5,178,0,0,2339,2338,1,0,0,0,2339, + 2340,1,0,0,0,2340,2341,1,0,0,0,2341,2343,5,25,0,0,2342,2344,5,178,0,0, + 2343,2342,1,0,0,0,2343,2344,1,0,0,0,2344,2345,1,0,0,0,2345,2347,3,264, + 132,0,2346,2339,1,0,0,0,2347,2350,1,0,0,0,2348,2346,1,0,0,0,2348,2349, + 1,0,0,0,2349,263,1,0,0,0,2350,2348,1,0,0,0,2351,2353,5,158,0,0,2352,2354, + 5,178,0,0,2353,2352,1,0,0,0,2353,2354,1,0,0,0,2354,2356,1,0,0,0,2355, + 2351,1,0,0,0,2356,2359,1,0,0,0,2357,2355,1,0,0,0,2357,2358,1,0,0,0,2358, + 2360,1,0,0,0,2359,2357,1,0,0,0,2360,2365,3,266,133,0,2361,2363,5,178, + 0,0,2362,2361,1,0,0,0,2362,2363,1,0,0,0,2363,2364,1,0,0,0,2364,2366,5, + 159,0,0,2365,2362,1,0,0,0,2365,2366,1,0,0,0,2366,265,1,0,0,0,2367,2375, + 3,276,138,0,2368,2376,3,270,135,0,2369,2371,3,268,134,0,2370,2369,1,0, + 0,0,2371,2372,1,0,0,0,2372,2370,1,0,0,0,2372,2373,1,0,0,0,2373,2376,1, + 0,0,0,2374,2376,3,274,137,0,2375,2368,1,0,0,0,2375,2370,1,0,0,0,2375, + 2374,1,0,0,0,2375,2376,1,0,0,0,2376,267,1,0,0,0,2377,2378,5,178,0,0,2378, + 2380,5,96,0,0,2379,2381,5,178,0,0,2380,2379,1,0,0,0,2380,2381,1,0,0,0, + 2381,2382,1,0,0,0,2382,2397,3,276,138,0,2383,2384,5,7,0,0,2384,2385,3, + 232,116,0,2385,2386,5,8,0,0,2386,2397,1,0,0,0,2387,2389,5,7,0,0,2388, + 2390,3,232,116,0,2389,2388,1,0,0,0,2389,2390,1,0,0,0,2390,2391,1,0,0, + 0,2391,2393,5,160,0,0,2392,2394,3,232,116,0,2393,2392,1,0,0,0,2393,2394, + 1,0,0,0,2394,2395,1,0,0,0,2395,2397,5,8,0,0,2396,2377,1,0,0,0,2396,2383, + 1,0,0,0,2396,2387,1,0,0,0,2397,269,1,0,0,0,2398,2410,3,272,136,0,2399, + 2400,5,178,0,0,2400,2401,5,134,0,0,2401,2402,5,178,0,0,2402,2410,5,147, + 0,0,2403,2404,5,178,0,0,2404,2405,5,83,0,0,2405,2406,5,178,0,0,2406,2410, + 5,147,0,0,2407,2408,5,178,0,0,2408,2410,5,67,0,0,2409,2398,1,0,0,0,2409, + 2399,1,0,0,0,2409,2403,1,0,0,0,2409,2407,1,0,0,0,2410,2412,1,0,0,0,2411, + 2413,5,178,0,0,2412,2411,1,0,0,0,2412,2413,1,0,0,0,2413,2414,1,0,0,0, + 2414,2415,3,276,138,0,2415,271,1,0,0,0,2416,2418,5,178,0,0,2417,2416, + 1,0,0,0,2417,2418,1,0,0,0,2418,2419,1,0,0,0,2419,2420,5,26,0,0,2420,273, + 1,0,0,0,2421,2422,5,178,0,0,2422,2423,5,99,0,0,2423,2424,5,178,0,0,2424, + 2432,5,115,0,0,2425,2426,5,178,0,0,2426,2427,5,99,0,0,2427,2428,5,178, + 0,0,2428,2429,5,113,0,0,2429,2430,5,178,0,0,2430,2432,5,115,0,0,2431, + 2421,1,0,0,0,2431,2425,1,0,0,0,2432,275,1,0,0,0,2433,2440,3,278,139,0, + 2434,2436,5,178,0,0,2435,2434,1,0,0,0,2435,2436,1,0,0,0,2436,2437,1,0, + 0,0,2437,2439,3,314,157,0,2438,2435,1,0,0,0,2439,2442,1,0,0,0,2440,2438, + 1,0,0,0,2440,2441,1,0,0,0,2441,277,1,0,0,0,2442,2440,1,0,0,0,2443,2453, + 3,286,143,0,2444,2453,3,324,162,0,2445,2453,3,316,158,0,2446,2453,3,298, + 149,0,2447,2453,3,300,150,0,2448,2453,3,310,155,0,2449,2453,3,312,156, + 0,2450,2453,3,320,160,0,2451,2453,3,280,140,0,2452,2443,1,0,0,0,2452, + 2444,1,0,0,0,2452,2445,1,0,0,0,2452,2446,1,0,0,0,2452,2447,1,0,0,0,2452, + 2448,1,0,0,0,2452,2449,1,0,0,0,2452,2450,1,0,0,0,2452,2451,1,0,0,0,2453, + 279,1,0,0,0,2454,2456,5,50,0,0,2455,2457,5,178,0,0,2456,2455,1,0,0,0, + 2456,2457,1,0,0,0,2457,2458,1,0,0,0,2458,2460,5,2,0,0,2459,2461,5,178, + 0,0,2460,2459,1,0,0,0,2460,2461,1,0,0,0,2461,2462,1,0,0,0,2462,2464,3, + 282,141,0,2463,2465,5,178,0,0,2464,2463,1,0,0,0,2464,2465,1,0,0,0,2465, + 2466,1,0,0,0,2466,2467,5,3,0,0,2467,2511,1,0,0,0,2468,2470,5,48,0,0,2469, + 2471,5,178,0,0,2470,2469,1,0,0,0,2470,2471,1,0,0,0,2471,2472,1,0,0,0, + 2472,2474,5,2,0,0,2473,2475,5,178,0,0,2474,2473,1,0,0,0,2474,2475,1,0, + 0,0,2475,2476,1,0,0,0,2476,2478,3,282,141,0,2477,2479,5,178,0,0,2478, + 2477,1,0,0,0,2478,2479,1,0,0,0,2479,2480,1,0,0,0,2480,2481,5,3,0,0,2481, + 2511,1,0,0,0,2482,2484,5,114,0,0,2483,2485,5,178,0,0,2484,2483,1,0,0, + 0,2484,2485,1,0,0,0,2485,2486,1,0,0,0,2486,2488,5,2,0,0,2487,2489,5,178, + 0,0,2488,2487,1,0,0,0,2488,2489,1,0,0,0,2489,2490,1,0,0,0,2490,2492,3, + 282,141,0,2491,2493,5,178,0,0,2492,2491,1,0,0,0,2492,2493,1,0,0,0,2493, + 2494,1,0,0,0,2494,2495,5,3,0,0,2495,2511,1,0,0,0,2496,2498,5,151,0,0, + 2497,2499,5,178,0,0,2498,2497,1,0,0,0,2498,2499,1,0,0,0,2499,2500,1,0, + 0,0,2500,2502,5,2,0,0,2501,2503,5,178,0,0,2502,2501,1,0,0,0,2502,2503, + 1,0,0,0,2503,2504,1,0,0,0,2504,2506,3,282,141,0,2505,2507,5,178,0,0,2506, + 2505,1,0,0,0,2506,2507,1,0,0,0,2507,2508,1,0,0,0,2508,2509,5,3,0,0,2509, + 2511,1,0,0,0,2510,2454,1,0,0,0,2510,2468,1,0,0,0,2510,2482,1,0,0,0,2510, + 2496,1,0,0,0,2511,281,1,0,0,0,2512,2513,3,284,142,0,2513,2514,5,178,0, + 0,2514,2515,3,188,94,0,2515,283,1,0,0,0,2516,2517,3,320,160,0,2517,2518, + 5,178,0,0,2518,2519,5,96,0,0,2519,2520,5,178,0,0,2520,2521,3,232,116, + 0,2521,285,1,0,0,0,2522,2529,3,322,161,0,2523,2529,5,163,0,0,2524,2529, + 3,288,144,0,2525,2529,5,115,0,0,2526,2529,3,290,145,0,2527,2529,3,294, + 147,0,2528,2522,1,0,0,0,2528,2523,1,0,0,0,2528,2524,1,0,0,0,2528,2525, + 1,0,0,0,2528,2526,1,0,0,0,2528,2527,1,0,0,0,2529,287,1,0,0,0,2530,2531, + 7,6,0,0,2531,289,1,0,0,0,2532,2534,5,7,0,0,2533,2535,5,178,0,0,2534,2533, + 1,0,0,0,2534,2535,1,0,0,0,2535,2549,1,0,0,0,2536,2538,3,232,116,0,2537, + 2539,5,178,0,0,2538,2537,1,0,0,0,2538,2539,1,0,0,0,2539,2546,1,0,0,0, + 2540,2542,3,292,146,0,2541,2543,5,178,0,0,2542,2541,1,0,0,0,2542,2543, + 1,0,0,0,2543,2545,1,0,0,0,2544,2540,1,0,0,0,2545,2548,1,0,0,0,2546,2544, + 1,0,0,0,2546,2547,1,0,0,0,2547,2550,1,0,0,0,2548,2546,1,0,0,0,2549,2536, + 1,0,0,0,2549,2550,1,0,0,0,2550,2551,1,0,0,0,2551,2552,5,8,0,0,2552,291, + 1,0,0,0,2553,2555,5,4,0,0,2554,2556,5,178,0,0,2555,2554,1,0,0,0,2555, + 2556,1,0,0,0,2556,2558,1,0,0,0,2557,2559,3,232,116,0,2558,2557,1,0,0, + 0,2558,2559,1,0,0,0,2559,293,1,0,0,0,2560,2562,5,9,0,0,2561,2563,5,178, + 0,0,2562,2561,1,0,0,0,2562,2563,1,0,0,0,2563,2564,1,0,0,0,2564,2566,3, + 296,148,0,2565,2567,5,178,0,0,2566,2565,1,0,0,0,2566,2567,1,0,0,0,2567, + 2578,1,0,0,0,2568,2570,5,4,0,0,2569,2571,5,178,0,0,2570,2569,1,0,0,0, + 2570,2571,1,0,0,0,2571,2572,1,0,0,0,2572,2574,3,296,148,0,2573,2575,5, + 178,0,0,2574,2573,1,0,0,0,2574,2575,1,0,0,0,2575,2577,1,0,0,0,2576,2568, + 1,0,0,0,2577,2580,1,0,0,0,2578,2576,1,0,0,0,2578,2579,1,0,0,0,2579,2581, + 1,0,0,0,2580,2578,1,0,0,0,2581,2582,5,10,0,0,2582,295,1,0,0,0,2583,2586, + 3,336,168,0,2584,2586,5,163,0,0,2585,2583,1,0,0,0,2585,2584,1,0,0,0,2586, + 2588,1,0,0,0,2587,2589,5,178,0,0,2588,2587,1,0,0,0,2588,2589,1,0,0,0, + 2589,2590,1,0,0,0,2590,2592,5,160,0,0,2591,2593,5,178,0,0,2592,2591,1, + 0,0,0,2592,2593,1,0,0,0,2593,2594,1,0,0,0,2594,2595,3,232,116,0,2595, + 297,1,0,0,0,2596,2598,5,2,0,0,2597,2599,5,178,0,0,2598,2597,1,0,0,0,2598, + 2599,1,0,0,0,2599,2600,1,0,0,0,2600,2602,3,232,116,0,2601,2603,5,178, + 0,0,2602,2601,1,0,0,0,2602,2603,1,0,0,0,2603,2604,1,0,0,0,2604,2605,5, + 3,0,0,2605,299,1,0,0,0,2606,2608,5,69,0,0,2607,2609,5,178,0,0,2608,2607, + 1,0,0,0,2608,2609,1,0,0,0,2609,2610,1,0,0,0,2610,2612,5,2,0,0,2611,2613, + 5,178,0,0,2612,2611,1,0,0,0,2612,2613,1,0,0,0,2613,2614,1,0,0,0,2614, + 2616,5,155,0,0,2615,2617,5,178,0,0,2616,2615,1,0,0,0,2616,2617,1,0,0, + 0,2617,2618,1,0,0,0,2618,2684,5,3,0,0,2619,2621,5,61,0,0,2620,2622,5, + 178,0,0,2621,2620,1,0,0,0,2621,2622,1,0,0,0,2622,2623,1,0,0,0,2623,2625, + 5,2,0,0,2624,2626,5,178,0,0,2625,2624,1,0,0,0,2625,2626,1,0,0,0,2626, + 2627,1,0,0,0,2627,2629,3,304,152,0,2628,2630,5,178,0,0,2629,2628,1,0, + 0,0,2629,2630,1,0,0,0,2630,2641,1,0,0,0,2631,2633,5,53,0,0,2632,2634, + 5,178,0,0,2633,2632,1,0,0,0,2633,2634,1,0,0,0,2634,2635,1,0,0,0,2635, + 2642,3,96,48,0,2636,2638,5,4,0,0,2637,2639,5,178,0,0,2638,2637,1,0,0, + 0,2638,2639,1,0,0,0,2639,2640,1,0,0,0,2640,2642,3,304,152,0,2641,2631, + 1,0,0,0,2641,2636,1,0,0,0,2642,2644,1,0,0,0,2643,2645,5,178,0,0,2644, + 2643,1,0,0,0,2644,2645,1,0,0,0,2645,2646,1,0,0,0,2646,2647,5,3,0,0,2647, + 2684,1,0,0,0,2648,2650,3,302,151,0,2649,2651,5,178,0,0,2650,2649,1,0, + 0,0,2650,2651,1,0,0,0,2651,2652,1,0,0,0,2652,2654,5,2,0,0,2653,2655,5, + 178,0,0,2654,2653,1,0,0,0,2654,2655,1,0,0,0,2655,2660,1,0,0,0,2656,2658, + 5,79,0,0,2657,2659,5,178,0,0,2658,2657,1,0,0,0,2658,2659,1,0,0,0,2659, + 2661,1,0,0,0,2660,2656,1,0,0,0,2660,2661,1,0,0,0,2661,2679,1,0,0,0,2662, + 2664,3,304,152,0,2663,2665,5,178,0,0,2664,2663,1,0,0,0,2664,2665,1,0, + 0,0,2665,2676,1,0,0,0,2666,2668,5,4,0,0,2667,2669,5,178,0,0,2668,2667, + 1,0,0,0,2668,2669,1,0,0,0,2669,2670,1,0,0,0,2670,2672,3,304,152,0,2671, + 2673,5,178,0,0,2672,2671,1,0,0,0,2672,2673,1,0,0,0,2673,2675,1,0,0,0, + 2674,2666,1,0,0,0,2675,2678,1,0,0,0,2676,2674,1,0,0,0,2676,2677,1,0,0, + 0,2677,2680,1,0,0,0,2678,2676,1,0,0,0,2679,2662,1,0,0,0,2679,2680,1,0, + 0,0,2680,2681,1,0,0,0,2681,2682,5,3,0,0,2682,2684,1,0,0,0,2683,2606,1, + 0,0,0,2683,2619,1,0,0,0,2683,2648,1,0,0,0,2684,301,1,0,0,0,2685,2686, + 3,336,168,0,2686,303,1,0,0,0,2687,2689,3,336,168,0,2688,2690,5,178,0, + 0,2689,2688,1,0,0,0,2689,2690,1,0,0,0,2690,2691,1,0,0,0,2691,2692,5,160, + 0,0,2692,2694,5,6,0,0,2693,2695,5,178,0,0,2694,2693,1,0,0,0,2694,2695, + 1,0,0,0,2695,2697,1,0,0,0,2696,2687,1,0,0,0,2696,2697,1,0,0,0,2697,2698, + 1,0,0,0,2698,2701,3,232,116,0,2699,2701,3,306,153,0,2700,2696,1,0,0,0, + 2700,2699,1,0,0,0,2701,305,1,0,0,0,2702,2704,3,308,154,0,2703,2705,5, + 178,0,0,2704,2703,1,0,0,0,2704,2705,1,0,0,0,2705,2706,1,0,0,0,2706,2707, + 5,158,0,0,2707,2709,5,17,0,0,2708,2710,5,178,0,0,2709,2708,1,0,0,0,2709, + 2710,1,0,0,0,2710,2711,1,0,0,0,2711,2713,3,232,116,0,2712,2714,5,178, + 0,0,2713,2712,1,0,0,0,2713,2714,1,0,0,0,2714,307,1,0,0,0,2715,2740,3, + 336,168,0,2716,2718,5,2,0,0,2717,2719,5,178,0,0,2718,2717,1,0,0,0,2718, + 2719,1,0,0,0,2719,2720,1,0,0,0,2720,2722,3,336,168,0,2721,2723,5,178, + 0,0,2722,2721,1,0,0,0,2722,2723,1,0,0,0,2723,2734,1,0,0,0,2724,2726,5, + 4,0,0,2725,2727,5,178,0,0,2726,2725,1,0,0,0,2726,2727,1,0,0,0,2727,2728, + 1,0,0,0,2728,2730,3,336,168,0,2729,2731,5,178,0,0,2730,2729,1,0,0,0,2730, + 2731,1,0,0,0,2731,2733,1,0,0,0,2732,2724,1,0,0,0,2733,2736,1,0,0,0,2734, + 2732,1,0,0,0,2734,2735,1,0,0,0,2735,2737,1,0,0,0,2736,2734,1,0,0,0,2737, + 2738,5,3,0,0,2738,2740,1,0,0,0,2739,2715,1,0,0,0,2739,2716,1,0,0,0,2740, + 309,1,0,0,0,2741,2746,3,198,99,0,2742,2744,5,178,0,0,2743,2742,1,0,0, + 0,2743,2744,1,0,0,0,2744,2745,1,0,0,0,2745,2747,3,200,100,0,2746,2743, + 1,0,0,0,2747,2748,1,0,0,0,2748,2746,1,0,0,0,2748,2749,1,0,0,0,2749,311, + 1,0,0,0,2750,2752,7,7,0,0,2751,2753,5,178,0,0,2752,2751,1,0,0,0,2752, + 2753,1,0,0,0,2753,2754,1,0,0,0,2754,2756,5,9,0,0,2755,2757,5,178,0,0, + 2756,2755,1,0,0,0,2756,2757,1,0,0,0,2757,2758,1,0,0,0,2758,2760,5,106, + 0,0,2759,2761,5,178,0,0,2760,2759,1,0,0,0,2760,2761,1,0,0,0,2761,2762, + 1,0,0,0,2762,2767,3,190,95,0,2763,2765,5,178,0,0,2764,2763,1,0,0,0,2764, + 2765,1,0,0,0,2765,2766,1,0,0,0,2766,2768,3,188,94,0,2767,2764,1,0,0,0, + 2767,2768,1,0,0,0,2768,2773,1,0,0,0,2769,2771,5,178,0,0,2770,2769,1,0, + 0,0,2770,2771,1,0,0,0,2771,2772,1,0,0,0,2772,2774,3,152,76,0,2773,2770, + 1,0,0,0,2773,2774,1,0,0,0,2774,2776,1,0,0,0,2775,2777,5,178,0,0,2776, + 2775,1,0,0,0,2776,2777,1,0,0,0,2777,2778,1,0,0,0,2778,2779,5,10,0,0,2779, + 313,1,0,0,0,2780,2782,5,5,0,0,2781,2783,5,178,0,0,2782,2781,1,0,0,0,2782, + 2783,1,0,0,0,2783,2786,1,0,0,0,2784,2787,3,328,164,0,2785,2787,5,155, + 0,0,2786,2784,1,0,0,0,2786,2785,1,0,0,0,2787,315,1,0,0,0,2788,2793,5, + 60,0,0,2789,2791,5,178,0,0,2790,2789,1,0,0,0,2790,2791,1,0,0,0,2791,2792, + 1,0,0,0,2792,2794,3,318,159,0,2793,2790,1,0,0,0,2794,2795,1,0,0,0,2795, + 2793,1,0,0,0,2795,2796,1,0,0,0,2796,2811,1,0,0,0,2797,2799,5,60,0,0,2798, + 2800,5,178,0,0,2799,2798,1,0,0,0,2799,2800,1,0,0,0,2800,2801,1,0,0,0, + 2801,2806,3,232,116,0,2802,2804,5,178,0,0,2803,2802,1,0,0,0,2803,2804, + 1,0,0,0,2804,2805,1,0,0,0,2805,2807,3,318,159,0,2806,2803,1,0,0,0,2807, + 2808,1,0,0,0,2808,2806,1,0,0,0,2808,2809,1,0,0,0,2809,2811,1,0,0,0,2810, + 2788,1,0,0,0,2810,2797,1,0,0,0,2811,2820,1,0,0,0,2812,2814,5,178,0,0, + 2813,2812,1,0,0,0,2813,2814,1,0,0,0,2814,2815,1,0,0,0,2815,2817,5,81, + 0,0,2816,2818,5,178,0,0,2817,2816,1,0,0,0,2817,2818,1,0,0,0,2818,2819, + 1,0,0,0,2819,2821,3,232,116,0,2820,2813,1,0,0,0,2820,2821,1,0,0,0,2821, + 2823,1,0,0,0,2822,2824,5,178,0,0,2823,2822,1,0,0,0,2823,2824,1,0,0,0, + 2824,2825,1,0,0,0,2825,2826,5,82,0,0,2826,317,1,0,0,0,2827,2829,5,145, + 0,0,2828,2830,5,178,0,0,2829,2828,1,0,0,0,2829,2830,1,0,0,0,2830,2831, + 1,0,0,0,2831,2833,3,232,116,0,2832,2834,5,178,0,0,2833,2832,1,0,0,0,2833, + 2834,1,0,0,0,2834,2835,1,0,0,0,2835,2837,5,136,0,0,2836,2838,5,178,0, + 0,2837,2836,1,0,0,0,2837,2838,1,0,0,0,2838,2839,1,0,0,0,2839,2840,3,232, + 116,0,2840,319,1,0,0,0,2841,2842,3,336,168,0,2842,321,1,0,0,0,2843,2846, + 3,332,166,0,2844,2846,3,330,165,0,2845,2843,1,0,0,0,2845,2844,1,0,0,0, + 2846,323,1,0,0,0,2847,2850,5,27,0,0,2848,2851,3,336,168,0,2849,2851,5, + 165,0,0,2850,2848,1,0,0,0,2850,2849,1,0,0,0,2851,325,1,0,0,0,2852,2854, + 3,278,139,0,2853,2855,5,178,0,0,2854,2853,1,0,0,0,2854,2855,1,0,0,0,2855, + 2856,1,0,0,0,2856,2857,3,314,157,0,2857,327,1,0,0,0,2858,2859,3,334,167, + 0,2859,329,1,0,0,0,2860,2861,5,165,0,0,2861,331,1,0,0,0,2862,2863,7,8, + 0,0,2863,333,1,0,0,0,2864,2865,3,336,168,0,2865,335,1,0,0,0,2866,2872, + 5,174,0,0,2867,2868,5,177,0,0,2868,2872,6,168,-1,0,2869,2872,5,166,0, + 0,2870,2872,3,338,169,0,2871,2866,1,0,0,0,2871,2867,1,0,0,0,2871,2869, + 1,0,0,0,2871,2870,1,0,0,0,2872,337,1,0,0,0,2873,2874,7,9,0,0,2874,339, + 1,0,0,0,2875,2876,7,10,0,0,2876,341,1,0,0,0,2877,2878,7,11,0,0,2878,343, + 1,0,0,0,2879,2880,7,12,0,0,2880,345,1,0,0,0,500,348,352,357,361,366,369, 373,376,398,404,411,415,419,423,426,430,434,438,443,447,449,456,460,468, 473,483,487,491,496,509,513,521,525,529,533,541,545,549,553,568,573,579, 583,586,589,595,599,604,607,612,616,620,625,640,644,651,671,675,678,681, @@ -1263,32 +1270,32 @@ void cypherParserInitialize() { 859,863,867,871,875,879,884,902,909,922,929,935,938,948,951,959,962,968, 971,977,992,1008,1015,1022,1033,1053,1057,1062,1071,1075,1080,1086,1092, 1098,1102,1106,1114,1118,1122,1128,1132,1136,1142,1146,1150,1154,1158, - 1164,1168,1172,1176,1180,1184,1190,1197,1202,1208,1213,1230,1235,1241, - 1245,1254,1260,1264,1270,1275,1280,1284,1290,1296,1301,1304,1308,1312, - 1318,1322,1326,1330,1335,1339,1345,1349,1353,1357,1362,1366,1372,1376, - 1380,1384,1390,1394,1399,1404,1408,1411,1413,1417,1421,1427,1431,1436, - 1440,1449,1455,1463,1467,1471,1475,1482,1486,1490,1494,1497,1500,1507, - 1513,1517,1522,1529,1532,1535,1540,1544,1548,1553,1557,1566,1570,1575, - 1589,1591,1593,1598,1608,1614,1621,1634,1638,1642,1646,1651,1656,1660, - 1666,1670,1674,1678,1683,1689,1692,1698,1701,1707,1711,1715,1719,1723, - 1728,1733,1737,1742,1745,1754,1763,1768,1781,1784,1792,1796,1801,1806, - 1810,1815,1821,1826,1833,1837,1841,1843,1847,1849,1853,1855,1861,1867, - 1871,1874,1877,1883,1886,1889,1893,1899,1902,1905,1909,1913,1917,1919, - 1923,1925,1929,1931,1935,1937,1943,1947,1951,1955,1959,1963,1967,1971, - 1975,1978,1984,1988,1992,1995,2000,2005,2010,2015,2021,2024,2027,2030, - 2033,2036,2040,2044,2048,2052,2062,2065,2068,2072,2075,2078,2082,2086, - 2090,2094,2098,2102,2104,2107,2111,2115,2119,2123,2125,2131,2134,2137, - 2158,2168,2178,2183,2187,2194,2198,2202,2206,2210,2218,2222,2226,2230, - 2236,2240,2246,2250,2255,2260,2264,2269,2274,2278,2284,2291,2295,2301, - 2308,2312,2318,2325,2329,2334,2339,2343,2348,2351,2358,2361,2366,2375, - 2379,2382,2395,2398,2403,2417,2421,2426,2438,2442,2446,2450,2456,2460, - 2464,2470,2474,2478,2484,2488,2492,2496,2514,2520,2524,2528,2532,2535, - 2541,2544,2548,2552,2556,2560,2564,2571,2574,2578,2584,2588,2594,2598, - 2602,2607,2611,2615,2619,2624,2627,2630,2636,2640,2644,2646,2650,2654, - 2658,2662,2665,2669,2675,2680,2682,2686,2690,2695,2699,2704,2708,2712, - 2716,2720,2725,2729,2734,2738,2742,2746,2750,2753,2756,2759,2762,2768, - 2772,2776,2781,2785,2789,2794,2796,2799,2803,2806,2809,2815,2819,2823, - 2831,2836,2840,2857 + 1164,1168,1172,1176,1180,1186,1190,1194,1198,1204,1211,1216,1222,1227, + 1244,1249,1255,1259,1268,1274,1278,1284,1289,1294,1298,1304,1310,1315, + 1318,1322,1326,1332,1336,1340,1344,1349,1353,1359,1363,1367,1371,1376, + 1380,1386,1390,1394,1398,1404,1408,1413,1418,1422,1425,1427,1431,1435, + 1441,1445,1450,1454,1463,1469,1477,1481,1485,1489,1496,1500,1504,1508, + 1511,1514,1521,1527,1531,1536,1543,1546,1549,1554,1558,1562,1567,1571, + 1580,1584,1589,1603,1605,1607,1612,1622,1628,1635,1648,1652,1656,1660, + 1665,1670,1674,1680,1684,1688,1692,1697,1703,1706,1712,1715,1721,1725, + 1729,1733,1737,1742,1747,1751,1756,1759,1768,1777,1782,1795,1798,1806, + 1810,1815,1820,1824,1829,1835,1840,1847,1851,1855,1857,1861,1863,1867, + 1869,1875,1881,1885,1888,1891,1897,1900,1903,1907,1913,1916,1919,1923, + 1927,1931,1933,1937,1939,1943,1945,1949,1951,1957,1961,1965,1969,1973, + 1977,1981,1985,1989,1992,1998,2002,2006,2009,2014,2019,2024,2029,2035, + 2038,2041,2044,2047,2050,2054,2058,2062,2066,2076,2079,2082,2086,2089, + 2092,2096,2100,2104,2108,2112,2116,2118,2121,2125,2129,2133,2137,2139, + 2145,2148,2151,2172,2182,2192,2197,2201,2208,2212,2216,2220,2224,2232, + 2236,2240,2244,2250,2254,2260,2264,2269,2274,2278,2283,2288,2292,2298, + 2305,2309,2315,2322,2326,2332,2339,2343,2348,2353,2357,2362,2365,2372, + 2375,2380,2389,2393,2396,2409,2412,2417,2431,2435,2440,2452,2456,2460, + 2464,2470,2474,2478,2484,2488,2492,2498,2502,2506,2510,2528,2534,2538, + 2542,2546,2549,2555,2558,2562,2566,2570,2574,2578,2585,2588,2592,2598, + 2602,2608,2612,2616,2621,2625,2629,2633,2638,2641,2644,2650,2654,2658, + 2660,2664,2668,2672,2676,2679,2683,2689,2694,2696,2700,2704,2709,2713, + 2718,2722,2726,2730,2734,2739,2743,2748,2752,2756,2760,2764,2767,2770, + 2773,2776,2782,2786,2790,2795,2799,2803,2808,2810,2813,2817,2820,2823, + 2829,2833,2837,2845,2850,2854,2871 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -2002,7 +2009,7 @@ CypherParser::NEUG_ColumnNamesContext* CypherParser::nEUG_ColumnNames() { _la = _input->LA(1); if (((((_la - 49) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 49)) & -2380888042297776235) != 0) || ((((_la - 123) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 123)) & 10137503149540799) != 0)) { + ((1ULL << (_la - 123)) & 20275004652602815) != 0)) { setState(432); oC_SchemaName(); setState(443); @@ -3444,7 +3451,7 @@ CypherParser::NEUG_CreateMacroContext* CypherParser::nEUG_CreateMacro() { _la = _input->LA(1); if (((((_la - 49) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 49)) & -2380888042297776235) != 0) || ((((_la - 123) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 123)) & 10137503149540799) != 0)) { + ((1ULL << (_la - 123)) & 20275004652602815) != 0)) { setState(683); nEUG_DefaultArg(); } @@ -6343,6 +6350,10 @@ CypherParser::OC_IntegerLiteralContext* CypherParser::NEUG_DataTypeContext::oC_I return getRuleContext(i); } +tree::TerminalNode* CypherParser::NEUG_DataTypeContext::VARCHAR() { + return getToken(CypherParser::VARCHAR, 0); +} + CypherParser::NEUG_ListIdentifiersContext* CypherParser::NEUG_DataTypeContext::nEUG_ListIdentifiers() { return getRuleContext(0); } @@ -6379,9 +6390,9 @@ CypherParser::NEUG_DataTypeContext* CypherParser::nEUG_DataType(int precedence) try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1184); + setState(1198); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 148, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 151, _ctx)) { case 1: { setState(1111); oC_SymbolicName(); @@ -6572,13 +6583,49 @@ CypherParser::NEUG_DataTypeContext* CypherParser::nEUG_DataType(int precedence) break; } + case 6: { + setState(1184); + match(CypherParser::VARCHAR); + setState(1186); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1185); + match(CypherParser::SP); + } + setState(1188); + match(CypherParser::T__1); + setState(1190); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1189); + match(CypherParser::SP); + } + setState(1192); + oC_IntegerLiteral(); + setState(1194); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1193); + match(CypherParser::SP); + } + setState(1196); + match(CypherParser::T__2); + break; + } + default: break; } _ctx->stop = _input->LT(-1); - setState(1190); + setState(1204); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 149, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 152, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) @@ -6586,15 +6633,15 @@ CypherParser::NEUG_DataTypeContext* CypherParser::nEUG_DataType(int precedence) previousContext = _localctx; _localctx = _tracker.createInstance(parentContext, parentState); pushNewRecursionContext(_localctx, startState, RuleNEUG_DataType); - setState(1186); + setState(1200); - if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(1187); + if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(1201); nEUG_ListIdentifiers(); } - setState(1192); + setState(1206); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 149, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 152, _ctx); } } catch (RecognitionException &e) { @@ -6639,19 +6686,19 @@ CypherParser::NEUG_ListIdentifiersContext* CypherParser::nEUG_ListIdentifiers() try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1193); + setState(1207); nEUG_ListIdentifier(); - setState(1197); + setState(1211); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 150, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 153, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1194); + setState(1208); nEUG_ListIdentifier(); } - setState(1199); + setState(1213); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 150, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 153, _ctx); } } @@ -6694,17 +6741,17 @@ CypherParser::NEUG_ListIdentifierContext* CypherParser::nEUG_ListIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(1200); + setState(1214); match(CypherParser::T__6); - setState(1202); + setState(1216); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DecimalInteger) { - setState(1201); + setState(1215); oC_IntegerLiteral(); } - setState(1204); + setState(1218); match(CypherParser::T__7); } @@ -6749,19 +6796,19 @@ CypherParser::OC_AnyCypherOptionContext* CypherParser::oC_AnyCypherOption() { exitRule(); }); try { - setState(1208); + setState(1222); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::EXPLAIN: { enterOuterAlt(_localctx, 1); - setState(1206); + setState(1220); oC_Explain(); break; } case CypherParser::PROFILE: { enterOuterAlt(_localctx, 2); - setState(1207); + setState(1221); oC_Profile(); break; } @@ -6817,16 +6864,16 @@ CypherParser::OC_ExplainContext* CypherParser::oC_Explain() { }); try { enterOuterAlt(_localctx, 1); - setState(1210); + setState(1224); match(CypherParser::EXPLAIN); - setState(1213); + setState(1227); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 153, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 156, _ctx)) { case 1: { - setState(1211); + setState(1225); match(CypherParser::SP); - setState(1212); + setState(1226); match(CypherParser::LOGICAL); break; } @@ -6874,7 +6921,7 @@ CypherParser::OC_ProfileContext* CypherParser::oC_Profile() { }); try { enterOuterAlt(_localctx, 1); - setState(1215); + setState(1229); match(CypherParser::PROFILE); } @@ -6947,56 +6994,56 @@ CypherParser::NEUG_TransactionContext* CypherParser::nEUG_Transaction() { exitRule(); }); try { - setState(1230); + setState(1244); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 154, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 157, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1217); + setState(1231); match(CypherParser::BEGIN); - setState(1218); + setState(1232); match(CypherParser::SP); - setState(1219); + setState(1233); match(CypherParser::TRANSACTION); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1220); + setState(1234); match(CypherParser::BEGIN); - setState(1221); + setState(1235); match(CypherParser::SP); - setState(1222); + setState(1236); match(CypherParser::TRANSACTION); - setState(1223); + setState(1237); match(CypherParser::SP); - setState(1224); + setState(1238); match(CypherParser::READ); - setState(1225); + setState(1239); match(CypherParser::SP); - setState(1226); + setState(1240); match(CypherParser::ONLY); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1227); + setState(1241); match(CypherParser::COMMIT); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(1228); + setState(1242); match(CypherParser::ROLLBACK); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(1229); + setState(1243); match(CypherParser::CHECKPOINT); break; } @@ -7051,26 +7098,26 @@ CypherParser::NEUG_ExtensionContext* CypherParser::nEUG_Extension() { exitRule(); }); try { - setState(1235); + setState(1249); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::LOAD: { enterOuterAlt(_localctx, 1); - setState(1232); + setState(1246); nEUG_LoadExtension(); break; } case CypherParser::INSTALL: { enterOuterAlt(_localctx, 2); - setState(1233); + setState(1247); nEUG_InstallExtension(); break; } case CypherParser::UNINSTALL: { enterOuterAlt(_localctx, 3); - setState(1234); + setState(1248); nEUG_UninstallExtension(); break; } @@ -7138,18 +7185,18 @@ CypherParser::NEUG_LoadExtensionContext* CypherParser::nEUG_LoadExtension() { }); try { enterOuterAlt(_localctx, 1); - setState(1237); + setState(1251); match(CypherParser::LOAD); - setState(1238); + setState(1252); match(CypherParser::SP); - setState(1241); + setState(1255); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 156, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 159, _ctx)) { case 1: { - setState(1239); + setState(1253); match(CypherParser::EXTENSION); - setState(1240); + setState(1254); match(CypherParser::SP); break; } @@ -7157,11 +7204,11 @@ CypherParser::NEUG_LoadExtensionContext* CypherParser::nEUG_LoadExtension() { default: break; } - setState(1245); + setState(1259); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::StringLiteral: { - setState(1243); + setState(1257); match(CypherParser::StringLiteral); break; } @@ -7223,7 +7270,7 @@ CypherParser::NEUG_LoadExtensionContext* CypherParser::nEUG_LoadExtension() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(1244); + setState(1258); oC_Variable(); break; } @@ -7291,24 +7338,24 @@ CypherParser::NEUG_InstallExtensionContext* CypherParser::nEUG_InstallExtension( }); try { enterOuterAlt(_localctx, 1); - setState(1247); + setState(1261); match(CypherParser::INSTALL); - setState(1248); + setState(1262); match(CypherParser::SP); - setState(1249); + setState(1263); oC_Variable(); - setState(1254); + setState(1268); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 158, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 161, _ctx)) { case 1: { - setState(1250); + setState(1264); match(CypherParser::SP); - setState(1251); + setState(1265); match(CypherParser::FROM); - setState(1252); + setState(1266); match(CypherParser::SP); - setState(1253); + setState(1267); match(CypherParser::StringLiteral); break; } @@ -7376,18 +7423,18 @@ CypherParser::NEUG_UninstallExtensionContext* CypherParser::nEUG_UninstallExtens }); try { enterOuterAlt(_localctx, 1); - setState(1256); + setState(1270); match(CypherParser::UNINSTALL); - setState(1257); + setState(1271); match(CypherParser::SP); - setState(1260); + setState(1274); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 159, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 162, _ctx)) { case 1: { - setState(1258); + setState(1272); match(CypherParser::EXTENSION); - setState(1259); + setState(1273); match(CypherParser::SP); break; } @@ -7395,11 +7442,11 @@ CypherParser::NEUG_UninstallExtensionContext* CypherParser::nEUG_UninstallExtens default: break; } - setState(1264); + setState(1278); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::StringLiteral: { - setState(1262); + setState(1276); match(CypherParser::StringLiteral); break; } @@ -7461,7 +7508,7 @@ CypherParser::NEUG_UninstallExtensionContext* CypherParser::nEUG_UninstallExtens case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(1263); + setState(1277); oC_Variable(); break; } @@ -7509,7 +7556,7 @@ CypherParser::OC_QueryContext* CypherParser::oC_Query() { }); try { enterOuterAlt(_localctx, 1); - setState(1266); + setState(1280); oC_RegularQuery(); } @@ -7580,52 +7627,52 @@ CypherParser::OC_RegularQueryContext* CypherParser::oC_RegularQuery() { }); try { size_t alt; - setState(1290); + setState(1304); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 165, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 168, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1268); + setState(1282); oC_SingleQuery(); - setState(1275); + setState(1289); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 162, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 165, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1270); + setState(1284); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1269); + setState(1283); match(CypherParser::SP); } - setState(1272); + setState(1286); oC_Union(); } - setState(1277); + setState(1291); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 162, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 165, _ctx); } break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1282); + setState(1296); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(1278); + setState(1292); oC_Return(); - setState(1280); + setState(1294); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1279); + setState(1293); match(CypherParser::SP); } break; @@ -7634,11 +7681,11 @@ CypherParser::OC_RegularQueryContext* CypherParser::oC_RegularQuery() { default: throw NoViableAltException(this); } - setState(1284); + setState(1298); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 164, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 167, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); - setState(1286); + setState(1300); oC_SingleQuery(); notifyReturnNotAtEnd(_localctx->start); break; @@ -7646,7 +7693,7 @@ CypherParser::OC_RegularQueryContext* CypherParser::oC_RegularQuery() { case 3: { enterOuterAlt(_localctx, 3); - setState(1289); + setState(1303); oC_CallUnionQuery(); break; } @@ -7710,43 +7757,43 @@ CypherParser::OC_UnionContext* CypherParser::oC_Union() { exitRule(); }); try { - setState(1304); + setState(1318); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 168, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 171, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1292); + setState(1306); match(CypherParser::UNION); - setState(1293); + setState(1307); match(CypherParser::SP); - setState(1294); + setState(1308); match(CypherParser::ALL); - setState(1296); + setState(1310); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1295); + setState(1309); match(CypherParser::SP); } - setState(1298); + setState(1312); oC_SingleQuery(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1299); + setState(1313); match(CypherParser::UNION); - setState(1301); + setState(1315); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1300); + setState(1314); match(CypherParser::SP); } - setState(1303); + setState(1317); oC_SingleQuery(); break; } @@ -7816,36 +7863,36 @@ CypherParser::OC_CallUnionQueryContext* CypherParser::oC_CallUnionQuery() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1312); + setState(1326); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 170, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 173, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1306); + setState(1320); nEUG_QueryPart(); - setState(1308); + setState(1322); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1307); + setState(1321); match(CypherParser::SP); } } - setState(1314); + setState(1328); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 170, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 173, _ctx); } - setState(1315); + setState(1329); oC_CallUnion(); - setState(1318); + setState(1332); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 171, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 174, _ctx)) { case 1: { - setState(1316); + setState(1330); match(CypherParser::SP); - setState(1317); + setState(1331); oC_SingleQuery(); break; } @@ -7915,57 +7962,57 @@ CypherParser::OC_CallUnionContext* CypherParser::oC_CallUnion() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1320); + setState(1334); oC_CallUnionScope(); - setState(1322); + setState(1336); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1321); + setState(1335); match(CypherParser::SP); } - setState(1324); + setState(1338); match(CypherParser::T__8); - setState(1326); + setState(1340); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1325); + setState(1339); match(CypherParser::SP); } - setState(1328); + setState(1342); oC_SingleQuery(); - setState(1335); + setState(1349); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 175, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 178, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1330); + setState(1344); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1329); + setState(1343); match(CypherParser::SP); } - setState(1332); + setState(1346); oC_Union(); } - setState(1337); + setState(1351); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 175, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 178, _ctx); } - setState(1339); + setState(1353); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1338); + setState(1352); match(CypherParser::SP); } - setState(1341); + setState(1355); match(CypherParser::T__9); } @@ -8024,81 +8071,81 @@ CypherParser::OC_CallUnionScopeContext* CypherParser::oC_CallUnionScope() { }); try { size_t alt; - setState(1372); + setState(1386); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 183, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 186, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1343); + setState(1357); match(CypherParser::CALL); - setState(1345); + setState(1359); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1344); + setState(1358); match(CypherParser::SP); } - setState(1347); + setState(1361); match(CypherParser::T__1); - setState(1349); + setState(1363); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1348); + setState(1362); match(CypherParser::SP); } - setState(1351); + setState(1365); oC_Expression(); - setState(1362); + setState(1376); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 181, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 184, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1353); + setState(1367); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1352); + setState(1366); match(CypherParser::SP); } - setState(1355); + setState(1369); match(CypherParser::T__3); - setState(1357); + setState(1371); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1356); + setState(1370); match(CypherParser::SP); } - setState(1359); + setState(1373); oC_Expression(); } - setState(1364); + setState(1378); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 181, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 184, _ctx); } - setState(1366); + setState(1380); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1365); + setState(1379); match(CypherParser::SP); } - setState(1368); + setState(1382); match(CypherParser::T__2); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1370); + setState(1384); match(CypherParser::CALL); - setState(1371); + setState(1385); match(CypherParser::T__10); break; } @@ -8149,19 +8196,19 @@ CypherParser::OC_SingleQueryContext* CypherParser::oC_SingleQuery() { exitRule(); }); try { - setState(1376); + setState(1390); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 184, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 187, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1374); + setState(1388); oC_SinglePartQuery(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1375); + setState(1389); oC_MultiPartQuery(); break; } @@ -8234,92 +8281,92 @@ CypherParser::OC_SinglePartQueryContext* CypherParser::oC_SinglePartQuery() { }); try { size_t alt; - setState(1413); + setState(1427); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 193, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 196, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1384); + setState(1398); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::CALL || ((((_la - 103) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 103)) & 1099511660553) != 0)) { - setState(1378); + setState(1392); oC_ReadingClause(); - setState(1380); + setState(1394); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1379); + setState(1393); match(CypherParser::SP); } - setState(1386); + setState(1400); _errHandler->sync(this); _la = _input->LA(1); } - setState(1387); + setState(1401); oC_Return(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1394); + setState(1408); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::CALL || ((((_la - 103) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 103)) & 1099511660553) != 0)) { - setState(1388); + setState(1402); oC_ReadingClause(); - setState(1390); + setState(1404); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1389); + setState(1403); match(CypherParser::SP); } - setState(1396); + setState(1410); _errHandler->sync(this); _la = _input->LA(1); } - setState(1397); + setState(1411); oC_UpdatingClause(); - setState(1404); + setState(1418); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 190, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 193, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1399); + setState(1413); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1398); + setState(1412); match(CypherParser::SP); } - setState(1401); + setState(1415); oC_UpdatingClause(); } - setState(1406); + setState(1420); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 190, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 193, _ctx); } - setState(1411); + setState(1425); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 192, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 195, _ctx)) { case 1: { - setState(1408); + setState(1422); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1407); + setState(1421); match(CypherParser::SP); } - setState(1410); + setState(1424); oC_Return(); break; } @@ -8391,20 +8438,20 @@ CypherParser::OC_MultiPartQueryContext* CypherParser::oC_MultiPartQuery() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1419); + setState(1433); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(1415); + setState(1429); nEUG_QueryPart(); - setState(1417); + setState(1431); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1416); + setState(1430); match(CypherParser::SP); } break; @@ -8413,11 +8460,11 @@ CypherParser::OC_MultiPartQueryContext* CypherParser::oC_MultiPartQuery() { default: throw NoViableAltException(this); } - setState(1421); + setState(1435); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 195, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 198, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); - setState(1423); + setState(1437); oC_SinglePartQuery(); } @@ -8484,45 +8531,45 @@ CypherParser::NEUG_QueryPartContext* CypherParser::nEUG_QueryPart() { }); try { enterOuterAlt(_localctx, 1); - setState(1431); + setState(1445); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::CALL || ((((_la - 103) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 103)) & 1099511660553) != 0)) { - setState(1425); + setState(1439); oC_ReadingClause(); - setState(1427); + setState(1441); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1426); + setState(1440); match(CypherParser::SP); } - setState(1433); + setState(1447); _errHandler->sync(this); _la = _input->LA(1); } - setState(1440); + setState(1454); _errHandler->sync(this); _la = _input->LA(1); while (((((_la - 70) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 70)) & 2305843284091601185) != 0)) { - setState(1434); + setState(1448); oC_UpdatingClause(); - setState(1436); + setState(1450); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1435); + setState(1449); match(CypherParser::SP); } - setState(1442); + setState(1456); _errHandler->sync(this); _la = _input->LA(1); } - setState(1443); + setState(1457); oC_With(); } @@ -8575,26 +8622,26 @@ CypherParser::OC_UpdatingClauseContext* CypherParser::oC_UpdatingClause() { exitRule(); }); try { - setState(1449); + setState(1463); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::CREATE: { enterOuterAlt(_localctx, 1); - setState(1445); + setState(1459); oC_Create(); break; } case CypherParser::MERGE: { enterOuterAlt(_localctx, 2); - setState(1446); + setState(1460); oC_Merge(); break; } case CypherParser::SET: { enterOuterAlt(_localctx, 3); - setState(1447); + setState(1461); oC_Set(); break; } @@ -8602,7 +8649,7 @@ CypherParser::OC_UpdatingClauseContext* CypherParser::oC_UpdatingClause() { case CypherParser::DELETE: case CypherParser::DETACH: { enterOuterAlt(_localctx, 4); - setState(1448); + setState(1462); oC_Delete(); break; } @@ -8661,34 +8708,34 @@ CypherParser::OC_ReadingClauseContext* CypherParser::oC_ReadingClause() { exitRule(); }); try { - setState(1455); + setState(1469); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::MATCH: case CypherParser::OPTIONAL: { enterOuterAlt(_localctx, 1); - setState(1451); + setState(1465); oC_Match(); break; } case CypherParser::UNWIND: { enterOuterAlt(_localctx, 2); - setState(1452); + setState(1466); oC_Unwind(); break; } case CypherParser::CALL: { enterOuterAlt(_localctx, 3); - setState(1453); + setState(1467); nEUG_InQueryCall(); break; } case CypherParser::LOAD: { enterOuterAlt(_localctx, 4); - setState(1454); + setState(1468); nEUG_LoadFrom(); break; } @@ -8773,50 +8820,50 @@ CypherParser::NEUG_LoadFromContext* CypherParser::nEUG_LoadFrom() { }); try { enterOuterAlt(_localctx, 1); - setState(1457); + setState(1471); match(CypherParser::LOAD); - setState(1475); + setState(1489); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 205, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 208, _ctx)) { case 1: { - setState(1458); + setState(1472); match(CypherParser::SP); - setState(1459); + setState(1473); match(CypherParser::WITH); - setState(1460); + setState(1474); match(CypherParser::SP); - setState(1461); + setState(1475); match(CypherParser::HEADERS); - setState(1463); + setState(1477); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1462); + setState(1476); match(CypherParser::SP); } - setState(1465); + setState(1479); match(CypherParser::T__1); - setState(1467); + setState(1481); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1466); + setState(1480); match(CypherParser::SP); } - setState(1469); + setState(1483); nEUG_ColumnDefinitions(); - setState(1471); + setState(1485); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1470); + setState(1484); match(CypherParser::SP); } - setState(1473); + setState(1487); match(CypherParser::T__2); break; } @@ -8824,48 +8871,48 @@ CypherParser::NEUG_LoadFromContext* CypherParser::nEUG_LoadFrom() { default: break; } - setState(1477); + setState(1491); match(CypherParser::SP); - setState(1478); + setState(1492); match(CypherParser::FROM); - setState(1479); + setState(1493); match(CypherParser::SP); - setState(1480); - nEUG_ScanSource(); setState(1494); + nEUG_ScanSource(); + setState(1508); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 209, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 212, _ctx)) { case 1: { - setState(1482); + setState(1496); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1481); + setState(1495); match(CypherParser::SP); } - setState(1484); + setState(1498); match(CypherParser::T__1); - setState(1486); + setState(1500); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1485); + setState(1499); match(CypherParser::SP); } - setState(1488); + setState(1502); nEUG_Options(); - setState(1490); + setState(1504); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1489); + setState(1503); match(CypherParser::SP); } - setState(1492); + setState(1506); match(CypherParser::T__2); break; } @@ -8873,20 +8920,20 @@ CypherParser::NEUG_LoadFromContext* CypherParser::nEUG_LoadFrom() { default: break; } - setState(1500); + setState(1514); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 211, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 214, _ctx)) { case 1: { - setState(1497); + setState(1511); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1496); + setState(1510); match(CypherParser::SP); } - setState(1499); + setState(1513); oC_Where(); break; } @@ -8950,18 +8997,18 @@ CypherParser::OC_YieldItemContext* CypherParser::oC_YieldItem() { }); try { enterOuterAlt(_localctx, 1); - setState(1507); + setState(1521); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 212, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 215, _ctx)) { case 1: { - setState(1502); + setState(1516); oC_Variable(); - setState(1503); + setState(1517); match(CypherParser::SP); - setState(1504); + setState(1518); match(CypherParser::AS); - setState(1505); + setState(1519); match(CypherParser::SP); break; } @@ -8969,7 +9016,7 @@ CypherParser::OC_YieldItemContext* CypherParser::oC_YieldItem() { default: break; } - setState(1509); + setState(1523); oC_Variable(); } @@ -9025,37 +9072,37 @@ CypherParser::OC_YieldItemsContext* CypherParser::oC_YieldItems() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1511); + setState(1525); oC_YieldItem(); - setState(1522); + setState(1536); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 215, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 218, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1513); + setState(1527); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1512); + setState(1526); match(CypherParser::SP); } - setState(1515); + setState(1529); match(CypherParser::T__3); - setState(1517); + setState(1531); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1516); + setState(1530); match(CypherParser::SP); } - setState(1519); + setState(1533); oC_YieldItem(); } - setState(1524); + setState(1538); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 215, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 218, _ctx); } } @@ -9122,26 +9169,26 @@ CypherParser::NEUG_InQueryCallContext* CypherParser::nEUG_InQueryCall() { }); try { enterOuterAlt(_localctx, 1); - setState(1525); + setState(1539); match(CypherParser::CALL); - setState(1526); + setState(1540); match(CypherParser::SP); - setState(1527); + setState(1541); oC_FunctionInvocation(); - setState(1532); + setState(1546); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 217, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 220, _ctx)) { case 1: { - setState(1529); + setState(1543); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1528); + setState(1542); match(CypherParser::SP); } - setState(1531); + setState(1545); oC_Where(); break; } @@ -9149,24 +9196,24 @@ CypherParser::NEUG_InQueryCallContext* CypherParser::nEUG_InQueryCall() { default: break; } - setState(1540); + setState(1554); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 219, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 222, _ctx)) { case 1: { - setState(1535); + setState(1549); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1534); + setState(1548); match(CypherParser::SP); } - setState(1537); + setState(1551); match(CypherParser::YIELD); - setState(1538); + setState(1552); match(CypherParser::SP); - setState(1539); + setState(1553); oC_YieldItems(); break; } @@ -9239,36 +9286,36 @@ CypherParser::OC_MatchContext* CypherParser::oC_Match() { }); try { enterOuterAlt(_localctx, 1); - setState(1544); + setState(1558); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::OPTIONAL) { - setState(1542); + setState(1556); match(CypherParser::OPTIONAL); - setState(1543); + setState(1557); match(CypherParser::SP); } - setState(1546); + setState(1560); match(CypherParser::MATCH); - setState(1548); + setState(1562); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1547); + setState(1561); match(CypherParser::SP); } - setState(1550); + setState(1564); oC_Pattern(); - setState(1553); + setState(1567); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 222, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 225, _ctx)) { case 1: { - setState(1551); + setState(1565); match(CypherParser::SP); - setState(1552); + setState(1566); oC_Where(); break; } @@ -9276,14 +9323,14 @@ CypherParser::OC_MatchContext* CypherParser::oC_Match() { default: break; } - setState(1557); + setState(1571); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 223, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 226, _ctx)) { case 1: { - setState(1555); + setState(1569); match(CypherParser::SP); - setState(1556); + setState(1570); nEUG_Hint(); break; } @@ -9339,11 +9386,11 @@ CypherParser::NEUG_HintContext* CypherParser::nEUG_Hint() { }); try { enterOuterAlt(_localctx, 1); - setState(1559); + setState(1573); match(CypherParser::HINT); - setState(1560); + setState(1574); match(CypherParser::SP); - setState(1561); + setState(1575); nEUG_JoinNode(0); } @@ -9430,31 +9477,31 @@ CypherParser::NEUG_JoinNodeContext* CypherParser::nEUG_JoinNode(int precedence) try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1575); + setState(1589); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::T__1: { - setState(1564); + setState(1578); match(CypherParser::T__1); - setState(1566); + setState(1580); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1565); + setState(1579); match(CypherParser::SP); } - setState(1568); + setState(1582); nEUG_JoinNode(0); - setState(1570); + setState(1584); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1569); + setState(1583); match(CypherParser::SP); } - setState(1572); + setState(1586); match(CypherParser::T__2); break; } @@ -9516,7 +9563,7 @@ CypherParser::NEUG_JoinNodeContext* CypherParser::nEUG_JoinNode(int precedence) case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(1574); + setState(1588); oC_SchemaName(); break; } @@ -9525,30 +9572,30 @@ CypherParser::NEUG_JoinNodeContext* CypherParser::nEUG_JoinNode(int precedence) throw NoViableAltException(this); } _ctx->stop = _input->LT(-1); - setState(1593); + setState(1607); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 229, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 232, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(1591); + setState(1605); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 228, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 231, _ctx)) { case 1: { _localctx = _tracker.createInstance(parentContext, parentState); pushNewRecursionContext(_localctx, startState, RuleNEUG_JoinNode); - setState(1577); + setState(1591); if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(1578); + setState(1592); match(CypherParser::SP); - setState(1579); + setState(1593); match(CypherParser::JOIN); - setState(1580); + setState(1594); match(CypherParser::SP); - setState(1581); + setState(1595); nEUG_JoinNode(5); break; } @@ -9556,22 +9603,22 @@ CypherParser::NEUG_JoinNodeContext* CypherParser::nEUG_JoinNode(int precedence) case 2: { _localctx = _tracker.createInstance(parentContext, parentState); pushNewRecursionContext(_localctx, startState, RuleNEUG_JoinNode); - setState(1582); + setState(1596); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(1587); + setState(1601); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(1583); + setState(1597); match(CypherParser::SP); - setState(1584); + setState(1598); match(CypherParser::MULTI_JOIN); - setState(1585); + setState(1599); match(CypherParser::SP); - setState(1586); + setState(1600); oC_SchemaName(); break; } @@ -9579,9 +9626,9 @@ CypherParser::NEUG_JoinNodeContext* CypherParser::nEUG_JoinNode(int precedence) default: throw NoViableAltException(this); } - setState(1589); + setState(1603); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 227, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 230, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } @@ -9590,9 +9637,9 @@ CypherParser::NEUG_JoinNodeContext* CypherParser::nEUG_JoinNode(int precedence) break; } } - setState(1595); + setState(1609); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 229, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 232, _ctx); } } catch (RecognitionException &e) { @@ -9653,25 +9700,25 @@ CypherParser::OC_UnwindContext* CypherParser::oC_Unwind() { }); try { enterOuterAlt(_localctx, 1); - setState(1596); + setState(1610); match(CypherParser::UNWIND); - setState(1598); + setState(1612); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1597); + setState(1611); match(CypherParser::SP); } - setState(1600); + setState(1614); oC_Expression(); - setState(1601); + setState(1615); match(CypherParser::SP); - setState(1602); + setState(1616); match(CypherParser::AS); - setState(1603); + setState(1617); match(CypherParser::SP); - setState(1604); + setState(1618); oC_Variable(); } @@ -9722,17 +9769,17 @@ CypherParser::OC_CreateContext* CypherParser::oC_Create() { }); try { enterOuterAlt(_localctx, 1); - setState(1606); + setState(1620); match(CypherParser::CREATE); - setState(1608); + setState(1622); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1607); + setState(1621); match(CypherParser::SP); } - setState(1610); + setState(1624); oC_Pattern(); } @@ -9796,31 +9843,31 @@ CypherParser::OC_MergeContext* CypherParser::oC_Merge() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1612); + setState(1626); match(CypherParser::MERGE); - setState(1614); + setState(1628); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1613); + setState(1627); match(CypherParser::SP); } - setState(1616); + setState(1630); oC_Pattern(); - setState(1621); + setState(1635); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 233, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 236, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1617); + setState(1631); match(CypherParser::SP); - setState(1618); + setState(1632); oC_MergeAction(); } - setState(1623); + setState(1637); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 233, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 236, _ctx); } } @@ -9881,35 +9928,35 @@ CypherParser::OC_MergeActionContext* CypherParser::oC_MergeAction() { exitRule(); }); try { - setState(1634); + setState(1648); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 234, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 237, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1624); + setState(1638); match(CypherParser::ON); - setState(1625); + setState(1639); match(CypherParser::SP); - setState(1626); + setState(1640); match(CypherParser::MATCH); - setState(1627); + setState(1641); match(CypherParser::SP); - setState(1628); + setState(1642); oC_Set(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1629); + setState(1643); match(CypherParser::ON); - setState(1630); + setState(1644); match(CypherParser::SP); - setState(1631); + setState(1645); match(CypherParser::CREATE); - setState(1632); + setState(1646); match(CypherParser::SP); - setState(1633); + setState(1647); oC_Set(); break; } @@ -9975,47 +10022,47 @@ CypherParser::OC_SetContext* CypherParser::oC_Set() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1636); + setState(1650); match(CypherParser::SET); - setState(1638); + setState(1652); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1637); + setState(1651); match(CypherParser::SP); } - setState(1640); + setState(1654); oC_SetItem(); - setState(1651); + setState(1665); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 238, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 241, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1642); + setState(1656); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1641); + setState(1655); match(CypherParser::SP); } - setState(1644); + setState(1658); match(CypherParser::T__3); - setState(1646); + setState(1660); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1645); + setState(1659); match(CypherParser::SP); } - setState(1648); + setState(1662); oC_SetItem(); } - setState(1653); + setState(1667); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 238, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 241, _ctx); } } @@ -10070,27 +10117,27 @@ CypherParser::OC_SetItemContext* CypherParser::oC_SetItem() { }); try { enterOuterAlt(_localctx, 1); - setState(1654); + setState(1668); oC_PropertyExpression(); - setState(1656); + setState(1670); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1655); + setState(1669); match(CypherParser::SP); } - setState(1658); + setState(1672); match(CypherParser::T__5); - setState(1660); + setState(1674); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1659); + setState(1673); match(CypherParser::SP); } - setState(1662); + setState(1676); oC_Expression(); } @@ -10154,57 +10201,57 @@ CypherParser::OC_DeleteContext* CypherParser::oC_Delete() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1666); + setState(1680); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DETACH) { - setState(1664); + setState(1678); match(CypherParser::DETACH); - setState(1665); + setState(1679); match(CypherParser::SP); } - setState(1668); + setState(1682); match(CypherParser::DELETE); - setState(1670); + setState(1684); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1669); + setState(1683); match(CypherParser::SP); } - setState(1672); + setState(1686); oC_Expression(); - setState(1683); + setState(1697); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 245, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 248, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1674); + setState(1688); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1673); + setState(1687); match(CypherParser::SP); } - setState(1676); + setState(1690); match(CypherParser::T__3); - setState(1678); + setState(1692); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1677); + setState(1691); match(CypherParser::SP); } - setState(1680); + setState(1694); oC_Expression(); } - setState(1685); + setState(1699); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 245, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 248, _ctx); } } @@ -10259,24 +10306,24 @@ CypherParser::OC_WithContext* CypherParser::oC_With() { }); try { enterOuterAlt(_localctx, 1); - setState(1686); + setState(1700); match(CypherParser::WITH); - setState(1687); + setState(1701); oC_ProjectionBody(); - setState(1692); + setState(1706); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 247, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 250, _ctx)) { case 1: { - setState(1689); + setState(1703); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1688); + setState(1702); match(CypherParser::SP); } - setState(1691); + setState(1705); oC_Where(); break; } @@ -10328,9 +10375,9 @@ CypherParser::OC_ReturnContext* CypherParser::oC_Return() { }); try { enterOuterAlt(_localctx, 1); - setState(1694); + setState(1708); match(CypherParser::RETURN); - setState(1695); + setState(1709); oC_ProjectionBody(); } @@ -10397,20 +10444,20 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { }); try { enterOuterAlt(_localctx, 1); - setState(1701); + setState(1715); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 249, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 252, _ctx)) { case 1: { - setState(1698); + setState(1712); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1697); + setState(1711); match(CypherParser::SP); } - setState(1700); + setState(1714); match(CypherParser::DISTINCT); break; } @@ -10418,18 +10465,18 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { default: break; } - setState(1703); + setState(1717); match(CypherParser::SP); - setState(1704); + setState(1718); oC_ProjectionItems(); - setState(1707); + setState(1721); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 250, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 253, _ctx)) { case 1: { - setState(1705); + setState(1719); match(CypherParser::SP); - setState(1706); + setState(1720); oC_Order(); break; } @@ -10437,14 +10484,14 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { default: break; } - setState(1711); + setState(1725); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 251, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 254, _ctx)) { case 1: { - setState(1709); + setState(1723); match(CypherParser::SP); - setState(1710); + setState(1724); oC_Skip(); break; } @@ -10452,14 +10499,14 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { default: break; } - setState(1715); + setState(1729); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 252, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 255, _ctx)) { case 1: { - setState(1713); + setState(1727); match(CypherParser::SP); - setState(1714); + setState(1728); oC_Limit(); break; } @@ -10524,42 +10571,42 @@ CypherParser::OC_ProjectionItemsContext* CypherParser::oC_ProjectionItems() { }); try { size_t alt; - setState(1745); + setState(1759); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::STAR: { enterOuterAlt(_localctx, 1); - setState(1717); + setState(1731); match(CypherParser::STAR); - setState(1728); + setState(1742); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 255, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 258, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1719); + setState(1733); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1718); + setState(1732); match(CypherParser::SP); } - setState(1721); + setState(1735); match(CypherParser::T__3); - setState(1723); + setState(1737); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1722); + setState(1736); match(CypherParser::SP); } - setState(1725); + setState(1739); oC_ProjectionItem(); } - setState(1730); + setState(1744); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 255, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 258, _ctx); } break; } @@ -10642,37 +10689,37 @@ CypherParser::OC_ProjectionItemsContext* CypherParser::oC_ProjectionItems() { case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 2); - setState(1731); + setState(1745); oC_ProjectionItem(); - setState(1742); + setState(1756); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 258, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 261, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1733); + setState(1747); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1732); + setState(1746); match(CypherParser::SP); } - setState(1735); + setState(1749); match(CypherParser::T__3); - setState(1737); + setState(1751); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1736); + setState(1750); match(CypherParser::SP); } - setState(1739); + setState(1753); oC_ProjectionItem(); } - setState(1744); + setState(1758); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 258, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 261, _ctx); } break; } @@ -10735,27 +10782,27 @@ CypherParser::OC_ProjectionItemContext* CypherParser::oC_ProjectionItem() { exitRule(); }); try { - setState(1754); + setState(1768); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 260, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 263, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1747); + setState(1761); oC_Expression(); - setState(1748); + setState(1762); match(CypherParser::SP); - setState(1749); + setState(1763); match(CypherParser::AS); - setState(1750); + setState(1764); match(CypherParser::SP); - setState(1751); + setState(1765); oC_Variable(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1753); + setState(1767); oC_Expression(); break; } @@ -10824,33 +10871,33 @@ CypherParser::OC_OrderContext* CypherParser::oC_Order() { }); try { enterOuterAlt(_localctx, 1); - setState(1756); + setState(1770); match(CypherParser::ORDER); - setState(1757); + setState(1771); match(CypherParser::SP); - setState(1758); + setState(1772); match(CypherParser::BY); - setState(1759); + setState(1773); match(CypherParser::SP); - setState(1760); + setState(1774); oC_SortItem(); - setState(1768); + setState(1782); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(1761); + setState(1775); match(CypherParser::T__3); - setState(1763); + setState(1777); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1762); + setState(1776); match(CypherParser::SP); } - setState(1765); + setState(1779); oC_SortItem(); - setState(1770); + setState(1784); _errHandler->sync(this); _la = _input->LA(1); } @@ -10902,11 +10949,11 @@ CypherParser::OC_SkipContext* CypherParser::oC_Skip() { }); try { enterOuterAlt(_localctx, 1); - setState(1771); + setState(1785); match(CypherParser::L_SKIP); - setState(1772); + setState(1786); match(CypherParser::SP); - setState(1773); + setState(1787); oC_Expression(); } @@ -10956,11 +11003,11 @@ CypherParser::OC_LimitContext* CypherParser::oC_Limit() { }); try { enterOuterAlt(_localctx, 1); - setState(1775); + setState(1789); match(CypherParser::LIMIT); - setState(1776); + setState(1790); match(CypherParser::SP); - setState(1777); + setState(1791); oC_Expression(); } @@ -11023,22 +11070,22 @@ CypherParser::OC_SortItemContext* CypherParser::oC_SortItem() { }); try { enterOuterAlt(_localctx, 1); - setState(1779); + setState(1793); oC_Expression(); - setState(1784); + setState(1798); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 264, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 267, _ctx)) { case 1: { - setState(1781); + setState(1795); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1780); + setState(1794); match(CypherParser::SP); } - setState(1783); + setState(1797); _la = _input->LA(1); if (!(((((_la - 54) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 54)) & 12582915) != 0))) { @@ -11102,11 +11149,11 @@ CypherParser::OC_WhereContext* CypherParser::oC_Where() { }); try { enterOuterAlt(_localctx, 1); - setState(1786); + setState(1800); match(CypherParser::WHERE); - setState(1787); + setState(1801); match(CypherParser::SP); - setState(1788); + setState(1802); oC_Expression(); } @@ -11162,37 +11209,37 @@ CypherParser::OC_PatternContext* CypherParser::oC_Pattern() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1790); + setState(1804); oC_PatternPart(); - setState(1801); + setState(1815); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 267, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 270, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1792); + setState(1806); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1791); + setState(1805); match(CypherParser::SP); } - setState(1794); + setState(1808); match(CypherParser::T__3); - setState(1796); + setState(1810); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1795); + setState(1809); match(CypherParser::SP); } - setState(1798); + setState(1812); oC_PatternPart(); } - setState(1803); + setState(1817); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 267, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 270, _ctx); } } @@ -11246,7 +11293,7 @@ CypherParser::OC_PatternPartContext* CypherParser::oC_PatternPart() { exitRule(); }); try { - setState(1815); + setState(1829); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -11307,34 +11354,34 @@ CypherParser::OC_PatternPartContext* CypherParser::oC_PatternPart() { case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 1); - setState(1804); + setState(1818); oC_Variable(); - setState(1806); + setState(1820); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1805); + setState(1819); match(CypherParser::SP); } - setState(1808); + setState(1822); match(CypherParser::T__5); - setState(1810); + setState(1824); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1809); + setState(1823); match(CypherParser::SP); } - setState(1812); + setState(1826); oC_AnonymousPatternPart(); break; } case CypherParser::T__1: { enterOuterAlt(_localctx, 2); - setState(1814); + setState(1828); oC_AnonymousPatternPart(); break; } @@ -11382,7 +11429,7 @@ CypherParser::OC_AnonymousPatternPartContext* CypherParser::oC_AnonymousPatternP }); try { enterOuterAlt(_localctx, 1); - setState(1817); + setState(1831); oC_PatternElement(); } @@ -11445,43 +11492,43 @@ CypherParser::OC_PatternElementContext* CypherParser::oC_PatternElement() { }); try { size_t alt; - setState(1833); + setState(1847); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 273, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 276, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1819); + setState(1833); oC_NodePattern(); - setState(1826); + setState(1840); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 272, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 275, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1821); + setState(1835); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1820); + setState(1834); match(CypherParser::SP); } - setState(1823); + setState(1837); oC_PatternElementChain(); } - setState(1828); + setState(1842); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 272, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 275, _ctx); } break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1829); + setState(1843); match(CypherParser::T__1); - setState(1830); + setState(1844); oC_PatternElement(); - setState(1831); + setState(1845); match(CypherParser::T__2); break; } @@ -11546,67 +11593,67 @@ CypherParser::OC_NodePatternContext* CypherParser::oC_NodePattern() { }); try { enterOuterAlt(_localctx, 1); - setState(1835); + setState(1849); match(CypherParser::T__1); - setState(1837); + setState(1851); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1836); + setState(1850); match(CypherParser::SP); } - setState(1843); + setState(1857); _errHandler->sync(this); _la = _input->LA(1); if (((((_la - 49) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 49)) & -2380888042297776235) != 0) || ((((_la - 123) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 123)) & 10137503149540799) != 0)) { - setState(1839); + ((1ULL << (_la - 123)) & 20275004652602815) != 0)) { + setState(1853); oC_Variable(); - setState(1841); + setState(1855); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1840); + setState(1854); match(CypherParser::SP); } } - setState(1849); + setState(1863); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(1845); + setState(1859); oC_NodeLabels(); - setState(1847); + setState(1861); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1846); + setState(1860); match(CypherParser::SP); } } - setState(1855); + setState(1869); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__8) { - setState(1851); + setState(1865); nEUG_Properties(); - setState(1853); + setState(1867); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1852); + setState(1866); match(CypherParser::SP); } } - setState(1857); + setState(1871); match(CypherParser::T__2); } @@ -11657,17 +11704,17 @@ CypherParser::OC_PatternElementChainContext* CypherParser::oC_PatternElementChai }); try { enterOuterAlt(_localctx, 1); - setState(1859); + setState(1873); oC_RelationshipPattern(); - setState(1861); + setState(1875); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1860); + setState(1874); match(CypherParser::SP); } - setState(1863); + setState(1877); oC_NodePattern(); } @@ -11733,29 +11780,29 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter exitRule(); }); try { - setState(1909); + setState(1923); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 293, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 296, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1865); + setState(1879); oC_LeftArrowHead(); - setState(1867); + setState(1881); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1866); + setState(1880); match(CypherParser::SP); } - setState(1869); + setState(1883); oC_Dash(); - setState(1871); + setState(1885); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 283, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 286, _ctx)) { case 1: { - setState(1870); + setState(1884); match(CypherParser::SP); break; } @@ -11763,37 +11810,37 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter default: break; } - setState(1874); + setState(1888); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__6) { - setState(1873); + setState(1887); oC_RelationshipDetail(); } - setState(1877); + setState(1891); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1876); + setState(1890); match(CypherParser::SP); } - setState(1879); + setState(1893); oC_Dash(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1881); + setState(1895); oC_Dash(); - setState(1883); + setState(1897); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 286, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 289, _ctx)) { case 1: { - setState(1882); + setState(1896); match(CypherParser::SP); break; } @@ -11801,47 +11848,47 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter default: break; } - setState(1886); + setState(1900); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__6) { - setState(1885); + setState(1899); oC_RelationshipDetail(); } - setState(1889); + setState(1903); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1888); + setState(1902); match(CypherParser::SP); } - setState(1891); + setState(1905); oC_Dash(); - setState(1893); + setState(1907); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1892); + setState(1906); match(CypherParser::SP); } - setState(1895); + setState(1909); oC_RightArrowHead(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1897); + setState(1911); oC_Dash(); - setState(1899); + setState(1913); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 290, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 293, _ctx)) { case 1: { - setState(1898); + setState(1912); match(CypherParser::SP); break; } @@ -11849,23 +11896,23 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter default: break; } - setState(1902); + setState(1916); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__6) { - setState(1901); + setState(1915); oC_RelationshipDetail(); } - setState(1905); + setState(1919); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1904); + setState(1918); match(CypherParser::SP); } - setState(1907); + setState(1921); oC_Dash(); break; } @@ -11934,83 +11981,83 @@ CypherParser::OC_RelationshipDetailContext* CypherParser::oC_RelationshipDetail( }); try { enterOuterAlt(_localctx, 1); - setState(1911); + setState(1925); match(CypherParser::T__6); - setState(1913); + setState(1927); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1912); + setState(1926); match(CypherParser::SP); } - setState(1919); + setState(1933); _errHandler->sync(this); _la = _input->LA(1); if (((((_la - 49) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 49)) & -2380888042297776235) != 0) || ((((_la - 123) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 123)) & 10137503149540799) != 0)) { - setState(1915); + ((1ULL << (_la - 123)) & 20275004652602815) != 0)) { + setState(1929); oC_Variable(); - setState(1917); + setState(1931); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1916); + setState(1930); match(CypherParser::SP); } } - setState(1925); + setState(1939); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(1921); + setState(1935); oC_RelationshipTypes(); - setState(1923); + setState(1937); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1922); + setState(1936); match(CypherParser::SP); } } - setState(1931); + setState(1945); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::STAR) { - setState(1927); + setState(1941); nEUG_RecursiveDetail(); - setState(1929); + setState(1943); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1928); + setState(1942); match(CypherParser::SP); } } - setState(1937); + setState(1951); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__8) { - setState(1933); + setState(1947); nEUG_Properties(); - setState(1935); + setState(1949); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1934); + setState(1948); match(CypherParser::SP); } } - setState(1939); + setState(1953); match(CypherParser::T__7); } @@ -12081,103 +12128,103 @@ CypherParser::NEUG_PropertiesContext* CypherParser::nEUG_Properties() { }); try { enterOuterAlt(_localctx, 1); - setState(1941); + setState(1955); match(CypherParser::T__8); - setState(1943); + setState(1957); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1942); + setState(1956); match(CypherParser::SP); } - setState(1978); + setState(1992); _errHandler->sync(this); _la = _input->LA(1); if (((((_la - 49) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 49)) & -2380888042297776235) != 0) || ((((_la - 123) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 123)) & 10137503149540799) != 0)) { - setState(1945); + ((1ULL << (_la - 123)) & 20275004652602815) != 0)) { + setState(1959); oC_PropertyKeyName(); - setState(1947); + setState(1961); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1946); + setState(1960); match(CypherParser::SP); } - setState(1949); + setState(1963); match(CypherParser::COLON); - setState(1951); + setState(1965); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1950); + setState(1964); match(CypherParser::SP); } - setState(1953); + setState(1967); oC_Expression(); - setState(1955); + setState(1969); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1954); + setState(1968); match(CypherParser::SP); } - setState(1975); + setState(1989); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(1957); + setState(1971); match(CypherParser::T__3); - setState(1959); + setState(1973); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1958); + setState(1972); match(CypherParser::SP); } - setState(1961); + setState(1975); oC_PropertyKeyName(); - setState(1963); + setState(1977); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1962); + setState(1976); match(CypherParser::SP); } - setState(1965); + setState(1979); match(CypherParser::COLON); - setState(1967); + setState(1981); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1966); + setState(1980); match(CypherParser::SP); } - setState(1969); + setState(1983); oC_Expression(); - setState(1971); + setState(1985); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1970); + setState(1984); match(CypherParser::SP); } - setState(1977); + setState(1991); _errHandler->sync(this); _la = _input->LA(1); } } - setState(1980); + setState(1994); match(CypherParser::T__9); } @@ -12241,55 +12288,55 @@ CypherParser::OC_RelationshipTypesContext* CypherParser::oC_RelationshipTypes() try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1982); + setState(1996); match(CypherParser::COLON); - setState(1984); + setState(1998); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1983); + setState(1997); match(CypherParser::SP); } - setState(1986); - oC_RelTypeName(); setState(2000); + oC_RelTypeName(); + setState(2014); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 317, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 320, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1988); + setState(2002); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1987); + setState(2001); match(CypherParser::SP); } - setState(1990); + setState(2004); match(CypherParser::T__11); - setState(1992); + setState(2006); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(1991); + setState(2005); match(CypherParser::COLON); } - setState(1995); + setState(2009); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1994); + setState(2008); match(CypherParser::SP); } - setState(1997); + setState(2011); oC_RelTypeName(); } - setState(2002); + setState(2016); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 317, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 320, _ctx); } } @@ -12345,27 +12392,27 @@ CypherParser::OC_NodeLabelsContext* CypherParser::oC_NodeLabels() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2003); + setState(2017); oC_NodeLabel(); - setState(2010); + setState(2024); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 319, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 322, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2005); + setState(2019); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2004); + setState(2018); match(CypherParser::SP); } - setState(2007); + setState(2021); oC_NodeLabel(); } - setState(2012); + setState(2026); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 319, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 322, _ctx); } } @@ -12416,17 +12463,17 @@ CypherParser::OC_NodeLabelContext* CypherParser::oC_NodeLabel() { }); try { enterOuterAlt(_localctx, 1); - setState(2013); + setState(2027); match(CypherParser::COLON); - setState(2015); + setState(2029); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2014); + setState(2028); match(CypherParser::SP); } - setState(2017); + setState(2031); oC_LabelName(); } @@ -12489,22 +12536,22 @@ CypherParser::NEUG_RecursiveDetailContext* CypherParser::nEUG_RecursiveDetail() }); try { enterOuterAlt(_localctx, 1); - setState(2019); + setState(2033); match(CypherParser::STAR); - setState(2024); + setState(2038); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 322, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 325, _ctx)) { case 1: { - setState(2021); + setState(2035); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2020); + setState(2034); match(CypherParser::SP); } - setState(2023); + setState(2037); nEUG_RecursiveType(); break; } @@ -12512,17 +12559,17 @@ CypherParser::NEUG_RecursiveDetailContext* CypherParser::nEUG_RecursiveDetail() default: break; } - setState(2030); + setState(2044); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 324, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 327, _ctx)) { case 1: { - setState(2027); + setState(2041); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 323, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 326, _ctx)) { case 1: { - setState(2026); + setState(2040); match(CypherParser::SP); break; } @@ -12530,7 +12577,7 @@ CypherParser::NEUG_RecursiveDetailContext* CypherParser::nEUG_RecursiveDetail() default: break; } - setState(2029); + setState(2043); oC_RangeLiteral(); break; } @@ -12538,20 +12585,20 @@ CypherParser::NEUG_RecursiveDetailContext* CypherParser::nEUG_RecursiveDetail() default: break; } - setState(2036); + setState(2050); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 326, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 329, _ctx)) { case 1: { - setState(2033); + setState(2047); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2032); + setState(2046); match(CypherParser::SP); } - setState(2035); + setState(2049); nEUG_RecursiveComprehension(); break; } @@ -12627,84 +12674,84 @@ CypherParser::NEUG_RecursiveTypeContext* CypherParser::nEUG_RecursiveType() { exitRule(); }); try { - setState(2062); + setState(2076); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 331, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 334, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2040); + setState(2054); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::ALL) { - setState(2038); + setState(2052); match(CypherParser::ALL); - setState(2039); + setState(2053); match(CypherParser::SP); } - setState(2042); + setState(2056); match(CypherParser::WSHORTEST); - setState(2044); + setState(2058); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2043); + setState(2057); match(CypherParser::SP); } - setState(2046); + setState(2060); match(CypherParser::T__1); - setState(2048); + setState(2062); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2047); + setState(2061); match(CypherParser::SP); } - setState(2050); + setState(2064); oC_PropertyKeyName(); - setState(2052); + setState(2066); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2051); + setState(2065); match(CypherParser::SP); } - setState(2054); + setState(2068); match(CypherParser::T__2); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2056); + setState(2070); match(CypherParser::SHORTEST); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2057); + setState(2071); match(CypherParser::ALL); - setState(2058); + setState(2072); match(CypherParser::SP); - setState(2059); + setState(2073); match(CypherParser::SHORTEST); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(2060); + setState(2074); match(CypherParser::TRAIL); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(2061); + setState(2075); match(CypherParser::ACYCLIC); break; } @@ -12768,35 +12815,35 @@ CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { exitRule(); }); try { - setState(2078); + setState(2092); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 336, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 339, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2065); + setState(2079); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DecimalInteger) { - setState(2064); + setState(2078); oC_LowerBound(); } - setState(2068); + setState(2082); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2067); + setState(2081); match(CypherParser::SP); } - setState(2070); + setState(2084); match(CypherParser::T__12); - setState(2072); + setState(2086); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 334, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 337, _ctx)) { case 1: { - setState(2071); + setState(2085); match(CypherParser::SP); break; } @@ -12804,12 +12851,12 @@ CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { default: break; } - setState(2075); + setState(2089); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DecimalInteger) { - setState(2074); + setState(2088); oC_UpperBound(); } break; @@ -12817,7 +12864,7 @@ CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { case 2: { enterOuterAlt(_localctx, 2); - setState(2077); + setState(2091); oC_IntegerLiteral(); break; } @@ -12890,69 +12937,69 @@ CypherParser::NEUG_RecursiveComprehensionContext* CypherParser::nEUG_RecursiveCo }); try { enterOuterAlt(_localctx, 1); - setState(2080); + setState(2094); match(CypherParser::T__1); - setState(2082); + setState(2096); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2081); + setState(2095); match(CypherParser::SP); } - setState(2084); + setState(2098); oC_Variable(); - setState(2086); + setState(2100); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2085); + setState(2099); match(CypherParser::SP); } - setState(2088); + setState(2102); match(CypherParser::T__3); - setState(2090); + setState(2104); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2089); + setState(2103); match(CypherParser::SP); } - setState(2092); + setState(2106); oC_Variable(); - setState(2104); + setState(2118); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 343, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 346, _ctx)) { case 1: { - setState(2094); + setState(2108); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2093); + setState(2107); match(CypherParser::SP); } - setState(2096); + setState(2110); match(CypherParser::T__11); - setState(2098); + setState(2112); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2097); + setState(2111); match(CypherParser::SP); } - setState(2100); + setState(2114); oC_Where(); - setState(2102); + setState(2116); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 342, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 345, _ctx)) { case 1: { - setState(2101); + setState(2115); match(CypherParser::SP); break; } @@ -12966,61 +13013,61 @@ CypherParser::NEUG_RecursiveComprehensionContext* CypherParser::nEUG_RecursiveCo default: break; } - setState(2125); + setState(2139); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__11 || _la == CypherParser::SP) { - setState(2107); + setState(2121); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2106); + setState(2120); match(CypherParser::SP); } - setState(2109); + setState(2123); match(CypherParser::T__11); - setState(2111); + setState(2125); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2110); + setState(2124); match(CypherParser::SP); } - setState(2113); + setState(2127); nEUG_RecursiveProjectionItems(); - setState(2115); + setState(2129); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2114); + setState(2128); match(CypherParser::SP); } - setState(2117); + setState(2131); match(CypherParser::T__3); - setState(2119); + setState(2133); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2118); + setState(2132); match(CypherParser::SP); } - setState(2121); + setState(2135); nEUG_RecursiveProjectionItems(); - setState(2123); + setState(2137); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2122); + setState(2136); match(CypherParser::SP); } } - setState(2127); + setState(2141); match(CypherParser::T__2); } @@ -13071,14 +13118,14 @@ CypherParser::NEUG_RecursiveProjectionItemsContext* CypherParser::nEUG_Recursive }); try { enterOuterAlt(_localctx, 1); - setState(2129); + setState(2143); match(CypherParser::T__8); - setState(2131); + setState(2145); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 350, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 353, _ctx)) { case 1: { - setState(2130); + setState(2144); match(CypherParser::SP); break; } @@ -13086,26 +13133,26 @@ CypherParser::NEUG_RecursiveProjectionItemsContext* CypherParser::nEUG_Recursive default: break; } - setState(2134); + setState(2148); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 9164543766856467076) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -572029811611842117) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 343284649105965) != 0)) { - setState(2133); + ((1ULL << (_la - 128)) & 686569238370861) != 0)) { + setState(2147); oC_ProjectionItems(); } - setState(2137); + setState(2151); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2136); + setState(2150); match(CypherParser::SP); } - setState(2139); + setState(2153); match(CypherParser::T__9); } @@ -13147,7 +13194,7 @@ CypherParser::OC_LowerBoundContext* CypherParser::oC_LowerBound() { }); try { enterOuterAlt(_localctx, 1); - setState(2141); + setState(2155); match(CypherParser::DecimalInteger); } @@ -13189,7 +13236,7 @@ CypherParser::OC_UpperBoundContext* CypherParser::oC_UpperBound() { }); try { enterOuterAlt(_localctx, 1); - setState(2143); + setState(2157); match(CypherParser::DecimalInteger); } @@ -13231,7 +13278,7 @@ CypherParser::OC_LabelNameContext* CypherParser::oC_LabelName() { }); try { enterOuterAlt(_localctx, 1); - setState(2145); + setState(2159); oC_SchemaName(); } @@ -13273,7 +13320,7 @@ CypherParser::OC_RelTypeNameContext* CypherParser::oC_RelTypeName() { }); try { enterOuterAlt(_localctx, 1); - setState(2147); + setState(2161); oC_SchemaName(); } @@ -13315,7 +13362,7 @@ CypherParser::OC_ExpressionContext* CypherParser::oC_Expression() { }); try { enterOuterAlt(_localctx, 1); - setState(2149); + setState(2163); oC_OrExpression(); } @@ -13378,25 +13425,25 @@ CypherParser::OC_OrExpressionContext* CypherParser::oC_OrExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2151); + setState(2165); oC_XorExpression(); - setState(2158); + setState(2172); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 353, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 356, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2152); + setState(2166); match(CypherParser::SP); - setState(2153); + setState(2167); match(CypherParser::OR); - setState(2154); + setState(2168); match(CypherParser::SP); - setState(2155); + setState(2169); oC_XorExpression(); } - setState(2160); + setState(2174); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 353, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 356, _ctx); } } @@ -13459,25 +13506,25 @@ CypherParser::OC_XorExpressionContext* CypherParser::oC_XorExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2161); + setState(2175); oC_AndExpression(); - setState(2168); + setState(2182); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 354, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 357, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2162); + setState(2176); match(CypherParser::SP); - setState(2163); + setState(2177); match(CypherParser::XOR); - setState(2164); + setState(2178); match(CypherParser::SP); - setState(2165); + setState(2179); oC_AndExpression(); } - setState(2170); + setState(2184); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 354, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 357, _ctx); } } @@ -13540,25 +13587,25 @@ CypherParser::OC_AndExpressionContext* CypherParser::oC_AndExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2171); + setState(2185); oC_NotExpression(); - setState(2178); + setState(2192); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 355, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 358, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2172); + setState(2186); match(CypherParser::SP); - setState(2173); + setState(2187); match(CypherParser::AND); - setState(2174); + setState(2188); match(CypherParser::SP); - setState(2175); + setState(2189); oC_NotExpression(); } - setState(2180); + setState(2194); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 355, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 358, _ctx); } } @@ -13617,25 +13664,25 @@ CypherParser::OC_NotExpressionContext* CypherParser::oC_NotExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(2187); + setState(2201); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::NOT) { - setState(2181); + setState(2195); match(CypherParser::NOT); - setState(2183); + setState(2197); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2182); + setState(2196); match(CypherParser::SP); } - setState(2189); + setState(2203); _errHandler->sync(this); _la = _input->LA(1); } - setState(2190); + setState(2204); oC_ComparisonExpression(); } @@ -13702,37 +13749,37 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress }); try { size_t alt; - setState(2240); + setState(2254); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 368, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 371, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2192); + setState(2206); nEUG_BitwiseOrOperatorExpression(); - setState(2202); + setState(2216); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 360, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 363, _ctx)) { case 1: { - setState(2194); + setState(2208); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2193); + setState(2207); match(CypherParser::SP); } - setState(2196); + setState(2210); nEUG_ComparisonOperator(); - setState(2198); + setState(2212); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2197); + setState(2211); match(CypherParser::SP); } - setState(2200); + setState(2214); nEUG_BitwiseOrOperatorExpression(); break; } @@ -13745,28 +13792,28 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress case 2: { enterOuterAlt(_localctx, 2); - setState(2204); + setState(2218); nEUG_BitwiseOrOperatorExpression(); - setState(2206); + setState(2220); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2205); + setState(2219); match(CypherParser::SP); } - setState(2208); + setState(2222); antlrcpp::downCast(_localctx)->invalid_not_equalToken = match(CypherParser::INVALID_NOT_EQUAL); - setState(2210); + setState(2224); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2209); + setState(2223); match(CypherParser::SP); } - setState(2212); + setState(2226); nEUG_BitwiseOrOperatorExpression(); notifyInvalidNotEqualOperator(antlrcpp::downCast(_localctx)->invalid_not_equalToken); break; @@ -13774,53 +13821,53 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress case 3: { enterOuterAlt(_localctx, 3); - setState(2216); + setState(2230); nEUG_BitwiseOrOperatorExpression(); - setState(2218); + setState(2232); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2217); + setState(2231); match(CypherParser::SP); } - setState(2220); + setState(2234); nEUG_ComparisonOperator(); - setState(2222); + setState(2236); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2221); + setState(2235); match(CypherParser::SP); } - setState(2224); + setState(2238); nEUG_BitwiseOrOperatorExpression(); - setState(2234); + setState(2248); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2226); + setState(2240); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2225); + setState(2239); match(CypherParser::SP); } - setState(2228); + setState(2242); nEUG_ComparisonOperator(); - setState(2230); + setState(2244); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2229); + setState(2243); match(CypherParser::SP); } - setState(2232); + setState(2246); nEUG_BitwiseOrOperatorExpression(); break; } @@ -13828,9 +13875,9 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress default: throw NoViableAltException(this); } - setState(2236); + setState(2250); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 367, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 370, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); notifyNonBinaryComparison(_localctx->start); break; @@ -13876,7 +13923,7 @@ CypherParser::NEUG_ComparisonOperatorContext* CypherParser::nEUG_ComparisonOpera }); try { enterOuterAlt(_localctx, 1); - setState(2242); + setState(2256); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 507968) != 0))) { @@ -13940,37 +13987,37 @@ CypherParser::NEUG_BitwiseOrOperatorExpressionContext* CypherParser::nEUG_Bitwis try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2244); + setState(2258); nEUG_BitwiseAndOperatorExpression(); - setState(2255); + setState(2269); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 371, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 374, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2246); + setState(2260); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2245); + setState(2259); match(CypherParser::SP); } - setState(2248); + setState(2262); match(CypherParser::T__11); - setState(2250); + setState(2264); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2249); + setState(2263); match(CypherParser::SP); } - setState(2252); + setState(2266); nEUG_BitwiseAndOperatorExpression(); } - setState(2257); + setState(2271); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 371, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 374, _ctx); } } @@ -14026,37 +14073,37 @@ CypherParser::NEUG_BitwiseAndOperatorExpressionContext* CypherParser::nEUG_Bitwi try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2258); + setState(2272); nEUG_BitShiftOperatorExpression(); - setState(2269); + setState(2283); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 374, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 377, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2260); + setState(2274); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2259); + setState(2273); match(CypherParser::SP); } - setState(2262); + setState(2276); match(CypherParser::T__18); - setState(2264); + setState(2278); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2263); + setState(2277); match(CypherParser::SP); } - setState(2266); + setState(2280); nEUG_BitShiftOperatorExpression(); } - setState(2271); + setState(2285); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 374, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 377, _ctx); } } @@ -14120,37 +14167,37 @@ CypherParser::NEUG_BitShiftOperatorExpressionContext* CypherParser::nEUG_BitShif try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2272); + setState(2286); oC_AddOrSubtractExpression(); - setState(2284); + setState(2298); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 377, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 380, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2274); + setState(2288); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2273); + setState(2287); match(CypherParser::SP); } - setState(2276); + setState(2290); nEUG_BitShiftOperator(); - setState(2278); + setState(2292); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2277); + setState(2291); match(CypherParser::SP); } - setState(2280); + setState(2294); oC_AddOrSubtractExpression(); } - setState(2286); + setState(2300); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 377, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 380, _ctx); } } @@ -14189,7 +14236,7 @@ CypherParser::NEUG_BitShiftOperatorContext* CypherParser::nEUG_BitShiftOperator( }); try { enterOuterAlt(_localctx, 1); - setState(2287); + setState(2301); _la = _input->LA(1); if (!(_la == CypherParser::T__19 @@ -14262,37 +14309,37 @@ CypherParser::OC_AddOrSubtractExpressionContext* CypherParser::oC_AddOrSubtractE try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2289); + setState(2303); oC_MultiplyDivideModuloExpression(); - setState(2301); + setState(2315); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 380, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 383, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2291); + setState(2305); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2290); + setState(2304); match(CypherParser::SP); } - setState(2293); + setState(2307); nEUG_AddOrSubtractOperator(); - setState(2295); + setState(2309); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2294); + setState(2308); match(CypherParser::SP); } - setState(2297); + setState(2311); oC_MultiplyDivideModuloExpression(); } - setState(2303); + setState(2317); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 380, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 383, _ctx); } } @@ -14335,7 +14382,7 @@ CypherParser::NEUG_AddOrSubtractOperatorContext* CypherParser::nEUG_AddOrSubtrac }); try { enterOuterAlt(_localctx, 1); - setState(2304); + setState(2318); _la = _input->LA(1); if (!(_la == CypherParser::T__21 || _la == CypherParser::MINUS)) { _errHandler->recoverInline(this); @@ -14406,37 +14453,37 @@ CypherParser::OC_MultiplyDivideModuloExpressionContext* CypherParser::oC_Multipl try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2306); + setState(2320); oC_PowerOfExpression(); - setState(2318); + setState(2332); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 383, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 386, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2308); + setState(2322); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2307); + setState(2321); match(CypherParser::SP); } - setState(2310); + setState(2324); nEUG_MultiplyDivideModuloOperator(); - setState(2312); + setState(2326); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2311); + setState(2325); match(CypherParser::SP); } - setState(2314); + setState(2328); oC_PowerOfExpression(); } - setState(2320); + setState(2334); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 383, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 386, _ctx); } } @@ -14479,7 +14526,7 @@ CypherParser::NEUG_MultiplyDivideModuloOperatorContext* CypherParser::nEUG_Multi }); try { enterOuterAlt(_localctx, 1); - setState(2321); + setState(2335); _la = _input->LA(1); if (!(_la == CypherParser::T__22 @@ -14544,37 +14591,37 @@ CypherParser::OC_PowerOfExpressionContext* CypherParser::oC_PowerOfExpression() try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2323); + setState(2337); oC_UnaryAddSubtractOrFactorialExpression(); - setState(2334); + setState(2348); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 386, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 389, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2325); + setState(2339); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2324); + setState(2338); match(CypherParser::SP); } - setState(2327); + setState(2341); match(CypherParser::T__24); - setState(2329); + setState(2343); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2328); + setState(2342); match(CypherParser::SP); } - setState(2331); + setState(2345); oC_UnaryAddSubtractOrFactorialExpression(); } - setState(2336); + setState(2350); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 386, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 389, _ctx); } } @@ -14637,40 +14684,40 @@ CypherParser::OC_UnaryAddSubtractOrFactorialExpressionContext* CypherParser::oC_ }); try { enterOuterAlt(_localctx, 1); - setState(2343); + setState(2357); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::MINUS) { - setState(2337); + setState(2351); match(CypherParser::MINUS); - setState(2339); + setState(2353); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2338); + setState(2352); match(CypherParser::SP); } - setState(2345); + setState(2359); _errHandler->sync(this); _la = _input->LA(1); } - setState(2346); + setState(2360); oC_StringListNullOperatorExpression(); - setState(2351); + setState(2365); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 390, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 393, _ctx)) { case 1: { - setState(2348); + setState(2362); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2347); + setState(2361); match(CypherParser::SP); } - setState(2350); + setState(2364); match(CypherParser::FACTORIAL); break; } @@ -14735,26 +14782,26 @@ CypherParser::OC_StringListNullOperatorExpressionContext* CypherParser::oC_Strin try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2353); + setState(2367); oC_PropertyOrLabelsExpression(); - setState(2361); + setState(2375); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 392, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 395, _ctx)) { case 1: { - setState(2354); + setState(2368); oC_StringOperatorExpression(); break; } case 2: { - setState(2356); + setState(2370); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2355); + setState(2369); oC_ListOperatorExpression(); break; } @@ -14762,15 +14809,15 @@ CypherParser::OC_StringListNullOperatorExpressionContext* CypherParser::oC_Strin default: throw NoViableAltException(this); } - setState(2358); + setState(2372); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 391, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 394, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } case 3: { - setState(2360); + setState(2374); oC_NullOperatorExpression(); break; } @@ -14842,68 +14889,68 @@ CypherParser::OC_ListOperatorExpressionContext* CypherParser::oC_ListOperatorExp exitRule(); }); try { - setState(2382); + setState(2396); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 396, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 399, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2363); + setState(2377); match(CypherParser::SP); - setState(2364); + setState(2378); match(CypherParser::IN); - setState(2366); + setState(2380); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2365); + setState(2379); match(CypherParser::SP); } - setState(2368); + setState(2382); oC_PropertyOrLabelsExpression(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2369); + setState(2383); match(CypherParser::T__6); - setState(2370); + setState(2384); oC_Expression(); - setState(2371); + setState(2385); match(CypherParser::T__7); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2373); + setState(2387); match(CypherParser::T__6); - setState(2375); + setState(2389); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 9164543766856467076) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -572029811611842117) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 343284581997101) != 0)) { - setState(2374); + ((1ULL << (_la - 128)) & 686569104153133) != 0)) { + setState(2388); oC_Expression(); } - setState(2377); + setState(2391); match(CypherParser::COLON); - setState(2379); + setState(2393); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 9164543766856467076) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -572029811611842117) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 343284581997101) != 0)) { - setState(2378); + ((1ULL << (_la - 128)) & 686569104153133) != 0)) { + setState(2392); oC_Expression(); } - setState(2381); + setState(2395); match(CypherParser::T__7); break; } @@ -14980,43 +15027,43 @@ CypherParser::OC_StringOperatorExpressionContext* CypherParser::oC_StringOperato }); try { enterOuterAlt(_localctx, 1); - setState(2395); + setState(2409); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 397, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 400, _ctx)) { case 1: { - setState(2384); + setState(2398); oC_RegularExpression(); break; } case 2: { - setState(2385); + setState(2399); match(CypherParser::SP); - setState(2386); + setState(2400); match(CypherParser::STARTS); - setState(2387); + setState(2401); match(CypherParser::SP); - setState(2388); + setState(2402); match(CypherParser::WITH); break; } case 3: { - setState(2389); + setState(2403); match(CypherParser::SP); - setState(2390); + setState(2404); match(CypherParser::ENDS); - setState(2391); + setState(2405); match(CypherParser::SP); - setState(2392); + setState(2406); match(CypherParser::WITH); break; } case 4: { - setState(2393); + setState(2407); match(CypherParser::SP); - setState(2394); + setState(2408); match(CypherParser::CONTAINS); break; } @@ -15024,15 +15071,15 @@ CypherParser::OC_StringOperatorExpressionContext* CypherParser::oC_StringOperato default: break; } - setState(2398); + setState(2412); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2397); + setState(2411); match(CypherParser::SP); } - setState(2400); + setState(2414); oC_PropertyOrLabelsExpression(); } @@ -15075,15 +15122,15 @@ CypherParser::OC_RegularExpressionContext* CypherParser::oC_RegularExpression() }); try { enterOuterAlt(_localctx, 1); - setState(2403); + setState(2417); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2402); + setState(2416); match(CypherParser::SP); } - setState(2405); + setState(2419); match(CypherParser::T__25); } @@ -15140,35 +15187,35 @@ CypherParser::OC_NullOperatorExpressionContext* CypherParser::oC_NullOperatorExp exitRule(); }); try { - setState(2417); + setState(2431); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 400, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 403, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2407); + setState(2421); match(CypherParser::SP); - setState(2408); + setState(2422); match(CypherParser::IS); - setState(2409); + setState(2423); match(CypherParser::SP); - setState(2410); + setState(2424); match(CypherParser::NULL_); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2411); + setState(2425); match(CypherParser::SP); - setState(2412); + setState(2426); match(CypherParser::IS); - setState(2413); + setState(2427); match(CypherParser::SP); - setState(2414); + setState(2428); match(CypherParser::NOT); - setState(2415); + setState(2429); match(CypherParser::SP); - setState(2416); + setState(2430); match(CypherParser::NULL_); break; } @@ -15234,27 +15281,27 @@ CypherParser::OC_PropertyOrLabelsExpressionContext* CypherParser::oC_PropertyOrL try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2419); + setState(2433); oC_Atom(); - setState(2426); + setState(2440); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 402, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 405, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2421); + setState(2435); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2420); + setState(2434); match(CypherParser::SP); } - setState(2423); + setState(2437); oC_PropertyLookup(); } - setState(2428); + setState(2442); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 402, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 405, _ctx); } } @@ -15327,68 +15374,68 @@ CypherParser::OC_AtomContext* CypherParser::oC_Atom() { exitRule(); }); try { - setState(2438); + setState(2452); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 403, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 406, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2429); + setState(2443); oC_Literal(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2430); + setState(2444); oC_Parameter(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2431); + setState(2445); oC_CaseExpression(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(2432); + setState(2446); oC_ParenthesizedExpression(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(2433); + setState(2447); oC_FunctionInvocation(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(2434); + setState(2448); oC_PathPatterns(); break; } case 7: { enterOuterAlt(_localctx, 7); - setState(2435); + setState(2449); oC_ExistCountSubquery(); break; } case 8: { enterOuterAlt(_localctx, 8); - setState(2436); + setState(2450); oC_Variable(); break; } case 9: { enterOuterAlt(_localctx, 9); - setState(2437); + setState(2451); oC_Quantifier(); break; } @@ -15460,153 +15507,153 @@ CypherParser::OC_QuantifierContext* CypherParser::oC_Quantifier() { exitRule(); }); try { - setState(2496); + setState(2510); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ALL: { enterOuterAlt(_localctx, 1); - setState(2440); + setState(2454); match(CypherParser::ALL); - setState(2442); + setState(2456); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2441); + setState(2455); match(CypherParser::SP); } - setState(2444); + setState(2458); match(CypherParser::T__1); - setState(2446); + setState(2460); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2445); + setState(2459); match(CypherParser::SP); } - setState(2448); + setState(2462); oC_FilterExpression(); - setState(2450); + setState(2464); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2449); + setState(2463); match(CypherParser::SP); } - setState(2452); + setState(2466); match(CypherParser::T__2); break; } case CypherParser::ANY: { enterOuterAlt(_localctx, 2); - setState(2454); + setState(2468); match(CypherParser::ANY); - setState(2456); + setState(2470); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2455); + setState(2469); match(CypherParser::SP); } - setState(2458); + setState(2472); match(CypherParser::T__1); - setState(2460); + setState(2474); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2459); + setState(2473); match(CypherParser::SP); } - setState(2462); + setState(2476); oC_FilterExpression(); - setState(2464); + setState(2478); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2463); + setState(2477); match(CypherParser::SP); } - setState(2466); + setState(2480); match(CypherParser::T__2); break; } case CypherParser::NONE: { enterOuterAlt(_localctx, 3); - setState(2468); + setState(2482); match(CypherParser::NONE); - setState(2470); + setState(2484); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2469); + setState(2483); match(CypherParser::SP); } - setState(2472); + setState(2486); match(CypherParser::T__1); - setState(2474); + setState(2488); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2473); + setState(2487); match(CypherParser::SP); } - setState(2476); + setState(2490); oC_FilterExpression(); - setState(2478); + setState(2492); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2477); + setState(2491); match(CypherParser::SP); } - setState(2480); + setState(2494); match(CypherParser::T__2); break; } case CypherParser::SINGLE: { enterOuterAlt(_localctx, 4); - setState(2482); + setState(2496); match(CypherParser::SINGLE); - setState(2484); + setState(2498); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2483); + setState(2497); match(CypherParser::SP); } - setState(2486); + setState(2500); match(CypherParser::T__1); - setState(2488); + setState(2502); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2487); + setState(2501); match(CypherParser::SP); } - setState(2490); + setState(2504); oC_FilterExpression(); - setState(2492); + setState(2506); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2491); + setState(2505); match(CypherParser::SP); } - setState(2494); + setState(2508); match(CypherParser::T__2); break; } @@ -15662,11 +15709,11 @@ CypherParser::OC_FilterExpressionContext* CypherParser::oC_FilterExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(2498); + setState(2512); oC_IdInColl(); - setState(2499); + setState(2513); match(CypherParser::SP); - setState(2500); + setState(2514); oC_Where(); } @@ -15724,15 +15771,15 @@ CypherParser::OC_IdInCollContext* CypherParser::oC_IdInColl() { }); try { enterOuterAlt(_localctx, 1); - setState(2502); + setState(2516); oC_Variable(); - setState(2503); + setState(2517); match(CypherParser::SP); - setState(2504); + setState(2518); match(CypherParser::IN); - setState(2505); + setState(2519); match(CypherParser::SP); - setState(2506); + setState(2520); oC_Expression(); } @@ -15793,21 +15840,21 @@ CypherParser::OC_LiteralContext* CypherParser::oC_Literal() { exitRule(); }); try { - setState(2514); + setState(2528); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::DecimalInteger: case CypherParser::ExponentDecimalReal: case CypherParser::RegularDecimalReal: { enterOuterAlt(_localctx, 1); - setState(2508); + setState(2522); oC_NumberLiteral(); break; } case CypherParser::StringLiteral: { enterOuterAlt(_localctx, 2); - setState(2509); + setState(2523); match(CypherParser::StringLiteral); break; } @@ -15815,28 +15862,28 @@ CypherParser::OC_LiteralContext* CypherParser::oC_Literal() { case CypherParser::BTRUE: case CypherParser::BFALSE: { enterOuterAlt(_localctx, 3); - setState(2510); + setState(2524); oC_BooleanLiteral(); break; } case CypherParser::NULL_: { enterOuterAlt(_localctx, 4); - setState(2511); + setState(2525); match(CypherParser::NULL_); break; } case CypherParser::T__6: { enterOuterAlt(_localctx, 5); - setState(2512); + setState(2526); oC_ListLiteral(); break; } case CypherParser::T__8: { enterOuterAlt(_localctx, 6); - setState(2513); + setState(2527); nEUG_StructLiteral(); break; } @@ -15889,7 +15936,7 @@ CypherParser::OC_BooleanLiteralContext* CypherParser::oC_BooleanLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2516); + setState(2530); _la = _input->LA(1); if (!(_la == CypherParser::BTRUE @@ -15957,54 +16004,54 @@ CypherParser::OC_ListLiteralContext* CypherParser::oC_ListLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2518); + setState(2532); match(CypherParser::T__6); - setState(2520); + setState(2534); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2519); + setState(2533); match(CypherParser::SP); } - setState(2535); + setState(2549); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 9164543766856467076) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -572029811611842117) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 343284581997101) != 0)) { - setState(2522); + ((1ULL << (_la - 128)) & 686569104153133) != 0)) { + setState(2536); oC_Expression(); - setState(2524); + setState(2538); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2523); + setState(2537); match(CypherParser::SP); } - setState(2532); + setState(2546); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2526); + setState(2540); nEUG_ListEntry(); - setState(2528); + setState(2542); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2527); + setState(2541); match(CypherParser::SP); } - setState(2534); + setState(2548); _errHandler->sync(this); _la = _input->LA(1); } } - setState(2537); + setState(2551); match(CypherParser::T__7); } @@ -16051,14 +16098,14 @@ CypherParser::NEUG_ListEntryContext* CypherParser::nEUG_ListEntry() { }); try { enterOuterAlt(_localctx, 1); - setState(2539); + setState(2553); match(CypherParser::T__3); - setState(2541); + setState(2555); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 423, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 426, _ctx)) { case 1: { - setState(2540); + setState(2554); match(CypherParser::SP); break; } @@ -16066,15 +16113,15 @@ CypherParser::NEUG_ListEntryContext* CypherParser::nEUG_ListEntry() { default: break; } - setState(2544); + setState(2558); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 9164543766856467076) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -572029811611842117) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 343284581997101) != 0)) { - setState(2543); + ((1ULL << (_la - 128)) & 686569104153133) != 0)) { + setState(2557); oC_Expression(); } @@ -16130,55 +16177,55 @@ CypherParser::NEUG_StructLiteralContext* CypherParser::nEUG_StructLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2546); + setState(2560); match(CypherParser::T__8); - setState(2548); + setState(2562); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2547); + setState(2561); match(CypherParser::SP); } - setState(2550); + setState(2564); nEUG_StructField(); - setState(2552); + setState(2566); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2551); + setState(2565); match(CypherParser::SP); } - setState(2564); + setState(2578); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2554); + setState(2568); match(CypherParser::T__3); - setState(2556); + setState(2570); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2555); + setState(2569); match(CypherParser::SP); } - setState(2558); + setState(2572); nEUG_StructField(); - setState(2560); + setState(2574); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2559); + setState(2573); match(CypherParser::SP); } - setState(2566); + setState(2580); _errHandler->sync(this); _la = _input->LA(1); } - setState(2567); + setState(2581); match(CypherParser::T__9); } @@ -16241,7 +16288,7 @@ CypherParser::NEUG_StructFieldContext* CypherParser::nEUG_StructField() { }); try { enterOuterAlt(_localctx, 1); - setState(2571); + setState(2585); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -16301,13 +16348,13 @@ CypherParser::NEUG_StructFieldContext* CypherParser::nEUG_StructField() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(2569); + setState(2583); oC_SymbolicName(); break; } case CypherParser::StringLiteral: { - setState(2570); + setState(2584); match(CypherParser::StringLiteral); break; } @@ -16315,25 +16362,25 @@ CypherParser::NEUG_StructFieldContext* CypherParser::nEUG_StructField() { default: throw NoViableAltException(this); } - setState(2574); + setState(2588); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2573); + setState(2587); match(CypherParser::SP); } - setState(2576); + setState(2590); match(CypherParser::COLON); - setState(2578); + setState(2592); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2577); + setState(2591); match(CypherParser::SP); } - setState(2580); + setState(2594); oC_Expression(); } @@ -16384,27 +16431,27 @@ CypherParser::OC_ParenthesizedExpressionContext* CypherParser::oC_ParenthesizedE }); try { enterOuterAlt(_localctx, 1); - setState(2582); + setState(2596); match(CypherParser::T__1); - setState(2584); + setState(2598); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2583); + setState(2597); match(CypherParser::SP); } - setState(2586); + setState(2600); oC_Expression(); - setState(2588); + setState(2602); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2587); + setState(2601); match(CypherParser::SP); } - setState(2590); + setState(2604); match(CypherParser::T__2); } @@ -16486,109 +16533,109 @@ CypherParser::OC_FunctionInvocationContext* CypherParser::oC_FunctionInvocation( exitRule(); }); try { - setState(2669); + setState(2683); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 454, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 457, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2592); + setState(2606); match(CypherParser::COUNT); - setState(2594); + setState(2608); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2593); + setState(2607); match(CypherParser::SP); } - setState(2596); + setState(2610); match(CypherParser::T__1); - setState(2598); + setState(2612); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2597); + setState(2611); match(CypherParser::SP); } - setState(2600); + setState(2614); match(CypherParser::STAR); - setState(2602); + setState(2616); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2601); + setState(2615); match(CypherParser::SP); } - setState(2604); + setState(2618); match(CypherParser::T__2); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2605); + setState(2619); match(CypherParser::CAST); - setState(2607); + setState(2621); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2606); + setState(2620); match(CypherParser::SP); } - setState(2609); + setState(2623); match(CypherParser::T__1); - setState(2611); + setState(2625); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2610); + setState(2624); match(CypherParser::SP); } - setState(2613); + setState(2627); nEUG_FunctionParameter(); - setState(2615); + setState(2629); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2614); + setState(2628); match(CypherParser::SP); } - setState(2627); + setState(2641); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::AS: { - setState(2617); + setState(2631); match(CypherParser::AS); - setState(2619); + setState(2633); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2618); + setState(2632); match(CypherParser::SP); } - setState(2621); + setState(2635); nEUG_DataType(0); break; } case CypherParser::T__3: { - setState(2622); + setState(2636); match(CypherParser::T__3); - setState(2624); + setState(2638); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2623); + setState(2637); match(CypherParser::SP); } - setState(2626); + setState(2640); nEUG_FunctionParameter(); break; } @@ -16596,105 +16643,105 @@ CypherParser::OC_FunctionInvocationContext* CypherParser::oC_FunctionInvocation( default: throw NoViableAltException(this); } - setState(2630); + setState(2644); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2629); + setState(2643); match(CypherParser::SP); } - setState(2632); + setState(2646); match(CypherParser::T__2); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2634); + setState(2648); oC_FunctionName(); - setState(2636); + setState(2650); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2635); + setState(2649); match(CypherParser::SP); } - setState(2638); + setState(2652); match(CypherParser::T__1); - setState(2640); + setState(2654); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2639); + setState(2653); match(CypherParser::SP); } - setState(2646); + setState(2660); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DISTINCT) { - setState(2642); + setState(2656); match(CypherParser::DISTINCT); - setState(2644); + setState(2658); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2643); + setState(2657); match(CypherParser::SP); } } - setState(2665); + setState(2679); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 9164543766856467076) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -572029811611842117) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 343284581997101) != 0)) { - setState(2648); + ((1ULL << (_la - 128)) & 686569104153133) != 0)) { + setState(2662); nEUG_FunctionParameter(); - setState(2650); + setState(2664); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2649); + setState(2663); match(CypherParser::SP); } - setState(2662); + setState(2676); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2652); + setState(2666); match(CypherParser::T__3); - setState(2654); + setState(2668); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2653); + setState(2667); match(CypherParser::SP); } - setState(2656); + setState(2670); nEUG_FunctionParameter(); - setState(2658); + setState(2672); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2657); + setState(2671); match(CypherParser::SP); } - setState(2664); + setState(2678); _errHandler->sync(this); _la = _input->LA(1); } } - setState(2667); + setState(2681); match(CypherParser::T__2); break; } @@ -16742,7 +16789,7 @@ CypherParser::OC_FunctionNameContext* CypherParser::oC_FunctionName() { }); try { enterOuterAlt(_localctx, 1); - setState(2671); + setState(2685); oC_SymbolicName(); } @@ -16804,36 +16851,36 @@ CypherParser::NEUG_FunctionParameterContext* CypherParser::nEUG_FunctionParamete exitRule(); }); try { - setState(2686); + setState(2700); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 458, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 461, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2682); + setState(2696); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 457, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 460, _ctx)) { case 1: { - setState(2673); + setState(2687); oC_SymbolicName(); - setState(2675); + setState(2689); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2674); + setState(2688); match(CypherParser::SP); } - setState(2677); + setState(2691); match(CypherParser::COLON); - setState(2678); + setState(2692); match(CypherParser::T__5); - setState(2680); + setState(2694); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2679); + setState(2693); match(CypherParser::SP); } break; @@ -16842,14 +16889,14 @@ CypherParser::NEUG_FunctionParameterContext* CypherParser::nEUG_FunctionParamete default: break; } - setState(2684); + setState(2698); oC_Expression(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2685); + setState(2699); nEUG_LambdaParameter(); break; } @@ -16914,36 +16961,36 @@ CypherParser::NEUG_LambdaParameterContext* CypherParser::nEUG_LambdaParameter() }); try { enterOuterAlt(_localctx, 1); - setState(2688); + setState(2702); nEUG_LambdaVars(); - setState(2690); + setState(2704); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2689); + setState(2703); match(CypherParser::SP); } - setState(2692); + setState(2706); match(CypherParser::MINUS); - setState(2693); + setState(2707); match(CypherParser::T__16); - setState(2695); + setState(2709); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2694); + setState(2708); match(CypherParser::SP); } - setState(2697); + setState(2711); oC_Expression(); - setState(2699); + setState(2713); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 461, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 464, _ctx)) { case 1: { - setState(2698); + setState(2712); match(CypherParser::SP); break; } @@ -17003,7 +17050,7 @@ CypherParser::NEUG_LambdaVarsContext* CypherParser::nEUG_LambdaVars() { exitRule(); }); try { - setState(2725); + setState(2739); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -17064,62 +17111,62 @@ CypherParser::NEUG_LambdaVarsContext* CypherParser::nEUG_LambdaVars() { case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 1); - setState(2701); + setState(2715); oC_SymbolicName(); break; } case CypherParser::T__1: { enterOuterAlt(_localctx, 2); - setState(2702); + setState(2716); match(CypherParser::T__1); - setState(2704); + setState(2718); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2703); + setState(2717); match(CypherParser::SP); } - setState(2706); + setState(2720); oC_SymbolicName(); - setState(2708); + setState(2722); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2707); + setState(2721); match(CypherParser::SP); } - setState(2720); + setState(2734); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2710); + setState(2724); match(CypherParser::T__3); - setState(2712); + setState(2726); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2711); + setState(2725); match(CypherParser::SP); } - setState(2714); + setState(2728); oC_SymbolicName(); - setState(2716); + setState(2730); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2715); + setState(2729); match(CypherParser::SP); } - setState(2722); + setState(2736); _errHandler->sync(this); _la = _input->LA(1); } - setState(2723); + setState(2737); match(CypherParser::T__2); break; } @@ -17185,23 +17232,23 @@ CypherParser::OC_PathPatternsContext* CypherParser::oC_PathPatterns() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2727); + setState(2741); oC_NodePattern(); - setState(2732); + setState(2746); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2729); + setState(2743); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2728); + setState(2742); match(CypherParser::SP); } - setState(2731); + setState(2745); oC_PatternElementChain(); break; } @@ -17209,9 +17256,9 @@ CypherParser::OC_PathPatternsContext* CypherParser::oC_PathPatterns() { default: throw NoViableAltException(this); } - setState(2734); + setState(2748); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 469, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 472, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); } @@ -17282,7 +17329,7 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( }); try { enterOuterAlt(_localctx, 1); - setState(2736); + setState(2750); _la = _input->LA(1); if (!(_la == CypherParser::COUNT @@ -17293,50 +17340,50 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( _errHandler->reportMatch(this); consume(); } - setState(2738); + setState(2752); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2737); + setState(2751); match(CypherParser::SP); } - setState(2740); + setState(2754); match(CypherParser::T__8); - setState(2742); + setState(2756); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2741); + setState(2755); match(CypherParser::SP); } - setState(2744); + setState(2758); match(CypherParser::MATCH); - setState(2746); + setState(2760); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2745); + setState(2759); match(CypherParser::SP); } - setState(2748); + setState(2762); oC_Pattern(); - setState(2753); + setState(2767); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 474, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 477, _ctx)) { case 1: { - setState(2750); + setState(2764); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2749); + setState(2763); match(CypherParser::SP); } - setState(2752); + setState(2766); oC_Where(); break; } @@ -17344,20 +17391,20 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( default: break; } - setState(2759); + setState(2773); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 476, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 479, _ctx)) { case 1: { - setState(2756); + setState(2770); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2755); + setState(2769); match(CypherParser::SP); } - setState(2758); + setState(2772); nEUG_Hint(); break; } @@ -17365,15 +17412,15 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( default: break; } - setState(2762); + setState(2776); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2761); + setState(2775); match(CypherParser::SP); } - setState(2764); + setState(2778); match(CypherParser::T__9); } @@ -17424,17 +17471,17 @@ CypherParser::OC_PropertyLookupContext* CypherParser::oC_PropertyLookup() { }); try { enterOuterAlt(_localctx, 1); - setState(2766); + setState(2780); match(CypherParser::T__4); - setState(2768); + setState(2782); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2767); + setState(2781); match(CypherParser::SP); } - setState(2772); + setState(2786); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -17494,13 +17541,13 @@ CypherParser::OC_PropertyLookupContext* CypherParser::oC_PropertyLookup() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(2770); + setState(2784); oC_PropertyKeyName(); break; } case CypherParser::STAR: { - setState(2771); + setState(2785); match(CypherParser::STAR); break; } @@ -17582,27 +17629,27 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2796); + setState(2810); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 485, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 488, _ctx)) { case 1: { - setState(2774); + setState(2788); match(CypherParser::CASE); - setState(2779); + setState(2793); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2776); + setState(2790); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2775); + setState(2789); match(CypherParser::SP); } - setState(2778); + setState(2792); oC_CaseAlternative(); break; } @@ -17610,41 +17657,41 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: throw NoViableAltException(this); } - setState(2781); + setState(2795); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 481, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 484, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } case 2: { - setState(2783); + setState(2797); match(CypherParser::CASE); - setState(2785); + setState(2799); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2784); + setState(2798); match(CypherParser::SP); } - setState(2787); + setState(2801); oC_Expression(); - setState(2792); + setState(2806); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2789); + setState(2803); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2788); + setState(2802); match(CypherParser::SP); } - setState(2791); + setState(2805); oC_CaseAlternative(); break; } @@ -17652,9 +17699,9 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: throw NoViableAltException(this); } - setState(2794); + setState(2808); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 484, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 487, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } @@ -17662,30 +17709,30 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: break; } - setState(2806); + setState(2820); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 488, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 491, _ctx)) { case 1: { - setState(2799); + setState(2813); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2798); + setState(2812); match(CypherParser::SP); } - setState(2801); + setState(2815); match(CypherParser::ELSE); - setState(2803); + setState(2817); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2802); + setState(2816); match(CypherParser::SP); } - setState(2805); + setState(2819); oC_Expression(); break; } @@ -17693,15 +17740,15 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: break; } - setState(2809); + setState(2823); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2808); + setState(2822); match(CypherParser::SP); } - setState(2811); + setState(2825); match(CypherParser::END); } @@ -17764,37 +17811,37 @@ CypherParser::OC_CaseAlternativeContext* CypherParser::oC_CaseAlternative() { }); try { enterOuterAlt(_localctx, 1); - setState(2813); + setState(2827); match(CypherParser::WHEN); - setState(2815); + setState(2829); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2814); + setState(2828); match(CypherParser::SP); } - setState(2817); + setState(2831); oC_Expression(); - setState(2819); + setState(2833); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2818); + setState(2832); match(CypherParser::SP); } - setState(2821); + setState(2835); match(CypherParser::THEN); - setState(2823); + setState(2837); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2822); + setState(2836); match(CypherParser::SP); } - setState(2825); + setState(2839); oC_Expression(); } @@ -17836,7 +17883,7 @@ CypherParser::OC_VariableContext* CypherParser::oC_Variable() { }); try { enterOuterAlt(_localctx, 1); - setState(2827); + setState(2841); oC_SymbolicName(); } @@ -17881,20 +17928,20 @@ CypherParser::OC_NumberLiteralContext* CypherParser::oC_NumberLiteral() { exitRule(); }); try { - setState(2831); + setState(2845); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ExponentDecimalReal: case CypherParser::RegularDecimalReal: { enterOuterAlt(_localctx, 1); - setState(2829); + setState(2843); oC_DoubleLiteral(); break; } case CypherParser::DecimalInteger: { enterOuterAlt(_localctx, 2); - setState(2830); + setState(2844); oC_IntegerLiteral(); break; } @@ -17946,9 +17993,9 @@ CypherParser::OC_ParameterContext* CypherParser::oC_Parameter() { }); try { enterOuterAlt(_localctx, 1); - setState(2833); + setState(2847); match(CypherParser::T__26); - setState(2836); + setState(2850); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -18008,13 +18055,13 @@ CypherParser::OC_ParameterContext* CypherParser::oC_Parameter() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(2834); + setState(2848); oC_SymbolicName(); break; } case CypherParser::DecimalInteger: { - setState(2835); + setState(2849); match(CypherParser::DecimalInteger); break; } @@ -18071,17 +18118,17 @@ CypherParser::OC_PropertyExpressionContext* CypherParser::oC_PropertyExpression( }); try { enterOuterAlt(_localctx, 1); - setState(2838); + setState(2852); oC_Atom(); - setState(2840); + setState(2854); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2839); + setState(2853); match(CypherParser::SP); } - setState(2842); + setState(2856); oC_PropertyLookup(); } @@ -18123,7 +18170,7 @@ CypherParser::OC_PropertyKeyNameContext* CypherParser::oC_PropertyKeyName() { }); try { enterOuterAlt(_localctx, 1); - setState(2844); + setState(2858); oC_SchemaName(); } @@ -18165,7 +18212,7 @@ CypherParser::OC_IntegerLiteralContext* CypherParser::oC_IntegerLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2846); + setState(2860); match(CypherParser::DecimalInteger); } @@ -18212,7 +18259,7 @@ CypherParser::OC_DoubleLiteralContext* CypherParser::oC_DoubleLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2848); + setState(2862); _la = _input->LA(1); if (!(_la == CypherParser::ExponentDecimalReal @@ -18263,7 +18310,7 @@ CypherParser::OC_SchemaNameContext* CypherParser::oC_SchemaName() { }); try { enterOuterAlt(_localctx, 1); - setState(2850); + setState(2864); oC_SymbolicName(); } @@ -18316,19 +18363,19 @@ CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { exitRule(); }); try { - setState(2857); + setState(2871); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::UnescapedSymbolicName: { enterOuterAlt(_localctx, 1); - setState(2852); + setState(2866); match(CypherParser::UnescapedSymbolicName); break; } case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 2); - setState(2853); + setState(2867); antlrcpp::downCast(_localctx)->escapedsymbolicnameToken = match(CypherParser::EscapedSymbolicName); if ((antlrcpp::downCast(_localctx)->escapedsymbolicnameToken != nullptr ? antlrcpp::downCast(_localctx)->escapedsymbolicnameToken->getText() : "") == "``") { notifyEmptyToken(antlrcpp::downCast(_localctx)->escapedsymbolicnameToken); } break; @@ -18336,7 +18383,7 @@ CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { case CypherParser::HexLetter: { enterOuterAlt(_localctx, 3); - setState(2855); + setState(2869); match(CypherParser::HexLetter); break; } @@ -18396,7 +18443,7 @@ CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { case CypherParser::DECIMAL: case CypherParser::L_SKIP: { enterOuterAlt(_localctx, 4); - setState(2856); + setState(2870); nEUG_NonReservedKeywords(); break; } @@ -18657,11 +18704,11 @@ CypherParser::NEUG_NonReservedKeywordsContext* CypherParser::nEUG_NonReservedKey }); try { enterOuterAlt(_localctx, 1); - setState(2859); + setState(2873); _la = _input->LA(1); if (!(((((_la - 49) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 49)) & -2380888042297776235) != 0) || ((((_la - 123) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 123)) & 5941446079) != 0))) { + ((1ULL << (_la - 123)) & 10236413375) != 0))) { _errHandler->recoverInline(this); } else { @@ -18705,7 +18752,7 @@ CypherParser::OC_LeftArrowHeadContext* CypherParser::oC_LeftArrowHead() { }); try { enterOuterAlt(_localctx, 1); - setState(2861); + setState(2875); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4026564608) != 0))) { @@ -18752,7 +18799,7 @@ CypherParser::OC_RightArrowHeadContext* CypherParser::oC_RightArrowHead() { }); try { enterOuterAlt(_localctx, 1); - setState(2863); + setState(2877); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 64424640512) != 0))) { @@ -18803,7 +18850,7 @@ CypherParser::OC_DashContext* CypherParser::oC_Dash() { }); try { enterOuterAlt(_localctx, 1); - setState(2865); + setState(2879); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 140668768878592) != 0) || _la == CypherParser::MINUS)) { @@ -18837,7 +18884,7 @@ bool CypherParser::sempred(RuleContext *context, size_t ruleIndex, size_t predic bool CypherParser::nEUG_DataTypeSempred(NEUG_DataTypeContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 0: return precpred(_ctx, 5); + case 0: return precpred(_ctx, 6); default: break; diff --git a/third_party/antlr4_cypher/include/cypher_lexer.h b/third_party/antlr4_cypher/include/cypher_lexer.h index fef922fcf..e41d93b00 100644 --- a/third_party/antlr4_cypher/include/cypher_lexer.h +++ b/third_party/antlr4_cypher/include/cypher_lexer.h @@ -38,13 +38,14 @@ class CypherLexer : public antlr4::Lexer { TABLE = 135, THEN = 136, TO = 137, TRAIL = 138, TRANSACTION = 139, TYPE = 140, UNINSTALL = 141, UNION = 142, UNWIND = 143, USE = 144, WHEN = 145, WHERE = 146, WITH = 147, WRITE = 148, WSHORTEST = 149, XOR = 150, SINGLE = 151, YIELD = 152, - DECIMAL = 153, STAR = 154, L_SKIP = 155, INVALID_NOT_EQUAL = 156, MINUS = 157, - FACTORIAL = 158, COLON = 159, BTRUE = 160, BFALSE = 161, StringLiteral = 162, - EscapedChar = 163, DecimalInteger = 164, HexLetter = 165, HexDigit = 166, - Digit = 167, NonZeroDigit = 168, NonZeroOctDigit = 169, ZeroDigit = 170, - ExponentDecimalReal = 171, RegularDecimalReal = 172, UnescapedSymbolicName = 173, - IdentifierStart = 174, IdentifierPart = 175, EscapedSymbolicName = 176, - SP = 177, WHITESPACE = 178, CypherComment = 179, Unknown = 180 + DECIMAL = 153, VARCHAR = 154, STAR = 155, L_SKIP = 156, INVALID_NOT_EQUAL = 157, + MINUS = 158, FACTORIAL = 159, COLON = 160, BTRUE = 161, BFALSE = 162, + StringLiteral = 163, EscapedChar = 164, DecimalInteger = 165, HexLetter = 166, + HexDigit = 167, Digit = 168, NonZeroDigit = 169, NonZeroOctDigit = 170, + ZeroDigit = 171, ExponentDecimalReal = 172, RegularDecimalReal = 173, + UnescapedSymbolicName = 174, IdentifierStart = 175, IdentifierPart = 176, + EscapedSymbolicName = 177, SP = 178, WHITESPACE = 179, CypherComment = 180, + Unknown = 181 }; explicit CypherLexer(antlr4::CharStream *input); diff --git a/third_party/antlr4_cypher/include/cypher_parser.h b/third_party/antlr4_cypher/include/cypher_parser.h index 0932791e0..34ad9fe73 100644 --- a/third_party/antlr4_cypher/include/cypher_parser.h +++ b/third_party/antlr4_cypher/include/cypher_parser.h @@ -38,13 +38,14 @@ class CypherParser : public antlr4::Parser { TABLE = 135, THEN = 136, TO = 137, TRAIL = 138, TRANSACTION = 139, TYPE = 140, UNINSTALL = 141, UNION = 142, UNWIND = 143, USE = 144, WHEN = 145, WHERE = 146, WITH = 147, WRITE = 148, WSHORTEST = 149, XOR = 150, SINGLE = 151, YIELD = 152, - DECIMAL = 153, STAR = 154, L_SKIP = 155, INVALID_NOT_EQUAL = 156, MINUS = 157, - FACTORIAL = 158, COLON = 159, BTRUE = 160, BFALSE = 161, StringLiteral = 162, - EscapedChar = 163, DecimalInteger = 164, HexLetter = 165, HexDigit = 166, - Digit = 167, NonZeroDigit = 168, NonZeroOctDigit = 169, ZeroDigit = 170, - ExponentDecimalReal = 171, RegularDecimalReal = 172, UnescapedSymbolicName = 173, - IdentifierStart = 174, IdentifierPart = 175, EscapedSymbolicName = 176, - SP = 177, WHITESPACE = 178, CypherComment = 179, Unknown = 180 + DECIMAL = 153, VARCHAR = 154, STAR = 155, L_SKIP = 156, INVALID_NOT_EQUAL = 157, + MINUS = 158, FACTORIAL = 159, COLON = 160, BTRUE = 161, BFALSE = 162, + StringLiteral = 163, EscapedChar = 164, DecimalInteger = 165, HexLetter = 166, + HexDigit = 167, Digit = 168, NonZeroDigit = 169, NonZeroOctDigit = 170, + ZeroDigit = 171, ExponentDecimalReal = 172, RegularDecimalReal = 173, + UnescapedSymbolicName = 174, IdentifierStart = 175, IdentifierPart = 176, + EscapedSymbolicName = 177, SP = 178, WHITESPACE = 179, CypherComment = 180, + Unknown = 181 }; enum { @@ -1081,6 +1082,7 @@ class CypherParser : public antlr4::Parser { antlr4::tree::TerminalNode *DECIMAL(); std::vector oC_IntegerLiteral(); OC_IntegerLiteralContext* oC_IntegerLiteral(size_t i); + antlr4::tree::TerminalNode *VARCHAR(); NEUG_ListIdentifiersContext *nEUG_ListIdentifiers(); diff --git a/tools/python_bind/tests/test_ddl.py b/tools/python_bind/tests/test_ddl.py index 6e11fad3e..5b780d5f0 100644 --- a/tools/python_bind/tests/test_ddl.py +++ b/tools/python_bind/tests/test_ddl.py @@ -327,3 +327,36 @@ def test_drop_edge_table(): ) conn2.close() db2.close() + + +def test_create_varchar_type(): + db_dir = "/tmp/test_create_varchar_type" + shutil.rmtree(db_dir, ignore_errors=True) + db = Database(db_dir, "w") + conn = db.connect() + conn.execute("CREATE NODE TABLE TestNode(id INT64 PRIMARY KEY, name VARCHAR(10));") + conn.execute("CREATE (:TestNode {id: 1, name: 'Alice'});") + res = conn.execute("Match (n:TestNode) Return n.name;") + assert list(res) == [["Alice"]] + + conn.execute( + "CREATE (:TestNode {id: 2, name: 'this is a string longer than 10 characters, should be truncated'});" + ) + res = conn.execute("Match (n:TestNode {id: 2}) Return n.name;") + assert list(res) == [["this is a "]] + conn.close() + db.close() + + +def test_alter_varchar_type(): + db_dir = "/tmp/test_alter_varchar_type" + shutil.rmtree(db_dir, ignore_errors=True) + db = Database(db_dir, "w") + conn = db.connect() + conn.execute("CREATE NODE TABLE TestNode(id INT64 PRIMARY KEY);") + conn.execute("ALTER TABLE TestNode ADD name VARCHAR(10);") + conn.execute("CREATE (:TestNode {id: 1, name: 'Alice'});") + res = conn.execute("Match (n:TestNode) Return n.id, n.name;") + assert list(res) == [[1, "Alice"]] + conn.close() + db.close() From 23b2e403fe608691f57864a67f2c84cd0bff2b5e Mon Sep 17 00:00:00 2001 From: Xiaoli Zhou Date: Tue, 10 Mar 2026 17:14:49 +0800 Subject: [PATCH 2/6] skip specific regex when comparing physical plans Committed-by: Xiaoli Zhou from Dev container --- tests/compiler/gopt_test.h | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/tests/compiler/gopt_test.h b/tests/compiler/gopt_test.h index 441ea684f..7ed49baa4 100644 --- a/tests/compiler/gopt_test.h +++ b/tests/compiler/gopt_test.h @@ -29,7 +29,9 @@ #include #include #include +#include #include +#include #include #include "neug/compiler/catalog/catalog.h" #include "neug/compiler/gopt/g_alias_manager.h" @@ -404,8 +406,29 @@ class GOptTest : public ::testing::Test { std::unique_ptr ctx; }; +// (regex_pattern, replacement) pairs applied in order during normalize +using RegexReplaceMap = std::vector>; + class VerifyFactory { public: + static RegexReplaceMap defaultNormalizePatterns() { + return {{R"("max_length":\s*\d+)", "\"max_length\": "}, + {R"(max_length:\s*\d+)", "max_length: "}}; + } + + static std::string normalize(const std::string& s) { + return normalize(s, defaultNormalizePatterns()); + } + + static std::string normalize(const std::string& s, + const RegexReplaceMap& patterns) { + std::string out = s; + for (const auto& p : patterns) { + out = std::regex_replace(out, std::regex(p.first), p.second); + } + return out; + } + static void verifyPhysicalByJson(const ::physical::PhysicalPlan& plan, const std::string& expectedStr) { rapidjson::Document document; @@ -433,7 +456,7 @@ class VerifyFactory { const rapidjson::Value& plan = document["plan"]; actualStr = rapidjson_stringify(plan); } - ASSERT_EQ(actualStr, planExpectedStr) + ASSERT_EQ(normalize(actualStr), normalize(planExpectedStr)) << "Expected: " << planExpectedStr << "\nActual: " << actualStr; } @@ -454,7 +477,7 @@ class VerifyFactory { static void verifyResultByYaml(const YAML::Node& resultYaml, const std::string& expectedStr) { auto actualStr = YAML::Dump(resultYaml); - ASSERT_EQ(actualStr, expectedStr) + ASSERT_EQ(normalize(actualStr), normalize(expectedStr)) << "Expected: " << expectedStr << "\nActual: " << actualStr; } }; From 2dbe9148ed13522e719192ca91bc1aedb0d6a23d Mon Sep 17 00:00:00 2001 From: Xiaoli Zhou Date: Wed, 11 Mar 2026 12:05:49 +0800 Subject: [PATCH 3/6] minor fix according to review Committed-by: Xiaoli Zhou from Dev container --- src/compiler/common/types/types.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/compiler/common/types/types.cpp b/src/compiler/common/types/types.cpp index c1a6c04fd..c72a5ed15 100644 --- a/src/compiler/common/types/types.cpp +++ b/src/compiler/common/types/types.cpp @@ -345,11 +345,12 @@ uint32_t PhysicalTypeUtils::getFixedTypeSize(PhysicalTypeID physicalType) { void StringTypeInfo::serializeInternal(Serializer& serializer) const {}; -// The method will be invoked in `operator==` of LogicalType, which will be -// invoked after comparison of LogicalTypeId, we think the string type with -// different max_length are equal. bool StringTypeInfo::operator==(const ExtraTypeInfo& other) const { - return true; + auto otherStringTypeInfo = dynamic_cast(&other); + if (otherStringTypeInfo) { + return max_length == otherStringTypeInfo->max_length; + } + return false; } std::unique_ptr StringTypeInfo::copy() const { @@ -616,6 +617,11 @@ bool LogicalType::operator==(const LogicalType& other) const { if (typeID != other.typeID || category != other.category) { return false; } + // We think the string type with different max_length are equal, so skip the + // comparison of extraTypeInfo. + if (typeID == LogicalTypeID::STRING) { + return true; + } if (extraTypeInfo) { return *extraTypeInfo == *other.extraTypeInfo; } @@ -1503,8 +1509,9 @@ LogicalType parseStringType(const std::string& trimmedStr) { } auto maxLenStr = StringUtils::ltrim(StringUtils::rtrim(trimmedStr.substr( leftBracketPos + 1, rightBracketPos - leftBracketPos - 1))); - auto maxLen = std::strtoll(maxLenStr.c_str(), nullptr, 0); - if (maxLen <= 0) { + char* endPtr = nullptr; + auto maxLen = std::strtoll(maxLenStr.c_str(), &endPtr, 10); + if (endPtr == maxLenStr.c_str() || *endPtr != '\0') { THROW_BINDER_EXCEPTION( "The max length of string must be a positive integer. Given: " + maxLenStr); From 4e1d1a01b78b1f8b420865e323e74e469cacf030 Mon Sep 17 00:00:00 2001 From: "xiaolei.zl" Date: Wed, 11 Mar 2026 16:17:29 +0800 Subject: [PATCH 4/6] fix ci Committed-by: xiaolei.zl from Dev container Committed-by: xiaolei.zl from Dev container --- include/neug/utils/pb_utils.h | 2 +- .../execute/ops/ddl/add_edge_property.cc | 8 +-- .../execute/ops/ddl/add_vertex_property.cc | 8 +-- .../execute/ops/ddl/create_edge_type.cc | 7 ++- .../execute/ops/ddl/create_vertex_type.cc | 8 +-- src/utils/pb_utils.cc | 56 +++++++++++-------- tests/unittest/test_connection.cc | 5 +- tests/utils/test_utils.cc | 12 ++-- 8 files changed, 57 insertions(+), 49 deletions(-) diff --git a/include/neug/utils/pb_utils.h b/include/neug/utils/pb_utils.h index 1a4c1469e..738446b60 100644 --- a/include/neug/utils/pb_utils.h +++ b/include/neug/utils/pb_utils.h @@ -71,7 +71,7 @@ bool multiplicity_to_storage_strategy( const ::physical::CreateEdgeSchema::Multiplicity& multiplicity, EdgeStrategy& oe_strategy, EdgeStrategy& ie_strategy); -neug::result>> +neug::result>> property_defs_to_value( const google::protobuf::RepeatedPtrField<::physical::PropertyDef>& properties); diff --git a/src/execution/execute/ops/ddl/add_edge_property.cc b/src/execution/execute/ops/ddl/add_edge_property.cc index 61d10fad0..6382ecc39 100644 --- a/src/execution/execute/ops/ddl/add_edge_property.cc +++ b/src/execution/execute/ops/ddl/add_edge_property.cc @@ -26,7 +26,7 @@ class AddEdgePropertySchemaOpr : public IOperator { AddEdgePropertySchemaOpr( const std::string& src_type, const std::string& dst_type, const std::string& edge_type, - const std::vector>& properties, + const std::vector>& properties, bool error_on_conflict) : src_type_(src_type), dst_type_(dst_type), @@ -41,8 +41,8 @@ class AddEdgePropertySchemaOpr : public IOperator { StorageUpdateInterface& storage = dynamic_cast(graph); std::vector> property_tuples; - for (const auto& [prop_name, prop_value] : properties_) { - property_tuples.emplace_back(prop_value.type(), prop_name, + for (const auto& [prop_type, prop_name, prop_value] : properties_) { + property_tuples.emplace_back(prop_type, prop_name, value_to_property(prop_value)); } auto res = storage.AddEdgeProperties(src_type_, dst_type_, edge_type_, @@ -59,7 +59,7 @@ class AddEdgePropertySchemaOpr : public IOperator { std::string src_type_; std::string dst_type_; std::string edge_type_; - std::vector> properties_; + std::vector> properties_; bool error_on_conflict_; }; diff --git a/src/execution/execute/ops/ddl/add_vertex_property.cc b/src/execution/execute/ops/ddl/add_vertex_property.cc index 83c898d53..f4a508570 100644 --- a/src/execution/execute/ops/ddl/add_vertex_property.cc +++ b/src/execution/execute/ops/ddl/add_vertex_property.cc @@ -25,7 +25,7 @@ class AddVertexPropertySchemaOpr : public IOperator { public: AddVertexPropertySchemaOpr( const std::string& vertex_type, - const std::vector>& properties, + const std::vector>& properties, bool error_on_conflict) : vertex_type_(vertex_type), properties_(properties), @@ -39,8 +39,8 @@ class AddVertexPropertySchemaOpr : public IOperator { StorageUpdateInterface& storage = dynamic_cast(graph); std::vector> property_tuples; - for (const auto& [prop_name, prop_value] : properties_) { - property_tuples.emplace_back(prop_value.type(), prop_name, + for (const auto& [prop_type, prop_name, prop_value] : properties_) { + property_tuples.emplace_back(prop_type, prop_name, value_to_property(prop_value)); } auto res = storage.AddVertexProperties(vertex_type_, property_tuples, @@ -55,7 +55,7 @@ class AddVertexPropertySchemaOpr : public IOperator { private: std::string vertex_type_; - std::vector> properties_; + std::vector> properties_; bool error_on_conflict_; }; diff --git a/src/execution/execute/ops/ddl/create_edge_type.cc b/src/execution/execute/ops/ddl/create_edge_type.cc index 33e8729bc..655613560 100644 --- a/src/execution/execute/ops/ddl/create_edge_type.cc +++ b/src/execution/execute/ops/ddl/create_edge_type.cc @@ -23,7 +23,7 @@ namespace ops { class CreateEdgeTypeOpr : public IOperator { public: - using property_def_t = std::vector>; + using property_def_t = std::vector>; using create_edge_type_t = std::tuple; @@ -42,8 +42,9 @@ class CreateEdgeTypeOpr : public IOperator { while (succeed_index < defs_size) { const auto& create_edge_def = create_edge_types_[succeed_index]; std::vector> property_tuples; - for (const auto& [prop_name, prop_value] : std::get<3>(create_edge_def)) { - property_tuples.emplace_back(prop_value.type(), prop_name, + for (const auto& [prop_type, prop_name, prop_value] : + std::get<3>(create_edge_def)) { + property_tuples.emplace_back(prop_type, prop_name, value_to_property(prop_value)); } status = storage.CreateEdgeType( diff --git a/src/execution/execute/ops/ddl/create_vertex_type.cc b/src/execution/execute/ops/ddl/create_vertex_type.cc index 9471f2268..824a8d41b 100644 --- a/src/execution/execute/ops/ddl/create_vertex_type.cc +++ b/src/execution/execute/ops/ddl/create_vertex_type.cc @@ -25,7 +25,7 @@ class CreateVertexTypeOpr : public IOperator { public: CreateVertexTypeOpr( const std::string& type_name, - const std::vector>& properties, + const std::vector>& properties, const std::vector& pks, bool error_on_conflict) : type_name_(type_name), properties_(properties), @@ -41,8 +41,8 @@ class CreateVertexTypeOpr : public IOperator { StorageUpdateInterface& storage = dynamic_cast(graph); std::vector> property_tuples; - for (const auto& [prop_name, prop_value] : properties_) { - property_tuples.emplace_back(prop_value.type().id(), prop_name, + for (const auto& [prop_type, prop_name, prop_value] : properties_) { + property_tuples.emplace_back(prop_type, prop_name, value_to_property(prop_value)); } auto res = storage.CreateVertexType(type_name_, property_tuples, pks_, @@ -57,7 +57,7 @@ class CreateVertexTypeOpr : public IOperator { private: std::string type_name_; - std::vector> properties_; + std::vector> properties_; std::vector pks_; bool error_on_conflict_; }; diff --git a/src/utils/pb_utils.cc b/src/utils/pb_utils.cc index 12f267d3c..b314ffe23 100644 --- a/src/utils/pb_utils.cc +++ b/src/utils/pb_utils.cc @@ -96,34 +96,34 @@ bool multiplicity_to_storage_strategy( } bool primitive_type_to_property_type( - const common::PrimitiveType& primitive_type, DataTypeId& out_type) { + const common::PrimitiveType& primitive_type, DataType& out_type) { switch (primitive_type) { case common::PrimitiveType::DT_ANY: LOG(ERROR) << "Any type is not supported"; return false; case common::PrimitiveType::DT_SIGNED_INT32: - out_type = DataTypeId::kInt32; + out_type = DataType::INT32; break; case common::PrimitiveType::DT_UNSIGNED_INT32: - out_type = DataTypeId::kUInt32; + out_type = DataType::UINT32; break; case common::PrimitiveType::DT_SIGNED_INT64: - out_type = DataTypeId::kInt64; + out_type = DataType::INT64; break; case common::PrimitiveType::DT_UNSIGNED_INT64: - out_type = DataTypeId::kUInt64; + out_type = DataType::UINT64; break; case common::PrimitiveType::DT_BOOL: - out_type = DataTypeId::kBoolean; + out_type = DataType::BOOLEAN; break; case common::PrimitiveType::DT_FLOAT: - out_type = DataTypeId::kFloat; + out_type = DataType::FLOAT; break; case common::PrimitiveType::DT_DOUBLE: - out_type = DataTypeId::kDouble; + out_type = DataType::DOUBLE; break; case common::PrimitiveType::DT_NULL: - out_type = DataTypeId::kEmpty; + out_type = DataType::SQLNULL; break; default: LOG(ERROR) << "Unknown primitive type: " << primitive_type; @@ -133,14 +133,21 @@ bool primitive_type_to_property_type( } bool string_type_to_property_type(const common::String& string_type, - DataTypeId& out_type) { + DataType& out_type) { switch (string_type.item_case()) { case common::String::kVarChar: { - out_type = DataTypeId::kVarchar; + uint16_t max_length = STRING_DEFAULT_MAX_LENGTH; + if (string_type.has_var_char()) { + auto str_info = string_type.var_char(); + if (str_info.max_length() > 0) { + max_length = str_info.max_length(); + } + } + out_type = DataType::Varchar(max_length); break; } case common::String::kLongText: { - out_type = DataTypeId::kVarchar; + out_type = DataType::Varchar(STRING_DEFAULT_MAX_LENGTH); break; } case common::String::kChar: { @@ -159,7 +166,7 @@ bool string_type_to_property_type(const common::String& string_type, } bool temporal_type_to_property_type(const common::Temporal& temporal_type, - DataTypeId& out_type) { + DataType& out_type) { switch (temporal_type.item_case()) { case common::Temporal::kDate32: out_type = DataTypeId::kDate; @@ -185,7 +192,7 @@ bool temporal_type_to_property_type(const common::Temporal& temporal_type, } bool data_type_to_property_type(const common::DataType& data_type, - DataTypeId& out_type) { + DataType& out_type) { switch (data_type.item_case()) { case common::DataType::kPrimitiveType: { return primitive_type_to_property_type(data_type.primitive_type(), @@ -219,7 +226,7 @@ bool data_type_to_property_type(const common::DataType& data_type, } } -bool common_value_to_value(const DataTypeId type, const common::Value& value, +bool common_value_to_value(const DataType& type, const common::Value& value, execution::Value& out_value) { switch (value.item_case()) { case common::Value::kBoolean: @@ -244,24 +251,24 @@ bool common_value_to_value(const DataTypeId type, const common::Value& value, out_value = execution::Value::DOUBLE(value.f64()); break; case common::Value::kStr: - if (type == DataTypeId::kDate) { + if (type.id() == DataTypeId::kDate) { // Special handling for date stored as string Date date(value.str()); out_value = execution::Value::DATE(date); break; - } else if (type == DataTypeId::kTimestampMs) { + } else if (type.id() == DataTypeId::kTimestampMs) { // Special handling for datetime stored as string DateTime datetime(value.str()); out_value = execution::Value::TIMESTAMPMS(datetime); break; - } else if (type == DataTypeId::kInterval) { + } else if (type.id() == DataTypeId::kInterval) { // Special handling for interval stored as string Interval interval(value.str()); out_value = execution::Value::INTERVAL(interval); break; } else { LOG(INFO) << "Setting string value: " << value.str() - << " for type: " << std::to_string(type); + << " for type: " << type.ToString(); out_value = execution::Value::STRING(value.str()); } break; @@ -275,15 +282,15 @@ bool common_value_to_value(const DataTypeId type, const common::Value& value, return true; } -neug::result>> +neug::result>> property_defs_to_value( const google::protobuf::RepeatedPtrField& properties) { - std::vector> result; + std::vector> result; for (const auto& property : properties) { const auto& name = property.name(); execution::Value default_value(DataType::SQLNULL); - DataTypeId type; + DataType type; if (!data_type_to_property_type(property.type(), type)) { RETURN_ERROR(Status(StatusCode::ERR_INVALID_ARGUMENT, "Invalid property type: " + property.DebugString())); @@ -300,12 +307,13 @@ property_defs_to_value( << property.default_value().DebugString(); } } else { - default_value = execution::property_to_value(get_default_value(type)); + default_value = + execution::property_to_value(get_default_value(type.id())); VLOG(1) << "No default value, use type default:" << default_value.to_string() << " type: " << default_value.type().ToString(); } - result.emplace_back(name, default_value); + result.emplace_back(type, name, default_value); } return result; } diff --git a/tests/unittest/test_connection.cc b/tests/unittest/test_connection.cc index 706f4f785..026d8835a 100644 --- a/tests/unittest/test_connection.cc +++ b/tests/unittest/test_connection.cc @@ -132,9 +132,8 @@ TEST_F(ConnectionTest, TestReadWriteConnection) { auto conn1 = db.Connect(); EXPECT_NE(conn1, nullptr); - EXPECT_THROW( - { auto conn2 = db.Connect(); }, - neug::exception::TxStateConflictException); + EXPECT_THROW({ auto conn2 = db.Connect(); }, + neug::exception::TxStateConflictException); } TEST_F(ConnectionTest, TestReadOnlyConnections) { diff --git a/tests/utils/test_utils.cc b/tests/utils/test_utils.cc index dd1ea7115..d40497b44 100644 --- a/tests/utils/test_utils.cc +++ b/tests/utils/test_utils.cc @@ -1126,13 +1126,13 @@ TEST_F(PBUtilsTest, PropertyDefsToTuple_Valid) { auto& tuples = result.value(); ASSERT_EQ(tuples.size(), 2U); - EXPECT_EQ(tuples[0].second.type().id(), DataTypeId::kInt32); - EXPECT_EQ(tuples[0].first, "age"); - EXPECT_EQ(tuples[0].second.GetValue(), 18); + EXPECT_EQ(std::get<0>(tuples[0]).id(), DataTypeId::kInt32); + EXPECT_EQ(std::get<1>(tuples[0]), "age"); + EXPECT_EQ(std::get<2>(tuples[0]).GetValue(), 18); - EXPECT_EQ(tuples[1].second.type().id(), DataTypeId::kVarchar); - EXPECT_EQ(tuples[1].first, "name"); - EXPECT_EQ(tuples[1].second.GetValue(), ""); + EXPECT_EQ(std::get<0>(tuples[1]).id(), DataTypeId::kVarchar); + EXPECT_EQ(std::get<1>(tuples[1]), "name"); + EXPECT_EQ(std::get<2>(tuples[1]).GetValue(), ""); } } // namespace test From 3378a084ec0b2f446a8533c55eeaf8637e0eece1 Mon Sep 17 00:00:00 2001 From: "xiaolei.zl" Date: Wed, 11 Mar 2026 18:36:06 +0800 Subject: [PATCH 5/6] avoid change func api Committed-by: xiaolei.zl from Dev container --- include/neug/execution/common/types/value.h | 5 +- include/neug/storages/column/I_container.h | 83 +++++++++++++++++++ include/neug/utils/pb_utils.h | 2 +- src/execution/common/types/value.cc | 18 +++- .../execute/ops/ddl/add_edge_property.cc | 8 +- .../execute/ops/ddl/add_vertex_property.cc | 8 +- .../execute/ops/ddl/create_edge_type.cc | 7 +- .../execute/ops/ddl/create_vertex_type.cc | 8 +- src/utils/pb_utils.cc | 14 ++-- tests/utils/test_utils.cc | 12 +-- 10 files changed, 133 insertions(+), 32 deletions(-) create mode 100644 include/neug/storages/column/I_container.h diff --git a/include/neug/execution/common/types/value.h b/include/neug/execution/common/types/value.h index 08f4000dc..c8465e823 100644 --- a/include/neug/execution/common/types/value.h +++ b/include/neug/execution/common/types/value.h @@ -83,6 +83,8 @@ class Value { static Value STRING(const std::string& str); + static Value VARCHAR(const std::string& str, uint16_t max_length); + static Value VERTEX(const vertex_t& vertex); static Value EDGE(const edge_t& edge); @@ -630,7 +632,8 @@ bool Value::ApplyComparisonOp(const Value& lhs, const Value& rhs) { } Property value_to_property(const Value& value); -Value property_to_value(const Property& property); +Value property_to_value(const Property& property, + const DataType& type = DataType::UNKNOWN); template Value performCast(const Value& input) { diff --git a/include/neug/storages/column/I_container.h b/include/neug/storages/column/I_container.h new file mode 100644 index 000000000..5aa7070f7 --- /dev/null +++ b/include/neug/storages/column/I_container.h @@ -0,0 +1,83 @@ +/** Copyright 2020 Alibaba Group Holding Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include +#include +#include + +/** + * @brief Interface for data containers with mmap-based storage. + * + * IDataContainer defines the contract for all data container implementations, + * supporting various storage strategies (anonymous mmap, file-backed mmap, + * etc.) + */ +class IDataContainer { + public: + virtual ~IDataContainer() {} + + /** + * @brief Get pointer to the data region. + */ + virtual void* GetData() = 0; + + /** + * @brief Get the size of the data region. + */ + virtual size_t GetDataSize() = 0; + + /** + * @brief Get the file path (empty for anonymous mappings). + */ + virtual std::string GetPath() = 0; + + /** + * @brief Get the storage strategy used by this container. + */ + virtual StorageStrategy GetStorageStrategy() const = 0; + + /** + * @brief Open a file-backed container. + */ + virtual void Open(const std::string& path) = 0; + + /** + * @brief Synchronize changes to persistent storage. + */ + virtual void Sync() = 0; + + /** + * @brief Dump the container contents to a file. + * @note This will close the container after writing. + */ + virtual void Dump(const std::string& path) = 0; + + /** + * @brief Close the container and release resources. + */ + virtual void Close() = 0; + + /** + * @brief Check if the data has been modified. + */ + virtual bool IsDirty() = 0; + + /** + * @brief Create a fork (copy) of this container. + */ + virtual std::unique_ptr Fork(Checkpoint& checkpoint, + StorageStrategy strategy) = 0; +}; diff --git a/include/neug/utils/pb_utils.h b/include/neug/utils/pb_utils.h index 738446b60..1a4c1469e 100644 --- a/include/neug/utils/pb_utils.h +++ b/include/neug/utils/pb_utils.h @@ -71,7 +71,7 @@ bool multiplicity_to_storage_strategy( const ::physical::CreateEdgeSchema::Multiplicity& multiplicity, EdgeStrategy& oe_strategy, EdgeStrategy& ie_strategy); -neug::result>> +neug::result>> property_defs_to_value( const google::protobuf::RepeatedPtrField<::physical::PropertyDef>& properties); diff --git a/src/execution/common/types/value.cc b/src/execution/common/types/value.cc index 52f7d43c4..b81455914 100644 --- a/src/execution/common/types/value.cc +++ b/src/execution/common/types/value.cc @@ -257,6 +257,13 @@ Value Value::STRING(const std::string& str) { return result; } +Value Value::VARCHAR(const std::string& str, uint16_t max_length) { + Value result(DataType::Varchar(max_length)); + result.value_info_ = std::make_shared(str); + result.is_null_ = false; + return result; +} + Value Value::VERTEX(const vertex_t& vertex) { Value result(DataType::VERTEX); result.value_.vertex = vertex; @@ -765,7 +772,7 @@ Property value_to_property(const Value& value) { } } -Value property_to_value(const Property& property) { +Value property_to_value(const Property& property, const DataType& type) { switch (property.type()) { case DataTypeId::kBoolean: return Value::BOOLEAN(property.as_bool()); @@ -781,8 +788,13 @@ Value property_to_value(const Property& property) { return Value::FLOAT(property.as_float()); case DataTypeId::kDouble: return Value::DOUBLE(property.as_double()); - case DataTypeId::kVarchar: - return Value::STRING(std::string(property.as_string_view())); + case DataTypeId::kVarchar: { + auto str_type_info = type.RawExtraTypeInfo(); + auto max_length = str_type_info + ? str_type_info->Cast().max_length + : STRING_DEFAULT_MAX_LENGTH; + return Value::VARCHAR(std::string(property.as_string_view()), max_length); + } case DataTypeId::kDate: return Value::DATE(property.as_date()); case DataTypeId::kTimestampMs: diff --git a/src/execution/execute/ops/ddl/add_edge_property.cc b/src/execution/execute/ops/ddl/add_edge_property.cc index 6382ecc39..61d10fad0 100644 --- a/src/execution/execute/ops/ddl/add_edge_property.cc +++ b/src/execution/execute/ops/ddl/add_edge_property.cc @@ -26,7 +26,7 @@ class AddEdgePropertySchemaOpr : public IOperator { AddEdgePropertySchemaOpr( const std::string& src_type, const std::string& dst_type, const std::string& edge_type, - const std::vector>& properties, + const std::vector>& properties, bool error_on_conflict) : src_type_(src_type), dst_type_(dst_type), @@ -41,8 +41,8 @@ class AddEdgePropertySchemaOpr : public IOperator { StorageUpdateInterface& storage = dynamic_cast(graph); std::vector> property_tuples; - for (const auto& [prop_type, prop_name, prop_value] : properties_) { - property_tuples.emplace_back(prop_type, prop_name, + for (const auto& [prop_name, prop_value] : properties_) { + property_tuples.emplace_back(prop_value.type(), prop_name, value_to_property(prop_value)); } auto res = storage.AddEdgeProperties(src_type_, dst_type_, edge_type_, @@ -59,7 +59,7 @@ class AddEdgePropertySchemaOpr : public IOperator { std::string src_type_; std::string dst_type_; std::string edge_type_; - std::vector> properties_; + std::vector> properties_; bool error_on_conflict_; }; diff --git a/src/execution/execute/ops/ddl/add_vertex_property.cc b/src/execution/execute/ops/ddl/add_vertex_property.cc index f4a508570..83c898d53 100644 --- a/src/execution/execute/ops/ddl/add_vertex_property.cc +++ b/src/execution/execute/ops/ddl/add_vertex_property.cc @@ -25,7 +25,7 @@ class AddVertexPropertySchemaOpr : public IOperator { public: AddVertexPropertySchemaOpr( const std::string& vertex_type, - const std::vector>& properties, + const std::vector>& properties, bool error_on_conflict) : vertex_type_(vertex_type), properties_(properties), @@ -39,8 +39,8 @@ class AddVertexPropertySchemaOpr : public IOperator { StorageUpdateInterface& storage = dynamic_cast(graph); std::vector> property_tuples; - for (const auto& [prop_type, prop_name, prop_value] : properties_) { - property_tuples.emplace_back(prop_type, prop_name, + for (const auto& [prop_name, prop_value] : properties_) { + property_tuples.emplace_back(prop_value.type(), prop_name, value_to_property(prop_value)); } auto res = storage.AddVertexProperties(vertex_type_, property_tuples, @@ -55,7 +55,7 @@ class AddVertexPropertySchemaOpr : public IOperator { private: std::string vertex_type_; - std::vector> properties_; + std::vector> properties_; bool error_on_conflict_; }; diff --git a/src/execution/execute/ops/ddl/create_edge_type.cc b/src/execution/execute/ops/ddl/create_edge_type.cc index 655613560..33e8729bc 100644 --- a/src/execution/execute/ops/ddl/create_edge_type.cc +++ b/src/execution/execute/ops/ddl/create_edge_type.cc @@ -23,7 +23,7 @@ namespace ops { class CreateEdgeTypeOpr : public IOperator { public: - using property_def_t = std::vector>; + using property_def_t = std::vector>; using create_edge_type_t = std::tuple; @@ -42,9 +42,8 @@ class CreateEdgeTypeOpr : public IOperator { while (succeed_index < defs_size) { const auto& create_edge_def = create_edge_types_[succeed_index]; std::vector> property_tuples; - for (const auto& [prop_type, prop_name, prop_value] : - std::get<3>(create_edge_def)) { - property_tuples.emplace_back(prop_type, prop_name, + for (const auto& [prop_name, prop_value] : std::get<3>(create_edge_def)) { + property_tuples.emplace_back(prop_value.type(), prop_name, value_to_property(prop_value)); } status = storage.CreateEdgeType( diff --git a/src/execution/execute/ops/ddl/create_vertex_type.cc b/src/execution/execute/ops/ddl/create_vertex_type.cc index 824a8d41b..790f9e514 100644 --- a/src/execution/execute/ops/ddl/create_vertex_type.cc +++ b/src/execution/execute/ops/ddl/create_vertex_type.cc @@ -25,7 +25,7 @@ class CreateVertexTypeOpr : public IOperator { public: CreateVertexTypeOpr( const std::string& type_name, - const std::vector>& properties, + const std::vector>& properties, const std::vector& pks, bool error_on_conflict) : type_name_(type_name), properties_(properties), @@ -41,8 +41,8 @@ class CreateVertexTypeOpr : public IOperator { StorageUpdateInterface& storage = dynamic_cast(graph); std::vector> property_tuples; - for (const auto& [prop_type, prop_name, prop_value] : properties_) { - property_tuples.emplace_back(prop_type, prop_name, + for (const auto& [prop_name, prop_value] : properties_) { + property_tuples.emplace_back(prop_value.type(), prop_name, value_to_property(prop_value)); } auto res = storage.CreateVertexType(type_name_, property_tuples, pks_, @@ -57,7 +57,7 @@ class CreateVertexTypeOpr : public IOperator { private: std::string type_name_; - std::vector> properties_; + std::vector> properties_; std::vector pks_; bool error_on_conflict_; }; diff --git a/src/utils/pb_utils.cc b/src/utils/pb_utils.cc index b314ffe23..3122cd9f1 100644 --- a/src/utils/pb_utils.cc +++ b/src/utils/pb_utils.cc @@ -267,9 +267,13 @@ bool common_value_to_value(const DataType& type, const common::Value& value, out_value = execution::Value::INTERVAL(interval); break; } else { + auto str_type_info = type.RawExtraTypeInfo(); + uint16_t max_length = + str_type_info ? str_type_info->Cast().max_length + : STRING_DEFAULT_MAX_LENGTH; LOG(INFO) << "Setting string value: " << value.str() << " for type: " << type.ToString(); - out_value = execution::Value::STRING(value.str()); + out_value = execution::Value::VARCHAR(value.str(), max_length); } break; case common::Value::kDate: @@ -282,11 +286,11 @@ bool common_value_to_value(const DataType& type, const common::Value& value, return true; } -neug::result>> +neug::result>> property_defs_to_value( const google::protobuf::RepeatedPtrField& properties) { - std::vector> result; + std::vector> result; for (const auto& property : properties) { const auto& name = property.name(); execution::Value default_value(DataType::SQLNULL); @@ -308,12 +312,12 @@ property_defs_to_value( } } else { default_value = - execution::property_to_value(get_default_value(type.id())); + execution::property_to_value(get_default_value(type.id()), type); VLOG(1) << "No default value, use type default:" << default_value.to_string() << " type: " << default_value.type().ToString(); } - result.emplace_back(type, name, default_value); + result.emplace_back(name, default_value); } return result; } diff --git a/tests/utils/test_utils.cc b/tests/utils/test_utils.cc index d40497b44..dd1ea7115 100644 --- a/tests/utils/test_utils.cc +++ b/tests/utils/test_utils.cc @@ -1126,13 +1126,13 @@ TEST_F(PBUtilsTest, PropertyDefsToTuple_Valid) { auto& tuples = result.value(); ASSERT_EQ(tuples.size(), 2U); - EXPECT_EQ(std::get<0>(tuples[0]).id(), DataTypeId::kInt32); - EXPECT_EQ(std::get<1>(tuples[0]), "age"); - EXPECT_EQ(std::get<2>(tuples[0]).GetValue(), 18); + EXPECT_EQ(tuples[0].second.type().id(), DataTypeId::kInt32); + EXPECT_EQ(tuples[0].first, "age"); + EXPECT_EQ(tuples[0].second.GetValue(), 18); - EXPECT_EQ(std::get<0>(tuples[1]).id(), DataTypeId::kVarchar); - EXPECT_EQ(std::get<1>(tuples[1]), "name"); - EXPECT_EQ(std::get<2>(tuples[1]).GetValue(), ""); + EXPECT_EQ(tuples[1].second.type().id(), DataTypeId::kVarchar); + EXPECT_EQ(tuples[1].first, "name"); + EXPECT_EQ(tuples[1].second.GetValue(), ""); } } // namespace test From 9da2ac988201444b52f2c47c04a24ebe3b4ec34a Mon Sep 17 00:00:00 2001 From: "xiaolei.zl" Date: Wed, 11 Mar 2026 19:33:45 +0800 Subject: [PATCH 6/6] ci strange failure Committed-by: xiaolei.zl from Dev container --- .github/workflows/neug-test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/neug-test.yml b/.github/workflows/neug-test.yml index ad6353d20..bc83ad2af 100644 --- a/.github/workflows/neug-test.yml +++ b/.github/workflows/neug-test.yml @@ -123,6 +123,10 @@ jobs: sudo chmod -R 777 /etc/security/* echo "* soft nofile 1048576" | tee -a /etc/security/limits.conf + - name: Clean the tool directory for self-hosted runner + run: | + rm -rf /__w/_tool/Python + - name: Setup Python uses: actions/setup-python@v5 with: