diff --git a/extensions/functions_datetime.yaml b/extensions/functions_datetime.yaml index 754454a9b..ab00e8c9f 100644 --- a/extensions/functions_datetime.yaml +++ b/extensions/functions_datetime.yaml @@ -68,17 +68,6 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: component - options: [ YEAR, ISO_YEAR, US_YEAR, HOUR, MINUTE, SECOND, - MILLISECOND, MICROSECOND, SUBSECOND, PICOSECOND, UNIX_TIME, TIMEZONE_OFFSET ] - description: The part of the value to extract. - - name: x - value: timestamp_tz - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: i64 - args: - name: component options: [ YEAR, ISO_YEAR, US_YEAR, HOUR, MINUTE, SECOND, @@ -90,14 +79,6 @@ scalar_functions: description: Timezone string from IANA tzdb. value: string return: i64 - - args: - - name: component - options: [ YEAR, ISO_YEAR, US_YEAR, HOUR, MINUTE, SECOND, - MILLISECOND, MICROSECOND, SUBSECOND, UNIX_TIME ] - description: The part of the value to extract. - - name: x - value: timestamp - return: i64 - args: - name: component options: [ YEAR, ISO_YEAR, US_YEAR, HOUR, MINUTE, SECOND, @@ -118,21 +99,7 @@ scalar_functions: options: [ HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, SUBSECOND ] description: The part of the value to extract. - name: x - value: time - return: i64 - - args: - - name: component - options: [ QUARTER, MONTH, DAY, DAY_OF_YEAR, MONDAY_DAY_OF_WEEK, - SUNDAY_DAY_OF_WEEK, MONDAY_WEEK, SUNDAY_WEEK, ISO_WEEK, US_WEEK ] - description: The part of the value to extract. - - name: indexing - options: [ ONE, ZERO ] - description: Start counting from 1 or 0. - - name: x - value: timestamp_tz - - name: timezone - description: Timezone string from IANA tzdb. - value: string + value: precision_time

return: i64 - args: - name: component @@ -148,17 +115,6 @@ scalar_functions: description: Timezone string from IANA tzdb. value: string return: i64 - - args: - - name: component - options: [ QUARTER, MONTH, DAY, DAY_OF_YEAR, MONDAY_DAY_OF_WEEK, - SUNDAY_DAY_OF_WEEK, MONDAY_WEEK, SUNDAY_WEEK, ISO_WEEK, US_WEEK ] - description: The part of the value to extract. - - name: indexing - options: [ ONE, ZERO ] - description: Start counting from 1 or 0. - - name: x - value: timestamp - return: i64 - args: - name: component options: [ QUARTER, MONTH, DAY, DAY_OF_YEAR, MONDAY_DAY_OF_WEEK, @@ -193,13 +149,6 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: component - options: [ IS_LEAP_YEAR ] - description: The part of the value to extract. - - name: x - value: timestamp - return: boolean - args: - name: component options: [ IS_LEAP_YEAR ] @@ -207,16 +156,6 @@ scalar_functions: - name: x value: precision_timestamp

return: boolean - - args: - - name: component - options: [ IS_LEAP_YEAR, IS_DST ] - description: The part of the value to extract. - - name: x - value: timestamp_tz - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: boolean - args: - name: component options: [ IS_LEAP_YEAR, IS_DST ] @@ -243,27 +182,12 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp - - name: y - value: interval_year - return: timestamp - args: - name: x value: precision_timestamp

- name: y value: interval_year return: precision_timestamp

- - args: - - name: x - value: timestamp_tz - - name: y - value: interval_year - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: timestamp_tz - args: - name: x value: precision_timestamp_tz

@@ -279,24 +203,12 @@ scalar_functions: - name: y value: interval_year return: date - - args: - - name: x - value: timestamp - - name: y - value: interval_day

- return: timestamp - args: - name: x value: precision_timestamp

- name: y value: interval_day

return: precision_timestamp

- - args: - - name: x - value: timestamp_tz - - name: y - value: interval_day

- return: timestamp_tz - args: - name: x value: precision_timestamp_tz

@@ -308,7 +220,7 @@ scalar_functions: value: date - name: y value: interval_day

- return: timestamp + return: precision_timestamp

- name: "multiply" description: Multiply an interval by an integral number. @@ -386,39 +298,18 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp - - name: y - value: interval_year - return: timestamp - args: - name: x value: precision_timestamp

- name: y value: interval_year return: precision_timestamp

- - args: - - name: x - value: timestamp_tz - - name: y - value: interval_year - return: timestamp_tz - args: - name: x value: precision_timestamp_tz

- name: y value: interval_year return: precision_timestamp_tz

- - args: - - name: x - value: timestamp_tz - - name: y - value: interval_year - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: timestamp_tz - args: - name: x value: precision_timestamp_tz

@@ -434,24 +325,12 @@ scalar_functions: - name: y value: interval_year return: date - - args: - - name: x - value: timestamp - - name: y - value: interval_day

- return: timestamp - args: - name: x value: precision_timestamp

- name: y value: interval_day

return: precision_timestamp

- - args: - - name: x - value: timestamp_tz - - name: y - value: interval_day

- return: timestamp_tz - args: - name: x value: precision_timestamp_tz

@@ -468,24 +347,12 @@ scalar_functions: name: "lte" description: less than or equal to impls: - - args: - - name: x - value: timestamp - - name: y - value: timestamp - return: boolean - args: - name: x value: precision_timestamp

- name: y value: precision_timestamp

return: boolean - - args: - - name: x - value: timestamp_tz - - name: y - value: timestamp_tz - return: boolean - args: - name: x value: precision_timestamp_tz

@@ -514,24 +381,12 @@ scalar_functions: name: "lt" description: less than impls: - - args: - - name: x - value: timestamp - - name: y - value: timestamp - return: boolean - args: - name: x value: precision_timestamp

- name: y value: precision_timestamp

return: boolean - - args: - - name: x - value: timestamp_tz - - name: y - value: timestamp_tz - return: boolean - args: - name: x value: precision_timestamp_tz

@@ -560,24 +415,12 @@ scalar_functions: name: "gte" description: greater than or equal to impls: - - args: - - name: x - value: timestamp - - name: y - value: timestamp - return: boolean - args: - name: x value: precision_timestamp

- name: y value: precision_timestamp

return: boolean - - args: - - name: x - value: timestamp_tz - - name: y - value: timestamp_tz - return: boolean - args: - name: x value: precision_timestamp_tz

@@ -606,24 +449,12 @@ scalar_functions: name: "gt" description: greater than impls: - - args: - - name: x - value: timestamp - - name: y - value: timestamp - return: boolean - args: - name: x value: precision_timestamp

- name: y value: precision_timestamp

return: boolean - - args: - - name: x - value: timestamp_tz - - name: y - value: timestamp_tz - return: boolean - args: - name: x value: precision_timestamp_tz

@@ -657,13 +488,6 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: timestamp_tz - args: - name: x value: precision_timestamp

@@ -675,9 +499,15 @@ scalar_functions: - name: x value: date - name: timezone - description: Timezone string from IANA tzdb. Returned timestamp_tz will have time set to 00:00:00. + description: >- + Timezone string from IANA tzdb. Returned precision_timestamp_tz will have time set to + 00:00:00 with 0 subseconds in the given precision (0 <= precision <= 12). value: string - return: timestamp_tz + - name: precision + value: i8 + return: |- + precision = integer_parameter(precision) + precision_timestamp_tz - name: "local_timestamp" description: >- @@ -687,13 +517,6 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp_tz - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: timestamp - args: - name: x value: precision_timestamp_tz

@@ -704,7 +527,7 @@ scalar_functions: - name: "strptime_time" description: >- - Parse string into time using provided format, + Parse string into precision time using provided format, see https://man7.org/linux/man-pages/man3/strptime.3.html for reference. impls: - args: @@ -712,7 +535,11 @@ scalar_functions: value: string - name: format value: string - return: time + - name: precision + value: i8 + return: |- + precision = integer_parameter(precision) + precision_time - name: "strptime_date" description: >- @@ -728,7 +555,7 @@ scalar_functions: - name: "strptime_timestamp" description: >- - Parse string into timestamp using provided format, + Parse string into precision timestamp using provided format, see https://man7.org/linux/man-pages/man3/strptime.3.html for reference. If timezone is present in timestamp and provided as parameter an error is thrown. @@ -745,13 +572,21 @@ scalar_functions: - name: timezone description: Timezone string from IANA tzdb. value: string - return: timestamp_tz + - name: precision + value: i8 + return: |- + precision = integer_parameter(precision) + precision_timestamp_tz - args: - name: timestamp_string value: string - name: format value: string - return: timestamp_tz + - name: precision + value: i8 + return: |- + precision = integer_parameter(precision) + precision_timestamp_tz - name: "strftime" description: >- @@ -762,27 +597,12 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp - - name: format - value: string - return: string - args: - name: x value: precision_timestamp

- name: format value: string return: string - - args: - - name: x - value: timestamp_tz - - name: format - value: string - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: string - args: - name: x value: precision_timestamp_tz

@@ -800,7 +620,7 @@ scalar_functions: return: string - args: - name: x - value: time + value: precision_time

- name: format value: string return: string @@ -818,18 +638,6 @@ scalar_functions: Examples: "Pacific/Marquesas", "Etc/GMT+1". If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp - - name: rounding - options: [ FLOOR, CEIL, ROUND_TIE_DOWN, ROUND_TIE_UP ] - - name: unit - options: [ YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND ] - - name: multiple - value: i64 - - name: origin - value: timestamp - return: timestamp - args: - name: x value: precision_timestamp

@@ -842,21 +650,6 @@ scalar_functions: - name: origin value: precision_timestamp

return: precision_timestamp

- - args: - - name: x - value: timestamp_tz - - name: rounding - options: [ FLOOR, CEIL, ROUND_TIE_DOWN, ROUND_TIE_UP ] - - name: unit - options: [ YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND ] - - name: multiple - value: i64 - - name: timezone - description: Timezone string from IANA tzdb. - value: string - - name: origin - value: timestamp_tz - return: timestamp_tz - args: - name: x value: precision_timestamp_tz

@@ -886,7 +679,7 @@ scalar_functions: return: date - args: - name: x - value: time + value: precision_time

- name: rounding options: [ FLOOR, CEIL, ROUND_TIE_DOWN, ROUND_TIE_UP ] - name: unit @@ -894,8 +687,8 @@ scalar_functions: - name: multiple value: i64 - name: origin - value: time - return: time + value: precision_time

+ return: precision_time

- name: "round_calendar" description: >- @@ -911,19 +704,6 @@ scalar_functions: If timezone is invalid an error is thrown. impls: - - args: - - name: x - value: timestamp - - name: rounding - options: [ FLOOR, CEIL, ROUND_TIE_DOWN, ROUND_TIE_UP ] - - name: unit - options: [ YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND ] - - name: origin - options: [ YEAR, MONTH, MONDAY_WEEK, SUNDAY_WEEK, ISO_WEEK, - US_WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND ] - - name: multiple - value: i64 - return: timestamp - args: - name: x value: precision_timestamp

@@ -937,22 +717,6 @@ scalar_functions: - name: multiple value: i64 return: precision_timestamp

- - args: - - name: x - value: timestamp_tz - - name: rounding - options: [ FLOOR, CEIL, ROUND_TIE_DOWN, ROUND_TIE_UP ] - - name: unit - options: [ YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND ] - - name: origin - options: [ YEAR, MONTH, MONDAY_WEEK, SUNDAY_WEEK, ISO_WEEK, - US_WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND ] - - name: multiple - value: i64 - - name: timezone - description: Timezone string from IANA tzdb. - value: string - return: timestamp_tz - args: - name: x value: precision_timestamp_tz

@@ -985,7 +749,7 @@ scalar_functions: return: date - args: - name: x - value: time + value: precision_time

- name: rounding options: [ FLOOR, CEIL, ROUND_TIE_DOWN, ROUND_TIE_UP ] - name: unit @@ -995,8 +759,8 @@ scalar_functions: - name: multiple value: i64 - name: origin - value: time - return: time + value: precision_time

+ return: precision_time

aggregate_functions: - name: "min" @@ -1011,18 +775,11 @@ aggregate_functions: return: date? - args: - name: x - value: time + value: precision_time

nullability: DECLARED_OUTPUT decomposable: MANY - intermediate: time? - return: time? - - args: - - name: x - value: timestamp - nullability: DECLARED_OUTPUT - decomposable: MANY - intermediate: timestamp? - return: timestamp? + intermediate: precision_time?

+ return: precision_time?

- args: - name: x value: precision_timestamp

@@ -1030,13 +787,6 @@ aggregate_functions: decomposable: MANY intermediate: precision_timestamp?

return: precision_timestamp?

- - args: - - name: x - value: timestamp_tz - nullability: DECLARED_OUTPUT - decomposable: MANY - intermediate: timestamp_tz? - return: timestamp_tz? - args: - name: x value: precision_timestamp_tz

@@ -1070,18 +820,11 @@ aggregate_functions: return: date? - args: - name: x - value: time + value: precision_time

nullability: DECLARED_OUTPUT decomposable: MANY - intermediate: time? - return: time? - - args: - - name: x - value: timestamp - nullability: DECLARED_OUTPUT - decomposable: MANY - intermediate: timestamp? - return: timestamp? + intermediate: precision_time?

+ return: precision_time?

- args: - name: x value: precision_timestamp

@@ -1089,13 +832,6 @@ aggregate_functions: decomposable: MANY intermediate: precision_timestamp?

return: precision_timestamp?

- - args: - - name: x - value: timestamp_tz - nullability: DECLARED_OUTPUT - decomposable: MANY - intermediate: timestamp_tz? - return: timestamp_tz? - args: - name: x value: precision_timestamp_tz

diff --git a/grammar/FuncTestCaseParser.g4 b/grammar/FuncTestCaseParser.g4 index 1139d4166..308a9a981 100644 --- a/grammar/FuncTestCaseParser.g4 +++ b/grammar/FuncTestCaseParser.g4 @@ -56,9 +56,6 @@ argument | stringArg | decimalArg | dateArg - | timeArg - | timestampArg - | timestampTzArg | intervalYearArg | intervalDayArg | intervalCompoundArg @@ -161,18 +158,6 @@ dateArg : DateLiteral DoubleColon dateType ; -timeArg - : TimeLiteral DoubleColon timeType - ; - -timestampArg - : TimestampLiteral DoubleColon timestampType - ; - -timestampTzArg - : TimestampTzLiteral DoubleColon timestampTZType - ; - intervalYearArg : IntervalYearLiteral DoubleColon intervalYearType ; @@ -254,10 +239,7 @@ scalarType | floatType #float | stringType #string | binaryType #binary - | timestampType #timestamp - | timestampTZType #timestampTz | dateType #date - | timeType #time | intervalYearType #intervalYear | UUID isnull=QMark? #uuid | UserDefined Identifier isnull=QMark? #userDefined @@ -287,18 +269,6 @@ dateType : Date isnull=QMark? ; -timeType - : Time isnull=QMark? - ; - -timestampType - : (Ts | Timestamp) isnull=QMark? - ; - -timestampTZType - : (TsTZ | Timestamp_TZ) isnull=QMark? - ; - intervalYearType : (IYear | Interval_Year) isnull=QMark? ; diff --git a/grammar/SubstraitLexer.g4 b/grammar/SubstraitLexer.g4 index 4dfdf5272..2e42c8ee0 100644 --- a/grammar/SubstraitLexer.g4 +++ b/grammar/SubstraitLexer.g4 @@ -27,10 +27,7 @@ FP32 : 'FP32'; FP64 : 'FP64'; String : 'STRING'; Binary : 'BINARY'; -Timestamp: 'TIMESTAMP'; -Timestamp_TZ: 'TIMESTAMP_TZ'; Date : 'DATE'; -Time : 'TIME'; Interval_Year: 'INTERVAL_YEAR'; Interval_Day: 'INTERVAL_DAY'; Interval_Compound: 'INTERVAL_COMPOUND'; @@ -52,8 +49,6 @@ UserDefined: 'U!'; Bool: 'BOOL'; Str: 'STR'; VBin: 'VBIN'; -Ts: 'TS'; -TsTZ: 'TSTZ'; IYear: 'IYEAR'; IDay: 'IDAY'; ICompound: 'ICOMPOUND'; diff --git a/grammar/SubstraitType.g4 b/grammar/SubstraitType.g4 index d14df3976..1dea302d3 100644 --- a/grammar/SubstraitType.g4 +++ b/grammar/SubstraitType.g4 @@ -20,10 +20,7 @@ scalarType | FP64 #fp64 | String #string | Binary #binary - | Timestamp #timestamp - | Timestamp_TZ #timestampTz | Date #date - | Time #time | Interval_Year #intervalYear | UUID #uuid ; diff --git a/proto/substrait/algebra.proto b/proto/substrait/algebra.proto index 6cea2c849..272797f9a 100644 --- a/proto/substrait/algebra.proto +++ b/proto/substrait/algebra.proto @@ -997,6 +997,8 @@ message Expression { } message Literal { + reserved 14, 17, 27; + oneof literal_type { bool boolean = 1; int32 i8 = 2; @@ -1007,14 +1009,8 @@ message Expression { double fp64 = 11; string string = 12; bytes binary = 13; - // Timestamp in units of microseconds since the UNIX epoch. - // Deprecated in favor of `precision_timestamp`. - int64 timestamp = 14 [deprecated = true]; // Date in units of days since the UNIX epoch. int32 date = 16; - // Time in units of microseconds past midnight. - // Deprecated in favor of `precision_time`. - int64 time = 17 [deprecated = true]; IntervalYearToMonth interval_year_to_month = 19; IntervalDayToSecond interval_day_to_second = 20; IntervalCompound interval_compound = 36; @@ -1028,9 +1024,6 @@ message Expression { PrecisionTimestamp precision_timestamp_tz = 35; Struct struct = 25; Map map = 26; - // Timestamp in units of microseconds since the UNIX epoch. - // Deprecated in favor of `precision_timestamp_tz` - int64 timestamp_tz = 27 [deprecated = true]; bytes uuid = 28; Type null = 29; // a typed null literal List list = 30; diff --git a/proto/substrait/type.proto b/proto/substrait/type.proto index a430034eb..9a4da4e97 100644 --- a/proto/substrait/type.proto +++ b/proto/substrait/type.proto @@ -15,6 +15,8 @@ option java_package = "io.substrait.proto"; // // The value 0 represents the system-preferred variation and is a valid reference value. message Type { + reserved 14, 17, 29; + oneof kind { Boolean bool = 1; I8 i8 = 2; @@ -25,16 +27,10 @@ message Type { FP64 fp64 = 11; String string = 12; Binary binary = 13; - // Deprecated in favor of `PrecisionTimestamp precision_timestamp` - Timestamp timestamp = 14 [deprecated = true]; Date date = 16; - // Deprecated in favor of `PrecisionTime precision_time` - Time time = 17 [deprecated = true]; IntervalYear interval_year = 19; IntervalDay interval_day = 20; IntervalCompound interval_compound = 35; - // Deprecated in favor of `PrecisionTimestampTZ precision_timestamp_tz` - TimestampTZ timestamp_tz = 29 [deprecated = true]; UUID uuid = 32; FixedChar fixed_char = 21; @@ -113,26 +109,11 @@ message Type { Nullability nullability = 2; } - message Timestamp { - uint32 type_variation_reference = 1; - Nullability nullability = 2; - } - message Date { uint32 type_variation_reference = 1; Nullability nullability = 2; } - message Time { - uint32 type_variation_reference = 1; - Nullability nullability = 2; - } - - message TimestampTZ { - uint32 type_variation_reference = 1; - Nullability nullability = 2; - } - // An interval consisting of years and months message IntervalYear { uint32 type_variation_reference = 1; diff --git a/site/docs/extensions/index.md b/site/docs/extensions/index.md index 51c69531c..f731ae365 100644 --- a/site/docs/extensions/index.md +++ b/site/docs/extensions/index.md @@ -98,10 +98,7 @@ A function signature uniquely identifies a function implementation within a sing | string | str | | binary | vbin | | boolean | bool | -| timestamp | ts | -| timestamp_tz | tstz | | date | date | -| time | time | | interval_year | iyear | | interval_day | iday | | interval_compound | icompound | @@ -126,7 +123,7 @@ A function signature uniquely identifies a function implementation within a sing | ------------------------------------------------- | ------------------- | | `add(optional enumeration, i8, i8) => i8` | `add:i8_i8` | | `avg(fp32) => fp32` | `avg:fp32` | -| `extract(required enumeration, timestamp) => i64` | `extract:req_ts` | +| `extract(required enumeration, precision_timestamp<6>) => i64` | `extract:req_pts` | | `sum(any1) => any1` | `sum:any` | | `concat(str...) => str` | `concat:str` | | `transform(list, func any2>) => list` | `transform:list_func` | diff --git a/site/docs/types/type_classes.md b/site/docs/types/type_classes.md index 7a501e2d4..a77400af0 100644 --- a/site/docs/types/type_classes.md +++ b/site/docs/types/type_classes.md @@ -21,10 +21,7 @@ Simple type classes are those that don't support any form of configuration. For | fp64 | An 8-byte double-precision floating point number with the same range and precision as defined for the [IEEE 754 64-bit floating-point format](https://standards.ieee.org/ieee/754/6210/). | `double` | string | A unicode string of text, [0..2,147,483,647] UTF-8 bytes in length. | `string` | binary | A binary value, [0..2,147,483,647] bytes in length. | `binary` -| timestamp | A naive timestamp with microsecond precision. Does not include timezone information and can thus not be unambiguously mapped to a moment on the timeline without context. Similar to naive datetime in Python. | `int64` microseconds since 1970-01-01 00:00:00.000000 (in an unspecified timezone) -| timestamp_tz | A timezone-aware timestamp with microsecond precision. Similar to timezone-aware datetime in Python. | `int64` microseconds since 1970-01-01 00:00:00.000000 UTC | date | A date within [1000-01-01..9999-12-31]. | `int32` days since `1970-01-01` -| time | A time since the beginning of any day. Range of [0..86,399,999,999] microseconds; leap seconds need not be supported. | `int64` microseconds past midnight | interval_year | Interval year to month. Supports a range of [-10,000..10,000] years with month precision (= [-120,000..120,000] months). Usually stored as separate integers for years and months, but only the total number of months is significant, i.e. `1y 0m` is considered equal to `0y 12m` or `1001y -12000m`. | `int32` years and `int32` months, with the added constraint that each component can never independently specify more than 10,000 years, even if the components have opposite signs (e.g. `-10000y 200000m` is **not** allowed) | uuid | A universally-unique identifier composed of 128 bits. Typically presented to users in the following hexadecimal format: `c48ffa9e-64f4-44cb-ae47-152b4e60e77b`. Any 128-bit value is allowed, without specific adherence to RFC4122. | 16-byte `binary` diff --git a/site/docs/types/type_parsing.md b/site/docs/types/type_parsing.md index 9762b4071..0e0ac7b06 100644 --- a/site/docs/types/type_parsing.md +++ b/site/docs/types/type_parsing.md @@ -37,7 +37,7 @@ Structs are unique from other types because they have an arbitrary number of par ``` // Struct - struct? + struct?> // Named structs are not yet supported in the text format. ``` diff --git a/tests/README.md b/tests/README.md index 8b830ecfd..a9d921fe4 100644 --- a/tests/README.md +++ b/tests/README.md @@ -110,9 +110,9 @@ enum_value := ::enum result := | | options :=

` - **icompound**: Interval compound -- **pt**: Precision Time -- **pts**: Precision Timestamp -- **ptstz**: Precision Timestamp with timezone +- **pt**: Precision Time `precision_time

` +- **pts**: Precision Timestamp `precision_timestamp

` +- **ptstz**: Precision Timestamp with timezone `precision_timestamp_tz

` ### Nullability diff --git a/tests/baseline.json b/tests/baseline.json index 3d5441246..07b82ff00 100644 --- a/tests/baseline.json +++ b/tests/baseline.json @@ -2,15 +2,15 @@ "registry": { "extension_count": 15, "dependency_count": 15, - "function_count": 173, + "function_count": 174, "num_aggregate_functions": 28, "num_scalar_functions": 170, "num_window_functions": 11, - "num_function_overloads": 533 + "num_function_overloads": 498 }, "coverage": { - "total_test_count": 1168, - "num_function_variants": 533, + "total_test_count": 1177, + "num_function_variants": 498, "num_covered_function_variants": 245 } } diff --git a/tests/cases/datetime/add_datetime.test b/tests/cases/datetime/add_datetime.test index 81f4aafdb..c74393718 100644 --- a/tests/cases/datetime/add_datetime.test +++ b/tests/cases/datetime/add_datetime.test @@ -1,16 +1,16 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp types -add('2016-12-31T13:30:15'::ts, 'P5D'::iday) = '2017-01-05T13:30:15'::ts -add('2016-12-01T13:30:15'::ts, 'P5Y'::iyear) = '2021-12-01T13:30:15'::ts -add('2016-12-01T13:30:15'::ts, 'PT5H'::iday) = '2016-12-01T18:30:15'::ts +# timestamps: examples using the precision_timestamp types +add('2016-12-31T13:30:15'::pts<6>, 'P5D'::iday<6>) = '2017-01-05T13:30:15'::pts<6> +add('2016-12-01T13:30:15'::pts<6>, 'P5Y'::iyear) = '2021-12-01T13:30:15'::pts<6> +add('2016-12-01T13:30:15'::pts<6>, 'PT5H'::iday<6>) = '2016-12-01T18:30:15'::pts<6> # date_to_timestamp: examples using the date types and resulting in a timestamp -add('2020-12-31'::date, 'P5D'::iday) = '2021-01-05T00:00:00'::ts +add('2020-12-31'::date, 'P5D'::iday<6>) = '2021-01-05T00:00:00'::pts<6> add('2020-12-31'::date, 'P5Y'::iyear) = '2025-12-31'::date add('2020-12-31'::date, 'P5M'::iyear) = '2021-05-31'::date # null_input: examples with null args or return -add(null::date?, 'P5D'::iday) = null::ts? +add(null::date?, 'P5D'::iday<6>) = null::pts?<6> add(null::date?, 'P5Y'::iyear) = null::date? diff --git a/tests/cases/datetime/extract.test b/tests/cases/datetime/extract.test index 2818a9f57..13534ad0a 100644 --- a/tests/cases/datetime/extract.test +++ b/tests/cases/datetime/extract.test @@ -1,31 +1,31 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp and timestamptz types -extract(YEAR::enum, '2016-12-31T13:30:15'::ts) = 2016::i64 -extract(ISO_YEAR::enum, '2016-01-01T13:30:15'::ts) = 2015::i64 -extract(QUARTER::enum, '2016-12-31T13:30:15'::ts) = 4::i64 -extract(MONTH::enum, '2016-12-31T13:30:15'::ts) = 12::i64 -extract(ISO_WEEK::enum, '2016-12-31T13:30:15'::ts) = 52::i64 -extract(DAY::enum, '2016-12-31T13:30:15'::ts) = 31::i64 -extract(SUNDAY_DAY_OF_WEEK::enum, '2016-12-25T13:30:15'::ts) = 7::i64 -extract(MONDAY_DAY_OF_WEEK::enum, '2016-12-25T13:30:15'::ts) = 0::i64 -extract(DAY_OF_YEAR::enum, '2016-12-25T13:30:15'::ts) = 360::i64 -extract(HOUR::enum, '2016-12-31T13:30:15'::ts) = 13::i64 -extract(MINUTE::enum, '2016-12-31T13:30:15'::ts) = 30::i64 -extract(SECOND::enum, '2016-12-31T13:30:15'::ts) = 15::i64 -extract(MILLISECOND::enum, '2016-12-31T13:30:15'::ts) = 15000::i64 -extract(MICROSECOND::enum, '2016-12-31T13:30:15.220000'::ts) = 15220000::i64 -extract(UNIX_TIME::enum, '2016-12-31T13:30:15'::ts) = 1483191015::i64 +# timestamps: examples using the precision_timestamp and precision_timestamp_tz types +extract(YEAR::enum, '2016-12-31T13:30:15'::pts<6>) = 2016::i64 +extract(ISO_YEAR::enum, '2016-01-01T13:30:15'::pts<6>) = 2015::i64 +extract(QUARTER::enum, '2016-12-31T13:30:15'::pts<6>) = 4::i64 +extract(MONTH::enum, '2016-12-31T13:30:15'::pts<6>) = 12::i64 +extract(ISO_WEEK::enum, '2016-12-31T13:30:15'::pts<6>) = 52::i64 +extract(DAY::enum, '2016-12-31T13:30:15'::pts<6>) = 31::i64 +extract(SUNDAY_DAY_OF_WEEK::enum, '2016-12-25T13:30:15'::pts<6>) = 7::i64 +extract(MONDAY_DAY_OF_WEEK::enum, '2016-12-25T13:30:15'::pts<6>) = 0::i64 +extract(DAY_OF_YEAR::enum, '2016-12-25T13:30:15'::pts<6>) = 360::i64 +extract(HOUR::enum, '2016-12-31T13:30:15'::pts<6>) = 13::i64 +extract(MINUTE::enum, '2016-12-31T13:30:15'::pts<6>) = 30::i64 +extract(SECOND::enum, '2016-12-31T13:30:15'::pts<6>) = 15::i64 +extract(MILLISECOND::enum, '2016-12-31T13:30:15'::pts<6>) = 15000::i64 +extract(MICROSECOND::enum, '2016-12-31T13:30:15.220000'::pts<6>) = 15220000::i64 +extract(UNIX_TIME::enum, '2016-12-31T13:30:15'::pts<6>) = 1483191015::i64 # date: examples using the date type extract(YEAR::enum, '2020-12-31'::date) = 2020::i64 extract(MONTH::enum, '2020-12-31'::date) = 12::i64 extract(DAY::enum, '2020-12-31'::date) = 31::i64 -# time: examples using the time type -extract(HOUR::enum, '01:02:03'::time) = 1::i64 -extract(MINUTE::enum, '01:02:03'::time) = 2::i64 -extract(SECOND::enum, '01:02:03'::time) = 3::i64 -extract(MILLISECOND::enum, '01:02:03.155'::time) = 3155::i64 -extract(MICROSECOND::enum, '01:02:03.45'::time) = 3450000::i64 +# time: examples using the precision_time type +extract(HOUR::enum, '01:02:03'::pt<6>) = 1::i64 +extract(MINUTE::enum, '01:02:03'::pt<6>) = 2::i64 +extract(SECOND::enum, '01:02:03'::pt<6>) = 3::i64 +extract(MILLISECOND::enum, '01:02:03.155'::pt<6>) = 3155::i64 +extract(MICROSECOND::enum, '01:02:03.45'::pt<6>) = 3450000::i64 diff --git a/tests/cases/datetime/gt_datetime.test b/tests/cases/datetime/gt_datetime.test index c265b1c40..e9f760c49 100644 --- a/tests/cases/datetime/gt_datetime.test +++ b/tests/cases/datetime/gt_datetime.test @@ -1,13 +1,13 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp type -gt('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = false::bool -gt('2018-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool +# timestamps: examples using the precision_timestamp type +gt('2016-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = false::bool +gt('2018-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool -# timestamp_tz: examples using the timestamp_tz type -gt('1999-01-08T01:05:05-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = false::bool -gt('1999-01-08T01:05:07-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = true::bool +# timestamp_tz: examples using the precision_timestamp_tz type +gt('1999-01-08T01:05:05-08:00'::ptstz<6>, '1999-01-08T04:05:06-05:00'::ptstz<6>) = false::bool +gt('1999-01-08T01:05:07-08:00'::ptstz<6>, '1999-01-08T04:05:06-05:00'::ptstz<6>) = true::bool # date: examples using the date type gt('2020-12-30'::date, '2020-12-31'::date) = false::bool @@ -22,4 +22,4 @@ gt('P7Y'::iyear, 'P6Y'::iyear) = true::bool # null_input: examples with null args gt(null::iday?, 'P5D'::iday) = null::bool? gt(null::date?, '2020-12-30'::date) = null::bool? -gt(null::ts?, '2018-12-31T13:30:15'::ts) = null::bool? +gt(null::pts?<6>, '2018-12-31T13:30:15'::pts<6>) = null::bool? diff --git a/tests/cases/datetime/gte_datetime.test b/tests/cases/datetime/gte_datetime.test index 0fe1c1d8c..62fe732a2 100644 --- a/tests/cases/datetime/gte_datetime.test +++ b/tests/cases/datetime/gte_datetime.test @@ -1,15 +1,15 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp type -gte('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = false::bool -gte('2017-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool -gte('2018-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool +# timestamps: examples using the precision_timestamp type +gte('2016-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = false::bool +gte('2017-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool +gte('2018-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool -# timestamp_tz: examples using the timestamp_tz type -gte('1999-01-08T01:05:05-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = false::bool -gte('1999-01-08T01:05:06-08:00'::tstz, '1999-01-08T01:05:06-08:00'::tstz) = true::bool -gte('1999-01-08T01:05:06-08:00'::tstz, '1999-01-08T04:05:05-05:00'::tstz) = true::bool +# timestamp_tz: examples using the precision_timestamp_tz type +gte('1999-01-08T01:05:05-08:00'::ptstz<6>, '1999-01-08T04:05:06-05:00'::ptstz<6>) = false::bool +gte('1999-01-08T01:05:06-08:00'::ptstz<6>, '1999-01-08T01:05:06-08:00'::ptstz<6>) = true::bool +gte('1999-01-08T01:05:06-08:00'::ptstz<6>, '1999-01-08T04:05:05-05:00'::ptstz<6>) = true::bool # date: examples using the date type gte('2020-12-30'::date, '2020-12-31'::date) = false::bool @@ -27,4 +27,4 @@ gte('P7Y'::iyear, 'P6Y'::iyear) = true::bool # null_input: examples with null args or return gte(null::iday?, 'P5D'::iday) = null::bool? gte(null::date?, '2020-12-30'::date) = null::bool? -gte(null::ts?, '2018-12-31T13:30:15'::ts) = null::bool? +gte(null::pts?<6>, '2018-12-31T13:30:15'::pts<6>) = null::bool? diff --git a/tests/cases/datetime/lt_datetime.test b/tests/cases/datetime/lt_datetime.test index 59500284f..dd4ff071f 100644 --- a/tests/cases/datetime/lt_datetime.test +++ b/tests/cases/datetime/lt_datetime.test @@ -1,13 +1,13 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp type -lt('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool -lt('2018-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = false::bool +# timestamps: examples using the precision_timestamp type +lt('2016-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool +lt('2018-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = false::bool -# timestamp_tz: examples using the timestamp_tz type -lt('1999-01-08T01:05:05-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = true::bool -lt('1999-01-08T01:05:06-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = false::bool +# timestamp_tz: examples using the precision_timestamp_tz type +lt('1999-01-08T01:05:05-08:00'::ptstz<6>, '1999-01-08T04:05:06-05:00'::ptstz<6>) = true::bool +lt('1999-01-08T01:05:06-08:00'::ptstz<6>, '1999-01-08T04:05:06-05:00'::ptstz<6>) = false::bool # date: examples using the date type lt('2020-12-30'::date, '2020-12-31'::date) = true::bool @@ -22,4 +22,4 @@ lt('P7Y'::iyear, 'P6Y'::iyear) = false::bool # null_input: examples with null args or return lt(null::iday?, 'P5D'::iday) = null::bool? lt(null::date?, '2020-12-30'::date) = null::bool? -lt(null::ts?, '2018-12-31T13:30:15'::ts) = null::bool? +lt(null::pts?<6>, '2018-12-31T13:30:15'::pts<6>) = null::bool? diff --git a/tests/cases/datetime/lte_datetime.test b/tests/cases/datetime/lte_datetime.test index ba44aea9b..d190ae801 100644 --- a/tests/cases/datetime/lte_datetime.test +++ b/tests/cases/datetime/lte_datetime.test @@ -1,15 +1,15 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp type -lte('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool -lte('2017-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool -lte('2018-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = false::bool +# timestamps: examples using the precision_timestamp type +lte('2016-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool +lte('2017-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool +lte('2018-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = false::bool -# timestamp_tz: examples using the timestamp_tz type -lte('1999-01-08T01:05:05-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = true::bool -lte('1999-01-08T01:05:06-08:00'::tstz, '1999-01-08T01:05:06-08:00'::tstz) = true::bool -lte('1999-01-08T01:05:06-08:00'::tstz, '1999-01-08T04:05:05-05:00'::tstz) = false::bool +# timestamp_tz: examples using the precision_timestamp_tz type +lte('1999-01-08T01:05:05-08:00'::ptstz<6>, '1999-01-08T04:05:06-05:00'::ptstz<6>) = true::bool +lte('1999-01-08T01:05:06-08:00'::ptstz<6>, '1999-01-08T01:05:06-08:00'::ptstz<6>) = true::bool +lte('1999-01-08T01:05:06-08:00'::ptstz<6>, '1999-01-08T04:05:05-05:00'::ptstz<6>) = false::bool # date: examples using the date type lte('2020-12-30'::date, '2020-12-31'::date) = true::bool @@ -27,4 +27,4 @@ lte('P7Y'::iyear, 'P6Y'::iyear) = false::bool # null_input: examples with null args or return lte(null::iday?, 'P5D'::iday) = null::bool? lte(null::date?, '2020-12-30'::date) = null::bool? -lte(null::ts?, '2018-12-31T13:30:15'::ts) = null::bool? +lte(null::pts?<6>, '2018-12-31T13:30:15'::pts<6>) = null::bool? diff --git a/tests/cases/datetime/subtract_datetime.test b/tests/cases/datetime/subtract_datetime.test index 75e7f4198..552c101f7 100644 --- a/tests/cases/datetime/subtract_datetime.test +++ b/tests/cases/datetime/subtract_datetime.test @@ -1,10 +1,10 @@ ### SUBSTRAIT_SCALAR_TEST: v1.0 ### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' -# timestamps: examples using the timestamp type -subtract('2016-12-31T13:30:15'::ts, 'P5D'::iday) = '2016-12-26T13:30:15'::ts -subtract('2016-12-01T13:30:15'::ts, 'P5Y'::iyear) = '2011-12-01T13:30:15'::ts -subtract('2016-12-01T13:30:15'::ts, 'PT5H'::iday) = '2016-12-01T08:30:15'::ts +# timestamps: examples using the precision_timestamp type +subtract('2016-12-31T13:30:15'::pts<6>, 'P5D'::iday) = '2016-12-26T13:30:15'::pts<6> +subtract('2016-12-01T13:30:15'::pts<6>, 'P5Y'::iyear) = '2011-12-01T13:30:15'::pts<6> +subtract('2016-12-01T13:30:15'::pts<6>, 'PT5H'::iday) = '2016-12-01T08:30:15'::pts<6> # date: examples using the date type subtract('2020-12-31'::date, 'P5D'::iday) = '2020-12-26'::date diff --git a/tests/coverage/antlr_parser/FuncTestCaseLexer.py b/tests/coverage/antlr_parser/FuncTestCaseLexer.py index 3a79d6b59..f63a3c899 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseLexer.py +++ b/tests/coverage/antlr_parser/FuncTestCaseLexer.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,0,129,1313,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, + 4,0,124,1267,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, @@ -31,93 +31,89 @@ def serializedATN(): 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, - 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, - 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,1,0,4,0,273,8,0, - 11,0,12,0,274,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,1,0,4,0,263, + 8,0,11,0,12,0,264,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1, 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1, + 2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1, + 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1, 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, - 6,1,6,4,6,371,8,6,11,6,12,6,372,1,6,1,6,4,6,377,8,6,11,6,12,6,378, - 3,6,381,8,6,1,7,1,7,1,7,1,7,5,7,387,8,7,10,7,12,7,390,9,7,1,7,3, - 7,393,8,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1, - 9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1, - 10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1, - 12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, - 13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1, - 15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, - 16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1, - 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1, - 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1, - 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1, - 21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1, - 22,1,22,1,22,1,22,1,23,3,23,544,8,23,1,23,1,23,1,24,3,24,549,8,24, - 1,24,4,24,552,8,24,11,24,12,24,553,1,24,1,24,4,24,558,8,24,11,24, - 12,24,559,3,24,562,8,24,1,25,3,25,565,8,25,1,25,4,25,568,8,25,11, - 25,12,25,569,1,25,1,25,5,25,574,8,25,10,25,12,25,577,9,25,3,25,579, - 8,25,1,25,1,25,3,25,583,8,25,1,25,4,25,586,8,25,11,25,12,25,587, - 3,25,590,8,25,1,25,3,25,593,8,25,1,25,1,25,1,25,1,25,1,25,1,25,1, - 25,3,25,602,8,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3, - 26,613,8,26,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,29,1,29,1, - 29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,4,29,637, - 8,29,11,29,12,29,638,3,29,641,8,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,4,30,663,8,30,11,30,12,30,664,3,30,667,8,30,1,30,1,30,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,4,31,679,8,31,11,31,12,31,680, - 3,31,683,8,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,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,43,1,43,1,43,1,43, - 1,43,3,43,722,8,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,3,43, - 732,8,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,741,8,44,1,44,1, - 44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,751,8,44,1,45,1,45,1,45,1, - 45,1,45,3,45,758,8,45,1,45,1,45,1,45,3,45,763,8,45,1,45,1,45,1,45, - 1,45,1,45,3,45,770,8,45,1,45,1,45,1,45,3,45,775,8,45,1,46,1,46,1, - 46,1,46,1,46,3,46,782,8,46,1,46,1,46,1,46,3,46,787,8,46,1,46,1,46, - 1,46,3,46,792,8,46,1,46,1,46,1,46,3,46,797,8,46,1,46,1,46,1,47,1, - 47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,5,48,812,8,48,10, - 48,12,48,815,9,48,1,48,1,48,1,49,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,5,51,834,8,51,10,51,12,51, - 837,9,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,4,52,846,8,52,11,52, - 12,52,847,1,52,3,52,851,8,52,1,52,5,52,854,8,52,10,52,12,52,857, - 9,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,54,1,54,1,54,1,55,1,55, - 1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57, - 1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,60,1,60, - 1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63, - 1,63,1,63,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,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67, - 1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68, - 1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,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,71,1,71, - 1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,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,73,1,73, - 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,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76, + 5,1,6,1,6,4,6,361,8,6,11,6,12,6,362,1,6,1,6,4,6,367,8,6,11,6,12, + 6,368,3,6,371,8,6,1,7,1,7,1,7,1,7,5,7,377,8,7,10,7,12,7,380,9,7, + 1,7,3,7,383,8,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9, + 1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, + 1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11, + 1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13, + 1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15, + 1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18, + 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19, + 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,22,1,23,3,23,534,8,23,1,23,1,23,1,24,3,24, + 539,8,24,1,24,4,24,542,8,24,11,24,12,24,543,1,24,1,24,4,24,548,8, + 24,11,24,12,24,549,3,24,552,8,24,1,25,3,25,555,8,25,1,25,4,25,558, + 8,25,11,25,12,25,559,1,25,1,25,5,25,564,8,25,10,25,12,25,567,9,25, + 3,25,569,8,25,1,25,1,25,3,25,573,8,25,1,25,4,25,576,8,25,11,25,12, + 25,577,3,25,580,8,25,1,25,3,25,583,8,25,1,25,1,25,1,25,1,25,1,25, + 1,25,1,25,3,25,592,8,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26, + 1,26,3,26,603,8,26,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,29, + 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, + 4,29,627,8,29,11,29,12,29,628,3,29,631,8,29,1,29,1,29,1,29,1,29, + 1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,1,30,4,30,653,8,30,11,30,12,30,654,3,30,657,8,30,1,30, + 1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,4,31,669,8,31,11,31, + 12,31,670,3,31,673,8,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32, + 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,43,1,43, + 1,43,1,43,1,43,3,43,712,8,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43, + 1,43,3,43,722,8,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,731,8, + 44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,741,8,44,1,45,1, + 45,1,45,1,45,1,45,3,45,748,8,45,1,45,1,45,1,45,3,45,753,8,45,1,45, + 1,45,1,45,1,45,1,45,3,45,760,8,45,1,45,1,45,1,45,3,45,765,8,45,1, + 46,1,46,1,46,1,46,1,46,3,46,772,8,46,1,46,1,46,1,46,3,46,777,8,46, + 1,46,1,46,1,46,3,46,782,8,46,1,46,1,46,1,46,3,46,787,8,46,1,46,1, + 46,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,5,48,802, + 8,48,10,48,12,48,805,9,48,1,48,1,48,1,49,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,5,51,824,8,51,10,51, + 12,51,827,9,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,4,52,836,8,52, + 11,52,12,52,837,1,52,3,52,841,8,52,1,52,5,52,844,8,52,10,52,12,52, + 847,9,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,54,1,54,1,54,1,55, + 1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57, + 1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,60, + 1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63, + 1,63,1,63,1,63,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,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,68,1,68,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,69,1,69,1,69,1,69, + 1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70, + 1,70,1,70,1,70,1,70,1,70,1,70,1,70,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,72,1,73,1,73,1,73,1,73,1,73,1,73, + 1,73,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,74,1,74,1,74,1,74,1,74,1,74,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,75,1,75,1,75,1,75,1,75, + 1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,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,77,1,77,1,77, - 1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,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,78,1,78,1,78,1,78,1,78,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,79,1,79,1,79,1,79,1,79,1,80,1,80, - 1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,1,81,1,82,1,82,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,83,1,84,1,84,1,84,1,84,1,84,1,85, - 1,85,1,85,1,85,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,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,91,1,91,1,91, - 1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93, - 1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95, - 1,95,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98, - 1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100, - 1,100,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,103, - 1,103,1,103,1,104,1,104,1,104,1,105,1,105,1,106,1,106,1,107,1,107, - 1,108,1,108,1,109,1,109,1,110,1,110,1,111,1,111,1,111,1,112,1,112, - 1,112,1,113,1,113,1,113,1,114,1,114,1,115,1,115,1,116,1,116,1,117, - 1,117,1,118,1,118,1,119,1,119,1,120,1,120,1,121,1,121,1,122,1,122, - 1,123,1,123,1,124,1,124,1,125,1,125,1,126,1,126,1,126,1,126,1,127, - 1,127,1,127,1,128,1,128,1,128,1,129,1,129,1,129,1,130,1,130,5,130, - 1284,8,130,10,130,12,130,1287,9,130,1,130,3,130,1290,8,130,1,131, - 1,131,1,132,3,132,1295,8,132,1,132,1,132,1,133,1,133,1,133,5,133, - 1302,8,133,10,133,12,133,1305,9,133,1,134,1,134,3,134,1309,8,134, - 1,134,3,134,1312,8,134,0,0,135,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15, + 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,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80, + 1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,82,1,82, + 1,82,1,82,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85, + 1,85,1,86,1,86,1,86,1,86,1,86,1,87,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,89,1,89,1,89, + 1,89,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93, + 1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95, + 1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97, + 1,98,1,98,1,98,1,99,1,99,1,99,1,100,1,100,1,101,1,101,1,102,1,102, + 1,103,1,103,1,104,1,104,1,105,1,105,1,106,1,106,1,106,1,107,1,107, + 1,107,1,108,1,108,1,108,1,109,1,109,1,110,1,110,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,118,1,118,1,119,1,119,1,120,1,120,1,121,1,121,1,121,1,121,1,122, + 1,122,1,122,1,123,1,123,1,123,1,124,1,124,1,124,1,125,1,125,5,125, + 1238,8,125,10,125,12,125,1241,9,125,1,125,3,125,1244,8,125,1,126, + 1,126,1,127,3,127,1249,8,127,1,127,1,127,1,128,1,128,1,128,5,128, + 1256,8,128,10,128,12,128,1259,9,128,1,129,1,129,3,129,1263,8,129, + 1,129,3,129,1266,8,129,0,0,130,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,0,57,0,59, 28,61,29,63,30,65,31,67,32,69,33,71,34,73,35,75,36,77,37,79,38,81, @@ -130,365 +126,352 @@ def serializedATN(): 199,96,201,97,203,98,205,99,207,100,209,101,211,102,213,103,215, 104,217,105,219,106,221,107,223,108,225,109,227,110,229,111,231, 112,233,113,235,114,237,115,239,116,241,117,243,118,245,119,247, - 120,249,121,251,122,253,123,255,124,257,125,259,126,261,0,263,0, - 265,127,267,128,269,129,1,0,31,3,0,9,10,13,13,32,32,2,0,83,83,115, - 115,2,0,85,85,117,117,2,0,66,66,98,98,2,0,84,84,116,116,2,0,82,82, - 114,114,2,0,65,65,97,97,2,0,73,73,105,105,2,0,67,67,99,99,2,0,76, - 76,108,108,2,0,69,69,101,101,2,0,71,71,103,103,2,0,78,78,110,110, - 2,0,68,68,100,100,2,0,80,80,112,112,2,0,89,89,121,121,2,0,86,86, - 118,118,2,0,10,10,13,13,2,0,70,70,102,102,2,0,79,79,111,111,2,0, - 87,87,119,119,2,0,72,72,104,104,2,0,43,43,45,45,1,0,48,57,2,0,77, - 77,109,109,2,0,39,39,92,92,1,0,42,42,2,0,42,42,47,47,2,0,90,90,122, - 122,2,0,88,88,120,120,4,0,36,36,65,90,95,95,97,122,1361,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,39,1,0,0,0,0,41,1,0,0,0, - 0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0, - 0,53,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0, - 0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0, - 0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0, - 0,87,1,0,0,0,0,89,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0, - 0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,109,1,0, - 0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119, - 1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0, - 0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1, - 0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0, - 147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0, - 0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165, - 1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0, - 0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1, - 0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0, - 193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0, - 0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211, - 1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0, - 0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1, - 0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0, - 239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0, - 0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257, - 1,0,0,0,0,259,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0, - 1,272,1,0,0,0,3,278,1,0,0,0,5,282,1,0,0,0,7,304,1,0,0,0,9,329,1, - 0,0,0,11,347,1,0,0,0,13,368,1,0,0,0,15,382,1,0,0,0,17,396,1,0,0, - 0,19,403,1,0,0,0,21,412,1,0,0,0,23,425,1,0,0,0,25,434,1,0,0,0,27, - 443,1,0,0,0,29,449,1,0,0,0,31,458,1,0,0,0,33,465,1,0,0,0,35,477, - 1,0,0,0,37,481,1,0,0,0,39,494,1,0,0,0,41,507,1,0,0,0,43,521,1,0, - 0,0,45,533,1,0,0,0,47,543,1,0,0,0,49,548,1,0,0,0,51,601,1,0,0,0, - 53,612,1,0,0,0,55,614,1,0,0,0,57,619,1,0,0,0,59,622,1,0,0,0,61,648, - 1,0,0,0,63,670,1,0,0,0,65,686,1,0,0,0,67,694,1,0,0,0,69,696,1,0, - 0,0,71,698,1,0,0,0,73,700,1,0,0,0,75,702,1,0,0,0,77,704,1,0,0,0, - 79,706,1,0,0,0,81,708,1,0,0,0,83,710,1,0,0,0,85,712,1,0,0,0,87,731, - 1,0,0,0,89,750,1,0,0,0,91,774,1,0,0,0,93,776,1,0,0,0,95,800,1,0, - 0,0,97,805,1,0,0,0,99,818,1,0,0,0,101,823,1,0,0,0,103,829,1,0,0, - 0,105,840,1,0,0,0,107,863,1,0,0,0,109,865,1,0,0,0,111,868,1,0,0, - 0,113,873,1,0,0,0,115,878,1,0,0,0,117,883,1,0,0,0,119,891,1,0,0, - 0,121,894,1,0,0,0,123,898,1,0,0,0,125,902,1,0,0,0,127,906,1,0,0, - 0,129,911,1,0,0,0,131,916,1,0,0,0,133,923,1,0,0,0,135,930,1,0,0, - 0,137,940,1,0,0,0,139,953,1,0,0,0,141,958,1,0,0,0,143,963,1,0,0, - 0,145,977,1,0,0,0,147,990,1,0,0,0,149,1008,1,0,0,0,151,1013,1,0, - 0,0,153,1021,1,0,0,0,155,1036,1,0,0,0,157,1056,1,0,0,0,159,1079, - 1,0,0,0,161,1089,1,0,0,0,163,1097,1,0,0,0,165,1109,1,0,0,0,167,1116, - 1,0,0,0,169,1124,1,0,0,0,171,1129,1,0,0,0,173,1133,1,0,0,0,175,1136, - 1,0,0,0,177,1141,1,0,0,0,179,1145,1,0,0,0,181,1150,1,0,0,0,183,1153, - 1,0,0,0,185,1158,1,0,0,0,187,1164,1,0,0,0,189,1169,1,0,0,0,191,1179, - 1,0,0,0,193,1183,1,0,0,0,195,1186,1,0,0,0,197,1190,1,0,0,0,199,1196, - 1,0,0,0,201,1202,1,0,0,0,203,1208,1,0,0,0,205,1213,1,0,0,0,207,1217, - 1,0,0,0,209,1220,1,0,0,0,211,1223,1,0,0,0,213,1225,1,0,0,0,215,1227, - 1,0,0,0,217,1229,1,0,0,0,219,1231,1,0,0,0,221,1233,1,0,0,0,223,1235, - 1,0,0,0,225,1238,1,0,0,0,227,1241,1,0,0,0,229,1244,1,0,0,0,231,1246, - 1,0,0,0,233,1248,1,0,0,0,235,1250,1,0,0,0,237,1252,1,0,0,0,239,1254, - 1,0,0,0,241,1256,1,0,0,0,243,1258,1,0,0,0,245,1260,1,0,0,0,247,1262, - 1,0,0,0,249,1264,1,0,0,0,251,1266,1,0,0,0,253,1268,1,0,0,0,255,1272, - 1,0,0,0,257,1275,1,0,0,0,259,1278,1,0,0,0,261,1289,1,0,0,0,263,1291, - 1,0,0,0,265,1294,1,0,0,0,267,1298,1,0,0,0,269,1311,1,0,0,0,271,273, - 7,0,0,0,272,271,1,0,0,0,273,274,1,0,0,0,274,272,1,0,0,0,274,275, - 1,0,0,0,275,276,1,0,0,0,276,277,6,0,0,0,277,2,1,0,0,0,278,279,5, - 35,0,0,279,280,5,35,0,0,280,281,5,35,0,0,281,4,1,0,0,0,282,283,7, - 1,0,0,283,284,7,2,0,0,284,285,7,3,0,0,285,286,7,1,0,0,286,287,7, - 4,0,0,287,288,7,5,0,0,288,289,7,6,0,0,289,290,7,7,0,0,290,291,7, - 4,0,0,291,292,5,95,0,0,292,293,7,1,0,0,293,294,7,8,0,0,294,295,7, - 6,0,0,295,296,7,9,0,0,296,297,7,6,0,0,297,298,7,5,0,0,298,299,5, - 95,0,0,299,300,7,4,0,0,300,301,7,10,0,0,301,302,7,1,0,0,302,303, - 7,4,0,0,303,6,1,0,0,0,304,305,7,1,0,0,305,306,7,2,0,0,306,307,7, - 3,0,0,307,308,7,1,0,0,308,309,7,4,0,0,309,310,7,5,0,0,310,311,7, - 6,0,0,311,312,7,7,0,0,312,313,7,4,0,0,313,314,5,95,0,0,314,315,7, - 6,0,0,315,316,7,11,0,0,316,317,7,11,0,0,317,318,7,5,0,0,318,319, - 7,10,0,0,319,320,7,11,0,0,320,321,7,6,0,0,321,322,7,4,0,0,322,323, - 7,10,0,0,323,324,5,95,0,0,324,325,7,4,0,0,325,326,7,10,0,0,326,327, - 7,1,0,0,327,328,7,4,0,0,328,8,1,0,0,0,329,330,7,1,0,0,330,331,7, - 2,0,0,331,332,7,3,0,0,332,333,7,1,0,0,333,334,7,4,0,0,334,335,7, - 5,0,0,335,336,7,6,0,0,336,337,7,7,0,0,337,338,7,4,0,0,338,339,5, - 95,0,0,339,340,7,7,0,0,340,341,7,12,0,0,341,342,7,8,0,0,342,343, - 7,9,0,0,343,344,7,2,0,0,344,345,7,13,0,0,345,346,7,10,0,0,346,10, - 1,0,0,0,347,348,7,1,0,0,348,349,7,2,0,0,349,350,7,3,0,0,350,351, - 7,1,0,0,351,352,7,4,0,0,352,353,7,5,0,0,353,354,7,6,0,0,354,355, - 7,7,0,0,355,356,7,4,0,0,356,357,5,95,0,0,357,358,7,13,0,0,358,359, - 7,10,0,0,359,360,7,14,0,0,360,361,7,10,0,0,361,362,7,12,0,0,362, - 363,7,13,0,0,363,364,7,10,0,0,364,365,7,12,0,0,365,366,7,8,0,0,366, - 367,7,15,0,0,367,12,1,0,0,0,368,370,7,16,0,0,369,371,3,107,53,0, - 370,369,1,0,0,0,371,372,1,0,0,0,372,370,1,0,0,0,372,373,1,0,0,0, - 373,380,1,0,0,0,374,376,5,46,0,0,375,377,3,107,53,0,376,375,1,0, - 0,0,377,378,1,0,0,0,378,376,1,0,0,0,378,379,1,0,0,0,379,381,1,0, - 0,0,380,374,1,0,0,0,380,381,1,0,0,0,381,14,1,0,0,0,382,383,5,35, - 0,0,383,384,5,32,0,0,384,388,1,0,0,0,385,387,8,17,0,0,386,385,1, - 0,0,0,387,390,1,0,0,0,388,386,1,0,0,0,388,389,1,0,0,0,389,392,1, - 0,0,0,390,388,1,0,0,0,391,393,5,13,0,0,392,391,1,0,0,0,392,393,1, - 0,0,0,393,394,1,0,0,0,394,395,5,10,0,0,395,16,1,0,0,0,396,397,7, - 13,0,0,397,398,7,10,0,0,398,399,7,18,0,0,399,400,7,7,0,0,400,401, - 7,12,0,0,401,402,7,10,0,0,402,18,1,0,0,0,403,404,5,60,0,0,404,405, - 5,33,0,0,405,406,7,10,0,0,406,407,7,5,0,0,407,408,7,5,0,0,408,409, - 7,19,0,0,409,410,7,5,0,0,410,411,5,62,0,0,411,20,1,0,0,0,412,413, - 5,60,0,0,413,414,5,33,0,0,414,415,7,2,0,0,415,416,7,12,0,0,416,417, - 7,13,0,0,417,418,7,10,0,0,418,419,7,18,0,0,419,420,7,7,0,0,420,421, - 7,12,0,0,421,422,7,10,0,0,422,423,7,13,0,0,423,424,5,62,0,0,424, - 22,1,0,0,0,425,426,7,19,0,0,426,427,7,16,0,0,427,428,7,10,0,0,428, - 429,7,5,0,0,429,430,7,18,0,0,430,431,7,9,0,0,431,432,7,19,0,0,432, - 433,7,20,0,0,433,24,1,0,0,0,434,435,7,5,0,0,435,436,7,19,0,0,436, - 437,7,2,0,0,437,438,7,12,0,0,438,439,7,13,0,0,439,440,7,7,0,0,440, - 441,7,12,0,0,441,442,7,11,0,0,442,26,1,0,0,0,443,444,7,10,0,0,444, - 445,7,5,0,0,445,446,7,5,0,0,446,447,7,19,0,0,447,448,7,5,0,0,448, - 28,1,0,0,0,449,450,7,1,0,0,450,451,7,6,0,0,451,452,7,4,0,0,452,453, - 7,2,0,0,453,454,7,5,0,0,454,455,7,6,0,0,455,456,7,4,0,0,456,457, - 7,10,0,0,457,30,1,0,0,0,458,459,7,1,0,0,459,460,7,7,0,0,460,461, - 7,9,0,0,461,462,7,10,0,0,462,463,7,12,0,0,463,464,7,4,0,0,464,32, - 1,0,0,0,465,466,7,4,0,0,466,467,7,7,0,0,467,468,7,10,0,0,468,469, - 5,95,0,0,469,470,7,4,0,0,470,471,7,19,0,0,471,472,5,95,0,0,472,473, - 7,10,0,0,473,474,7,16,0,0,474,475,7,10,0,0,475,476,7,12,0,0,476, - 34,1,0,0,0,477,478,7,12,0,0,478,479,7,6,0,0,479,480,7,12,0,0,480, - 36,1,0,0,0,481,482,7,6,0,0,482,483,7,8,0,0,483,484,7,8,0,0,484,485, - 7,10,0,0,485,486,7,14,0,0,486,487,7,4,0,0,487,488,5,95,0,0,488,489, - 7,12,0,0,489,490,7,2,0,0,490,491,7,9,0,0,491,492,7,9,0,0,492,493, - 7,1,0,0,493,38,1,0,0,0,494,495,7,7,0,0,495,496,7,11,0,0,496,497, - 7,12,0,0,497,498,7,19,0,0,498,499,7,5,0,0,499,500,7,10,0,0,500,501, - 5,95,0,0,501,502,7,12,0,0,502,503,7,2,0,0,503,504,7,9,0,0,504,505, - 7,9,0,0,505,506,7,1,0,0,506,40,1,0,0,0,507,508,7,12,0,0,508,509, - 7,2,0,0,509,510,7,9,0,0,510,511,7,9,0,0,511,512,5,95,0,0,512,513, - 7,21,0,0,513,514,7,6,0,0,514,515,7,12,0,0,515,516,7,13,0,0,516,517, - 7,9,0,0,517,518,7,7,0,0,518,519,7,12,0,0,519,520,7,11,0,0,520,42, - 1,0,0,0,521,522,7,1,0,0,522,523,7,14,0,0,523,524,7,6,0,0,524,525, - 7,8,0,0,525,526,7,10,0,0,526,527,7,1,0,0,527,528,5,95,0,0,528,529, - 7,19,0,0,529,530,7,12,0,0,530,531,7,9,0,0,531,532,7,15,0,0,532,44, - 1,0,0,0,533,534,7,4,0,0,534,535,7,5,0,0,535,536,7,2,0,0,536,537, - 7,12,0,0,537,538,7,8,0,0,538,539,7,6,0,0,539,540,7,4,0,0,540,541, - 7,10,0,0,541,46,1,0,0,0,542,544,7,22,0,0,543,542,1,0,0,0,543,544, - 1,0,0,0,544,545,1,0,0,0,545,546,3,261,130,0,546,48,1,0,0,0,547,549, - 7,22,0,0,548,547,1,0,0,0,548,549,1,0,0,0,549,551,1,0,0,0,550,552, - 7,23,0,0,551,550,1,0,0,0,552,553,1,0,0,0,553,551,1,0,0,0,553,554, - 1,0,0,0,554,561,1,0,0,0,555,557,5,46,0,0,556,558,7,23,0,0,557,556, - 1,0,0,0,558,559,1,0,0,0,559,557,1,0,0,0,559,560,1,0,0,0,560,562, - 1,0,0,0,561,555,1,0,0,0,561,562,1,0,0,0,562,50,1,0,0,0,563,565,7, - 22,0,0,564,563,1,0,0,0,564,565,1,0,0,0,565,567,1,0,0,0,566,568,7, - 23,0,0,567,566,1,0,0,0,568,569,1,0,0,0,569,567,1,0,0,0,569,570,1, - 0,0,0,570,578,1,0,0,0,571,575,5,46,0,0,572,574,7,23,0,0,573,572, - 1,0,0,0,574,577,1,0,0,0,575,573,1,0,0,0,575,576,1,0,0,0,576,579, - 1,0,0,0,577,575,1,0,0,0,578,571,1,0,0,0,578,579,1,0,0,0,579,589, - 1,0,0,0,580,582,7,10,0,0,581,583,7,22,0,0,582,581,1,0,0,0,582,583, - 1,0,0,0,583,585,1,0,0,0,584,586,7,23,0,0,585,584,1,0,0,0,586,587, - 1,0,0,0,587,585,1,0,0,0,587,588,1,0,0,0,588,590,1,0,0,0,589,580, - 1,0,0,0,589,590,1,0,0,0,590,602,1,0,0,0,591,593,7,22,0,0,592,591, - 1,0,0,0,592,593,1,0,0,0,593,594,1,0,0,0,594,595,7,7,0,0,595,596, - 7,12,0,0,596,602,7,18,0,0,597,598,7,1,0,0,598,599,7,12,0,0,599,600, - 7,6,0,0,600,602,7,12,0,0,601,564,1,0,0,0,601,592,1,0,0,0,601,597, - 1,0,0,0,602,52,1,0,0,0,603,604,7,4,0,0,604,605,7,5,0,0,605,606,7, - 2,0,0,606,613,7,10,0,0,607,608,7,18,0,0,608,609,7,6,0,0,609,610, - 7,9,0,0,610,611,7,1,0,0,611,613,7,10,0,0,612,603,1,0,0,0,612,607, - 1,0,0,0,613,54,1,0,0,0,614,615,7,23,0,0,615,616,7,23,0,0,616,617, - 7,23,0,0,617,618,7,23,0,0,618,56,1,0,0,0,619,620,7,23,0,0,620,621, - 7,23,0,0,621,58,1,0,0,0,622,623,5,39,0,0,623,624,3,55,27,0,624,625, - 5,45,0,0,625,626,3,57,28,0,626,627,5,45,0,0,627,628,3,57,28,0,628, - 629,7,4,0,0,629,630,3,57,28,0,630,631,5,58,0,0,631,632,3,57,28,0, - 632,633,5,58,0,0,633,640,3,57,28,0,634,636,5,46,0,0,635,637,7,23, - 0,0,636,635,1,0,0,0,637,638,1,0,0,0,638,636,1,0,0,0,638,639,1,0, - 0,0,639,641,1,0,0,0,640,634,1,0,0,0,640,641,1,0,0,0,641,642,1,0, - 0,0,642,643,7,22,0,0,643,644,3,57,28,0,644,645,5,58,0,0,645,646, - 3,57,28,0,646,647,5,39,0,0,647,60,1,0,0,0,648,649,5,39,0,0,649,650, - 3,55,27,0,650,651,5,45,0,0,651,652,3,57,28,0,652,653,5,45,0,0,653, - 654,3,57,28,0,654,655,7,4,0,0,655,656,3,57,28,0,656,657,5,58,0,0, - 657,658,3,57,28,0,658,659,5,58,0,0,659,666,3,57,28,0,660,662,5,46, - 0,0,661,663,7,23,0,0,662,661,1,0,0,0,663,664,1,0,0,0,664,662,1,0, - 0,0,664,665,1,0,0,0,665,667,1,0,0,0,666,660,1,0,0,0,666,667,1,0, - 0,0,667,668,1,0,0,0,668,669,5,39,0,0,669,62,1,0,0,0,670,671,5,39, - 0,0,671,672,3,57,28,0,672,673,5,58,0,0,673,674,3,57,28,0,674,675, - 5,58,0,0,675,682,3,57,28,0,676,678,5,46,0,0,677,679,7,23,0,0,678, - 677,1,0,0,0,679,680,1,0,0,0,680,678,1,0,0,0,680,681,1,0,0,0,681, - 683,1,0,0,0,682,676,1,0,0,0,682,683,1,0,0,0,683,684,1,0,0,0,684, - 685,5,39,0,0,685,64,1,0,0,0,686,687,5,39,0,0,687,688,3,55,27,0,688, - 689,5,45,0,0,689,690,3,57,28,0,690,691,5,45,0,0,691,692,3,57,28, - 0,692,693,5,39,0,0,693,66,1,0,0,0,694,695,7,14,0,0,695,68,1,0,0, - 0,696,697,7,4,0,0,697,70,1,0,0,0,698,699,7,15,0,0,699,72,1,0,0,0, - 700,701,7,24,0,0,701,74,1,0,0,0,702,703,7,13,0,0,703,76,1,0,0,0, - 704,705,7,21,0,0,705,78,1,0,0,0,706,707,7,1,0,0,707,80,1,0,0,0,708, - 709,7,18,0,0,709,82,1,0,0,0,710,711,3,231,115,0,711,84,1,0,0,0,712, - 713,3,229,114,0,713,86,1,0,0,0,714,715,5,39,0,0,715,716,3,67,33, - 0,716,717,3,47,23,0,717,721,3,71,35,0,718,719,3,47,23,0,719,720, - 3,73,36,0,720,722,1,0,0,0,721,718,1,0,0,0,721,722,1,0,0,0,722,723, - 1,0,0,0,723,724,5,39,0,0,724,732,1,0,0,0,725,726,5,39,0,0,726,727, - 3,67,33,0,727,728,3,47,23,0,728,729,3,73,36,0,729,730,5,39,0,0,730, - 732,1,0,0,0,731,714,1,0,0,0,731,725,1,0,0,0,732,88,1,0,0,0,733,734, - 5,39,0,0,734,735,3,67,33,0,735,736,3,47,23,0,736,740,3,75,37,0,737, - 738,3,69,34,0,738,739,3,91,45,0,739,741,1,0,0,0,740,737,1,0,0,0, - 740,741,1,0,0,0,741,742,1,0,0,0,742,743,5,39,0,0,743,751,1,0,0,0, - 744,745,5,39,0,0,745,746,3,67,33,0,746,747,3,69,34,0,747,748,3,91, - 45,0,748,749,5,39,0,0,749,751,1,0,0,0,750,733,1,0,0,0,750,744,1, - 0,0,0,751,90,1,0,0,0,752,753,3,47,23,0,753,757,3,77,38,0,754,755, - 3,47,23,0,755,756,3,73,36,0,756,758,1,0,0,0,757,754,1,0,0,0,757, - 758,1,0,0,0,758,762,1,0,0,0,759,760,3,49,24,0,760,761,3,79,39,0, - 761,763,1,0,0,0,762,759,1,0,0,0,762,763,1,0,0,0,763,775,1,0,0,0, - 764,765,3,47,23,0,765,769,3,73,36,0,766,767,3,49,24,0,767,768,3, - 79,39,0,768,770,1,0,0,0,769,766,1,0,0,0,769,770,1,0,0,0,770,775, - 1,0,0,0,771,772,3,49,24,0,772,773,3,79,39,0,773,775,1,0,0,0,774, - 752,1,0,0,0,774,764,1,0,0,0,774,771,1,0,0,0,775,92,1,0,0,0,776,777, - 5,39,0,0,777,781,3,67,33,0,778,779,3,47,23,0,779,780,3,71,35,0,780, - 782,1,0,0,0,781,778,1,0,0,0,781,782,1,0,0,0,782,786,1,0,0,0,783, - 784,3,47,23,0,784,785,3,73,36,0,785,787,1,0,0,0,786,783,1,0,0,0, - 786,787,1,0,0,0,787,791,1,0,0,0,788,789,3,47,23,0,789,790,3,75,37, - 0,790,792,1,0,0,0,791,788,1,0,0,0,791,792,1,0,0,0,792,796,1,0,0, - 0,793,794,3,69,34,0,794,795,3,91,45,0,795,797,1,0,0,0,796,793,1, - 0,0,0,796,797,1,0,0,0,797,798,1,0,0,0,798,799,5,39,0,0,799,94,1, - 0,0,0,800,801,7,12,0,0,801,802,7,2,0,0,802,803,7,9,0,0,803,804,7, - 9,0,0,804,96,1,0,0,0,805,813,5,39,0,0,806,807,5,92,0,0,807,812,9, - 0,0,0,808,809,5,39,0,0,809,812,5,39,0,0,810,812,8,25,0,0,811,806, - 1,0,0,0,811,808,1,0,0,0,811,810,1,0,0,0,812,815,1,0,0,0,813,811, - 1,0,0,0,813,814,1,0,0,0,814,816,1,0,0,0,815,813,1,0,0,0,816,817, - 5,39,0,0,817,98,1,0,0,0,818,819,7,10,0,0,819,820,7,12,0,0,820,821, - 7,2,0,0,821,822,7,24,0,0,822,100,1,0,0,0,823,824,7,8,0,0,824,825, - 7,19,0,0,825,826,7,9,0,0,826,827,1,0,0,0,827,828,3,261,130,0,828, - 102,1,0,0,0,829,830,5,47,0,0,830,831,5,47,0,0,831,835,1,0,0,0,832, - 834,8,17,0,0,833,832,1,0,0,0,834,837,1,0,0,0,835,833,1,0,0,0,835, - 836,1,0,0,0,836,838,1,0,0,0,837,835,1,0,0,0,838,839,6,51,0,0,839, - 104,1,0,0,0,840,841,5,47,0,0,841,842,5,42,0,0,842,850,1,0,0,0,843, - 851,8,26,0,0,844,846,5,42,0,0,845,844,1,0,0,0,846,847,1,0,0,0,847, - 845,1,0,0,0,847,848,1,0,0,0,848,849,1,0,0,0,849,851,8,27,0,0,850, - 843,1,0,0,0,850,845,1,0,0,0,851,855,1,0,0,0,852,854,5,42,0,0,853, - 852,1,0,0,0,854,857,1,0,0,0,855,853,1,0,0,0,855,856,1,0,0,0,856, - 858,1,0,0,0,857,855,1,0,0,0,858,859,5,42,0,0,859,860,5,47,0,0,860, - 861,1,0,0,0,861,862,6,52,0,0,862,106,1,0,0,0,863,864,7,23,0,0,864, - 108,1,0,0,0,865,866,7,7,0,0,866,867,7,18,0,0,867,110,1,0,0,0,868, - 869,7,4,0,0,869,870,7,21,0,0,870,871,7,10,0,0,871,872,7,12,0,0,872, - 112,1,0,0,0,873,874,7,10,0,0,874,875,7,9,0,0,875,876,7,1,0,0,876, - 877,7,10,0,0,877,114,1,0,0,0,878,879,7,18,0,0,879,880,7,2,0,0,880, - 881,7,12,0,0,881,882,7,8,0,0,882,116,1,0,0,0,883,884,7,3,0,0,884, - 885,7,19,0,0,885,886,7,19,0,0,886,887,7,9,0,0,887,888,7,10,0,0,888, - 889,7,6,0,0,889,890,7,12,0,0,890,118,1,0,0,0,891,892,7,7,0,0,892, - 893,5,56,0,0,893,120,1,0,0,0,894,895,7,7,0,0,895,896,5,49,0,0,896, - 897,5,54,0,0,897,122,1,0,0,0,898,899,7,7,0,0,899,900,5,51,0,0,900, - 901,5,50,0,0,901,124,1,0,0,0,902,903,7,7,0,0,903,904,5,54,0,0,904, - 905,5,52,0,0,905,126,1,0,0,0,906,907,7,18,0,0,907,908,7,14,0,0,908, - 909,5,51,0,0,909,910,5,50,0,0,910,128,1,0,0,0,911,912,7,18,0,0,912, - 913,7,14,0,0,913,914,5,54,0,0,914,915,5,52,0,0,915,130,1,0,0,0,916, - 917,7,1,0,0,917,918,7,4,0,0,918,919,7,5,0,0,919,920,7,7,0,0,920, - 921,7,12,0,0,921,922,7,11,0,0,922,132,1,0,0,0,923,924,7,3,0,0,924, - 925,7,7,0,0,925,926,7,12,0,0,926,927,7,6,0,0,927,928,7,5,0,0,928, - 929,7,15,0,0,929,134,1,0,0,0,930,931,7,4,0,0,931,932,7,7,0,0,932, - 933,7,24,0,0,933,934,7,10,0,0,934,935,7,1,0,0,935,936,7,4,0,0,936, - 937,7,6,0,0,937,938,7,24,0,0,938,939,7,14,0,0,939,136,1,0,0,0,940, - 941,7,4,0,0,941,942,7,7,0,0,942,943,7,24,0,0,943,944,7,10,0,0,944, - 945,7,1,0,0,945,946,7,4,0,0,946,947,7,6,0,0,947,948,7,24,0,0,948, - 949,7,14,0,0,949,950,5,95,0,0,950,951,7,4,0,0,951,952,7,28,0,0,952, - 138,1,0,0,0,953,954,7,13,0,0,954,955,7,6,0,0,955,956,7,4,0,0,956, - 957,7,10,0,0,957,140,1,0,0,0,958,959,7,4,0,0,959,960,7,7,0,0,960, - 961,7,24,0,0,961,962,7,10,0,0,962,142,1,0,0,0,963,964,7,7,0,0,964, - 965,7,12,0,0,965,966,7,4,0,0,966,967,7,10,0,0,967,968,7,5,0,0,968, - 969,7,16,0,0,969,970,7,6,0,0,970,971,7,9,0,0,971,972,5,95,0,0,972, - 973,7,15,0,0,973,974,7,10,0,0,974,975,7,6,0,0,975,976,7,5,0,0,976, - 144,1,0,0,0,977,978,7,7,0,0,978,979,7,12,0,0,979,980,7,4,0,0,980, - 981,7,10,0,0,981,982,7,5,0,0,982,983,7,16,0,0,983,984,7,6,0,0,984, - 985,7,9,0,0,985,986,5,95,0,0,986,987,7,13,0,0,987,988,7,6,0,0,988, - 989,7,15,0,0,989,146,1,0,0,0,990,991,7,7,0,0,991,992,7,12,0,0,992, - 993,7,4,0,0,993,994,7,10,0,0,994,995,7,5,0,0,995,996,7,16,0,0,996, - 997,7,6,0,0,997,998,7,9,0,0,998,999,5,95,0,0,999,1000,7,8,0,0,1000, - 1001,7,19,0,0,1001,1002,7,24,0,0,1002,1003,7,14,0,0,1003,1004,7, - 19,0,0,1004,1005,7,2,0,0,1005,1006,7,12,0,0,1006,1007,7,13,0,0,1007, - 148,1,0,0,0,1008,1009,7,2,0,0,1009,1010,7,2,0,0,1010,1011,7,7,0, - 0,1011,1012,7,13,0,0,1012,150,1,0,0,0,1013,1014,7,13,0,0,1014,1015, - 7,10,0,0,1015,1016,7,8,0,0,1016,1017,7,7,0,0,1017,1018,7,24,0,0, - 1018,1019,7,6,0,0,1019,1020,7,9,0,0,1020,152,1,0,0,0,1021,1022,7, - 14,0,0,1022,1023,7,5,0,0,1023,1024,7,10,0,0,1024,1025,7,8,0,0,1025, - 1026,7,7,0,0,1026,1027,7,1,0,0,1027,1028,7,7,0,0,1028,1029,7,19, - 0,0,1029,1030,7,12,0,0,1030,1031,5,95,0,0,1031,1032,7,4,0,0,1032, - 1033,7,7,0,0,1033,1034,7,24,0,0,1034,1035,7,10,0,0,1035,154,1,0, - 0,0,1036,1037,7,14,0,0,1037,1038,7,5,0,0,1038,1039,7,10,0,0,1039, - 1040,7,8,0,0,1040,1041,7,7,0,0,1041,1042,7,1,0,0,1042,1043,7,7,0, - 0,1043,1044,7,19,0,0,1044,1045,7,12,0,0,1045,1046,5,95,0,0,1046, - 1047,7,4,0,0,1047,1048,7,7,0,0,1048,1049,7,24,0,0,1049,1050,7,10, - 0,0,1050,1051,7,1,0,0,1051,1052,7,4,0,0,1052,1053,7,6,0,0,1053,1054, - 7,24,0,0,1054,1055,7,14,0,0,1055,156,1,0,0,0,1056,1057,7,14,0,0, - 1057,1058,7,5,0,0,1058,1059,7,10,0,0,1059,1060,7,8,0,0,1060,1061, - 7,7,0,0,1061,1062,7,1,0,0,1062,1063,7,7,0,0,1063,1064,7,19,0,0,1064, - 1065,7,12,0,0,1065,1066,5,95,0,0,1066,1067,7,4,0,0,1067,1068,7,7, - 0,0,1068,1069,7,24,0,0,1069,1070,7,10,0,0,1070,1071,7,1,0,0,1071, - 1072,7,4,0,0,1072,1073,7,6,0,0,1073,1074,7,24,0,0,1074,1075,7,14, - 0,0,1075,1076,5,95,0,0,1076,1077,7,4,0,0,1077,1078,7,28,0,0,1078, - 158,1,0,0,0,1079,1080,7,18,0,0,1080,1081,7,7,0,0,1081,1082,7,29, - 0,0,1082,1083,7,10,0,0,1083,1084,7,13,0,0,1084,1085,7,8,0,0,1085, - 1086,7,21,0,0,1086,1087,7,6,0,0,1087,1088,7,5,0,0,1088,160,1,0,0, - 0,1089,1090,7,16,0,0,1090,1091,7,6,0,0,1091,1092,7,5,0,0,1092,1093, - 7,8,0,0,1093,1094,7,21,0,0,1094,1095,7,6,0,0,1095,1096,7,5,0,0,1096, - 162,1,0,0,0,1097,1098,7,18,0,0,1098,1099,7,7,0,0,1099,1100,7,29, - 0,0,1100,1101,7,10,0,0,1101,1102,7,13,0,0,1102,1103,7,3,0,0,1103, - 1104,7,7,0,0,1104,1105,7,12,0,0,1105,1106,7,6,0,0,1106,1107,7,5, - 0,0,1107,1108,7,15,0,0,1108,164,1,0,0,0,1109,1110,7,1,0,0,1110,1111, - 7,4,0,0,1111,1112,7,5,0,0,1112,1113,7,2,0,0,1113,1114,7,8,0,0,1114, - 1115,7,4,0,0,1115,166,1,0,0,0,1116,1117,7,12,0,0,1117,1118,7,1,0, - 0,1118,1119,7,4,0,0,1119,1120,7,5,0,0,1120,1121,7,2,0,0,1121,1122, - 7,8,0,0,1122,1123,7,4,0,0,1123,168,1,0,0,0,1124,1125,7,9,0,0,1125, - 1126,7,7,0,0,1126,1127,7,1,0,0,1127,1128,7,4,0,0,1128,170,1,0,0, - 0,1129,1130,7,24,0,0,1130,1131,7,6,0,0,1131,1132,7,14,0,0,1132,172, - 1,0,0,0,1133,1134,7,2,0,0,1134,1135,5,33,0,0,1135,174,1,0,0,0,1136, - 1137,7,3,0,0,1137,1138,7,19,0,0,1138,1139,7,19,0,0,1139,1140,7,9, - 0,0,1140,176,1,0,0,0,1141,1142,7,1,0,0,1142,1143,7,4,0,0,1143,1144, - 7,5,0,0,1144,178,1,0,0,0,1145,1146,7,16,0,0,1146,1147,7,3,0,0,1147, - 1148,7,7,0,0,1148,1149,7,12,0,0,1149,180,1,0,0,0,1150,1151,7,4,0, - 0,1151,1152,7,1,0,0,1152,182,1,0,0,0,1153,1154,7,4,0,0,1154,1155, - 7,1,0,0,1155,1156,7,4,0,0,1156,1157,7,28,0,0,1157,184,1,0,0,0,1158, - 1159,7,7,0,0,1159,1160,7,15,0,0,1160,1161,7,10,0,0,1161,1162,7,6, - 0,0,1162,1163,7,5,0,0,1163,186,1,0,0,0,1164,1165,7,7,0,0,1165,1166, - 7,13,0,0,1166,1167,7,6,0,0,1167,1168,7,15,0,0,1168,188,1,0,0,0,1169, - 1170,7,7,0,0,1170,1171,7,8,0,0,1171,1172,7,19,0,0,1172,1173,7,24, - 0,0,1173,1174,7,14,0,0,1174,1175,7,19,0,0,1175,1176,7,2,0,0,1176, - 1177,7,12,0,0,1177,1178,7,13,0,0,1178,190,1,0,0,0,1179,1180,7,13, - 0,0,1180,1181,7,10,0,0,1181,1182,7,8,0,0,1182,192,1,0,0,0,1183,1184, - 7,14,0,0,1184,1185,7,4,0,0,1185,194,1,0,0,0,1186,1187,7,14,0,0,1187, - 1188,7,4,0,0,1188,1189,7,1,0,0,1189,196,1,0,0,0,1190,1191,7,14,0, - 0,1191,1192,7,4,0,0,1192,1193,7,1,0,0,1193,1194,7,4,0,0,1194,1195, - 7,28,0,0,1195,198,1,0,0,0,1196,1197,7,18,0,0,1197,1198,7,8,0,0,1198, - 1199,7,21,0,0,1199,1200,7,6,0,0,1200,1201,7,5,0,0,1201,200,1,0,0, - 0,1202,1203,7,16,0,0,1203,1204,7,8,0,0,1204,1205,7,21,0,0,1205,1206, - 7,6,0,0,1206,1207,7,5,0,0,1207,202,1,0,0,0,1208,1209,7,18,0,0,1209, - 1210,7,3,0,0,1210,1211,7,7,0,0,1211,1212,7,12,0,0,1212,204,1,0,0, - 0,1213,1214,7,6,0,0,1214,1215,7,12,0,0,1215,1216,7,15,0,0,1216,206, - 1,0,0,0,1217,1218,3,205,102,0,1218,1219,7,23,0,0,1219,208,1,0,0, - 0,1220,1221,5,58,0,0,1221,1222,5,58,0,0,1222,210,1,0,0,0,1223,1224, - 5,43,0,0,1224,212,1,0,0,0,1225,1226,5,45,0,0,1226,214,1,0,0,0,1227, - 1228,5,42,0,0,1228,216,1,0,0,0,1229,1230,5,47,0,0,1230,218,1,0,0, - 0,1231,1232,5,37,0,0,1232,220,1,0,0,0,1233,1234,5,61,0,0,1234,222, - 1,0,0,0,1235,1236,5,33,0,0,1236,1237,5,61,0,0,1237,224,1,0,0,0,1238, - 1239,5,62,0,0,1239,1240,5,61,0,0,1240,226,1,0,0,0,1241,1242,5,60, - 0,0,1242,1243,5,61,0,0,1243,228,1,0,0,0,1244,1245,5,62,0,0,1245, - 230,1,0,0,0,1246,1247,5,60,0,0,1247,232,1,0,0,0,1248,1249,5,33,0, - 0,1249,234,1,0,0,0,1250,1251,5,40,0,0,1251,236,1,0,0,0,1252,1253, - 5,41,0,0,1253,238,1,0,0,0,1254,1255,5,91,0,0,1255,240,1,0,0,0,1256, - 1257,5,93,0,0,1257,242,1,0,0,0,1258,1259,5,44,0,0,1259,244,1,0,0, - 0,1260,1261,5,58,0,0,1261,246,1,0,0,0,1262,1263,5,63,0,0,1263,248, - 1,0,0,0,1264,1265,5,35,0,0,1265,250,1,0,0,0,1266,1267,5,46,0,0,1267, - 252,1,0,0,0,1268,1269,7,6,0,0,1269,1270,7,12,0,0,1270,1271,7,13, - 0,0,1271,254,1,0,0,0,1272,1273,7,19,0,0,1273,1274,7,5,0,0,1274,256, - 1,0,0,0,1275,1276,5,58,0,0,1276,1277,5,61,0,0,1277,258,1,0,0,0,1278, - 1279,5,45,0,0,1279,1280,5,62,0,0,1280,260,1,0,0,0,1281,1285,2,49, - 57,0,1282,1284,3,263,131,0,1283,1282,1,0,0,0,1284,1287,1,0,0,0,1285, - 1283,1,0,0,0,1285,1286,1,0,0,0,1286,1290,1,0,0,0,1287,1285,1,0,0, - 0,1288,1290,5,48,0,0,1289,1281,1,0,0,0,1289,1288,1,0,0,0,1290,262, - 1,0,0,0,1291,1292,2,48,57,0,1292,264,1,0,0,0,1293,1295,5,45,0,0, - 1294,1293,1,0,0,0,1294,1295,1,0,0,0,1295,1296,1,0,0,0,1296,1297, - 3,261,130,0,1297,266,1,0,0,0,1298,1303,7,30,0,0,1299,1302,7,30,0, - 0,1300,1302,3,263,131,0,1301,1299,1,0,0,0,1301,1300,1,0,0,0,1302, - 1305,1,0,0,0,1303,1301,1,0,0,0,1303,1304,1,0,0,0,1304,268,1,0,0, - 0,1305,1303,1,0,0,0,1306,1308,5,13,0,0,1307,1309,5,10,0,0,1308,1307, - 1,0,0,0,1308,1309,1,0,0,0,1309,1312,1,0,0,0,1310,1312,5,10,0,0,1311, - 1306,1,0,0,0,1311,1310,1,0,0,0,1312,270,1,0,0,0,53,0,274,372,378, - 380,388,392,543,548,553,559,561,564,569,575,578,582,587,589,592, - 601,612,638,640,664,666,680,682,721,731,740,750,757,762,769,774, - 781,786,791,796,811,813,835,847,850,855,1285,1289,1294,1301,1303, - 1308,1311,1,0,1,0 + 120,249,121,251,0,253,0,255,122,257,123,259,124,1,0,31,3,0,9,10, + 13,13,32,32,2,0,83,83,115,115,2,0,85,85,117,117,2,0,66,66,98,98, + 2,0,84,84,116,116,2,0,82,82,114,114,2,0,65,65,97,97,2,0,73,73,105, + 105,2,0,67,67,99,99,2,0,76,76,108,108,2,0,69,69,101,101,2,0,71,71, + 103,103,2,0,78,78,110,110,2,0,68,68,100,100,2,0,80,80,112,112,2, + 0,89,89,121,121,2,0,86,86,118,118,2,0,10,10,13,13,2,0,70,70,102, + 102,2,0,79,79,111,111,2,0,87,87,119,119,2,0,72,72,104,104,2,0,43, + 43,45,45,1,0,48,57,2,0,77,77,109,109,2,0,39,39,92,92,1,0,42,42,2, + 0,42,42,47,47,2,0,90,90,122,122,2,0,88,88,120,120,4,0,36,36,65,90, + 95,95,97,122,1315,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,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0, + 0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0, + 0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0, + 0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0, + 0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,93,1,0,0, + 0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0, + 0,0,0,105,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115, + 1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0, + 0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1, + 0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0, + 143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0, + 0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161, + 1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0, + 0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1, + 0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0, + 189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0, + 0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207, + 1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0, + 0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1, + 0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0, + 235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0, + 0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0,0,255,1,0,0,0,0,257, + 1,0,0,0,0,259,1,0,0,0,1,262,1,0,0,0,3,268,1,0,0,0,5,272,1,0,0,0, + 7,294,1,0,0,0,9,319,1,0,0,0,11,337,1,0,0,0,13,358,1,0,0,0,15,372, + 1,0,0,0,17,386,1,0,0,0,19,393,1,0,0,0,21,402,1,0,0,0,23,415,1,0, + 0,0,25,424,1,0,0,0,27,433,1,0,0,0,29,439,1,0,0,0,31,448,1,0,0,0, + 33,455,1,0,0,0,35,467,1,0,0,0,37,471,1,0,0,0,39,484,1,0,0,0,41,497, + 1,0,0,0,43,511,1,0,0,0,45,523,1,0,0,0,47,533,1,0,0,0,49,538,1,0, + 0,0,51,591,1,0,0,0,53,602,1,0,0,0,55,604,1,0,0,0,57,609,1,0,0,0, + 59,612,1,0,0,0,61,638,1,0,0,0,63,660,1,0,0,0,65,676,1,0,0,0,67,684, + 1,0,0,0,69,686,1,0,0,0,71,688,1,0,0,0,73,690,1,0,0,0,75,692,1,0, + 0,0,77,694,1,0,0,0,79,696,1,0,0,0,81,698,1,0,0,0,83,700,1,0,0,0, + 85,702,1,0,0,0,87,721,1,0,0,0,89,740,1,0,0,0,91,764,1,0,0,0,93,766, + 1,0,0,0,95,790,1,0,0,0,97,795,1,0,0,0,99,808,1,0,0,0,101,813,1,0, + 0,0,103,819,1,0,0,0,105,830,1,0,0,0,107,853,1,0,0,0,109,855,1,0, + 0,0,111,858,1,0,0,0,113,863,1,0,0,0,115,868,1,0,0,0,117,873,1,0, + 0,0,119,881,1,0,0,0,121,884,1,0,0,0,123,888,1,0,0,0,125,892,1,0, + 0,0,127,896,1,0,0,0,129,901,1,0,0,0,131,906,1,0,0,0,133,913,1,0, + 0,0,135,920,1,0,0,0,137,925,1,0,0,0,139,939,1,0,0,0,141,952,1,0, + 0,0,143,970,1,0,0,0,145,975,1,0,0,0,147,983,1,0,0,0,149,998,1,0, + 0,0,151,1018,1,0,0,0,153,1041,1,0,0,0,155,1051,1,0,0,0,157,1059, + 1,0,0,0,159,1071,1,0,0,0,161,1078,1,0,0,0,163,1086,1,0,0,0,165,1091, + 1,0,0,0,167,1095,1,0,0,0,169,1098,1,0,0,0,171,1103,1,0,0,0,173,1107, + 1,0,0,0,175,1112,1,0,0,0,177,1118,1,0,0,0,179,1123,1,0,0,0,181,1133, + 1,0,0,0,183,1137,1,0,0,0,185,1140,1,0,0,0,187,1144,1,0,0,0,189,1150, + 1,0,0,0,191,1156,1,0,0,0,193,1162,1,0,0,0,195,1167,1,0,0,0,197,1171, + 1,0,0,0,199,1174,1,0,0,0,201,1177,1,0,0,0,203,1179,1,0,0,0,205,1181, + 1,0,0,0,207,1183,1,0,0,0,209,1185,1,0,0,0,211,1187,1,0,0,0,213,1189, + 1,0,0,0,215,1192,1,0,0,0,217,1195,1,0,0,0,219,1198,1,0,0,0,221,1200, + 1,0,0,0,223,1202,1,0,0,0,225,1204,1,0,0,0,227,1206,1,0,0,0,229,1208, + 1,0,0,0,231,1210,1,0,0,0,233,1212,1,0,0,0,235,1214,1,0,0,0,237,1216, + 1,0,0,0,239,1218,1,0,0,0,241,1220,1,0,0,0,243,1222,1,0,0,0,245,1226, + 1,0,0,0,247,1229,1,0,0,0,249,1232,1,0,0,0,251,1243,1,0,0,0,253,1245, + 1,0,0,0,255,1248,1,0,0,0,257,1252,1,0,0,0,259,1265,1,0,0,0,261,263, + 7,0,0,0,262,261,1,0,0,0,263,264,1,0,0,0,264,262,1,0,0,0,264,265, + 1,0,0,0,265,266,1,0,0,0,266,267,6,0,0,0,267,2,1,0,0,0,268,269,5, + 35,0,0,269,270,5,35,0,0,270,271,5,35,0,0,271,4,1,0,0,0,272,273,7, + 1,0,0,273,274,7,2,0,0,274,275,7,3,0,0,275,276,7,1,0,0,276,277,7, + 4,0,0,277,278,7,5,0,0,278,279,7,6,0,0,279,280,7,7,0,0,280,281,7, + 4,0,0,281,282,5,95,0,0,282,283,7,1,0,0,283,284,7,8,0,0,284,285,7, + 6,0,0,285,286,7,9,0,0,286,287,7,6,0,0,287,288,7,5,0,0,288,289,5, + 95,0,0,289,290,7,4,0,0,290,291,7,10,0,0,291,292,7,1,0,0,292,293, + 7,4,0,0,293,6,1,0,0,0,294,295,7,1,0,0,295,296,7,2,0,0,296,297,7, + 3,0,0,297,298,7,1,0,0,298,299,7,4,0,0,299,300,7,5,0,0,300,301,7, + 6,0,0,301,302,7,7,0,0,302,303,7,4,0,0,303,304,5,95,0,0,304,305,7, + 6,0,0,305,306,7,11,0,0,306,307,7,11,0,0,307,308,7,5,0,0,308,309, + 7,10,0,0,309,310,7,11,0,0,310,311,7,6,0,0,311,312,7,4,0,0,312,313, + 7,10,0,0,313,314,5,95,0,0,314,315,7,4,0,0,315,316,7,10,0,0,316,317, + 7,1,0,0,317,318,7,4,0,0,318,8,1,0,0,0,319,320,7,1,0,0,320,321,7, + 2,0,0,321,322,7,3,0,0,322,323,7,1,0,0,323,324,7,4,0,0,324,325,7, + 5,0,0,325,326,7,6,0,0,326,327,7,7,0,0,327,328,7,4,0,0,328,329,5, + 95,0,0,329,330,7,7,0,0,330,331,7,12,0,0,331,332,7,8,0,0,332,333, + 7,9,0,0,333,334,7,2,0,0,334,335,7,13,0,0,335,336,7,10,0,0,336,10, + 1,0,0,0,337,338,7,1,0,0,338,339,7,2,0,0,339,340,7,3,0,0,340,341, + 7,1,0,0,341,342,7,4,0,0,342,343,7,5,0,0,343,344,7,6,0,0,344,345, + 7,7,0,0,345,346,7,4,0,0,346,347,5,95,0,0,347,348,7,13,0,0,348,349, + 7,10,0,0,349,350,7,14,0,0,350,351,7,10,0,0,351,352,7,12,0,0,352, + 353,7,13,0,0,353,354,7,10,0,0,354,355,7,12,0,0,355,356,7,8,0,0,356, + 357,7,15,0,0,357,12,1,0,0,0,358,360,7,16,0,0,359,361,3,107,53,0, + 360,359,1,0,0,0,361,362,1,0,0,0,362,360,1,0,0,0,362,363,1,0,0,0, + 363,370,1,0,0,0,364,366,5,46,0,0,365,367,3,107,53,0,366,365,1,0, + 0,0,367,368,1,0,0,0,368,366,1,0,0,0,368,369,1,0,0,0,369,371,1,0, + 0,0,370,364,1,0,0,0,370,371,1,0,0,0,371,14,1,0,0,0,372,373,5,35, + 0,0,373,374,5,32,0,0,374,378,1,0,0,0,375,377,8,17,0,0,376,375,1, + 0,0,0,377,380,1,0,0,0,378,376,1,0,0,0,378,379,1,0,0,0,379,382,1, + 0,0,0,380,378,1,0,0,0,381,383,5,13,0,0,382,381,1,0,0,0,382,383,1, + 0,0,0,383,384,1,0,0,0,384,385,5,10,0,0,385,16,1,0,0,0,386,387,7, + 13,0,0,387,388,7,10,0,0,388,389,7,18,0,0,389,390,7,7,0,0,390,391, + 7,12,0,0,391,392,7,10,0,0,392,18,1,0,0,0,393,394,5,60,0,0,394,395, + 5,33,0,0,395,396,7,10,0,0,396,397,7,5,0,0,397,398,7,5,0,0,398,399, + 7,19,0,0,399,400,7,5,0,0,400,401,5,62,0,0,401,20,1,0,0,0,402,403, + 5,60,0,0,403,404,5,33,0,0,404,405,7,2,0,0,405,406,7,12,0,0,406,407, + 7,13,0,0,407,408,7,10,0,0,408,409,7,18,0,0,409,410,7,7,0,0,410,411, + 7,12,0,0,411,412,7,10,0,0,412,413,7,13,0,0,413,414,5,62,0,0,414, + 22,1,0,0,0,415,416,7,19,0,0,416,417,7,16,0,0,417,418,7,10,0,0,418, + 419,7,5,0,0,419,420,7,18,0,0,420,421,7,9,0,0,421,422,7,19,0,0,422, + 423,7,20,0,0,423,24,1,0,0,0,424,425,7,5,0,0,425,426,7,19,0,0,426, + 427,7,2,0,0,427,428,7,12,0,0,428,429,7,13,0,0,429,430,7,7,0,0,430, + 431,7,12,0,0,431,432,7,11,0,0,432,26,1,0,0,0,433,434,7,10,0,0,434, + 435,7,5,0,0,435,436,7,5,0,0,436,437,7,19,0,0,437,438,7,5,0,0,438, + 28,1,0,0,0,439,440,7,1,0,0,440,441,7,6,0,0,441,442,7,4,0,0,442,443, + 7,2,0,0,443,444,7,5,0,0,444,445,7,6,0,0,445,446,7,4,0,0,446,447, + 7,10,0,0,447,30,1,0,0,0,448,449,7,1,0,0,449,450,7,7,0,0,450,451, + 7,9,0,0,451,452,7,10,0,0,452,453,7,12,0,0,453,454,7,4,0,0,454,32, + 1,0,0,0,455,456,7,4,0,0,456,457,7,7,0,0,457,458,7,10,0,0,458,459, + 5,95,0,0,459,460,7,4,0,0,460,461,7,19,0,0,461,462,5,95,0,0,462,463, + 7,10,0,0,463,464,7,16,0,0,464,465,7,10,0,0,465,466,7,12,0,0,466, + 34,1,0,0,0,467,468,7,12,0,0,468,469,7,6,0,0,469,470,7,12,0,0,470, + 36,1,0,0,0,471,472,7,6,0,0,472,473,7,8,0,0,473,474,7,8,0,0,474,475, + 7,10,0,0,475,476,7,14,0,0,476,477,7,4,0,0,477,478,5,95,0,0,478,479, + 7,12,0,0,479,480,7,2,0,0,480,481,7,9,0,0,481,482,7,9,0,0,482,483, + 7,1,0,0,483,38,1,0,0,0,484,485,7,7,0,0,485,486,7,11,0,0,486,487, + 7,12,0,0,487,488,7,19,0,0,488,489,7,5,0,0,489,490,7,10,0,0,490,491, + 5,95,0,0,491,492,7,12,0,0,492,493,7,2,0,0,493,494,7,9,0,0,494,495, + 7,9,0,0,495,496,7,1,0,0,496,40,1,0,0,0,497,498,7,12,0,0,498,499, + 7,2,0,0,499,500,7,9,0,0,500,501,7,9,0,0,501,502,5,95,0,0,502,503, + 7,21,0,0,503,504,7,6,0,0,504,505,7,12,0,0,505,506,7,13,0,0,506,507, + 7,9,0,0,507,508,7,7,0,0,508,509,7,12,0,0,509,510,7,11,0,0,510,42, + 1,0,0,0,511,512,7,1,0,0,512,513,7,14,0,0,513,514,7,6,0,0,514,515, + 7,8,0,0,515,516,7,10,0,0,516,517,7,1,0,0,517,518,5,95,0,0,518,519, + 7,19,0,0,519,520,7,12,0,0,520,521,7,9,0,0,521,522,7,15,0,0,522,44, + 1,0,0,0,523,524,7,4,0,0,524,525,7,5,0,0,525,526,7,2,0,0,526,527, + 7,12,0,0,527,528,7,8,0,0,528,529,7,6,0,0,529,530,7,4,0,0,530,531, + 7,10,0,0,531,46,1,0,0,0,532,534,7,22,0,0,533,532,1,0,0,0,533,534, + 1,0,0,0,534,535,1,0,0,0,535,536,3,251,125,0,536,48,1,0,0,0,537,539, + 7,22,0,0,538,537,1,0,0,0,538,539,1,0,0,0,539,541,1,0,0,0,540,542, + 7,23,0,0,541,540,1,0,0,0,542,543,1,0,0,0,543,541,1,0,0,0,543,544, + 1,0,0,0,544,551,1,0,0,0,545,547,5,46,0,0,546,548,7,23,0,0,547,546, + 1,0,0,0,548,549,1,0,0,0,549,547,1,0,0,0,549,550,1,0,0,0,550,552, + 1,0,0,0,551,545,1,0,0,0,551,552,1,0,0,0,552,50,1,0,0,0,553,555,7, + 22,0,0,554,553,1,0,0,0,554,555,1,0,0,0,555,557,1,0,0,0,556,558,7, + 23,0,0,557,556,1,0,0,0,558,559,1,0,0,0,559,557,1,0,0,0,559,560,1, + 0,0,0,560,568,1,0,0,0,561,565,5,46,0,0,562,564,7,23,0,0,563,562, + 1,0,0,0,564,567,1,0,0,0,565,563,1,0,0,0,565,566,1,0,0,0,566,569, + 1,0,0,0,567,565,1,0,0,0,568,561,1,0,0,0,568,569,1,0,0,0,569,579, + 1,0,0,0,570,572,7,10,0,0,571,573,7,22,0,0,572,571,1,0,0,0,572,573, + 1,0,0,0,573,575,1,0,0,0,574,576,7,23,0,0,575,574,1,0,0,0,576,577, + 1,0,0,0,577,575,1,0,0,0,577,578,1,0,0,0,578,580,1,0,0,0,579,570, + 1,0,0,0,579,580,1,0,0,0,580,592,1,0,0,0,581,583,7,22,0,0,582,581, + 1,0,0,0,582,583,1,0,0,0,583,584,1,0,0,0,584,585,7,7,0,0,585,586, + 7,12,0,0,586,592,7,18,0,0,587,588,7,1,0,0,588,589,7,12,0,0,589,590, + 7,6,0,0,590,592,7,12,0,0,591,554,1,0,0,0,591,582,1,0,0,0,591,587, + 1,0,0,0,592,52,1,0,0,0,593,594,7,4,0,0,594,595,7,5,0,0,595,596,7, + 2,0,0,596,603,7,10,0,0,597,598,7,18,0,0,598,599,7,6,0,0,599,600, + 7,9,0,0,600,601,7,1,0,0,601,603,7,10,0,0,602,593,1,0,0,0,602,597, + 1,0,0,0,603,54,1,0,0,0,604,605,7,23,0,0,605,606,7,23,0,0,606,607, + 7,23,0,0,607,608,7,23,0,0,608,56,1,0,0,0,609,610,7,23,0,0,610,611, + 7,23,0,0,611,58,1,0,0,0,612,613,5,39,0,0,613,614,3,55,27,0,614,615, + 5,45,0,0,615,616,3,57,28,0,616,617,5,45,0,0,617,618,3,57,28,0,618, + 619,7,4,0,0,619,620,3,57,28,0,620,621,5,58,0,0,621,622,3,57,28,0, + 622,623,5,58,0,0,623,630,3,57,28,0,624,626,5,46,0,0,625,627,7,23, + 0,0,626,625,1,0,0,0,627,628,1,0,0,0,628,626,1,0,0,0,628,629,1,0, + 0,0,629,631,1,0,0,0,630,624,1,0,0,0,630,631,1,0,0,0,631,632,1,0, + 0,0,632,633,7,22,0,0,633,634,3,57,28,0,634,635,5,58,0,0,635,636, + 3,57,28,0,636,637,5,39,0,0,637,60,1,0,0,0,638,639,5,39,0,0,639,640, + 3,55,27,0,640,641,5,45,0,0,641,642,3,57,28,0,642,643,5,45,0,0,643, + 644,3,57,28,0,644,645,7,4,0,0,645,646,3,57,28,0,646,647,5,58,0,0, + 647,648,3,57,28,0,648,649,5,58,0,0,649,656,3,57,28,0,650,652,5,46, + 0,0,651,653,7,23,0,0,652,651,1,0,0,0,653,654,1,0,0,0,654,652,1,0, + 0,0,654,655,1,0,0,0,655,657,1,0,0,0,656,650,1,0,0,0,656,657,1,0, + 0,0,657,658,1,0,0,0,658,659,5,39,0,0,659,62,1,0,0,0,660,661,5,39, + 0,0,661,662,3,57,28,0,662,663,5,58,0,0,663,664,3,57,28,0,664,665, + 5,58,0,0,665,672,3,57,28,0,666,668,5,46,0,0,667,669,7,23,0,0,668, + 667,1,0,0,0,669,670,1,0,0,0,670,668,1,0,0,0,670,671,1,0,0,0,671, + 673,1,0,0,0,672,666,1,0,0,0,672,673,1,0,0,0,673,674,1,0,0,0,674, + 675,5,39,0,0,675,64,1,0,0,0,676,677,5,39,0,0,677,678,3,55,27,0,678, + 679,5,45,0,0,679,680,3,57,28,0,680,681,5,45,0,0,681,682,3,57,28, + 0,682,683,5,39,0,0,683,66,1,0,0,0,684,685,7,14,0,0,685,68,1,0,0, + 0,686,687,7,4,0,0,687,70,1,0,0,0,688,689,7,15,0,0,689,72,1,0,0,0, + 690,691,7,24,0,0,691,74,1,0,0,0,692,693,7,13,0,0,693,76,1,0,0,0, + 694,695,7,21,0,0,695,78,1,0,0,0,696,697,7,1,0,0,697,80,1,0,0,0,698, + 699,7,18,0,0,699,82,1,0,0,0,700,701,3,221,110,0,701,84,1,0,0,0,702, + 703,3,219,109,0,703,86,1,0,0,0,704,705,5,39,0,0,705,706,3,67,33, + 0,706,707,3,47,23,0,707,711,3,71,35,0,708,709,3,47,23,0,709,710, + 3,73,36,0,710,712,1,0,0,0,711,708,1,0,0,0,711,712,1,0,0,0,712,713, + 1,0,0,0,713,714,5,39,0,0,714,722,1,0,0,0,715,716,5,39,0,0,716,717, + 3,67,33,0,717,718,3,47,23,0,718,719,3,73,36,0,719,720,5,39,0,0,720, + 722,1,0,0,0,721,704,1,0,0,0,721,715,1,0,0,0,722,88,1,0,0,0,723,724, + 5,39,0,0,724,725,3,67,33,0,725,726,3,47,23,0,726,730,3,75,37,0,727, + 728,3,69,34,0,728,729,3,91,45,0,729,731,1,0,0,0,730,727,1,0,0,0, + 730,731,1,0,0,0,731,732,1,0,0,0,732,733,5,39,0,0,733,741,1,0,0,0, + 734,735,5,39,0,0,735,736,3,67,33,0,736,737,3,69,34,0,737,738,3,91, + 45,0,738,739,5,39,0,0,739,741,1,0,0,0,740,723,1,0,0,0,740,734,1, + 0,0,0,741,90,1,0,0,0,742,743,3,47,23,0,743,747,3,77,38,0,744,745, + 3,47,23,0,745,746,3,73,36,0,746,748,1,0,0,0,747,744,1,0,0,0,747, + 748,1,0,0,0,748,752,1,0,0,0,749,750,3,49,24,0,750,751,3,79,39,0, + 751,753,1,0,0,0,752,749,1,0,0,0,752,753,1,0,0,0,753,765,1,0,0,0, + 754,755,3,47,23,0,755,759,3,73,36,0,756,757,3,49,24,0,757,758,3, + 79,39,0,758,760,1,0,0,0,759,756,1,0,0,0,759,760,1,0,0,0,760,765, + 1,0,0,0,761,762,3,49,24,0,762,763,3,79,39,0,763,765,1,0,0,0,764, + 742,1,0,0,0,764,754,1,0,0,0,764,761,1,0,0,0,765,92,1,0,0,0,766,767, + 5,39,0,0,767,771,3,67,33,0,768,769,3,47,23,0,769,770,3,71,35,0,770, + 772,1,0,0,0,771,768,1,0,0,0,771,772,1,0,0,0,772,776,1,0,0,0,773, + 774,3,47,23,0,774,775,3,73,36,0,775,777,1,0,0,0,776,773,1,0,0,0, + 776,777,1,0,0,0,777,781,1,0,0,0,778,779,3,47,23,0,779,780,3,75,37, + 0,780,782,1,0,0,0,781,778,1,0,0,0,781,782,1,0,0,0,782,786,1,0,0, + 0,783,784,3,69,34,0,784,785,3,91,45,0,785,787,1,0,0,0,786,783,1, + 0,0,0,786,787,1,0,0,0,787,788,1,0,0,0,788,789,5,39,0,0,789,94,1, + 0,0,0,790,791,7,12,0,0,791,792,7,2,0,0,792,793,7,9,0,0,793,794,7, + 9,0,0,794,96,1,0,0,0,795,803,5,39,0,0,796,797,5,92,0,0,797,802,9, + 0,0,0,798,799,5,39,0,0,799,802,5,39,0,0,800,802,8,25,0,0,801,796, + 1,0,0,0,801,798,1,0,0,0,801,800,1,0,0,0,802,805,1,0,0,0,803,801, + 1,0,0,0,803,804,1,0,0,0,804,806,1,0,0,0,805,803,1,0,0,0,806,807, + 5,39,0,0,807,98,1,0,0,0,808,809,7,10,0,0,809,810,7,12,0,0,810,811, + 7,2,0,0,811,812,7,24,0,0,812,100,1,0,0,0,813,814,7,8,0,0,814,815, + 7,19,0,0,815,816,7,9,0,0,816,817,1,0,0,0,817,818,3,251,125,0,818, + 102,1,0,0,0,819,820,5,47,0,0,820,821,5,47,0,0,821,825,1,0,0,0,822, + 824,8,17,0,0,823,822,1,0,0,0,824,827,1,0,0,0,825,823,1,0,0,0,825, + 826,1,0,0,0,826,828,1,0,0,0,827,825,1,0,0,0,828,829,6,51,0,0,829, + 104,1,0,0,0,830,831,5,47,0,0,831,832,5,42,0,0,832,840,1,0,0,0,833, + 841,8,26,0,0,834,836,5,42,0,0,835,834,1,0,0,0,836,837,1,0,0,0,837, + 835,1,0,0,0,837,838,1,0,0,0,838,839,1,0,0,0,839,841,8,27,0,0,840, + 833,1,0,0,0,840,835,1,0,0,0,841,845,1,0,0,0,842,844,5,42,0,0,843, + 842,1,0,0,0,844,847,1,0,0,0,845,843,1,0,0,0,845,846,1,0,0,0,846, + 848,1,0,0,0,847,845,1,0,0,0,848,849,5,42,0,0,849,850,5,47,0,0,850, + 851,1,0,0,0,851,852,6,52,0,0,852,106,1,0,0,0,853,854,7,23,0,0,854, + 108,1,0,0,0,855,856,7,7,0,0,856,857,7,18,0,0,857,110,1,0,0,0,858, + 859,7,4,0,0,859,860,7,21,0,0,860,861,7,10,0,0,861,862,7,12,0,0,862, + 112,1,0,0,0,863,864,7,10,0,0,864,865,7,9,0,0,865,866,7,1,0,0,866, + 867,7,10,0,0,867,114,1,0,0,0,868,869,7,18,0,0,869,870,7,2,0,0,870, + 871,7,12,0,0,871,872,7,8,0,0,872,116,1,0,0,0,873,874,7,3,0,0,874, + 875,7,19,0,0,875,876,7,19,0,0,876,877,7,9,0,0,877,878,7,10,0,0,878, + 879,7,6,0,0,879,880,7,12,0,0,880,118,1,0,0,0,881,882,7,7,0,0,882, + 883,5,56,0,0,883,120,1,0,0,0,884,885,7,7,0,0,885,886,5,49,0,0,886, + 887,5,54,0,0,887,122,1,0,0,0,888,889,7,7,0,0,889,890,5,51,0,0,890, + 891,5,50,0,0,891,124,1,0,0,0,892,893,7,7,0,0,893,894,5,54,0,0,894, + 895,5,52,0,0,895,126,1,0,0,0,896,897,7,18,0,0,897,898,7,14,0,0,898, + 899,5,51,0,0,899,900,5,50,0,0,900,128,1,0,0,0,901,902,7,18,0,0,902, + 903,7,14,0,0,903,904,5,54,0,0,904,905,5,52,0,0,905,130,1,0,0,0,906, + 907,7,1,0,0,907,908,7,4,0,0,908,909,7,5,0,0,909,910,7,7,0,0,910, + 911,7,12,0,0,911,912,7,11,0,0,912,132,1,0,0,0,913,914,7,3,0,0,914, + 915,7,7,0,0,915,916,7,12,0,0,916,917,7,6,0,0,917,918,7,5,0,0,918, + 919,7,15,0,0,919,134,1,0,0,0,920,921,7,13,0,0,921,922,7,6,0,0,922, + 923,7,4,0,0,923,924,7,10,0,0,924,136,1,0,0,0,925,926,7,7,0,0,926, + 927,7,12,0,0,927,928,7,4,0,0,928,929,7,10,0,0,929,930,7,5,0,0,930, + 931,7,16,0,0,931,932,7,6,0,0,932,933,7,9,0,0,933,934,5,95,0,0,934, + 935,7,15,0,0,935,936,7,10,0,0,936,937,7,6,0,0,937,938,7,5,0,0,938, + 138,1,0,0,0,939,940,7,7,0,0,940,941,7,12,0,0,941,942,7,4,0,0,942, + 943,7,10,0,0,943,944,7,5,0,0,944,945,7,16,0,0,945,946,7,6,0,0,946, + 947,7,9,0,0,947,948,5,95,0,0,948,949,7,13,0,0,949,950,7,6,0,0,950, + 951,7,15,0,0,951,140,1,0,0,0,952,953,7,7,0,0,953,954,7,12,0,0,954, + 955,7,4,0,0,955,956,7,10,0,0,956,957,7,5,0,0,957,958,7,16,0,0,958, + 959,7,6,0,0,959,960,7,9,0,0,960,961,5,95,0,0,961,962,7,8,0,0,962, + 963,7,19,0,0,963,964,7,24,0,0,964,965,7,14,0,0,965,966,7,19,0,0, + 966,967,7,2,0,0,967,968,7,12,0,0,968,969,7,13,0,0,969,142,1,0,0, + 0,970,971,7,2,0,0,971,972,7,2,0,0,972,973,7,7,0,0,973,974,7,13,0, + 0,974,144,1,0,0,0,975,976,7,13,0,0,976,977,7,10,0,0,977,978,7,8, + 0,0,978,979,7,7,0,0,979,980,7,24,0,0,980,981,7,6,0,0,981,982,7,9, + 0,0,982,146,1,0,0,0,983,984,7,14,0,0,984,985,7,5,0,0,985,986,7,10, + 0,0,986,987,7,8,0,0,987,988,7,7,0,0,988,989,7,1,0,0,989,990,7,7, + 0,0,990,991,7,19,0,0,991,992,7,12,0,0,992,993,5,95,0,0,993,994,7, + 4,0,0,994,995,7,7,0,0,995,996,7,24,0,0,996,997,7,10,0,0,997,148, + 1,0,0,0,998,999,7,14,0,0,999,1000,7,5,0,0,1000,1001,7,10,0,0,1001, + 1002,7,8,0,0,1002,1003,7,7,0,0,1003,1004,7,1,0,0,1004,1005,7,7,0, + 0,1005,1006,7,19,0,0,1006,1007,7,12,0,0,1007,1008,5,95,0,0,1008, + 1009,7,4,0,0,1009,1010,7,7,0,0,1010,1011,7,24,0,0,1011,1012,7,10, + 0,0,1012,1013,7,1,0,0,1013,1014,7,4,0,0,1014,1015,7,6,0,0,1015,1016, + 7,24,0,0,1016,1017,7,14,0,0,1017,150,1,0,0,0,1018,1019,7,14,0,0, + 1019,1020,7,5,0,0,1020,1021,7,10,0,0,1021,1022,7,8,0,0,1022,1023, + 7,7,0,0,1023,1024,7,1,0,0,1024,1025,7,7,0,0,1025,1026,7,19,0,0,1026, + 1027,7,12,0,0,1027,1028,5,95,0,0,1028,1029,7,4,0,0,1029,1030,7,7, + 0,0,1030,1031,7,24,0,0,1031,1032,7,10,0,0,1032,1033,7,1,0,0,1033, + 1034,7,4,0,0,1034,1035,7,6,0,0,1035,1036,7,24,0,0,1036,1037,7,14, + 0,0,1037,1038,5,95,0,0,1038,1039,7,4,0,0,1039,1040,7,28,0,0,1040, + 152,1,0,0,0,1041,1042,7,18,0,0,1042,1043,7,7,0,0,1043,1044,7,29, + 0,0,1044,1045,7,10,0,0,1045,1046,7,13,0,0,1046,1047,7,8,0,0,1047, + 1048,7,21,0,0,1048,1049,7,6,0,0,1049,1050,7,5,0,0,1050,154,1,0,0, + 0,1051,1052,7,16,0,0,1052,1053,7,6,0,0,1053,1054,7,5,0,0,1054,1055, + 7,8,0,0,1055,1056,7,21,0,0,1056,1057,7,6,0,0,1057,1058,7,5,0,0,1058, + 156,1,0,0,0,1059,1060,7,18,0,0,1060,1061,7,7,0,0,1061,1062,7,29, + 0,0,1062,1063,7,10,0,0,1063,1064,7,13,0,0,1064,1065,7,3,0,0,1065, + 1066,7,7,0,0,1066,1067,7,12,0,0,1067,1068,7,6,0,0,1068,1069,7,5, + 0,0,1069,1070,7,15,0,0,1070,158,1,0,0,0,1071,1072,7,1,0,0,1072,1073, + 7,4,0,0,1073,1074,7,5,0,0,1074,1075,7,2,0,0,1075,1076,7,8,0,0,1076, + 1077,7,4,0,0,1077,160,1,0,0,0,1078,1079,7,12,0,0,1079,1080,7,1,0, + 0,1080,1081,7,4,0,0,1081,1082,7,5,0,0,1082,1083,7,2,0,0,1083,1084, + 7,8,0,0,1084,1085,7,4,0,0,1085,162,1,0,0,0,1086,1087,7,9,0,0,1087, + 1088,7,7,0,0,1088,1089,7,1,0,0,1089,1090,7,4,0,0,1090,164,1,0,0, + 0,1091,1092,7,24,0,0,1092,1093,7,6,0,0,1093,1094,7,14,0,0,1094,166, + 1,0,0,0,1095,1096,7,2,0,0,1096,1097,5,33,0,0,1097,168,1,0,0,0,1098, + 1099,7,3,0,0,1099,1100,7,19,0,0,1100,1101,7,19,0,0,1101,1102,7,9, + 0,0,1102,170,1,0,0,0,1103,1104,7,1,0,0,1104,1105,7,4,0,0,1105,1106, + 7,5,0,0,1106,172,1,0,0,0,1107,1108,7,16,0,0,1108,1109,7,3,0,0,1109, + 1110,7,7,0,0,1110,1111,7,12,0,0,1111,174,1,0,0,0,1112,1113,7,7,0, + 0,1113,1114,7,15,0,0,1114,1115,7,10,0,0,1115,1116,7,6,0,0,1116,1117, + 7,5,0,0,1117,176,1,0,0,0,1118,1119,7,7,0,0,1119,1120,7,13,0,0,1120, + 1121,7,6,0,0,1121,1122,7,15,0,0,1122,178,1,0,0,0,1123,1124,7,7,0, + 0,1124,1125,7,8,0,0,1125,1126,7,19,0,0,1126,1127,7,24,0,0,1127,1128, + 7,14,0,0,1128,1129,7,19,0,0,1129,1130,7,2,0,0,1130,1131,7,12,0,0, + 1131,1132,7,13,0,0,1132,180,1,0,0,0,1133,1134,7,13,0,0,1134,1135, + 7,10,0,0,1135,1136,7,8,0,0,1136,182,1,0,0,0,1137,1138,7,14,0,0,1138, + 1139,7,4,0,0,1139,184,1,0,0,0,1140,1141,7,14,0,0,1141,1142,7,4,0, + 0,1142,1143,7,1,0,0,1143,186,1,0,0,0,1144,1145,7,14,0,0,1145,1146, + 7,4,0,0,1146,1147,7,1,0,0,1147,1148,7,4,0,0,1148,1149,7,28,0,0,1149, + 188,1,0,0,0,1150,1151,7,18,0,0,1151,1152,7,8,0,0,1152,1153,7,21, + 0,0,1153,1154,7,6,0,0,1154,1155,7,5,0,0,1155,190,1,0,0,0,1156,1157, + 7,16,0,0,1157,1158,7,8,0,0,1158,1159,7,21,0,0,1159,1160,7,6,0,0, + 1160,1161,7,5,0,0,1161,192,1,0,0,0,1162,1163,7,18,0,0,1163,1164, + 7,3,0,0,1164,1165,7,7,0,0,1165,1166,7,12,0,0,1166,194,1,0,0,0,1167, + 1168,7,6,0,0,1168,1169,7,12,0,0,1169,1170,7,15,0,0,1170,196,1,0, + 0,0,1171,1172,3,195,97,0,1172,1173,7,23,0,0,1173,198,1,0,0,0,1174, + 1175,5,58,0,0,1175,1176,5,58,0,0,1176,200,1,0,0,0,1177,1178,5,43, + 0,0,1178,202,1,0,0,0,1179,1180,5,45,0,0,1180,204,1,0,0,0,1181,1182, + 5,42,0,0,1182,206,1,0,0,0,1183,1184,5,47,0,0,1184,208,1,0,0,0,1185, + 1186,5,37,0,0,1186,210,1,0,0,0,1187,1188,5,61,0,0,1188,212,1,0,0, + 0,1189,1190,5,33,0,0,1190,1191,5,61,0,0,1191,214,1,0,0,0,1192,1193, + 5,62,0,0,1193,1194,5,61,0,0,1194,216,1,0,0,0,1195,1196,5,60,0,0, + 1196,1197,5,61,0,0,1197,218,1,0,0,0,1198,1199,5,62,0,0,1199,220, + 1,0,0,0,1200,1201,5,60,0,0,1201,222,1,0,0,0,1202,1203,5,33,0,0,1203, + 224,1,0,0,0,1204,1205,5,40,0,0,1205,226,1,0,0,0,1206,1207,5,41,0, + 0,1207,228,1,0,0,0,1208,1209,5,91,0,0,1209,230,1,0,0,0,1210,1211, + 5,93,0,0,1211,232,1,0,0,0,1212,1213,5,44,0,0,1213,234,1,0,0,0,1214, + 1215,5,58,0,0,1215,236,1,0,0,0,1216,1217,5,63,0,0,1217,238,1,0,0, + 0,1218,1219,5,35,0,0,1219,240,1,0,0,0,1220,1221,5,46,0,0,1221,242, + 1,0,0,0,1222,1223,7,6,0,0,1223,1224,7,12,0,0,1224,1225,7,13,0,0, + 1225,244,1,0,0,0,1226,1227,7,19,0,0,1227,1228,7,5,0,0,1228,246,1, + 0,0,0,1229,1230,5,58,0,0,1230,1231,5,61,0,0,1231,248,1,0,0,0,1232, + 1233,5,45,0,0,1233,1234,5,62,0,0,1234,250,1,0,0,0,1235,1239,2,49, + 57,0,1236,1238,3,253,126,0,1237,1236,1,0,0,0,1238,1241,1,0,0,0,1239, + 1237,1,0,0,0,1239,1240,1,0,0,0,1240,1244,1,0,0,0,1241,1239,1,0,0, + 0,1242,1244,5,48,0,0,1243,1235,1,0,0,0,1243,1242,1,0,0,0,1244,252, + 1,0,0,0,1245,1246,2,48,57,0,1246,254,1,0,0,0,1247,1249,5,45,0,0, + 1248,1247,1,0,0,0,1248,1249,1,0,0,0,1249,1250,1,0,0,0,1250,1251, + 3,251,125,0,1251,256,1,0,0,0,1252,1257,7,30,0,0,1253,1256,7,30,0, + 0,1254,1256,3,253,126,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,258,1,0,0, + 0,1259,1257,1,0,0,0,1260,1262,5,13,0,0,1261,1263,5,10,0,0,1262,1261, + 1,0,0,0,1262,1263,1,0,0,0,1263,1266,1,0,0,0,1264,1266,5,10,0,0,1265, + 1260,1,0,0,0,1265,1264,1,0,0,0,1266,260,1,0,0,0,53,0,264,362,368, + 370,378,382,533,538,543,549,551,554,559,565,568,572,577,579,582, + 591,602,628,630,654,656,670,672,711,721,730,740,747,752,759,764, + 771,776,781,786,801,803,825,837,840,845,1239,1243,1248,1255,1257, + 1262,1265,1,0,1,0 ] class FuncTestCaseLexer(Lexer): @@ -560,72 +543,67 @@ class FuncTestCaseLexer(Lexer): FP64 = 61 String = 62 Binary = 63 - Timestamp = 64 - Timestamp_TZ = 65 - Date = 66 - Time = 67 - Interval_Year = 68 - Interval_Day = 69 - Interval_Compound = 70 - UUID = 71 - Decimal = 72 - Precision_Time = 73 - Precision_Timestamp = 74 - Precision_Timestamp_TZ = 75 - FixedChar = 76 - VarChar = 77 - FixedBinary = 78 - Struct = 79 - NStruct = 80 - List = 81 - Map = 82 - UserDefined = 83 - Bool = 84 - Str = 85 - VBin = 86 - Ts = 87 - TsTZ = 88 - IYear = 89 - IDay = 90 - ICompound = 91 - Dec = 92 - PT = 93 - PTs = 94 - PTsTZ = 95 - FChar = 96 - VChar = 97 - FBin = 98 - Any = 99 - AnyVar = 100 - DoubleColon = 101 - Plus = 102 - Minus = 103 - Asterisk = 104 - ForwardSlash = 105 - Percent = 106 - Eq = 107 - Ne = 108 - Gte = 109 - Lte = 110 - Gt = 111 - Lt = 112 - Bang = 113 - OParen = 114 - CParen = 115 - OBracket = 116 - CBracket = 117 - Comma = 118 - Colon = 119 - QMark = 120 - Hash = 121 - Dot = 122 - And = 123 - Or = 124 - Assign = 125 - Arrow = 126 - Number = 127 - Identifier = 128 - Newline = 129 + Date = 64 + Interval_Year = 65 + Interval_Day = 66 + Interval_Compound = 67 + UUID = 68 + Decimal = 69 + Precision_Time = 70 + Precision_Timestamp = 71 + Precision_Timestamp_TZ = 72 + FixedChar = 73 + VarChar = 74 + FixedBinary = 75 + Struct = 76 + NStruct = 77 + List = 78 + Map = 79 + UserDefined = 80 + Bool = 81 + Str = 82 + VBin = 83 + IYear = 84 + IDay = 85 + ICompound = 86 + Dec = 87 + PT = 88 + PTs = 89 + PTsTZ = 90 + FChar = 91 + VChar = 92 + FBin = 93 + Any = 94 + AnyVar = 95 + DoubleColon = 96 + Plus = 97 + Minus = 98 + Asterisk = 99 + ForwardSlash = 100 + Percent = 101 + Eq = 102 + Ne = 103 + Gte = 104 + Lte = 105 + Gt = 106 + Lt = 107 + Bang = 108 + OParen = 109 + CParen = 110 + OBracket = 111 + CBracket = 112 + Comma = 113 + Colon = 114 + QMark = 115 + Hash = 116 + Dot = 117 + And = 118 + Or = 119 + Assign = 120 + Arrow = 121 + Number = 122 + Identifier = 123 + Newline = 124 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -640,17 +618,16 @@ class FuncTestCaseLexer(Lexer): "'TRUNCATE'", "'P'", "'T'", "'Y'", "'M'", "'D'", "'H'", "'S'", "'F'", "'null'", "'enum'", "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", "'I64'", "'FP32'", "'FP64'", - "'STRING'", "'BINARY'", "'TIMESTAMP'", "'TIMESTAMP_TZ'", "'DATE'", - "'TIME'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", - "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", - "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", - "'STRUCT'", "'NSTRUCT'", "'LIST'", "'MAP'", "'U!'", "'BOOL'", - "'STR'", "'VBIN'", "'TS'", "'TSTZ'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", - "'DEC'", "'PT'", "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", - "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", - "'>='", "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", - "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", - "'->'" ] + "'STRING'", "'BINARY'", "'DATE'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", + "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", + "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", + "'VARCHAR'", "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", "'LIST'", + "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'IYEAR'", "'IDAY'", + "'ICOMPOUND'", "'DEC'", "'PT'", "'PTS'", "'PTSTZ'", "'FCHAR'", + "'VCHAR'", "'FBIN'", "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", + "'%'", "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", "'('", + "')'", "'['", "']'", "','", "':'", "'?'", "'#'", "'.'", "'AND'", + "'OR'", "':='", "'->'" ] symbolicNames = [ "", "Whitespace", "TripleHash", "SubstraitScalarTest", "SubstraitAggregateTest", @@ -666,17 +643,17 @@ class FuncTestCaseLexer(Lexer): "IntervalYearLiteral", "IntervalDayLiteral", "IntervalCompoundLiteral", "NullLiteral", "StringLiteral", "EnumType", "ColumnName", "LineComment", "BlockComment", "If", "Then", "Else", "Func", "Boolean", "I8", - "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", "Timestamp", - "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", - "Interval_Compound", "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", - "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", - "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", "Str", - "VBin", "Ts", "TsTZ", "IYear", "IDay", "ICompound", "Dec", "PT", - "PTs", "PTsTZ", "FChar", "VChar", "FBin", "Any", "AnyVar", "DoubleColon", - "Plus", "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", - "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", "CParen", - "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", - "And", "Or", "Assign", "Arrow", "Number", "Identifier", "Newline" ] + "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", "Date", + "Interval_Year", "Interval_Day", "Interval_Compound", "UUID", + "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", + "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", + "List", "Map", "UserDefined", "Bool", "Str", "VBin", "IYear", + "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", "VChar", + "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", + "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", + "Bang", "OParen", "CParen", "OBracket", "CBracket", "Comma", + "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", + "Number", "Identifier", "Newline" ] ruleNames = [ "Whitespace", "TripleHash", "SubstraitScalarTest", "SubstraitAggregateTest", "SubstraitInclude", "SubstraitDependency", "FormatVersion", @@ -694,18 +671,17 @@ class FuncTestCaseLexer(Lexer): "EnumType", "ColumnName", "LineComment", "BlockComment", "DIGIT", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", - "Timestamp", "Timestamp_TZ", "Date", "Time", "Interval_Year", - "Interval_Day", "Interval_Compound", "UUID", "Decimal", - "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", - "List", "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", - "TsTZ", "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", - "PTsTZ", "FChar", "VChar", "FBin", "Any", "AnyVar", "DoubleColon", - "Plus", "Minus", "Asterisk", "ForwardSlash", "Percent", - "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", - "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", - "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Int", - "Digit", "Number", "Identifier", "Newline" ] + "Date", "Interval_Year", "Interval_Day", "Interval_Compound", + "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", + "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", + "Str", "VBin", "IYear", "IDay", "ICompound", "Dec", "PT", + "PTs", "PTsTZ", "FChar", "VChar", "FBin", "Any", "AnyVar", + "DoubleColon", "Plus", "Minus", "Asterisk", "ForwardSlash", + "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", + "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", + "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", + "Int", "Digit", "Number", "Identifier", "Newline" ] grammarFileName = "FuncTestCaseLexer.g4" diff --git a/tests/coverage/antlr_parser/FuncTestCaseParser.py b/tests/coverage/antlr_parser/FuncTestCaseParser.py index fdc96e159..6527d0df7 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseParser.py +++ b/tests/coverage/antlr_parser/FuncTestCaseParser.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,1,129,746,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,124,704,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, @@ -22,271 +22,255 @@ def serializedATN(): 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7, 65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2, - 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7, - 78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,1,0,1,0,4,0, - 171,8,0,11,0,12,0,172,1,0,1,0,1,1,1,1,1,1,5,1,180,8,1,10,1,12,1, - 183,9,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,5,3,196,8,3, - 10,3,12,3,199,9,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,3,6,216,8,6,1,6,1,6,1,6,1,7,3,7,222,8,7,1,7,4,7,225, - 8,7,11,7,12,7,226,1,7,3,7,230,8,7,1,7,4,7,233,8,7,11,7,12,7,234, - 3,7,237,8,7,1,8,1,8,1,8,5,8,242,8,8,10,8,12,8,245,9,8,1,9,1,9,3, - 9,249,8,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10, - 274,8,10,1,11,1,11,1,11,1,11,1,11,3,11,281,8,11,1,11,1,11,1,11,1, - 12,1,12,1,12,1,12,3,12,290,8,12,1,12,1,12,1,12,1,12,1,12,1,12,3, - 12,298,8,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,307,8,12,1,13, - 1,13,1,13,1,13,1,13,1,13,5,13,315,8,13,10,13,12,13,318,9,13,1,13, - 1,13,1,13,1,13,1,14,1,14,1,14,1,14,5,14,328,8,14,10,14,12,14,331, - 9,14,3,14,333,8,14,1,14,1,14,1,15,1,15,1,15,1,15,1,16,1,16,1,16, - 1,16,5,16,345,8,16,10,16,12,16,348,9,16,3,16,350,8,16,1,16,1,16, - 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,365, - 8,17,1,18,1,18,1,18,5,18,370,8,18,10,18,12,18,373,9,18,1,19,1,19, - 1,19,5,19,378,8,19,10,19,12,19,381,9,19,1,20,1,20,1,20,1,20,3,20, - 387,8,20,1,21,1,21,1,21,1,21,3,21,393,8,21,1,22,1,22,1,22,3,22,398, - 8,22,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,26,1,26, - 1,26,1,26,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29, - 1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32, - 1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36, - 1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39, - 1,39,1,39,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,42,1,42,1,42, - 1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45, - 1,46,1,46,1,46,1,46,5,46,494,8,46,10,46,12,46,497,9,46,3,46,499, - 8,46,1,46,1,46,1,47,1,47,3,47,505,8,47,1,48,1,48,1,48,1,48,1,48, - 1,48,1,49,1,49,1,49,1,49,1,49,4,49,518,8,49,11,49,12,49,519,1,49, - 3,49,523,8,49,1,50,1,50,1,50,1,50,1,50,1,51,1,51,3,51,532,8,51,1, - 52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,546, - 8,52,1,52,1,52,1,52,3,52,551,8,52,3,52,553,8,52,1,53,1,53,3,53,557, - 8,53,1,54,1,54,3,54,561,8,54,1,55,1,55,3,55,565,8,55,1,56,1,56,3, - 56,569,8,56,1,57,1,57,3,57,573,8,57,1,58,1,58,3,58,577,8,58,1,59, - 1,59,3,59,581,8,59,1,60,1,60,3,60,585,8,60,1,61,1,61,3,61,589,8, - 61,1,62,1,62,3,62,593,8,62,1,63,1,63,3,63,597,8,63,1,63,1,63,1,63, - 1,63,3,63,603,8,63,1,64,1,64,3,64,607,8,64,1,64,1,64,1,64,1,64,3, - 64,613,8,64,1,65,1,65,3,65,617,8,65,1,65,1,65,1,65,1,65,1,66,1,66, - 3,66,625,8,66,1,66,1,66,1,66,1,66,1,67,1,67,3,67,633,8,67,1,67,1, - 67,1,67,1,67,1,68,1,68,3,68,641,8,68,1,68,1,68,1,68,1,68,1,68,1, - 68,3,68,649,8,68,1,69,1,69,3,69,653,8,69,1,69,1,69,1,69,1,69,1,70, - 1,70,3,70,661,8,70,1,70,1,70,1,70,1,70,1,71,1,71,3,71,669,8,71,1, - 71,1,71,1,71,1,71,1,72,1,72,3,72,677,8,72,1,72,1,72,1,72,1,72,1, - 73,1,73,3,73,685,8,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1, - 74,1,74,1,74,5,74,698,8,74,10,74,12,74,701,9,74,1,74,1,74,3,74,705, - 8,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75, - 718,8,75,1,76,1,76,1,77,1,77,1,78,1,78,1,78,1,78,1,79,1,79,1,80, - 1,80,1,81,1,81,1,81,5,81,735,8,81,10,81,12,81,738,9,81,1,82,1,82, - 1,83,1,83,3,83,744,8,83,1,83,0,0,84,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,0,23,1,0, - 3,4,2,0,18,18,26,26,2,0,55,55,84,84,2,0,62,62,85,85,2,0,63,63,86, - 86,1,0,56,59,1,0,60,61,2,0,64,64,87,87,2,0,65,65,88,88,2,0,68,68, - 89,89,2,0,69,69,90,90,2,0,70,70,91,91,2,0,76,76,96,96,2,0,77,77, - 97,97,2,0,78,78,98,98,2,0,72,72,92,92,2,0,73,73,93,93,2,0,74,74, - 94,94,2,0,75,75,95,95,1,0,10,11,3,0,12,13,21,22,128,128,5,0,14,20, - 23,23,27,27,45,45,128,128,2,0,23,23,123,124,777,0,168,1,0,0,0,2, - 176,1,0,0,0,4,184,1,0,0,0,6,189,1,0,0,0,8,200,1,0,0,0,10,205,1,0, - 0,0,12,207,1,0,0,0,14,236,1,0,0,0,16,238,1,0,0,0,18,248,1,0,0,0, - 20,273,1,0,0,0,22,275,1,0,0,0,24,306,1,0,0,0,26,308,1,0,0,0,28,323, - 1,0,0,0,30,336,1,0,0,0,32,340,1,0,0,0,34,364,1,0,0,0,36,366,1,0, - 0,0,38,374,1,0,0,0,40,386,1,0,0,0,42,392,1,0,0,0,44,397,1,0,0,0, - 46,399,1,0,0,0,48,401,1,0,0,0,50,405,1,0,0,0,52,409,1,0,0,0,54,413, - 1,0,0,0,56,417,1,0,0,0,58,421,1,0,0,0,60,425,1,0,0,0,62,429,1,0, - 0,0,64,433,1,0,0,0,66,437,1,0,0,0,68,441,1,0,0,0,70,445,1,0,0,0, - 72,449,1,0,0,0,74,453,1,0,0,0,76,457,1,0,0,0,78,461,1,0,0,0,80,465, - 1,0,0,0,82,469,1,0,0,0,84,473,1,0,0,0,86,477,1,0,0,0,88,481,1,0, - 0,0,90,485,1,0,0,0,92,489,1,0,0,0,94,504,1,0,0,0,96,506,1,0,0,0, - 98,522,1,0,0,0,100,524,1,0,0,0,102,531,1,0,0,0,104,552,1,0,0,0,106, - 554,1,0,0,0,108,558,1,0,0,0,110,562,1,0,0,0,112,566,1,0,0,0,114, - 570,1,0,0,0,116,574,1,0,0,0,118,578,1,0,0,0,120,582,1,0,0,0,122, - 586,1,0,0,0,124,590,1,0,0,0,126,594,1,0,0,0,128,604,1,0,0,0,130, - 614,1,0,0,0,132,622,1,0,0,0,134,630,1,0,0,0,136,638,1,0,0,0,138, - 650,1,0,0,0,140,658,1,0,0,0,142,666,1,0,0,0,144,674,1,0,0,0,146, - 682,1,0,0,0,148,704,1,0,0,0,150,717,1,0,0,0,152,719,1,0,0,0,154, - 721,1,0,0,0,156,723,1,0,0,0,158,727,1,0,0,0,160,729,1,0,0,0,162, - 731,1,0,0,0,164,739,1,0,0,0,166,743,1,0,0,0,168,170,3,2,1,0,169, - 171,3,14,7,0,170,169,1,0,0,0,171,172,1,0,0,0,172,170,1,0,0,0,172, - 173,1,0,0,0,173,174,1,0,0,0,174,175,5,0,0,1,175,1,1,0,0,0,176,177, - 3,4,2,0,177,181,3,6,3,0,178,180,3,8,4,0,179,178,1,0,0,0,180,183, - 1,0,0,0,181,179,1,0,0,0,181,182,1,0,0,0,182,3,1,0,0,0,183,181,1, - 0,0,0,184,185,5,2,0,0,185,186,7,0,0,0,186,187,5,119,0,0,187,188, - 5,7,0,0,188,5,1,0,0,0,189,190,5,2,0,0,190,191,5,5,0,0,191,192,5, - 119,0,0,192,197,5,46,0,0,193,194,5,118,0,0,194,196,5,46,0,0,195, - 193,1,0,0,0,196,199,1,0,0,0,197,195,1,0,0,0,197,198,1,0,0,0,198, - 7,1,0,0,0,199,197,1,0,0,0,200,201,5,2,0,0,201,202,5,6,0,0,202,203, - 5,119,0,0,203,204,5,46,0,0,204,9,1,0,0,0,205,206,5,8,0,0,206,11, - 1,0,0,0,207,208,3,166,83,0,208,209,5,114,0,0,209,210,3,16,8,0,210, - 215,5,115,0,0,211,212,5,116,0,0,212,213,3,162,81,0,213,214,5,117, - 0,0,214,216,1,0,0,0,215,211,1,0,0,0,215,216,1,0,0,0,216,217,1,0, - 0,0,217,218,5,107,0,0,218,219,3,18,9,0,219,13,1,0,0,0,220,222,3, - 10,5,0,221,220,1,0,0,0,221,222,1,0,0,0,222,224,1,0,0,0,223,225,3, - 12,6,0,224,223,1,0,0,0,225,226,1,0,0,0,226,224,1,0,0,0,226,227,1, - 0,0,0,227,237,1,0,0,0,228,230,3,10,5,0,229,228,1,0,0,0,229,230,1, - 0,0,0,230,232,1,0,0,0,231,233,3,22,11,0,232,231,1,0,0,0,233,234, - 1,0,0,0,234,232,1,0,0,0,234,235,1,0,0,0,235,237,1,0,0,0,236,221, - 1,0,0,0,236,229,1,0,0,0,237,15,1,0,0,0,238,243,3,20,10,0,239,240, - 5,118,0,0,240,242,3,20,10,0,241,239,1,0,0,0,242,245,1,0,0,0,243, - 241,1,0,0,0,243,244,1,0,0,0,244,17,1,0,0,0,245,243,1,0,0,0,246,249, - 3,20,10,0,247,249,3,154,77,0,248,246,1,0,0,0,248,247,1,0,0,0,249, - 19,1,0,0,0,250,274,3,48,24,0,251,274,3,90,45,0,252,274,3,50,25,0, - 253,274,3,52,26,0,254,274,3,56,28,0,255,274,3,58,29,0,256,274,3, - 54,27,0,257,274,3,60,30,0,258,274,3,62,31,0,259,274,3,64,32,0,260, - 274,3,66,33,0,261,274,3,68,34,0,262,274,3,70,35,0,263,274,3,72,36, - 0,264,274,3,74,37,0,265,274,3,76,38,0,266,274,3,78,39,0,267,274, - 3,80,40,0,268,274,3,82,41,0,269,274,3,84,42,0,270,274,3,86,43,0, - 271,274,3,88,44,0,272,274,5,128,0,0,273,250,1,0,0,0,273,251,1,0, - 0,0,273,252,1,0,0,0,273,253,1,0,0,0,273,254,1,0,0,0,273,255,1,0, - 0,0,273,256,1,0,0,0,273,257,1,0,0,0,273,258,1,0,0,0,273,259,1,0, - 0,0,273,260,1,0,0,0,273,261,1,0,0,0,273,262,1,0,0,0,273,263,1,0, - 0,0,273,264,1,0,0,0,273,265,1,0,0,0,273,266,1,0,0,0,273,267,1,0, - 0,0,273,268,1,0,0,0,273,269,1,0,0,0,273,270,1,0,0,0,273,271,1,0, - 0,0,273,272,1,0,0,0,274,21,1,0,0,0,275,280,3,24,12,0,276,277,5,116, - 0,0,277,278,3,162,81,0,278,279,5,117,0,0,279,281,1,0,0,0,280,276, - 1,0,0,0,280,281,1,0,0,0,281,282,1,0,0,0,282,283,5,107,0,0,283,284, - 3,18,9,0,284,23,1,0,0,0,285,286,3,26,13,0,286,287,3,166,83,0,287, - 289,5,114,0,0,288,290,3,36,18,0,289,288,1,0,0,0,289,290,1,0,0,0, - 290,291,1,0,0,0,291,292,5,115,0,0,292,307,1,0,0,0,293,294,3,28,14, - 0,294,295,3,166,83,0,295,297,5,114,0,0,296,298,3,38,19,0,297,296, - 1,0,0,0,297,298,1,0,0,0,298,299,1,0,0,0,299,300,5,115,0,0,300,307, - 1,0,0,0,301,302,3,166,83,0,302,303,5,114,0,0,303,304,3,30,15,0,304, - 305,5,115,0,0,305,307,1,0,0,0,306,285,1,0,0,0,306,293,1,0,0,0,306, - 301,1,0,0,0,307,25,1,0,0,0,308,309,5,9,0,0,309,310,5,128,0,0,310, - 311,5,114,0,0,311,316,3,102,51,0,312,313,5,118,0,0,313,315,3,102, - 51,0,314,312,1,0,0,0,315,318,1,0,0,0,316,314,1,0,0,0,316,317,1,0, - 0,0,317,319,1,0,0,0,318,316,1,0,0,0,319,320,5,115,0,0,320,321,5, - 107,0,0,321,322,3,28,14,0,322,27,1,0,0,0,323,332,5,114,0,0,324,329, - 3,32,16,0,325,326,5,118,0,0,326,328,3,32,16,0,327,325,1,0,0,0,328, - 331,1,0,0,0,329,327,1,0,0,0,329,330,1,0,0,0,330,333,1,0,0,0,331, - 329,1,0,0,0,332,324,1,0,0,0,332,333,1,0,0,0,333,334,1,0,0,0,334, - 335,5,115,0,0,335,29,1,0,0,0,336,337,3,32,16,0,337,338,5,101,0,0, - 338,339,3,102,51,0,339,31,1,0,0,0,340,349,5,114,0,0,341,346,3,34, - 17,0,342,343,5,118,0,0,343,345,3,34,17,0,344,342,1,0,0,0,345,348, - 1,0,0,0,346,344,1,0,0,0,346,347,1,0,0,0,347,350,1,0,0,0,348,346, - 1,0,0,0,349,341,1,0,0,0,349,350,1,0,0,0,350,351,1,0,0,0,351,352, - 5,115,0,0,352,33,1,0,0,0,353,365,5,45,0,0,354,365,3,44,22,0,355, - 365,5,27,0,0,356,365,5,46,0,0,357,365,5,31,0,0,358,365,5,30,0,0, - 359,365,5,29,0,0,360,365,5,28,0,0,361,365,5,42,0,0,362,365,5,43, - 0,0,363,365,5,44,0,0,364,353,1,0,0,0,364,354,1,0,0,0,364,355,1,0, - 0,0,364,356,1,0,0,0,364,357,1,0,0,0,364,358,1,0,0,0,364,359,1,0, - 0,0,364,360,1,0,0,0,364,361,1,0,0,0,364,362,1,0,0,0,364,363,1,0, - 0,0,365,35,1,0,0,0,366,371,3,40,20,0,367,368,5,118,0,0,368,370,3, - 40,20,0,369,367,1,0,0,0,370,373,1,0,0,0,371,369,1,0,0,0,371,372, - 1,0,0,0,372,37,1,0,0,0,373,371,1,0,0,0,374,379,3,42,21,0,375,376, - 5,118,0,0,376,378,3,42,21,0,377,375,1,0,0,0,378,381,1,0,0,0,379, - 377,1,0,0,0,379,380,1,0,0,0,380,39,1,0,0,0,381,379,1,0,0,0,382,383, - 5,128,0,0,383,384,5,122,0,0,384,387,5,48,0,0,385,387,3,20,10,0,386, - 382,1,0,0,0,386,385,1,0,0,0,387,41,1,0,0,0,388,389,5,48,0,0,389, - 390,5,101,0,0,390,393,3,102,51,0,391,393,3,20,10,0,392,388,1,0,0, - 0,392,391,1,0,0,0,393,43,1,0,0,0,394,398,5,25,0,0,395,398,5,24,0, - 0,396,398,3,46,23,0,397,394,1,0,0,0,397,395,1,0,0,0,397,396,1,0, - 0,0,398,45,1,0,0,0,399,400,7,1,0,0,400,47,1,0,0,0,401,402,5,45,0, - 0,402,403,5,101,0,0,403,404,3,102,51,0,404,49,1,0,0,0,405,406,5, - 24,0,0,406,407,5,101,0,0,407,408,3,112,56,0,408,51,1,0,0,0,409,410, - 3,44,22,0,410,411,5,101,0,0,411,412,3,114,57,0,412,53,1,0,0,0,413, - 414,3,44,22,0,414,415,5,101,0,0,415,416,3,136,68,0,416,55,1,0,0, - 0,417,418,5,27,0,0,418,419,5,101,0,0,419,420,3,106,53,0,420,57,1, - 0,0,0,421,422,5,46,0,0,422,423,5,101,0,0,423,424,3,108,54,0,424, - 59,1,0,0,0,425,426,5,31,0,0,426,427,5,101,0,0,427,428,3,116,58,0, - 428,61,1,0,0,0,429,430,5,30,0,0,430,431,5,101,0,0,431,432,3,118, - 59,0,432,63,1,0,0,0,433,434,5,29,0,0,434,435,5,101,0,0,435,436,3, - 120,60,0,436,65,1,0,0,0,437,438,5,28,0,0,438,439,5,101,0,0,439,440, - 3,122,61,0,440,67,1,0,0,0,441,442,5,42,0,0,442,443,5,101,0,0,443, - 444,3,124,62,0,444,69,1,0,0,0,445,446,5,43,0,0,446,447,5,101,0,0, - 447,448,3,126,63,0,448,71,1,0,0,0,449,450,5,44,0,0,450,451,5,101, - 0,0,451,452,3,128,64,0,452,73,1,0,0,0,453,454,5,46,0,0,454,455,5, - 101,0,0,455,456,3,130,65,0,456,75,1,0,0,0,457,458,5,46,0,0,458,459, - 5,101,0,0,459,460,3,132,66,0,460,77,1,0,0,0,461,462,5,46,0,0,462, - 463,5,101,0,0,463,464,3,134,67,0,464,79,1,0,0,0,465,466,5,30,0,0, - 466,467,5,101,0,0,467,468,3,138,69,0,468,81,1,0,0,0,469,470,5,29, - 0,0,470,471,5,101,0,0,471,472,3,140,70,0,472,83,1,0,0,0,473,474, - 5,28,0,0,474,475,5,101,0,0,475,476,3,142,71,0,476,85,1,0,0,0,477, - 478,3,92,46,0,478,479,5,101,0,0,479,480,3,144,72,0,480,87,1,0,0, - 0,481,482,3,96,48,0,482,483,5,101,0,0,483,484,3,146,73,0,484,89, - 1,0,0,0,485,486,5,128,0,0,486,487,5,101,0,0,487,488,5,47,0,0,488, - 91,1,0,0,0,489,498,5,116,0,0,490,495,3,94,47,0,491,492,5,118,0,0, - 492,494,3,94,47,0,493,491,1,0,0,0,494,497,1,0,0,0,495,493,1,0,0, - 0,495,496,1,0,0,0,496,499,1,0,0,0,497,495,1,0,0,0,498,490,1,0,0, - 0,498,499,1,0,0,0,499,500,1,0,0,0,500,501,5,117,0,0,501,93,1,0,0, - 0,502,505,3,34,17,0,503,505,3,92,46,0,504,502,1,0,0,0,504,503,1, - 0,0,0,505,95,1,0,0,0,506,507,5,114,0,0,507,508,3,98,49,0,508,509, - 5,126,0,0,509,510,3,100,50,0,510,511,5,115,0,0,511,97,1,0,0,0,512, - 523,5,128,0,0,513,514,5,114,0,0,514,517,5,128,0,0,515,516,5,118, - 0,0,516,518,5,128,0,0,517,515,1,0,0,0,518,519,1,0,0,0,519,517,1, - 0,0,0,519,520,1,0,0,0,520,521,1,0,0,0,521,523,5,115,0,0,522,512, - 1,0,0,0,522,513,1,0,0,0,523,99,1,0,0,0,524,525,3,166,83,0,525,526, - 5,114,0,0,526,527,3,16,8,0,527,528,5,115,0,0,528,101,1,0,0,0,529, - 532,3,104,52,0,530,532,3,150,75,0,531,529,1,0,0,0,531,530,1,0,0, - 0,532,103,1,0,0,0,533,553,3,106,53,0,534,553,3,112,56,0,535,553, - 3,114,57,0,536,553,3,108,54,0,537,553,3,110,55,0,538,553,3,120,60, - 0,539,553,3,122,61,0,540,553,3,116,58,0,541,553,3,118,59,0,542,553, - 3,124,62,0,543,545,5,71,0,0,544,546,5,120,0,0,545,544,1,0,0,0,545, - 546,1,0,0,0,546,553,1,0,0,0,547,548,5,83,0,0,548,550,5,128,0,0,549, - 551,5,120,0,0,550,549,1,0,0,0,550,551,1,0,0,0,551,553,1,0,0,0,552, - 533,1,0,0,0,552,534,1,0,0,0,552,535,1,0,0,0,552,536,1,0,0,0,552, - 537,1,0,0,0,552,538,1,0,0,0,552,539,1,0,0,0,552,540,1,0,0,0,552, - 541,1,0,0,0,552,542,1,0,0,0,552,543,1,0,0,0,552,547,1,0,0,0,553, - 105,1,0,0,0,554,556,7,2,0,0,555,557,5,120,0,0,556,555,1,0,0,0,556, - 557,1,0,0,0,557,107,1,0,0,0,558,560,7,3,0,0,559,561,5,120,0,0,560, - 559,1,0,0,0,560,561,1,0,0,0,561,109,1,0,0,0,562,564,7,4,0,0,563, - 565,5,120,0,0,564,563,1,0,0,0,564,565,1,0,0,0,565,111,1,0,0,0,566, - 568,7,5,0,0,567,569,5,120,0,0,568,567,1,0,0,0,568,569,1,0,0,0,569, - 113,1,0,0,0,570,572,7,6,0,0,571,573,5,120,0,0,572,571,1,0,0,0,572, - 573,1,0,0,0,573,115,1,0,0,0,574,576,5,66,0,0,575,577,5,120,0,0,576, - 575,1,0,0,0,576,577,1,0,0,0,577,117,1,0,0,0,578,580,5,67,0,0,579, - 581,5,120,0,0,580,579,1,0,0,0,580,581,1,0,0,0,581,119,1,0,0,0,582, - 584,7,7,0,0,583,585,5,120,0,0,584,583,1,0,0,0,584,585,1,0,0,0,585, - 121,1,0,0,0,586,588,7,8,0,0,587,589,5,120,0,0,588,587,1,0,0,0,588, - 589,1,0,0,0,589,123,1,0,0,0,590,592,7,9,0,0,591,593,5,120,0,0,592, - 591,1,0,0,0,592,593,1,0,0,0,593,125,1,0,0,0,594,596,7,10,0,0,595, - 597,5,120,0,0,596,595,1,0,0,0,596,597,1,0,0,0,597,602,1,0,0,0,598, - 599,5,40,0,0,599,600,3,152,76,0,600,601,5,41,0,0,601,603,1,0,0,0, - 602,598,1,0,0,0,602,603,1,0,0,0,603,127,1,0,0,0,604,606,7,11,0,0, - 605,607,5,120,0,0,606,605,1,0,0,0,606,607,1,0,0,0,607,612,1,0,0, - 0,608,609,5,40,0,0,609,610,3,152,76,0,610,611,5,41,0,0,611,613,1, - 0,0,0,612,608,1,0,0,0,612,613,1,0,0,0,613,129,1,0,0,0,614,616,7, - 12,0,0,615,617,5,120,0,0,616,615,1,0,0,0,616,617,1,0,0,0,617,618, - 1,0,0,0,618,619,5,40,0,0,619,620,3,152,76,0,620,621,5,41,0,0,621, - 131,1,0,0,0,622,624,7,13,0,0,623,625,5,120,0,0,624,623,1,0,0,0,624, - 625,1,0,0,0,625,626,1,0,0,0,626,627,5,40,0,0,627,628,3,152,76,0, - 628,629,5,41,0,0,629,133,1,0,0,0,630,632,7,14,0,0,631,633,5,120, - 0,0,632,631,1,0,0,0,632,633,1,0,0,0,633,634,1,0,0,0,634,635,5,40, - 0,0,635,636,3,152,76,0,636,637,5,41,0,0,637,135,1,0,0,0,638,640, - 7,15,0,0,639,641,5,120,0,0,640,639,1,0,0,0,640,641,1,0,0,0,641,648, - 1,0,0,0,642,643,5,40,0,0,643,644,3,152,76,0,644,645,5,118,0,0,645, - 646,3,152,76,0,646,647,5,41,0,0,647,649,1,0,0,0,648,642,1,0,0,0, - 648,649,1,0,0,0,649,137,1,0,0,0,650,652,7,16,0,0,651,653,5,120,0, - 0,652,651,1,0,0,0,652,653,1,0,0,0,653,654,1,0,0,0,654,655,5,40,0, - 0,655,656,3,152,76,0,656,657,5,41,0,0,657,139,1,0,0,0,658,660,7, - 17,0,0,659,661,5,120,0,0,660,659,1,0,0,0,660,661,1,0,0,0,661,662, - 1,0,0,0,662,663,5,40,0,0,663,664,3,152,76,0,664,665,5,41,0,0,665, - 141,1,0,0,0,666,668,7,18,0,0,667,669,5,120,0,0,668,667,1,0,0,0,668, - 669,1,0,0,0,669,670,1,0,0,0,670,671,5,40,0,0,671,672,3,152,76,0, - 672,673,5,41,0,0,673,143,1,0,0,0,674,676,5,81,0,0,675,677,5,120, - 0,0,676,675,1,0,0,0,676,677,1,0,0,0,677,678,1,0,0,0,678,679,5,40, - 0,0,679,680,3,102,51,0,680,681,5,41,0,0,681,145,1,0,0,0,682,684, - 5,54,0,0,683,685,5,120,0,0,684,683,1,0,0,0,684,685,1,0,0,0,685,686, - 1,0,0,0,686,687,5,40,0,0,687,688,3,148,74,0,688,689,5,126,0,0,689, - 690,3,102,51,0,690,691,5,41,0,0,691,147,1,0,0,0,692,705,3,102,51, - 0,693,694,5,114,0,0,694,699,3,102,51,0,695,696,5,118,0,0,696,698, - 3,102,51,0,697,695,1,0,0,0,698,701,1,0,0,0,699,697,1,0,0,0,699,700, - 1,0,0,0,700,702,1,0,0,0,701,699,1,0,0,0,702,703,5,115,0,0,703,705, - 1,0,0,0,704,692,1,0,0,0,704,693,1,0,0,0,705,149,1,0,0,0,706,718, - 3,130,65,0,707,718,3,132,66,0,708,718,3,134,67,0,709,718,3,136,68, - 0,710,718,3,126,63,0,711,718,3,128,64,0,712,718,3,138,69,0,713,718, - 3,140,70,0,714,718,3,142,71,0,715,718,3,144,72,0,716,718,3,146,73, - 0,717,706,1,0,0,0,717,707,1,0,0,0,717,708,1,0,0,0,717,709,1,0,0, - 0,717,710,1,0,0,0,717,711,1,0,0,0,717,712,1,0,0,0,717,713,1,0,0, - 0,717,714,1,0,0,0,717,715,1,0,0,0,717,716,1,0,0,0,718,151,1,0,0, - 0,719,720,5,24,0,0,720,153,1,0,0,0,721,722,7,19,0,0,722,155,1,0, - 0,0,723,724,3,158,79,0,724,725,5,119,0,0,725,726,3,160,80,0,726, - 157,1,0,0,0,727,728,7,20,0,0,728,159,1,0,0,0,729,730,7,21,0,0,730, - 161,1,0,0,0,731,736,3,156,78,0,732,733,5,118,0,0,733,735,3,156,78, - 0,734,732,1,0,0,0,735,738,1,0,0,0,736,734,1,0,0,0,736,737,1,0,0, - 0,737,163,1,0,0,0,738,736,1,0,0,0,739,740,7,22,0,0,740,165,1,0,0, - 0,741,744,3,164,82,0,742,744,5,128,0,0,743,741,1,0,0,0,743,742,1, - 0,0,0,744,167,1,0,0,0,65,172,181,197,215,221,226,229,234,236,243, - 248,273,280,289,297,306,316,329,332,346,349,364,371,379,386,392, - 397,495,498,504,519,522,531,545,550,552,556,560,564,568,572,576, - 580,584,588,592,596,602,606,612,616,624,632,640,648,652,660,668, - 676,684,699,704,717,736,743 + 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,1,0,1, + 0,4,0,159,8,0,11,0,12,0,160,1,0,1,0,1,1,1,1,1,1,5,1,168,8,1,10,1, + 12,1,171,9,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,5,3,184, + 8,3,10,3,12,3,187,9,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,3,6,204,8,6,1,6,1,6,1,6,1,7,3,7,210,8,7,1,7,4, + 7,213,8,7,11,7,12,7,214,1,7,3,7,218,8,7,1,7,4,7,221,8,7,11,7,12, + 7,222,3,7,225,8,7,1,8,1,8,1,8,5,8,230,8,8,10,8,12,8,233,9,8,1,9, + 1,9,3,9,237,8,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, + 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10,259,8,10, + 1,11,1,11,1,11,1,11,1,11,3,11,266,8,11,1,11,1,11,1,11,1,12,1,12, + 1,12,1,12,3,12,275,8,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,283,8, + 12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,292,8,12,1,13,1,13,1, + 13,1,13,1,13,1,13,5,13,300,8,13,10,13,12,13,303,9,13,1,13,1,13,1, + 13,1,13,1,14,1,14,1,14,1,14,5,14,313,8,14,10,14,12,14,316,9,14,3, + 14,318,8,14,1,14,1,14,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,5, + 16,330,8,16,10,16,12,16,333,9,16,3,16,335,8,16,1,16,1,16,1,17,1, + 17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,350,8,17,1, + 18,1,18,1,18,5,18,355,8,18,10,18,12,18,358,9,18,1,19,1,19,1,19,5, + 19,363,8,19,10,19,12,19,366,9,19,1,20,1,20,1,20,1,20,3,20,372,8, + 20,1,21,1,21,1,21,1,21,3,21,378,8,21,1,22,1,22,1,22,3,22,383,8,22, + 1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,26,1,26,1,26, + 1,26,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29, + 1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,33, + 1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36,1,36, + 1,36,1,36,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39, + 1,39,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42, + 1,43,1,43,1,43,1,43,5,43,467,8,43,10,43,12,43,470,9,43,3,43,472, + 8,43,1,43,1,43,1,44,1,44,3,44,478,8,44,1,45,1,45,1,45,1,45,1,45, + 1,45,1,46,1,46,1,46,1,46,1,46,4,46,491,8,46,11,46,12,46,492,1,46, + 3,46,496,8,46,1,47,1,47,1,47,1,47,1,47,1,48,1,48,3,48,505,8,48,1, + 49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,49,516,8,49,1,49,1, + 49,1,49,3,49,521,8,49,3,49,523,8,49,1,50,1,50,3,50,527,8,50,1,51, + 1,51,3,51,531,8,51,1,52,1,52,3,52,535,8,52,1,53,1,53,3,53,539,8, + 53,1,54,1,54,3,54,543,8,54,1,55,1,55,3,55,547,8,55,1,56,1,56,3,56, + 551,8,56,1,57,1,57,3,57,555,8,57,1,57,1,57,1,57,1,57,3,57,561,8, + 57,1,58,1,58,3,58,565,8,58,1,58,1,58,1,58,1,58,3,58,571,8,58,1,59, + 1,59,3,59,575,8,59,1,59,1,59,1,59,1,59,1,60,1,60,3,60,583,8,60,1, + 60,1,60,1,60,1,60,1,61,1,61,3,61,591,8,61,1,61,1,61,1,61,1,61,1, + 62,1,62,3,62,599,8,62,1,62,1,62,1,62,1,62,1,62,1,62,3,62,607,8,62, + 1,63,1,63,3,63,611,8,63,1,63,1,63,1,63,1,63,1,64,1,64,3,64,619,8, + 64,1,64,1,64,1,64,1,64,1,65,1,65,3,65,627,8,65,1,65,1,65,1,65,1, + 65,1,66,1,66,3,66,635,8,66,1,66,1,66,1,66,1,66,1,67,1,67,3,67,643, + 8,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,5,68, + 656,8,68,10,68,12,68,659,9,68,1,68,1,68,3,68,663,8,68,1,69,1,69, + 1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,3,69,676,8,69,1,70, + 1,70,1,71,1,71,1,72,1,72,1,72,1,72,1,73,1,73,1,74,1,74,1,75,1,75, + 1,75,5,75,693,8,75,10,75,12,75,696,9,75,1,76,1,76,1,77,1,77,3,77, + 702,8,77,1,77,0,0,78,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,0,21,1,0,3,4,2,0,18,18,26,26,2,0,55,55,81,81, + 2,0,62,62,82,82,2,0,63,63,83,83,1,0,56,59,1,0,60,61,2,0,65,65,84, + 84,2,0,66,66,85,85,2,0,67,67,86,86,2,0,73,73,91,91,2,0,74,74,92, + 92,2,0,75,75,93,93,2,0,69,69,87,87,2,0,70,70,88,88,2,0,71,71,89, + 89,2,0,72,72,90,90,1,0,10,11,3,0,12,13,21,22,123,123,5,0,14,20,23, + 23,27,27,45,45,123,123,2,0,23,23,118,119,732,0,156,1,0,0,0,2,164, + 1,0,0,0,4,172,1,0,0,0,6,177,1,0,0,0,8,188,1,0,0,0,10,193,1,0,0,0, + 12,195,1,0,0,0,14,224,1,0,0,0,16,226,1,0,0,0,18,236,1,0,0,0,20,258, + 1,0,0,0,22,260,1,0,0,0,24,291,1,0,0,0,26,293,1,0,0,0,28,308,1,0, + 0,0,30,321,1,0,0,0,32,325,1,0,0,0,34,349,1,0,0,0,36,351,1,0,0,0, + 38,359,1,0,0,0,40,371,1,0,0,0,42,377,1,0,0,0,44,382,1,0,0,0,46,384, + 1,0,0,0,48,386,1,0,0,0,50,390,1,0,0,0,52,394,1,0,0,0,54,398,1,0, + 0,0,56,402,1,0,0,0,58,406,1,0,0,0,60,410,1,0,0,0,62,414,1,0,0,0, + 64,418,1,0,0,0,66,422,1,0,0,0,68,426,1,0,0,0,70,430,1,0,0,0,72,434, + 1,0,0,0,74,438,1,0,0,0,76,442,1,0,0,0,78,446,1,0,0,0,80,450,1,0, + 0,0,82,454,1,0,0,0,84,458,1,0,0,0,86,462,1,0,0,0,88,477,1,0,0,0, + 90,479,1,0,0,0,92,495,1,0,0,0,94,497,1,0,0,0,96,504,1,0,0,0,98,522, + 1,0,0,0,100,524,1,0,0,0,102,528,1,0,0,0,104,532,1,0,0,0,106,536, + 1,0,0,0,108,540,1,0,0,0,110,544,1,0,0,0,112,548,1,0,0,0,114,552, + 1,0,0,0,116,562,1,0,0,0,118,572,1,0,0,0,120,580,1,0,0,0,122,588, + 1,0,0,0,124,596,1,0,0,0,126,608,1,0,0,0,128,616,1,0,0,0,130,624, + 1,0,0,0,132,632,1,0,0,0,134,640,1,0,0,0,136,662,1,0,0,0,138,675, + 1,0,0,0,140,677,1,0,0,0,142,679,1,0,0,0,144,681,1,0,0,0,146,685, + 1,0,0,0,148,687,1,0,0,0,150,689,1,0,0,0,152,697,1,0,0,0,154,701, + 1,0,0,0,156,158,3,2,1,0,157,159,3,14,7,0,158,157,1,0,0,0,159,160, + 1,0,0,0,160,158,1,0,0,0,160,161,1,0,0,0,161,162,1,0,0,0,162,163, + 5,0,0,1,163,1,1,0,0,0,164,165,3,4,2,0,165,169,3,6,3,0,166,168,3, + 8,4,0,167,166,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0,169,170,1, + 0,0,0,170,3,1,0,0,0,171,169,1,0,0,0,172,173,5,2,0,0,173,174,7,0, + 0,0,174,175,5,114,0,0,175,176,5,7,0,0,176,5,1,0,0,0,177,178,5,2, + 0,0,178,179,5,5,0,0,179,180,5,114,0,0,180,185,5,46,0,0,181,182,5, + 113,0,0,182,184,5,46,0,0,183,181,1,0,0,0,184,187,1,0,0,0,185,183, + 1,0,0,0,185,186,1,0,0,0,186,7,1,0,0,0,187,185,1,0,0,0,188,189,5, + 2,0,0,189,190,5,6,0,0,190,191,5,114,0,0,191,192,5,46,0,0,192,9,1, + 0,0,0,193,194,5,8,0,0,194,11,1,0,0,0,195,196,3,154,77,0,196,197, + 5,109,0,0,197,198,3,16,8,0,198,203,5,110,0,0,199,200,5,111,0,0,200, + 201,3,150,75,0,201,202,5,112,0,0,202,204,1,0,0,0,203,199,1,0,0,0, + 203,204,1,0,0,0,204,205,1,0,0,0,205,206,5,102,0,0,206,207,3,18,9, + 0,207,13,1,0,0,0,208,210,3,10,5,0,209,208,1,0,0,0,209,210,1,0,0, + 0,210,212,1,0,0,0,211,213,3,12,6,0,212,211,1,0,0,0,213,214,1,0,0, + 0,214,212,1,0,0,0,214,215,1,0,0,0,215,225,1,0,0,0,216,218,3,10,5, + 0,217,216,1,0,0,0,217,218,1,0,0,0,218,220,1,0,0,0,219,221,3,22,11, + 0,220,219,1,0,0,0,221,222,1,0,0,0,222,220,1,0,0,0,222,223,1,0,0, + 0,223,225,1,0,0,0,224,209,1,0,0,0,224,217,1,0,0,0,225,15,1,0,0,0, + 226,231,3,20,10,0,227,228,5,113,0,0,228,230,3,20,10,0,229,227,1, + 0,0,0,230,233,1,0,0,0,231,229,1,0,0,0,231,232,1,0,0,0,232,17,1,0, + 0,0,233,231,1,0,0,0,234,237,3,20,10,0,235,237,3,142,71,0,236,234, + 1,0,0,0,236,235,1,0,0,0,237,19,1,0,0,0,238,259,3,48,24,0,239,259, + 3,84,42,0,240,259,3,50,25,0,241,259,3,52,26,0,242,259,3,56,28,0, + 243,259,3,58,29,0,244,259,3,54,27,0,245,259,3,60,30,0,246,259,3, + 62,31,0,247,259,3,64,32,0,248,259,3,66,33,0,249,259,3,68,34,0,250, + 259,3,70,35,0,251,259,3,72,36,0,252,259,3,74,37,0,253,259,3,76,38, + 0,254,259,3,78,39,0,255,259,3,80,40,0,256,259,3,82,41,0,257,259, + 5,123,0,0,258,238,1,0,0,0,258,239,1,0,0,0,258,240,1,0,0,0,258,241, + 1,0,0,0,258,242,1,0,0,0,258,243,1,0,0,0,258,244,1,0,0,0,258,245, + 1,0,0,0,258,246,1,0,0,0,258,247,1,0,0,0,258,248,1,0,0,0,258,249, + 1,0,0,0,258,250,1,0,0,0,258,251,1,0,0,0,258,252,1,0,0,0,258,253, + 1,0,0,0,258,254,1,0,0,0,258,255,1,0,0,0,258,256,1,0,0,0,258,257, + 1,0,0,0,259,21,1,0,0,0,260,265,3,24,12,0,261,262,5,111,0,0,262,263, + 3,150,75,0,263,264,5,112,0,0,264,266,1,0,0,0,265,261,1,0,0,0,265, + 266,1,0,0,0,266,267,1,0,0,0,267,268,5,102,0,0,268,269,3,18,9,0,269, + 23,1,0,0,0,270,271,3,26,13,0,271,272,3,154,77,0,272,274,5,109,0, + 0,273,275,3,36,18,0,274,273,1,0,0,0,274,275,1,0,0,0,275,276,1,0, + 0,0,276,277,5,110,0,0,277,292,1,0,0,0,278,279,3,28,14,0,279,280, + 3,154,77,0,280,282,5,109,0,0,281,283,3,38,19,0,282,281,1,0,0,0,282, + 283,1,0,0,0,283,284,1,0,0,0,284,285,5,110,0,0,285,292,1,0,0,0,286, + 287,3,154,77,0,287,288,5,109,0,0,288,289,3,30,15,0,289,290,5,110, + 0,0,290,292,1,0,0,0,291,270,1,0,0,0,291,278,1,0,0,0,291,286,1,0, + 0,0,292,25,1,0,0,0,293,294,5,9,0,0,294,295,5,123,0,0,295,296,5,109, + 0,0,296,301,3,96,48,0,297,298,5,113,0,0,298,300,3,96,48,0,299,297, + 1,0,0,0,300,303,1,0,0,0,301,299,1,0,0,0,301,302,1,0,0,0,302,304, + 1,0,0,0,303,301,1,0,0,0,304,305,5,110,0,0,305,306,5,102,0,0,306, + 307,3,28,14,0,307,27,1,0,0,0,308,317,5,109,0,0,309,314,3,32,16,0, + 310,311,5,113,0,0,311,313,3,32,16,0,312,310,1,0,0,0,313,316,1,0, + 0,0,314,312,1,0,0,0,314,315,1,0,0,0,315,318,1,0,0,0,316,314,1,0, + 0,0,317,309,1,0,0,0,317,318,1,0,0,0,318,319,1,0,0,0,319,320,5,110, + 0,0,320,29,1,0,0,0,321,322,3,32,16,0,322,323,5,96,0,0,323,324,3, + 96,48,0,324,31,1,0,0,0,325,334,5,109,0,0,326,331,3,34,17,0,327,328, + 5,113,0,0,328,330,3,34,17,0,329,327,1,0,0,0,330,333,1,0,0,0,331, + 329,1,0,0,0,331,332,1,0,0,0,332,335,1,0,0,0,333,331,1,0,0,0,334, + 326,1,0,0,0,334,335,1,0,0,0,335,336,1,0,0,0,336,337,5,110,0,0,337, + 33,1,0,0,0,338,350,5,45,0,0,339,350,3,44,22,0,340,350,5,27,0,0,341, + 350,5,46,0,0,342,350,5,31,0,0,343,350,5,30,0,0,344,350,5,29,0,0, + 345,350,5,28,0,0,346,350,5,42,0,0,347,350,5,43,0,0,348,350,5,44, + 0,0,349,338,1,0,0,0,349,339,1,0,0,0,349,340,1,0,0,0,349,341,1,0, + 0,0,349,342,1,0,0,0,349,343,1,0,0,0,349,344,1,0,0,0,349,345,1,0, + 0,0,349,346,1,0,0,0,349,347,1,0,0,0,349,348,1,0,0,0,350,35,1,0,0, + 0,351,356,3,40,20,0,352,353,5,113,0,0,353,355,3,40,20,0,354,352, + 1,0,0,0,355,358,1,0,0,0,356,354,1,0,0,0,356,357,1,0,0,0,357,37,1, + 0,0,0,358,356,1,0,0,0,359,364,3,42,21,0,360,361,5,113,0,0,361,363, + 3,42,21,0,362,360,1,0,0,0,363,366,1,0,0,0,364,362,1,0,0,0,364,365, + 1,0,0,0,365,39,1,0,0,0,366,364,1,0,0,0,367,368,5,123,0,0,368,369, + 5,117,0,0,369,372,5,48,0,0,370,372,3,20,10,0,371,367,1,0,0,0,371, + 370,1,0,0,0,372,41,1,0,0,0,373,374,5,48,0,0,374,375,5,96,0,0,375, + 378,3,96,48,0,376,378,3,20,10,0,377,373,1,0,0,0,377,376,1,0,0,0, + 378,43,1,0,0,0,379,383,5,25,0,0,380,383,5,24,0,0,381,383,3,46,23, + 0,382,379,1,0,0,0,382,380,1,0,0,0,382,381,1,0,0,0,383,45,1,0,0,0, + 384,385,7,1,0,0,385,47,1,0,0,0,386,387,5,45,0,0,387,388,5,96,0,0, + 388,389,3,96,48,0,389,49,1,0,0,0,390,391,5,24,0,0,391,392,5,96,0, + 0,392,393,3,106,53,0,393,51,1,0,0,0,394,395,3,44,22,0,395,396,5, + 96,0,0,396,397,3,108,54,0,397,53,1,0,0,0,398,399,3,44,22,0,399,400, + 5,96,0,0,400,401,3,124,62,0,401,55,1,0,0,0,402,403,5,27,0,0,403, + 404,5,96,0,0,404,405,3,100,50,0,405,57,1,0,0,0,406,407,5,46,0,0, + 407,408,5,96,0,0,408,409,3,102,51,0,409,59,1,0,0,0,410,411,5,31, + 0,0,411,412,5,96,0,0,412,413,3,110,55,0,413,61,1,0,0,0,414,415,5, + 42,0,0,415,416,5,96,0,0,416,417,3,112,56,0,417,63,1,0,0,0,418,419, + 5,43,0,0,419,420,5,96,0,0,420,421,3,114,57,0,421,65,1,0,0,0,422, + 423,5,44,0,0,423,424,5,96,0,0,424,425,3,116,58,0,425,67,1,0,0,0, + 426,427,5,46,0,0,427,428,5,96,0,0,428,429,3,118,59,0,429,69,1,0, + 0,0,430,431,5,46,0,0,431,432,5,96,0,0,432,433,3,120,60,0,433,71, + 1,0,0,0,434,435,5,46,0,0,435,436,5,96,0,0,436,437,3,122,61,0,437, + 73,1,0,0,0,438,439,5,30,0,0,439,440,5,96,0,0,440,441,3,126,63,0, + 441,75,1,0,0,0,442,443,5,29,0,0,443,444,5,96,0,0,444,445,3,128,64, + 0,445,77,1,0,0,0,446,447,5,28,0,0,447,448,5,96,0,0,448,449,3,130, + 65,0,449,79,1,0,0,0,450,451,3,86,43,0,451,452,5,96,0,0,452,453,3, + 132,66,0,453,81,1,0,0,0,454,455,3,90,45,0,455,456,5,96,0,0,456,457, + 3,134,67,0,457,83,1,0,0,0,458,459,5,123,0,0,459,460,5,96,0,0,460, + 461,5,47,0,0,461,85,1,0,0,0,462,471,5,111,0,0,463,468,3,88,44,0, + 464,465,5,113,0,0,465,467,3,88,44,0,466,464,1,0,0,0,467,470,1,0, + 0,0,468,466,1,0,0,0,468,469,1,0,0,0,469,472,1,0,0,0,470,468,1,0, + 0,0,471,463,1,0,0,0,471,472,1,0,0,0,472,473,1,0,0,0,473,474,5,112, + 0,0,474,87,1,0,0,0,475,478,3,34,17,0,476,478,3,86,43,0,477,475,1, + 0,0,0,477,476,1,0,0,0,478,89,1,0,0,0,479,480,5,109,0,0,480,481,3, + 92,46,0,481,482,5,121,0,0,482,483,3,94,47,0,483,484,5,110,0,0,484, + 91,1,0,0,0,485,496,5,123,0,0,486,487,5,109,0,0,487,490,5,123,0,0, + 488,489,5,113,0,0,489,491,5,123,0,0,490,488,1,0,0,0,491,492,1,0, + 0,0,492,490,1,0,0,0,492,493,1,0,0,0,493,494,1,0,0,0,494,496,5,110, + 0,0,495,485,1,0,0,0,495,486,1,0,0,0,496,93,1,0,0,0,497,498,3,154, + 77,0,498,499,5,109,0,0,499,500,3,16,8,0,500,501,5,110,0,0,501,95, + 1,0,0,0,502,505,3,98,49,0,503,505,3,138,69,0,504,502,1,0,0,0,504, + 503,1,0,0,0,505,97,1,0,0,0,506,523,3,100,50,0,507,523,3,106,53,0, + 508,523,3,108,54,0,509,523,3,102,51,0,510,523,3,104,52,0,511,523, + 3,110,55,0,512,523,3,112,56,0,513,515,5,68,0,0,514,516,5,115,0,0, + 515,514,1,0,0,0,515,516,1,0,0,0,516,523,1,0,0,0,517,518,5,80,0,0, + 518,520,5,123,0,0,519,521,5,115,0,0,520,519,1,0,0,0,520,521,1,0, + 0,0,521,523,1,0,0,0,522,506,1,0,0,0,522,507,1,0,0,0,522,508,1,0, + 0,0,522,509,1,0,0,0,522,510,1,0,0,0,522,511,1,0,0,0,522,512,1,0, + 0,0,522,513,1,0,0,0,522,517,1,0,0,0,523,99,1,0,0,0,524,526,7,2,0, + 0,525,527,5,115,0,0,526,525,1,0,0,0,526,527,1,0,0,0,527,101,1,0, + 0,0,528,530,7,3,0,0,529,531,5,115,0,0,530,529,1,0,0,0,530,531,1, + 0,0,0,531,103,1,0,0,0,532,534,7,4,0,0,533,535,5,115,0,0,534,533, + 1,0,0,0,534,535,1,0,0,0,535,105,1,0,0,0,536,538,7,5,0,0,537,539, + 5,115,0,0,538,537,1,0,0,0,538,539,1,0,0,0,539,107,1,0,0,0,540,542, + 7,6,0,0,541,543,5,115,0,0,542,541,1,0,0,0,542,543,1,0,0,0,543,109, + 1,0,0,0,544,546,5,64,0,0,545,547,5,115,0,0,546,545,1,0,0,0,546,547, + 1,0,0,0,547,111,1,0,0,0,548,550,7,7,0,0,549,551,5,115,0,0,550,549, + 1,0,0,0,550,551,1,0,0,0,551,113,1,0,0,0,552,554,7,8,0,0,553,555, + 5,115,0,0,554,553,1,0,0,0,554,555,1,0,0,0,555,560,1,0,0,0,556,557, + 5,40,0,0,557,558,3,140,70,0,558,559,5,41,0,0,559,561,1,0,0,0,560, + 556,1,0,0,0,560,561,1,0,0,0,561,115,1,0,0,0,562,564,7,9,0,0,563, + 565,5,115,0,0,564,563,1,0,0,0,564,565,1,0,0,0,565,570,1,0,0,0,566, + 567,5,40,0,0,567,568,3,140,70,0,568,569,5,41,0,0,569,571,1,0,0,0, + 570,566,1,0,0,0,570,571,1,0,0,0,571,117,1,0,0,0,572,574,7,10,0,0, + 573,575,5,115,0,0,574,573,1,0,0,0,574,575,1,0,0,0,575,576,1,0,0, + 0,576,577,5,40,0,0,577,578,3,140,70,0,578,579,5,41,0,0,579,119,1, + 0,0,0,580,582,7,11,0,0,581,583,5,115,0,0,582,581,1,0,0,0,582,583, + 1,0,0,0,583,584,1,0,0,0,584,585,5,40,0,0,585,586,3,140,70,0,586, + 587,5,41,0,0,587,121,1,0,0,0,588,590,7,12,0,0,589,591,5,115,0,0, + 590,589,1,0,0,0,590,591,1,0,0,0,591,592,1,0,0,0,592,593,5,40,0,0, + 593,594,3,140,70,0,594,595,5,41,0,0,595,123,1,0,0,0,596,598,7,13, + 0,0,597,599,5,115,0,0,598,597,1,0,0,0,598,599,1,0,0,0,599,606,1, + 0,0,0,600,601,5,40,0,0,601,602,3,140,70,0,602,603,5,113,0,0,603, + 604,3,140,70,0,604,605,5,41,0,0,605,607,1,0,0,0,606,600,1,0,0,0, + 606,607,1,0,0,0,607,125,1,0,0,0,608,610,7,14,0,0,609,611,5,115,0, + 0,610,609,1,0,0,0,610,611,1,0,0,0,611,612,1,0,0,0,612,613,5,40,0, + 0,613,614,3,140,70,0,614,615,5,41,0,0,615,127,1,0,0,0,616,618,7, + 15,0,0,617,619,5,115,0,0,618,617,1,0,0,0,618,619,1,0,0,0,619,620, + 1,0,0,0,620,621,5,40,0,0,621,622,3,140,70,0,622,623,5,41,0,0,623, + 129,1,0,0,0,624,626,7,16,0,0,625,627,5,115,0,0,626,625,1,0,0,0,626, + 627,1,0,0,0,627,628,1,0,0,0,628,629,5,40,0,0,629,630,3,140,70,0, + 630,631,5,41,0,0,631,131,1,0,0,0,632,634,5,78,0,0,633,635,5,115, + 0,0,634,633,1,0,0,0,634,635,1,0,0,0,635,636,1,0,0,0,636,637,5,40, + 0,0,637,638,3,96,48,0,638,639,5,41,0,0,639,133,1,0,0,0,640,642,5, + 54,0,0,641,643,5,115,0,0,642,641,1,0,0,0,642,643,1,0,0,0,643,644, + 1,0,0,0,644,645,5,40,0,0,645,646,3,136,68,0,646,647,5,121,0,0,647, + 648,3,96,48,0,648,649,5,41,0,0,649,135,1,0,0,0,650,663,3,96,48,0, + 651,652,5,109,0,0,652,657,3,96,48,0,653,654,5,113,0,0,654,656,3, + 96,48,0,655,653,1,0,0,0,656,659,1,0,0,0,657,655,1,0,0,0,657,658, + 1,0,0,0,658,660,1,0,0,0,659,657,1,0,0,0,660,661,5,110,0,0,661,663, + 1,0,0,0,662,650,1,0,0,0,662,651,1,0,0,0,663,137,1,0,0,0,664,676, + 3,118,59,0,665,676,3,120,60,0,666,676,3,122,61,0,667,676,3,124,62, + 0,668,676,3,114,57,0,669,676,3,116,58,0,670,676,3,126,63,0,671,676, + 3,128,64,0,672,676,3,130,65,0,673,676,3,132,66,0,674,676,3,134,67, + 0,675,664,1,0,0,0,675,665,1,0,0,0,675,666,1,0,0,0,675,667,1,0,0, + 0,675,668,1,0,0,0,675,669,1,0,0,0,675,670,1,0,0,0,675,671,1,0,0, + 0,675,672,1,0,0,0,675,673,1,0,0,0,675,674,1,0,0,0,676,139,1,0,0, + 0,677,678,5,24,0,0,678,141,1,0,0,0,679,680,7,17,0,0,680,143,1,0, + 0,0,681,682,3,146,73,0,682,683,5,114,0,0,683,684,3,148,74,0,684, + 145,1,0,0,0,685,686,7,18,0,0,686,147,1,0,0,0,687,688,7,19,0,0,688, + 149,1,0,0,0,689,694,3,144,72,0,690,691,5,113,0,0,691,693,3,144,72, + 0,692,690,1,0,0,0,693,696,1,0,0,0,694,692,1,0,0,0,694,695,1,0,0, + 0,695,151,1,0,0,0,696,694,1,0,0,0,697,698,7,20,0,0,698,153,1,0,0, + 0,699,702,3,152,76,0,700,702,5,123,0,0,701,699,1,0,0,0,701,700,1, + 0,0,0,702,155,1,0,0,0,62,160,169,185,203,209,214,217,222,224,231, + 236,258,265,274,282,291,301,314,317,331,334,349,356,364,371,377, + 382,468,471,477,492,495,504,515,520,522,526,530,534,538,542,546, + 550,554,560,564,570,574,582,590,598,606,610,618,626,634,642,657, + 662,675,694,701 ] class FuncTestCaseParser ( Parser ): @@ -313,19 +297,18 @@ class FuncTestCaseParser ( Parser ): "'null'", "", "'enum'", "", "", "", "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", "'I64'", "'FP32'", - "'FP64'", "'STRING'", "'BINARY'", "'TIMESTAMP'", "'TIMESTAMP_TZ'", - "'DATE'", "'TIME'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", - "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", - "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", - "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", "'STRUCT'", - "'NSTRUCT'", "'LIST'", "'MAP'", "'U!'", "'BOOL'", "'STR'", - "'VBIN'", "'TS'", "'TSTZ'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", - "'DEC'", "'PT'", "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", - "'FBIN'", "'ANY'", "", "'::'", "'+'", "'-'", - "'*'", "'/'", "'%'", "'='", "'!='", "'>='", "'<='", - "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", "','", - "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", - "'->'" ] + "'FP64'", "'STRING'", "'BINARY'", "'DATE'", "'INTERVAL_YEAR'", + "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", "'UUID'", + "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", + "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", + "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", "'LIST'", + "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'IYEAR'", + "'IDAY'", "'ICOMPOUND'", "'DEC'", "'PT'", "'PTS'", + "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", "'ANY'", + "", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", + "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", + "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", + "'.'", "'AND'", "'OR'", "':='", "'->'" ] symbolicNames = [ "", "Whitespace", "TripleHash", "SubstraitScalarTest", "SubstraitAggregateTest", "SubstraitInclude", "SubstraitDependency", @@ -343,19 +326,18 @@ class FuncTestCaseParser ( Parser ): "EnumType", "ColumnName", "LineComment", "BlockComment", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", - "Timestamp", "Timestamp_TZ", "Date", "Time", "Interval_Year", - "Interval_Day", "Interval_Compound", "UUID", "Decimal", - "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", - "List", "Map", "UserDefined", "Bool", "Str", "VBin", - "Ts", "TsTZ", "IYear", "IDay", "ICompound", "Dec", - "PT", "PTs", "PTsTZ", "FChar", "VChar", "FBin", "Any", - "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", - "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", - "Gt", "Lt", "Bang", "OParen", "CParen", "OBracket", - "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", - "And", "Or", "Assign", "Arrow", "Number", "Identifier", - "Newline" ] + "Date", "Interval_Year", "Interval_Day", "Interval_Compound", + "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", + "FixedBinary", "Struct", "NStruct", "List", "Map", + "UserDefined", "Bool", "Str", "VBin", "IYear", "IDay", + "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", + "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", + "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", + "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", + "CParen", "OBracket", "CBracket", "Comma", "Colon", + "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", + "Number", "Identifier", "Newline" ] RULE_doc = 0 RULE_header = 1 @@ -388,59 +370,53 @@ class FuncTestCaseParser ( Parser ): RULE_booleanArg = 28 RULE_stringArg = 29 RULE_dateArg = 30 - RULE_timeArg = 31 - RULE_timestampArg = 32 - RULE_timestampTzArg = 33 - RULE_intervalYearArg = 34 - RULE_intervalDayArg = 35 - RULE_intervalCompoundArg = 36 - RULE_fixedCharArg = 37 - RULE_varCharArg = 38 - RULE_fixedBinaryArg = 39 - RULE_precisionTimeArg = 40 - RULE_precisionTimestampArg = 41 - RULE_precisionTimestampTZArg = 42 - RULE_listArg = 43 - RULE_lambdaArg = 44 - RULE_enumArg = 45 - RULE_literalList = 46 - RULE_listElement = 47 - RULE_literalLambda = 48 - RULE_lambdaParameters = 49 - RULE_lambdaBody = 50 - RULE_dataType = 51 - RULE_scalarType = 52 - RULE_booleanType = 53 - RULE_stringType = 54 - RULE_binaryType = 55 - RULE_intType = 56 - RULE_floatType = 57 - RULE_dateType = 58 - RULE_timeType = 59 - RULE_timestampType = 60 - RULE_timestampTZType = 61 - RULE_intervalYearType = 62 - RULE_intervalDayType = 63 - RULE_intervalCompoundType = 64 - RULE_fixedCharType = 65 - RULE_varCharType = 66 - RULE_fixedBinaryType = 67 - RULE_decimalType = 68 - RULE_precisionTimeType = 69 - RULE_precisionTimestampType = 70 - RULE_precisionTimestampTZType = 71 - RULE_listType = 72 - RULE_funcType = 73 - RULE_funcParameters = 74 - RULE_parameterizedType = 75 - RULE_numericParameter = 76 - RULE_substraitError = 77 - RULE_funcOption = 78 - RULE_optionName = 79 - RULE_optionValue = 80 - RULE_funcOptions = 81 - RULE_nonReserved = 82 - RULE_identifier = 83 + RULE_intervalYearArg = 31 + RULE_intervalDayArg = 32 + RULE_intervalCompoundArg = 33 + RULE_fixedCharArg = 34 + RULE_varCharArg = 35 + RULE_fixedBinaryArg = 36 + RULE_precisionTimeArg = 37 + RULE_precisionTimestampArg = 38 + RULE_precisionTimestampTZArg = 39 + RULE_listArg = 40 + RULE_lambdaArg = 41 + RULE_enumArg = 42 + RULE_literalList = 43 + RULE_listElement = 44 + RULE_literalLambda = 45 + RULE_lambdaParameters = 46 + RULE_lambdaBody = 47 + RULE_dataType = 48 + RULE_scalarType = 49 + RULE_booleanType = 50 + RULE_stringType = 51 + RULE_binaryType = 52 + RULE_intType = 53 + RULE_floatType = 54 + RULE_dateType = 55 + RULE_intervalYearType = 56 + RULE_intervalDayType = 57 + RULE_intervalCompoundType = 58 + RULE_fixedCharType = 59 + RULE_varCharType = 60 + RULE_fixedBinaryType = 61 + RULE_decimalType = 62 + RULE_precisionTimeType = 63 + RULE_precisionTimestampType = 64 + RULE_precisionTimestampTZType = 65 + RULE_listType = 66 + RULE_funcType = 67 + RULE_funcParameters = 68 + RULE_parameterizedType = 69 + RULE_numericParameter = 70 + RULE_substraitError = 71 + RULE_funcOption = 72 + RULE_optionName = 73 + RULE_optionValue = 74 + RULE_funcOptions = 75 + RULE_nonReserved = 76 + RULE_identifier = 77 ruleNames = [ "doc", "header", "version", "include", "dependency", "testGroupDescription", "testCase", "testGroup", "arguments", @@ -449,18 +425,16 @@ class FuncTestCaseParser ( Parser ): "literal", "qualifiedAggregateFuncArgs", "aggregateFuncArgs", "qualifiedAggregateFuncArg", "aggregateFuncArg", "numericLiteral", "floatLiteral", "nullArg", "intArg", "floatArg", "decimalArg", - "booleanArg", "stringArg", "dateArg", "timeArg", "timestampArg", - "timestampTzArg", "intervalYearArg", "intervalDayArg", - "intervalCompoundArg", "fixedCharArg", "varCharArg", - "fixedBinaryArg", "precisionTimeArg", "precisionTimestampArg", + "booleanArg", "stringArg", "dateArg", "intervalYearArg", + "intervalDayArg", "intervalCompoundArg", "fixedCharArg", + "varCharArg", "fixedBinaryArg", "precisionTimeArg", "precisionTimestampArg", "precisionTimestampTZArg", "listArg", "lambdaArg", "enumArg", "literalList", "listElement", "literalLambda", "lambdaParameters", "lambdaBody", "dataType", "scalarType", "booleanType", "stringType", "binaryType", "intType", "floatType", "dateType", - "timeType", "timestampType", "timestampTZType", "intervalYearType", - "intervalDayType", "intervalCompoundType", "fixedCharType", - "varCharType", "fixedBinaryType", "decimalType", "precisionTimeType", - "precisionTimestampType", "precisionTimestampTZType", + "intervalYearType", "intervalDayType", "intervalCompoundType", + "fixedCharType", "varCharType", "fixedBinaryType", "decimalType", + "precisionTimeType", "precisionTimestampType", "precisionTimestampTZType", "listType", "funcType", "funcParameters", "parameterizedType", "numericParameter", "substraitError", "funcOption", "optionName", "optionValue", "funcOptions", "nonReserved", "identifier" ] @@ -529,72 +503,67 @@ class FuncTestCaseParser ( Parser ): FP64=61 String=62 Binary=63 - Timestamp=64 - Timestamp_TZ=65 - Date=66 - Time=67 - Interval_Year=68 - Interval_Day=69 - Interval_Compound=70 - UUID=71 - Decimal=72 - Precision_Time=73 - Precision_Timestamp=74 - Precision_Timestamp_TZ=75 - FixedChar=76 - VarChar=77 - FixedBinary=78 - Struct=79 - NStruct=80 - List=81 - Map=82 - UserDefined=83 - Bool=84 - Str=85 - VBin=86 - Ts=87 - TsTZ=88 - IYear=89 - IDay=90 - ICompound=91 - Dec=92 - PT=93 - PTs=94 - PTsTZ=95 - FChar=96 - VChar=97 - FBin=98 - Any=99 - AnyVar=100 - DoubleColon=101 - Plus=102 - Minus=103 - Asterisk=104 - ForwardSlash=105 - Percent=106 - Eq=107 - Ne=108 - Gte=109 - Lte=110 - Gt=111 - Lt=112 - Bang=113 - OParen=114 - CParen=115 - OBracket=116 - CBracket=117 - Comma=118 - Colon=119 - QMark=120 - Hash=121 - Dot=122 - And=123 - Or=124 - Assign=125 - Arrow=126 - Number=127 - Identifier=128 - Newline=129 + Date=64 + Interval_Year=65 + Interval_Day=66 + Interval_Compound=67 + UUID=68 + Decimal=69 + Precision_Time=70 + Precision_Timestamp=71 + Precision_Timestamp_TZ=72 + FixedChar=73 + VarChar=74 + FixedBinary=75 + Struct=76 + NStruct=77 + List=78 + Map=79 + UserDefined=80 + Bool=81 + Str=82 + VBin=83 + IYear=84 + IDay=85 + ICompound=86 + Dec=87 + PT=88 + PTs=89 + PTsTZ=90 + FChar=91 + VChar=92 + FBin=93 + Any=94 + AnyVar=95 + DoubleColon=96 + Plus=97 + Minus=98 + Asterisk=99 + ForwardSlash=100 + Percent=101 + Eq=102 + Ne=103 + Gte=104 + Lte=105 + Gt=106 + Lt=107 + Bang=108 + OParen=109 + CParen=110 + OBracket=111 + CBracket=112 + Comma=113 + Colon=114 + QMark=115 + Hash=116 + Dot=117 + And=118 + Or=119 + Assign=120 + Arrow=121 + Number=122 + Identifier=123 + Newline=124 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -653,21 +622,21 @@ def doc(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 168 + self.state = 156 self.header() - self.state = 170 + self.state = 158 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 169 + self.state = 157 self.testGroup() - self.state = 172 + self.state = 160 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 8389376) != 0) or ((((_la - 114)) & ~0x3f) == 0 and ((1 << (_la - 114)) & 17921) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 8389376) != 0) or ((((_la - 109)) & ~0x3f) == 0 and ((1 << (_la - 109)) & 17921) != 0)): break - self.state = 174 + self.state = 162 self.match(FuncTestCaseParser.EOF) except RecognitionException as re: localctx.exception = re @@ -727,17 +696,17 @@ def header(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 176 + self.state = 164 self.version() - self.state = 177 + self.state = 165 self.include() - self.state = 181 + self.state = 169 self._errHandler.sync(self) _la = self._input.LA(1) while _la==2: - self.state = 178 + self.state = 166 self.dependency() - self.state = 183 + self.state = 171 self._errHandler.sync(self) _la = self._input.LA(1) @@ -799,18 +768,18 @@ def version(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 184 + self.state = 172 self.match(FuncTestCaseParser.TripleHash) - self.state = 185 + self.state = 173 _la = self._input.LA(1) if not(_la==3 or _la==4): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 186 + self.state = 174 self.match(FuncTestCaseParser.Colon) - self.state = 187 + self.state = 175 self.match(FuncTestCaseParser.FormatVersion) except RecognitionException as re: localctx.exception = re @@ -876,23 +845,23 @@ def include(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 189 + self.state = 177 self.match(FuncTestCaseParser.TripleHash) - self.state = 190 + self.state = 178 self.match(FuncTestCaseParser.SubstraitInclude) - self.state = 191 + self.state = 179 self.match(FuncTestCaseParser.Colon) - self.state = 192 + self.state = 180 self.match(FuncTestCaseParser.StringLiteral) - self.state = 197 + self.state = 185 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 193 + while _la==113: + self.state = 181 self.match(FuncTestCaseParser.Comma) - self.state = 194 + self.state = 182 self.match(FuncTestCaseParser.StringLiteral) - self.state = 199 + self.state = 187 self._errHandler.sync(self) _la = self._input.LA(1) @@ -950,13 +919,13 @@ def dependency(self): self.enterRule(localctx, 8, self.RULE_dependency) try: self.enterOuterAlt(localctx, 1) - self.state = 200 + self.state = 188 self.match(FuncTestCaseParser.TripleHash) - self.state = 201 + self.state = 189 self.match(FuncTestCaseParser.SubstraitDependency) - self.state = 202 + self.state = 190 self.match(FuncTestCaseParser.Colon) - self.state = 203 + self.state = 191 self.match(FuncTestCaseParser.StringLiteral) except RecognitionException as re: localctx.exception = re @@ -1003,7 +972,7 @@ def testGroupDescription(self): self.enterRule(localctx, 10, self.RULE_testGroupDescription) try: self.enterOuterAlt(localctx, 1) - self.state = 205 + self.state = 193 self.match(FuncTestCaseParser.DescriptionLine) except RecognitionException as re: localctx.exception = re @@ -1080,29 +1049,29 @@ def testCase(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 207 + self.state = 195 localctx.functionName = self.identifier() - self.state = 208 + self.state = 196 self.match(FuncTestCaseParser.OParen) - self.state = 209 + self.state = 197 self.arguments() - self.state = 210 + self.state = 198 self.match(FuncTestCaseParser.CParen) - self.state = 215 + self.state = 203 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==116: - self.state = 211 + if _la==111: + self.state = 199 self.match(FuncTestCaseParser.OBracket) - self.state = 212 + self.state = 200 self.funcOptions() - self.state = 213 + self.state = 201 self.match(FuncTestCaseParser.CBracket) - self.state = 217 + self.state = 205 self.match(FuncTestCaseParser.Eq) - self.state = 218 + self.state = 206 self.result() except RecognitionException as re: localctx.exception = re @@ -1199,31 +1168,31 @@ def testGroup(self): self.enterRule(localctx, 14, self.RULE_testGroup) self._la = 0 # Token type try: - self.state = 236 + self.state = 224 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,8,self._ctx) if la_ == 1: localctx = FuncTestCaseParser.ScalarFuncTestGroupContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 221 + self.state = 209 self._errHandler.sync(self) _la = self._input.LA(1) if _la==8: - self.state = 220 + self.state = 208 self.testGroupDescription() - self.state = 224 + self.state = 212 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 223 + self.state = 211 self.testCase() else: raise NoViableAltException(self) - self.state = 226 + self.state = 214 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,5,self._ctx) @@ -1232,25 +1201,25 @@ def testGroup(self): elif la_ == 2: localctx = FuncTestCaseParser.AggregateFuncTestGroupContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 229 + self.state = 217 self._errHandler.sync(self) _la = self._input.LA(1) if _la==8: - self.state = 228 + self.state = 216 self.testGroupDescription() - self.state = 232 + self.state = 220 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 231 + self.state = 219 self.aggFuncTestCase() else: raise NoViableAltException(self) - self.state = 234 + self.state = 222 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,7,self._ctx) @@ -1313,17 +1282,17 @@ def arguments(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 238 + self.state = 226 self.argument() - self.state = 243 + self.state = 231 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 239 + while _la==113: + self.state = 227 self.match(FuncTestCaseParser.Comma) - self.state = 240 + self.state = 228 self.argument() - self.state = 245 + self.state = 233 self._errHandler.sync(self) _la = self._input.LA(1) @@ -1376,17 +1345,17 @@ def result(self): localctx = FuncTestCaseParser.ResultContext(self, self._ctx, self.state) self.enterRule(localctx, 18, self.RULE_result) try: - self.state = 248 + self.state = 236 self._errHandler.sync(self) token = self._input.LA(1) - if token in [18, 24, 25, 26, 27, 28, 29, 30, 31, 42, 43, 44, 45, 46, 114, 116, 128]: + if token in [18, 24, 25, 26, 27, 28, 29, 30, 31, 42, 43, 44, 45, 46, 109, 111, 123]: self.enterOuterAlt(localctx, 1) - self.state = 246 + self.state = 234 self.argument() pass elif token in [10, 11]: self.enterOuterAlt(localctx, 2) - self.state = 247 + self.state = 235 self.substraitError() pass else: @@ -1440,18 +1409,6 @@ def dateArg(self): return self.getTypedRuleContext(FuncTestCaseParser.DateArgContext,0) - def timeArg(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimeArgContext,0) - - - def timestampArg(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimestampArgContext,0) - - - def timestampTzArg(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimestampTzArgContext,0) - - def intervalYearArg(self): return self.getTypedRuleContext(FuncTestCaseParser.IntervalYearArgContext,0) @@ -1524,144 +1481,126 @@ def argument(self): localctx = FuncTestCaseParser.ArgumentContext(self, self._ctx, self.state) self.enterRule(localctx, 20, self.RULE_argument) try: - self.state = 273 + self.state = 258 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 250 + self.state = 238 self.nullArg() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 251 + self.state = 239 self.enumArg() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 252 + self.state = 240 self.intArg() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 253 + self.state = 241 self.floatArg() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 254 + self.state = 242 self.booleanArg() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 255 + self.state = 243 self.stringArg() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 256 + self.state = 244 self.decimalArg() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 257 + self.state = 245 self.dateArg() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 258 - self.timeArg() + self.state = 246 + self.intervalYearArg() pass elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 259 - self.timestampArg() + self.state = 247 + self.intervalDayArg() pass elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 260 - self.timestampTzArg() + self.state = 248 + self.intervalCompoundArg() pass elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 261 - self.intervalYearArg() + self.state = 249 + self.fixedCharArg() pass elif la_ == 13: self.enterOuterAlt(localctx, 13) - self.state = 262 - self.intervalDayArg() + self.state = 250 + self.varCharArg() pass elif la_ == 14: self.enterOuterAlt(localctx, 14) - self.state = 263 - self.intervalCompoundArg() + self.state = 251 + self.fixedBinaryArg() pass elif la_ == 15: self.enterOuterAlt(localctx, 15) - self.state = 264 - self.fixedCharArg() + self.state = 252 + self.precisionTimeArg() pass elif la_ == 16: self.enterOuterAlt(localctx, 16) - self.state = 265 - self.varCharArg() + self.state = 253 + self.precisionTimestampArg() pass elif la_ == 17: self.enterOuterAlt(localctx, 17) - self.state = 266 - self.fixedBinaryArg() + self.state = 254 + self.precisionTimestampTZArg() pass elif la_ == 18: self.enterOuterAlt(localctx, 18) - self.state = 267 - self.precisionTimeArg() + self.state = 255 + self.listArg() pass elif la_ == 19: self.enterOuterAlt(localctx, 19) - self.state = 268 - self.precisionTimestampArg() + self.state = 256 + self.lambdaArg() pass elif la_ == 20: self.enterOuterAlt(localctx, 20) - self.state = 269 - self.precisionTimestampTZArg() - pass - - elif la_ == 21: - self.enterOuterAlt(localctx, 21) - self.state = 270 - self.listArg() - pass - - elif la_ == 22: - self.enterOuterAlt(localctx, 22) - self.state = 271 - self.lambdaArg() - pass - - elif la_ == 23: - self.enterOuterAlt(localctx, 23) - self.state = 272 + self.state = 257 self.match(FuncTestCaseParser.Identifier) pass @@ -1730,23 +1669,23 @@ def aggFuncTestCase(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 275 + self.state = 260 self.aggFuncCall() - self.state = 280 + self.state = 265 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==116: - self.state = 276 + if _la==111: + self.state = 261 self.match(FuncTestCaseParser.OBracket) - self.state = 277 + self.state = 262 self.funcOptions() - self.state = 278 + self.state = 263 self.match(FuncTestCaseParser.CBracket) - self.state = 282 + self.state = 267 self.match(FuncTestCaseParser.Eq) - self.state = 283 + self.state = 268 self.result() except RecognitionException as re: localctx.exception = re @@ -1886,59 +1825,59 @@ def aggFuncCall(self): self.enterRule(localctx, 24, self.RULE_aggFuncCall) self._la = 0 # Token type try: - self.state = 306 + self.state = 291 self._errHandler.sync(self) token = self._input.LA(1) if token in [9]: localctx = FuncTestCaseParser.MultiArgAggregateFuncCallContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 285 + self.state = 270 self.tableData() - self.state = 286 + self.state = 271 localctx.funcName = self.identifier() - self.state = 287 + self.state = 272 self.match(FuncTestCaseParser.OParen) - self.state = 289 + self.state = 274 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 136343720296448) != 0) or ((((_la - 114)) & ~0x3f) == 0 and ((1 << (_la - 114)) & 16389) != 0): - self.state = 288 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 136343720296448) != 0) or ((((_la - 109)) & ~0x3f) == 0 and ((1 << (_la - 109)) & 16389) != 0): + self.state = 273 self.qualifiedAggregateFuncArgs() - self.state = 291 + self.state = 276 self.match(FuncTestCaseParser.CParen) pass - elif token in [114]: + elif token in [109]: localctx = FuncTestCaseParser.CompactAggregateFuncCallContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 293 + self.state = 278 self.tableRows() - self.state = 294 + self.state = 279 localctx.functName = self.identifier() - self.state = 295 + self.state = 280 self.match(FuncTestCaseParser.OParen) - self.state = 297 + self.state = 282 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 417818697007104) != 0) or ((((_la - 114)) & ~0x3f) == 0 and ((1 << (_la - 114)) & 16389) != 0): - self.state = 296 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 417818697007104) != 0) or ((((_la - 109)) & ~0x3f) == 0 and ((1 << (_la - 109)) & 16389) != 0): + self.state = 281 self.aggregateFuncArgs() - self.state = 299 + self.state = 284 self.match(FuncTestCaseParser.CParen) pass - elif token in [23, 123, 124, 128]: + elif token in [23, 118, 119, 123]: localctx = FuncTestCaseParser.SingleArgAggregateFuncCallContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 301 + self.state = 286 localctx.functName = self.identifier() - self.state = 302 + self.state = 287 self.match(FuncTestCaseParser.OParen) - self.state = 303 + self.state = 288 self.dataColumn() - self.state = 304 + self.state = 289 self.match(FuncTestCaseParser.CParen) pass else: @@ -2020,31 +1959,31 @@ def tableData(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 308 + self.state = 293 self.match(FuncTestCaseParser.Define) - self.state = 309 + self.state = 294 localctx.tableName = self.match(FuncTestCaseParser.Identifier) - self.state = 310 + self.state = 295 self.match(FuncTestCaseParser.OParen) - self.state = 311 + self.state = 296 self.dataType() - self.state = 316 + self.state = 301 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 312 + while _la==113: + self.state = 297 self.match(FuncTestCaseParser.Comma) - self.state = 313 + self.state = 298 self.dataType() - self.state = 318 + self.state = 303 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 319 + self.state = 304 self.match(FuncTestCaseParser.CParen) - self.state = 320 + self.state = 305 self.match(FuncTestCaseParser.Eq) - self.state = 321 + self.state = 306 self.tableRows() except RecognitionException as re: localctx.exception = re @@ -2108,29 +2047,29 @@ def tableRows(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 323 + self.state = 308 self.match(FuncTestCaseParser.OParen) - self.state = 332 + self.state = 317 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==114: - self.state = 324 + if _la==109: + self.state = 309 self.columnValues() - self.state = 329 + self.state = 314 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 325 + while _la==113: + self.state = 310 self.match(FuncTestCaseParser.Comma) - self.state = 326 + self.state = 311 self.columnValues() - self.state = 331 + self.state = 316 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 334 + self.state = 319 self.match(FuncTestCaseParser.CParen) except RecognitionException as re: localctx.exception = re @@ -2185,11 +2124,11 @@ def dataColumn(self): self.enterRule(localctx, 30, self.RULE_dataColumn) try: self.enterOuterAlt(localctx, 1) - self.state = 336 + self.state = 321 self.columnValues() - self.state = 337 + self.state = 322 self.match(FuncTestCaseParser.DoubleColon) - self.state = 338 + self.state = 323 self.dataType() except RecognitionException as re: localctx.exception = re @@ -2253,29 +2192,29 @@ def columnValues(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 340 + self.state = 325 self.match(FuncTestCaseParser.OParen) - self.state = 349 + self.state = 334 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 136343720296448) != 0): - self.state = 341 + self.state = 326 self.literal() - self.state = 346 + self.state = 331 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 342 + while _la==113: + self.state = 327 self.match(FuncTestCaseParser.Comma) - self.state = 343 + self.state = 328 self.literal() - self.state = 348 + self.state = 333 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 351 + self.state = 336 self.match(FuncTestCaseParser.CParen) except RecognitionException as re: localctx.exception = re @@ -2352,62 +2291,62 @@ def literal(self): localctx = FuncTestCaseParser.LiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 34, self.RULE_literal) try: - self.state = 364 + self.state = 349 self._errHandler.sync(self) token = self._input.LA(1) if token in [45]: self.enterOuterAlt(localctx, 1) - self.state = 353 + self.state = 338 self.match(FuncTestCaseParser.NullLiteral) pass elif token in [18, 24, 25, 26]: self.enterOuterAlt(localctx, 2) - self.state = 354 + self.state = 339 self.numericLiteral() pass elif token in [27]: self.enterOuterAlt(localctx, 3) - self.state = 355 + self.state = 340 self.match(FuncTestCaseParser.BooleanLiteral) pass elif token in [46]: self.enterOuterAlt(localctx, 4) - self.state = 356 + self.state = 341 self.match(FuncTestCaseParser.StringLiteral) pass elif token in [31]: self.enterOuterAlt(localctx, 5) - self.state = 357 + self.state = 342 self.match(FuncTestCaseParser.DateLiteral) pass elif token in [30]: self.enterOuterAlt(localctx, 6) - self.state = 358 + self.state = 343 self.match(FuncTestCaseParser.TimeLiteral) pass elif token in [29]: self.enterOuterAlt(localctx, 7) - self.state = 359 + self.state = 344 self.match(FuncTestCaseParser.TimestampLiteral) pass elif token in [28]: self.enterOuterAlt(localctx, 8) - self.state = 360 + self.state = 345 self.match(FuncTestCaseParser.TimestampTzLiteral) pass elif token in [42]: self.enterOuterAlt(localctx, 9) - self.state = 361 + self.state = 346 self.match(FuncTestCaseParser.IntervalYearLiteral) pass elif token in [43]: self.enterOuterAlt(localctx, 10) - self.state = 362 + self.state = 347 self.match(FuncTestCaseParser.IntervalDayLiteral) pass elif token in [44]: self.enterOuterAlt(localctx, 11) - self.state = 363 + self.state = 348 self.match(FuncTestCaseParser.IntervalCompoundLiteral) pass else: @@ -2469,17 +2408,17 @@ def qualifiedAggregateFuncArgs(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 366 + self.state = 351 self.qualifiedAggregateFuncArg() - self.state = 371 + self.state = 356 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 367 + while _la==113: + self.state = 352 self.match(FuncTestCaseParser.Comma) - self.state = 368 + self.state = 353 self.qualifiedAggregateFuncArg() - self.state = 373 + self.state = 358 self._errHandler.sync(self) _la = self._input.LA(1) @@ -2539,17 +2478,17 @@ def aggregateFuncArgs(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 374 + self.state = 359 self.aggregateFuncArg() - self.state = 379 + self.state = 364 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 375 + while _la==113: + self.state = 360 self.match(FuncTestCaseParser.Comma) - self.state = 376 + self.state = 361 self.aggregateFuncArg() - self.state = 381 + self.state = 366 self._errHandler.sync(self) _la = self._input.LA(1) @@ -2608,22 +2547,22 @@ def qualifiedAggregateFuncArg(self): localctx = FuncTestCaseParser.QualifiedAggregateFuncArgContext(self, self._ctx, self.state) self.enterRule(localctx, 40, self.RULE_qualifiedAggregateFuncArg) try: - self.state = 386 + self.state = 371 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,24,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 382 + self.state = 367 localctx.tableName = self.match(FuncTestCaseParser.Identifier) - self.state = 383 + self.state = 368 self.match(FuncTestCaseParser.Dot) - self.state = 384 + self.state = 369 self.match(FuncTestCaseParser.ColumnName) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 385 + self.state = 370 self.argument() pass @@ -2683,21 +2622,21 @@ def aggregateFuncArg(self): localctx = FuncTestCaseParser.AggregateFuncArgContext(self, self._ctx, self.state) self.enterRule(localctx, 42, self.RULE_aggregateFuncArg) try: - self.state = 392 + self.state = 377 self._errHandler.sync(self) token = self._input.LA(1) if token in [48]: self.enterOuterAlt(localctx, 1) - self.state = 388 + self.state = 373 self.match(FuncTestCaseParser.ColumnName) - self.state = 389 + self.state = 374 self.match(FuncTestCaseParser.DoubleColon) - self.state = 390 + self.state = 375 self.dataType() pass - elif token in [18, 24, 25, 26, 27, 28, 29, 30, 31, 42, 43, 44, 45, 46, 114, 116, 128]: + elif token in [18, 24, 25, 26, 27, 28, 29, 30, 31, 42, 43, 44, 45, 46, 109, 111, 123]: self.enterOuterAlt(localctx, 2) - self.state = 391 + self.state = 376 self.argument() pass else: @@ -2754,22 +2693,22 @@ def numericLiteral(self): localctx = FuncTestCaseParser.NumericLiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 44, self.RULE_numericLiteral) try: - self.state = 397 + self.state = 382 self._errHandler.sync(self) token = self._input.LA(1) if token in [25]: self.enterOuterAlt(localctx, 1) - self.state = 394 + self.state = 379 self.match(FuncTestCaseParser.DecimalLiteral) pass elif token in [24]: self.enterOuterAlt(localctx, 2) - self.state = 395 + self.state = 380 self.match(FuncTestCaseParser.IntegerLiteral) pass elif token in [18, 26]: self.enterOuterAlt(localctx, 3) - self.state = 396 + self.state = 381 self.floatLiteral() pass else: @@ -2824,7 +2763,7 @@ def floatLiteral(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 399 + self.state = 384 _la = self._input.LA(1) if not(_la==18 or _la==26): self._errHandler.recoverInline(self) @@ -2883,11 +2822,11 @@ def nullArg(self): self.enterRule(localctx, 48, self.RULE_nullArg) try: self.enterOuterAlt(localctx, 1) - self.state = 401 + self.state = 386 self.match(FuncTestCaseParser.NullLiteral) - self.state = 402 + self.state = 387 self.match(FuncTestCaseParser.DoubleColon) - self.state = 403 + self.state = 388 self.dataType() except RecognitionException as re: localctx.exception = re @@ -2941,11 +2880,11 @@ def intArg(self): self.enterRule(localctx, 50, self.RULE_intArg) try: self.enterOuterAlt(localctx, 1) - self.state = 405 + self.state = 390 self.match(FuncTestCaseParser.IntegerLiteral) - self.state = 406 + self.state = 391 self.match(FuncTestCaseParser.DoubleColon) - self.state = 407 + self.state = 392 self.intType() except RecognitionException as re: localctx.exception = re @@ -3000,11 +2939,11 @@ def floatArg(self): self.enterRule(localctx, 52, self.RULE_floatArg) try: self.enterOuterAlt(localctx, 1) - self.state = 409 + self.state = 394 self.numericLiteral() - self.state = 410 + self.state = 395 self.match(FuncTestCaseParser.DoubleColon) - self.state = 411 + self.state = 396 self.floatType() except RecognitionException as re: localctx.exception = re @@ -3059,11 +2998,11 @@ def decimalArg(self): self.enterRule(localctx, 54, self.RULE_decimalArg) try: self.enterOuterAlt(localctx, 1) - self.state = 413 + self.state = 398 self.numericLiteral() - self.state = 414 + self.state = 399 self.match(FuncTestCaseParser.DoubleColon) - self.state = 415 + self.state = 400 self.decimalType() except RecognitionException as re: localctx.exception = re @@ -3117,11 +3056,11 @@ def booleanArg(self): self.enterRule(localctx, 56, self.RULE_booleanArg) try: self.enterOuterAlt(localctx, 1) - self.state = 417 + self.state = 402 self.match(FuncTestCaseParser.BooleanLiteral) - self.state = 418 + self.state = 403 self.match(FuncTestCaseParser.DoubleColon) - self.state = 419 + self.state = 404 self.booleanType() except RecognitionException as re: localctx.exception = re @@ -3175,11 +3114,11 @@ def stringArg(self): self.enterRule(localctx, 58, self.RULE_stringArg) try: self.enterOuterAlt(localctx, 1) - self.state = 421 + self.state = 406 self.match(FuncTestCaseParser.StringLiteral) - self.state = 422 + self.state = 407 self.match(FuncTestCaseParser.DoubleColon) - self.state = 423 + self.state = 408 self.stringType() except RecognitionException as re: localctx.exception = re @@ -3233,11 +3172,11 @@ def dateArg(self): self.enterRule(localctx, 60, self.RULE_dateArg) try: self.enterOuterAlt(localctx, 1) - self.state = 425 + self.state = 410 self.match(FuncTestCaseParser.DateLiteral) - self.state = 426 + self.state = 411 self.match(FuncTestCaseParser.DoubleColon) - self.state = 427 + self.state = 412 self.dateType() except RecognitionException as re: localctx.exception = re @@ -3248,55 +3187,55 @@ def dateArg(self): return localctx - class TimeArgContext(ParserRuleContext): + class IntervalYearArgContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def TimeLiteral(self): - return self.getToken(FuncTestCaseParser.TimeLiteral, 0) + def IntervalYearLiteral(self): + return self.getToken(FuncTestCaseParser.IntervalYearLiteral, 0) def DoubleColon(self): return self.getToken(FuncTestCaseParser.DoubleColon, 0) - def timeType(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimeTypeContext,0) + def intervalYearType(self): + return self.getTypedRuleContext(FuncTestCaseParser.IntervalYearTypeContext,0) def getRuleIndex(self): - return FuncTestCaseParser.RULE_timeArg + return FuncTestCaseParser.RULE_intervalYearArg def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimeArg" ): - listener.enterTimeArg(self) + if hasattr( listener, "enterIntervalYearArg" ): + listener.enterIntervalYearArg(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimeArg" ): - listener.exitTimeArg(self) + if hasattr( listener, "exitIntervalYearArg" ): + listener.exitIntervalYearArg(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimeArg" ): - return visitor.visitTimeArg(self) + if hasattr( visitor, "visitIntervalYearArg" ): + return visitor.visitIntervalYearArg(self) else: return visitor.visitChildren(self) - def timeArg(self): + def intervalYearArg(self): - localctx = FuncTestCaseParser.TimeArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_timeArg) + localctx = FuncTestCaseParser.IntervalYearArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_intervalYearArg) try: self.enterOuterAlt(localctx, 1) - self.state = 429 - self.match(FuncTestCaseParser.TimeLiteral) - self.state = 430 + self.state = 414 + self.match(FuncTestCaseParser.IntervalYearLiteral) + self.state = 415 self.match(FuncTestCaseParser.DoubleColon) - self.state = 431 - self.timeType() + self.state = 416 + self.intervalYearType() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3306,55 +3245,55 @@ def timeArg(self): return localctx - class TimestampArgContext(ParserRuleContext): + class IntervalDayArgContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def TimestampLiteral(self): - return self.getToken(FuncTestCaseParser.TimestampLiteral, 0) + def IntervalDayLiteral(self): + return self.getToken(FuncTestCaseParser.IntervalDayLiteral, 0) def DoubleColon(self): return self.getToken(FuncTestCaseParser.DoubleColon, 0) - def timestampType(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimestampTypeContext,0) + def intervalDayType(self): + return self.getTypedRuleContext(FuncTestCaseParser.IntervalDayTypeContext,0) def getRuleIndex(self): - return FuncTestCaseParser.RULE_timestampArg + return FuncTestCaseParser.RULE_intervalDayArg def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampArg" ): - listener.enterTimestampArg(self) + if hasattr( listener, "enterIntervalDayArg" ): + listener.enterIntervalDayArg(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampArg" ): - listener.exitTimestampArg(self) + if hasattr( listener, "exitIntervalDayArg" ): + listener.exitIntervalDayArg(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampArg" ): - return visitor.visitTimestampArg(self) + if hasattr( visitor, "visitIntervalDayArg" ): + return visitor.visitIntervalDayArg(self) else: return visitor.visitChildren(self) - def timestampArg(self): + def intervalDayArg(self): - localctx = FuncTestCaseParser.TimestampArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_timestampArg) + localctx = FuncTestCaseParser.IntervalDayArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_intervalDayArg) try: self.enterOuterAlt(localctx, 1) - self.state = 433 - self.match(FuncTestCaseParser.TimestampLiteral) - self.state = 434 + self.state = 418 + self.match(FuncTestCaseParser.IntervalDayLiteral) + self.state = 419 self.match(FuncTestCaseParser.DoubleColon) - self.state = 435 - self.timestampType() + self.state = 420 + self.intervalDayType() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3364,55 +3303,55 @@ def timestampArg(self): return localctx - class TimestampTzArgContext(ParserRuleContext): + class IntervalCompoundArgContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def TimestampTzLiteral(self): - return self.getToken(FuncTestCaseParser.TimestampTzLiteral, 0) + def IntervalCompoundLiteral(self): + return self.getToken(FuncTestCaseParser.IntervalCompoundLiteral, 0) def DoubleColon(self): return self.getToken(FuncTestCaseParser.DoubleColon, 0) - def timestampTZType(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimestampTZTypeContext,0) + def intervalCompoundType(self): + return self.getTypedRuleContext(FuncTestCaseParser.IntervalCompoundTypeContext,0) def getRuleIndex(self): - return FuncTestCaseParser.RULE_timestampTzArg + return FuncTestCaseParser.RULE_intervalCompoundArg def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampTzArg" ): - listener.enterTimestampTzArg(self) + if hasattr( listener, "enterIntervalCompoundArg" ): + listener.enterIntervalCompoundArg(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampTzArg" ): - listener.exitTimestampTzArg(self) + if hasattr( listener, "exitIntervalCompoundArg" ): + listener.exitIntervalCompoundArg(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampTzArg" ): - return visitor.visitTimestampTzArg(self) + if hasattr( visitor, "visitIntervalCompoundArg" ): + return visitor.visitIntervalCompoundArg(self) else: return visitor.visitChildren(self) - def timestampTzArg(self): + def intervalCompoundArg(self): - localctx = FuncTestCaseParser.TimestampTzArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_timestampTzArg) + localctx = FuncTestCaseParser.IntervalCompoundArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_intervalCompoundArg) try: self.enterOuterAlt(localctx, 1) - self.state = 437 - self.match(FuncTestCaseParser.TimestampTzLiteral) - self.state = 438 + self.state = 422 + self.match(FuncTestCaseParser.IntervalCompoundLiteral) + self.state = 423 self.match(FuncTestCaseParser.DoubleColon) - self.state = 439 - self.timestampTZType() + self.state = 424 + self.intervalCompoundType() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3422,189 +3361,15 @@ def timestampTzArg(self): return localctx - class IntervalYearArgContext(ParserRuleContext): + class FixedCharArgContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def IntervalYearLiteral(self): - return self.getToken(FuncTestCaseParser.IntervalYearLiteral, 0) - - def DoubleColon(self): - return self.getToken(FuncTestCaseParser.DoubleColon, 0) - - def intervalYearType(self): - return self.getTypedRuleContext(FuncTestCaseParser.IntervalYearTypeContext,0) - - - def getRuleIndex(self): - return FuncTestCaseParser.RULE_intervalYearArg - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIntervalYearArg" ): - listener.enterIntervalYearArg(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIntervalYearArg" ): - listener.exitIntervalYearArg(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIntervalYearArg" ): - return visitor.visitIntervalYearArg(self) - else: - return visitor.visitChildren(self) - - - - - def intervalYearArg(self): - - localctx = FuncTestCaseParser.IntervalYearArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_intervalYearArg) - try: - self.enterOuterAlt(localctx, 1) - self.state = 441 - self.match(FuncTestCaseParser.IntervalYearLiteral) - self.state = 442 - self.match(FuncTestCaseParser.DoubleColon) - self.state = 443 - self.intervalYearType() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class IntervalDayArgContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def IntervalDayLiteral(self): - return self.getToken(FuncTestCaseParser.IntervalDayLiteral, 0) - - def DoubleColon(self): - return self.getToken(FuncTestCaseParser.DoubleColon, 0) - - def intervalDayType(self): - return self.getTypedRuleContext(FuncTestCaseParser.IntervalDayTypeContext,0) - - - def getRuleIndex(self): - return FuncTestCaseParser.RULE_intervalDayArg - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIntervalDayArg" ): - listener.enterIntervalDayArg(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIntervalDayArg" ): - listener.exitIntervalDayArg(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIntervalDayArg" ): - return visitor.visitIntervalDayArg(self) - else: - return visitor.visitChildren(self) - - - - - def intervalDayArg(self): - - localctx = FuncTestCaseParser.IntervalDayArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 70, self.RULE_intervalDayArg) - try: - self.enterOuterAlt(localctx, 1) - self.state = 445 - self.match(FuncTestCaseParser.IntervalDayLiteral) - self.state = 446 - self.match(FuncTestCaseParser.DoubleColon) - self.state = 447 - self.intervalDayType() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class IntervalCompoundArgContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def IntervalCompoundLiteral(self): - return self.getToken(FuncTestCaseParser.IntervalCompoundLiteral, 0) - - def DoubleColon(self): - return self.getToken(FuncTestCaseParser.DoubleColon, 0) - - def intervalCompoundType(self): - return self.getTypedRuleContext(FuncTestCaseParser.IntervalCompoundTypeContext,0) - - - def getRuleIndex(self): - return FuncTestCaseParser.RULE_intervalCompoundArg - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIntervalCompoundArg" ): - listener.enterIntervalCompoundArg(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIntervalCompoundArg" ): - listener.exitIntervalCompoundArg(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIntervalCompoundArg" ): - return visitor.visitIntervalCompoundArg(self) - else: - return visitor.visitChildren(self) - - - - - def intervalCompoundArg(self): - - localctx = FuncTestCaseParser.IntervalCompoundArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 72, self.RULE_intervalCompoundArg) - try: - self.enterOuterAlt(localctx, 1) - self.state = 449 - self.match(FuncTestCaseParser.IntervalCompoundLiteral) - self.state = 450 - self.match(FuncTestCaseParser.DoubleColon) - self.state = 451 - self.intervalCompoundType() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class FixedCharArgContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def StringLiteral(self): - return self.getToken(FuncTestCaseParser.StringLiteral, 0) + def StringLiteral(self): + return self.getToken(FuncTestCaseParser.StringLiteral, 0) def DoubleColon(self): return self.getToken(FuncTestCaseParser.DoubleColon, 0) @@ -3636,14 +3401,14 @@ def accept(self, visitor:ParseTreeVisitor): def fixedCharArg(self): localctx = FuncTestCaseParser.FixedCharArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 74, self.RULE_fixedCharArg) + self.enterRule(localctx, 68, self.RULE_fixedCharArg) try: self.enterOuterAlt(localctx, 1) - self.state = 453 + self.state = 426 self.match(FuncTestCaseParser.StringLiteral) - self.state = 454 + self.state = 427 self.match(FuncTestCaseParser.DoubleColon) - self.state = 455 + self.state = 428 self.fixedCharType() except RecognitionException as re: localctx.exception = re @@ -3694,14 +3459,14 @@ def accept(self, visitor:ParseTreeVisitor): def varCharArg(self): localctx = FuncTestCaseParser.VarCharArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 76, self.RULE_varCharArg) + self.enterRule(localctx, 70, self.RULE_varCharArg) try: self.enterOuterAlt(localctx, 1) - self.state = 457 + self.state = 430 self.match(FuncTestCaseParser.StringLiteral) - self.state = 458 + self.state = 431 self.match(FuncTestCaseParser.DoubleColon) - self.state = 459 + self.state = 432 self.varCharType() except RecognitionException as re: localctx.exception = re @@ -3752,14 +3517,14 @@ def accept(self, visitor:ParseTreeVisitor): def fixedBinaryArg(self): localctx = FuncTestCaseParser.FixedBinaryArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 78, self.RULE_fixedBinaryArg) + self.enterRule(localctx, 72, self.RULE_fixedBinaryArg) try: self.enterOuterAlt(localctx, 1) - self.state = 461 + self.state = 434 self.match(FuncTestCaseParser.StringLiteral) - self.state = 462 + self.state = 435 self.match(FuncTestCaseParser.DoubleColon) - self.state = 463 + self.state = 436 self.fixedBinaryType() except RecognitionException as re: localctx.exception = re @@ -3810,14 +3575,14 @@ def accept(self, visitor:ParseTreeVisitor): def precisionTimeArg(self): localctx = FuncTestCaseParser.PrecisionTimeArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 80, self.RULE_precisionTimeArg) + self.enterRule(localctx, 74, self.RULE_precisionTimeArg) try: self.enterOuterAlt(localctx, 1) - self.state = 465 + self.state = 438 self.match(FuncTestCaseParser.TimeLiteral) - self.state = 466 + self.state = 439 self.match(FuncTestCaseParser.DoubleColon) - self.state = 467 + self.state = 440 self.precisionTimeType() except RecognitionException as re: localctx.exception = re @@ -3868,14 +3633,14 @@ def accept(self, visitor:ParseTreeVisitor): def precisionTimestampArg(self): localctx = FuncTestCaseParser.PrecisionTimestampArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_precisionTimestampArg) + self.enterRule(localctx, 76, self.RULE_precisionTimestampArg) try: self.enterOuterAlt(localctx, 1) - self.state = 469 + self.state = 442 self.match(FuncTestCaseParser.TimestampLiteral) - self.state = 470 + self.state = 443 self.match(FuncTestCaseParser.DoubleColon) - self.state = 471 + self.state = 444 self.precisionTimestampType() except RecognitionException as re: localctx.exception = re @@ -3926,14 +3691,14 @@ def accept(self, visitor:ParseTreeVisitor): def precisionTimestampTZArg(self): localctx = FuncTestCaseParser.PrecisionTimestampTZArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_precisionTimestampTZArg) + self.enterRule(localctx, 78, self.RULE_precisionTimestampTZArg) try: self.enterOuterAlt(localctx, 1) - self.state = 473 + self.state = 446 self.match(FuncTestCaseParser.TimestampTzLiteral) - self.state = 474 + self.state = 447 self.match(FuncTestCaseParser.DoubleColon) - self.state = 475 + self.state = 448 self.precisionTimestampTZType() except RecognitionException as re: localctx.exception = re @@ -3985,14 +3750,14 @@ def accept(self, visitor:ParseTreeVisitor): def listArg(self): localctx = FuncTestCaseParser.ListArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_listArg) + self.enterRule(localctx, 80, self.RULE_listArg) try: self.enterOuterAlt(localctx, 1) - self.state = 477 + self.state = 450 self.literalList() - self.state = 478 + self.state = 451 self.match(FuncTestCaseParser.DoubleColon) - self.state = 479 + self.state = 452 self.listType() except RecognitionException as re: localctx.exception = re @@ -4044,14 +3809,14 @@ def accept(self, visitor:ParseTreeVisitor): def lambdaArg(self): localctx = FuncTestCaseParser.LambdaArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_lambdaArg) + self.enterRule(localctx, 82, self.RULE_lambdaArg) try: self.enterOuterAlt(localctx, 1) - self.state = 481 + self.state = 454 self.literalLambda() - self.state = 482 + self.state = 455 self.match(FuncTestCaseParser.DoubleColon) - self.state = 483 + self.state = 456 self.funcType() except RecognitionException as re: localctx.exception = re @@ -4101,14 +3866,14 @@ def accept(self, visitor:ParseTreeVisitor): def enumArg(self): localctx = FuncTestCaseParser.EnumArgContext(self, self._ctx, self.state) - self.enterRule(localctx, 90, self.RULE_enumArg) + self.enterRule(localctx, 84, self.RULE_enumArg) try: self.enterOuterAlt(localctx, 1) - self.state = 485 + self.state = 458 self.match(FuncTestCaseParser.Identifier) - self.state = 486 + self.state = 459 self.match(FuncTestCaseParser.DoubleColon) - self.state = 487 + self.state = 460 self.match(FuncTestCaseParser.EnumType) except RecognitionException as re: localctx.exception = re @@ -4168,33 +3933,33 @@ def accept(self, visitor:ParseTreeVisitor): def literalList(self): localctx = FuncTestCaseParser.LiteralListContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_literalList) + self.enterRule(localctx, 86, self.RULE_literalList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 489 + self.state = 462 self.match(FuncTestCaseParser.OBracket) - self.state = 498 + self.state = 471 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 136343720296448) != 0) or _la==116: - self.state = 490 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 136343720296448) != 0) or _la==111: + self.state = 463 self.listElement() - self.state = 495 + self.state = 468 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 491 + while _la==113: + self.state = 464 self.match(FuncTestCaseParser.Comma) - self.state = 492 + self.state = 465 self.listElement() - self.state = 497 + self.state = 470 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 500 + self.state = 473 self.match(FuncTestCaseParser.CBracket) except RecognitionException as re: localctx.exception = re @@ -4243,19 +4008,19 @@ def accept(self, visitor:ParseTreeVisitor): def listElement(self): localctx = FuncTestCaseParser.ListElementContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_listElement) + self.enterRule(localctx, 88, self.RULE_listElement) try: - self.state = 504 + self.state = 477 self._errHandler.sync(self) token = self._input.LA(1) if token in [18, 24, 25, 26, 27, 28, 29, 30, 31, 42, 43, 44, 45, 46]: self.enterOuterAlt(localctx, 1) - self.state = 502 + self.state = 475 self.literal() pass - elif token in [116]: + elif token in [111]: self.enterOuterAlt(localctx, 2) - self.state = 503 + self.state = 476 self.literalList() pass else: @@ -4317,18 +4082,18 @@ def accept(self, visitor:ParseTreeVisitor): def literalLambda(self): localctx = FuncTestCaseParser.LiteralLambdaContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_literalLambda) + self.enterRule(localctx, 90, self.RULE_literalLambda) try: self.enterOuterAlt(localctx, 1) - self.state = 506 + self.state = 479 self.match(FuncTestCaseParser.OParen) - self.state = 507 + self.state = 480 self.lambdaParameters() - self.state = 508 + self.state = 481 self.match(FuncTestCaseParser.Arrow) - self.state = 509 + self.state = 482 self.lambdaBody() - self.state = 510 + self.state = 483 self.match(FuncTestCaseParser.CParen) except RecognitionException as re: localctx.exception = re @@ -4420,40 +4185,40 @@ def accept(self, visitor:ParseTreeVisitor): def lambdaParameters(self): localctx = FuncTestCaseParser.LambdaParametersContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_lambdaParameters) + self.enterRule(localctx, 92, self.RULE_lambdaParameters) self._la = 0 # Token type try: - self.state = 522 + self.state = 495 self._errHandler.sync(self) token = self._input.LA(1) - if token in [128]: + if token in [123]: localctx = FuncTestCaseParser.SingleParamContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 512 + self.state = 485 self.match(FuncTestCaseParser.Identifier) pass - elif token in [114]: + elif token in [109]: localctx = FuncTestCaseParser.TupleParamsContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 513 + self.state = 486 self.match(FuncTestCaseParser.OParen) - self.state = 514 + self.state = 487 self.match(FuncTestCaseParser.Identifier) - self.state = 517 + self.state = 490 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 515 + self.state = 488 self.match(FuncTestCaseParser.Comma) - self.state = 516 + self.state = 489 self.match(FuncTestCaseParser.Identifier) - self.state = 519 + self.state = 492 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==118): + if not (_la==113): break - self.state = 521 + self.state = 494 self.match(FuncTestCaseParser.CParen) pass else: @@ -4512,16 +4277,16 @@ def accept(self, visitor:ParseTreeVisitor): def lambdaBody(self): localctx = FuncTestCaseParser.LambdaBodyContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_lambdaBody) + self.enterRule(localctx, 94, self.RULE_lambdaBody) try: self.enterOuterAlt(localctx, 1) - self.state = 524 + self.state = 497 self.identifier() - self.state = 525 + self.state = 498 self.match(FuncTestCaseParser.OParen) - self.state = 526 + self.state = 499 self.arguments() - self.state = 527 + self.state = 500 self.match(FuncTestCaseParser.CParen) except RecognitionException as re: localctx.exception = re @@ -4570,19 +4335,19 @@ def accept(self, visitor:ParseTreeVisitor): def dataType(self): localctx = FuncTestCaseParser.DataTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_dataType) + self.enterRule(localctx, 96, self.RULE_dataType) try: - self.state = 531 + self.state = 504 self._errHandler.sync(self) token = self._input.LA(1) - if token in [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 71, 83, 84, 85, 86, 87, 88, 89]: + if token in [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 68, 80, 81, 82, 83, 84]: self.enterOuterAlt(localctx, 1) - self.state = 529 + self.state = 502 self.scalarType() pass - elif token in [54, 69, 70, 72, 73, 74, 75, 76, 77, 78, 81, 90, 91, 92, 93, 94, 95, 96, 97, 98]: + elif token in [54, 66, 67, 69, 70, 71, 72, 73, 74, 75, 78, 85, 86, 87, 88, 89, 90, 91, 92, 93]: self.enterOuterAlt(localctx, 2) - self.state = 530 + self.state = 503 self.parameterizedType() pass else: @@ -4743,31 +4508,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class TimeContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a FuncTestCaseParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def timeType(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimeTypeContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTime" ): - listener.enterTime(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTime" ): - listener.exitTime(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTime" ): - return visitor.visitTime(self) - else: - return visitor.visitChildren(self) - - class FloatContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a FuncTestCaseParser.ScalarTypeContext @@ -4870,152 +4610,84 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class TimestampContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a FuncTestCaseParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def timestampType(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimestampTypeContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestamp" ): - listener.enterTimestamp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestamp" ): - listener.exitTimestamp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestamp" ): - return visitor.visitTimestamp(self) - else: - return visitor.visitChildren(self) - - - class TimestampTzContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a FuncTestCaseParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def timestampTZType(self): - return self.getTypedRuleContext(FuncTestCaseParser.TimestampTZTypeContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampTz" ): - listener.enterTimestampTz(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampTz" ): - listener.exitTimestampTz(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampTz" ): - return visitor.visitTimestampTz(self) - else: - return visitor.visitChildren(self) - - def scalarType(self): localctx = FuncTestCaseParser.ScalarTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_scalarType) + self.enterRule(localctx, 98, self.RULE_scalarType) self._la = 0 # Token type try: - self.state = 552 + self.state = 522 self._errHandler.sync(self) token = self._input.LA(1) - if token in [55, 84]: + if token in [55, 81]: localctx = FuncTestCaseParser.BooleanContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 533 + self.state = 506 self.booleanType() pass elif token in [56, 57, 58, 59]: localctx = FuncTestCaseParser.IntContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 534 + self.state = 507 self.intType() pass elif token in [60, 61]: localctx = FuncTestCaseParser.FloatContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 535 + self.state = 508 self.floatType() pass - elif token in [62, 85]: + elif token in [62, 82]: localctx = FuncTestCaseParser.StringContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 536 + self.state = 509 self.stringType() pass - elif token in [63, 86]: + elif token in [63, 83]: localctx = FuncTestCaseParser.BinaryContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 537 - self.binaryType() - pass - elif token in [64, 87]: - localctx = FuncTestCaseParser.TimestampContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 538 - self.timestampType() - pass - elif token in [65, 88]: - localctx = FuncTestCaseParser.TimestampTzContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 539 - self.timestampTZType() + self.enterOuterAlt(localctx, 5) + self.state = 510 + self.binaryType() pass - elif token in [66]: + elif token in [64]: localctx = FuncTestCaseParser.DateContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 540 + self.enterOuterAlt(localctx, 6) + self.state = 511 self.dateType() pass - elif token in [67]: - localctx = FuncTestCaseParser.TimeContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 541 - self.timeType() - pass - elif token in [68, 89]: + elif token in [65, 84]: localctx = FuncTestCaseParser.IntervalYearContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 542 + self.enterOuterAlt(localctx, 7) + self.state = 512 self.intervalYearType() pass - elif token in [71]: + elif token in [68]: localctx = FuncTestCaseParser.UuidContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 543 + self.enterOuterAlt(localctx, 8) + self.state = 513 self.match(FuncTestCaseParser.UUID) - self.state = 545 + self.state = 515 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 544 + if _la==115: + self.state = 514 localctx.isnull = self.match(FuncTestCaseParser.QMark) pass - elif token in [83]: + elif token in [80]: localctx = FuncTestCaseParser.UserDefinedContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 547 + self.enterOuterAlt(localctx, 9) + self.state = 517 self.match(FuncTestCaseParser.UserDefined) - self.state = 548 + self.state = 518 self.match(FuncTestCaseParser.Identifier) - self.state = 550 + self.state = 520 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 549 + if _la==115: + self.state = 519 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5072,22 +4744,22 @@ def accept(self, visitor:ParseTreeVisitor): def booleanType(self): localctx = FuncTestCaseParser.BooleanTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_booleanType) + self.enterRule(localctx, 100, self.RULE_booleanType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 554 + self.state = 524 _la = self._input.LA(1) - if not(_la==55 or _la==84): + if not(_la==55 or _la==81): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 556 + self.state = 526 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 555 + if _la==115: + self.state = 525 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5140,22 +4812,22 @@ def accept(self, visitor:ParseTreeVisitor): def stringType(self): localctx = FuncTestCaseParser.StringTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_stringType) + self.enterRule(localctx, 102, self.RULE_stringType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 558 + self.state = 528 _la = self._input.LA(1) - if not(_la==62 or _la==85): + if not(_la==62 or _la==82): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 560 + self.state = 530 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 559 + if _la==115: + self.state = 529 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5208,22 +4880,22 @@ def accept(self, visitor:ParseTreeVisitor): def binaryType(self): localctx = FuncTestCaseParser.BinaryTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 110, self.RULE_binaryType) + self.enterRule(localctx, 104, self.RULE_binaryType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 562 + self.state = 532 _la = self._input.LA(1) - if not(_la==63 or _la==86): + if not(_la==63 or _la==83): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 564 + self.state = 534 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 563 + if _la==115: + self.state = 533 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5282,22 +4954,22 @@ def accept(self, visitor:ParseTreeVisitor): def intType(self): localctx = FuncTestCaseParser.IntTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_intType) + self.enterRule(localctx, 106, self.RULE_intType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 566 + self.state = 536 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 1080863910568919040) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 568 + self.state = 538 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 567 + if _la==115: + self.state = 537 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5350,22 +5022,22 @@ def accept(self, visitor:ParseTreeVisitor): def floatType(self): localctx = FuncTestCaseParser.FloatTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_floatType) + self.enterRule(localctx, 108, self.RULE_floatType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 570 + self.state = 540 _la = self._input.LA(1) if not(_la==60 or _la==61): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 572 + self.state = 542 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 571 + if _la==115: + self.state = 541 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5415,213 +5087,17 @@ def accept(self, visitor:ParseTreeVisitor): def dateType(self): localctx = FuncTestCaseParser.DateTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_dateType) + self.enterRule(localctx, 110, self.RULE_dateType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 574 + self.state = 544 self.match(FuncTestCaseParser.Date) - self.state = 576 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==120: - self.state = 575 - localctx.isnull = self.match(FuncTestCaseParser.QMark) - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class TimeTypeContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - self.isnull = None # Token - - def Time(self): - return self.getToken(FuncTestCaseParser.Time, 0) - - def QMark(self): - return self.getToken(FuncTestCaseParser.QMark, 0) - - def getRuleIndex(self): - return FuncTestCaseParser.RULE_timeType - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimeType" ): - listener.enterTimeType(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimeType" ): - listener.exitTimeType(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimeType" ): - return visitor.visitTimeType(self) - else: - return visitor.visitChildren(self) - - - - - def timeType(self): - - localctx = FuncTestCaseParser.TimeTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 118, self.RULE_timeType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 578 - self.match(FuncTestCaseParser.Time) - self.state = 580 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==120: - self.state = 579 - localctx.isnull = self.match(FuncTestCaseParser.QMark) - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class TimestampTypeContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - self.isnull = None # Token - - def Ts(self): - return self.getToken(FuncTestCaseParser.Ts, 0) - - def Timestamp(self): - return self.getToken(FuncTestCaseParser.Timestamp, 0) - - def QMark(self): - return self.getToken(FuncTestCaseParser.QMark, 0) - - def getRuleIndex(self): - return FuncTestCaseParser.RULE_timestampType - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampType" ): - listener.enterTimestampType(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampType" ): - listener.exitTimestampType(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampType" ): - return visitor.visitTimestampType(self) - else: - return visitor.visitChildren(self) - - - - - def timestampType(self): - - localctx = FuncTestCaseParser.TimestampTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 120, self.RULE_timestampType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 582 - _la = self._input.LA(1) - if not(_la==64 or _la==87): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 584 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==120: - self.state = 583 - localctx.isnull = self.match(FuncTestCaseParser.QMark) - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class TimestampTZTypeContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - self.isnull = None # Token - - def TsTZ(self): - return self.getToken(FuncTestCaseParser.TsTZ, 0) - - def Timestamp_TZ(self): - return self.getToken(FuncTestCaseParser.Timestamp_TZ, 0) - - def QMark(self): - return self.getToken(FuncTestCaseParser.QMark, 0) - - def getRuleIndex(self): - return FuncTestCaseParser.RULE_timestampTZType - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampTZType" ): - listener.enterTimestampTZType(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampTZType" ): - listener.exitTimestampTZType(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampTZType" ): - return visitor.visitTimestampTZType(self) - else: - return visitor.visitChildren(self) - - - - - def timestampTZType(self): - - localctx = FuncTestCaseParser.TimestampTZTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 122, self.RULE_timestampTZType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 586 - _la = self._input.LA(1) - if not(_la==65 or _la==88): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 588 + self.state = 546 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 587 + if _la==115: + self.state = 545 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5674,22 +5150,22 @@ def accept(self, visitor:ParseTreeVisitor): def intervalYearType(self): localctx = FuncTestCaseParser.IntervalYearTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 124, self.RULE_intervalYearType) + self.enterRule(localctx, 112, self.RULE_intervalYearType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 590 + self.state = 548 _la = self._input.LA(1) - if not(_la==68 or _la==89): + if not(_la==65 or _la==84): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 592 + self.state = 550 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 591 + if _la==115: + self.state = 549 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5753,34 +5229,34 @@ def accept(self, visitor:ParseTreeVisitor): def intervalDayType(self): localctx = FuncTestCaseParser.IntervalDayTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 126, self.RULE_intervalDayType) + self.enterRule(localctx, 114, self.RULE_intervalDayType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 594 + self.state = 552 _la = self._input.LA(1) - if not(_la==69 or _la==90): + if not(_la==66 or _la==85): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 596 + self.state = 554 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 595 + if _la==115: + self.state = 553 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 602 + self.state = 560 self._errHandler.sync(self) _la = self._input.LA(1) if _la==40: - self.state = 598 + self.state = 556 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 599 + self.state = 557 localctx.len_ = self.numericParameter() - self.state = 600 + self.state = 558 self.match(FuncTestCaseParser.CAngleBracket) @@ -5844,34 +5320,34 @@ def accept(self, visitor:ParseTreeVisitor): def intervalCompoundType(self): localctx = FuncTestCaseParser.IntervalCompoundTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 128, self.RULE_intervalCompoundType) + self.enterRule(localctx, 116, self.RULE_intervalCompoundType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 604 + self.state = 562 _la = self._input.LA(1) - if not(_la==70 or _la==91): + if not(_la==67 or _la==86): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 606 + self.state = 564 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 605 + if _la==115: + self.state = 563 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 612 + self.state = 570 self._errHandler.sync(self) _la = self._input.LA(1) if _la==40: - self.state = 608 + self.state = 566 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 609 + self.state = 567 localctx.len_ = self.numericParameter() - self.state = 610 + self.state = 568 self.match(FuncTestCaseParser.CAngleBracket) @@ -5935,30 +5411,30 @@ def accept(self, visitor:ParseTreeVisitor): def fixedCharType(self): localctx = FuncTestCaseParser.FixedCharTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 130, self.RULE_fixedCharType) + self.enterRule(localctx, 118, self.RULE_fixedCharType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 614 + self.state = 572 _la = self._input.LA(1) - if not(_la==76 or _la==96): + if not(_la==73 or _la==91): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 616 + self.state = 574 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 615 + if _la==115: + self.state = 573 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 618 + self.state = 576 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 619 + self.state = 577 localctx.len_ = self.numericParameter() - self.state = 620 + self.state = 578 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6020,30 +5496,30 @@ def accept(self, visitor:ParseTreeVisitor): def varCharType(self): localctx = FuncTestCaseParser.VarCharTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_varCharType) + self.enterRule(localctx, 120, self.RULE_varCharType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 622 + self.state = 580 _la = self._input.LA(1) - if not(_la==77 or _la==97): + if not(_la==74 or _la==92): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 624 + self.state = 582 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 623 + if _la==115: + self.state = 581 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 626 + self.state = 584 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 627 + self.state = 585 localctx.len_ = self.numericParameter() - self.state = 628 + self.state = 586 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6105,30 +5581,30 @@ def accept(self, visitor:ParseTreeVisitor): def fixedBinaryType(self): localctx = FuncTestCaseParser.FixedBinaryTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 134, self.RULE_fixedBinaryType) + self.enterRule(localctx, 122, self.RULE_fixedBinaryType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 630 + self.state = 588 _la = self._input.LA(1) - if not(_la==78 or _la==98): + if not(_la==75 or _la==93): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 632 + self.state = 590 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 631 + if _la==115: + self.state = 589 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 634 + self.state = 592 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 635 + self.state = 593 localctx.len_ = self.numericParameter() - self.state = 636 + self.state = 594 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6197,38 +5673,38 @@ def accept(self, visitor:ParseTreeVisitor): def decimalType(self): localctx = FuncTestCaseParser.DecimalTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 136, self.RULE_decimalType) + self.enterRule(localctx, 124, self.RULE_decimalType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 638 + self.state = 596 _la = self._input.LA(1) - if not(_la==72 or _la==92): + if not(_la==69 or _la==87): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 640 + self.state = 598 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 639 + if _la==115: + self.state = 597 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 648 + self.state = 606 self._errHandler.sync(self) _la = self._input.LA(1) if _la==40: - self.state = 642 + self.state = 600 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 643 + self.state = 601 localctx.precision = self.numericParameter() - self.state = 644 + self.state = 602 self.match(FuncTestCaseParser.Comma) - self.state = 645 + self.state = 603 localctx.scale = self.numericParameter() - self.state = 646 + self.state = 604 self.match(FuncTestCaseParser.CAngleBracket) @@ -6292,30 +5768,30 @@ def accept(self, visitor:ParseTreeVisitor): def precisionTimeType(self): localctx = FuncTestCaseParser.PrecisionTimeTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 138, self.RULE_precisionTimeType) + self.enterRule(localctx, 126, self.RULE_precisionTimeType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 650 + self.state = 608 _la = self._input.LA(1) - if not(_la==73 or _la==93): + if not(_la==70 or _la==88): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 652 + self.state = 610 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 651 + if _la==115: + self.state = 609 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 654 + self.state = 612 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 655 + self.state = 613 localctx.precision = self.numericParameter() - self.state = 656 + self.state = 614 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6377,30 +5853,30 @@ def accept(self, visitor:ParseTreeVisitor): def precisionTimestampType(self): localctx = FuncTestCaseParser.PrecisionTimestampTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 140, self.RULE_precisionTimestampType) + self.enterRule(localctx, 128, self.RULE_precisionTimestampType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 658 + self.state = 616 _la = self._input.LA(1) - if not(_la==74 or _la==94): + if not(_la==71 or _la==89): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 660 + self.state = 618 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 659 + if _la==115: + self.state = 617 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 662 + self.state = 620 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 663 + self.state = 621 localctx.precision = self.numericParameter() - self.state = 664 + self.state = 622 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6462,30 +5938,30 @@ def accept(self, visitor:ParseTreeVisitor): def precisionTimestampTZType(self): localctx = FuncTestCaseParser.PrecisionTimestampTZTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 142, self.RULE_precisionTimestampTZType) + self.enterRule(localctx, 130, self.RULE_precisionTimestampTZType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 666 + self.state = 624 _la = self._input.LA(1) - if not(_la==75 or _la==95): + if not(_la==72 or _la==90): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 668 + self.state = 626 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 667 + if _la==115: + self.state = 625 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 670 + self.state = 628 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 671 + self.state = 629 localctx.precision = self.numericParameter() - self.state = 672 + self.state = 630 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6552,26 +6028,26 @@ def accept(self, visitor:ParseTreeVisitor): def listType(self): localctx = FuncTestCaseParser.ListTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 144, self.RULE_listType) + self.enterRule(localctx, 132, self.RULE_listType) self._la = 0 # Token type try: localctx = FuncTestCaseParser.ListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 674 + self.state = 632 self.match(FuncTestCaseParser.List) - self.state = 676 + self.state = 634 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 675 + if _la==115: + self.state = 633 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 678 + self.state = 636 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 679 + self.state = 637 localctx.elemType = self.dataType() - self.state = 680 + self.state = 638 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6638,29 +6114,29 @@ def accept(self, visitor:ParseTreeVisitor): def funcType(self): localctx = FuncTestCaseParser.FuncTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 146, self.RULE_funcType) + self.enterRule(localctx, 134, self.RULE_funcType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 682 + self.state = 640 self.match(FuncTestCaseParser.Func) - self.state = 684 + self.state = 642 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==120: - self.state = 683 + if _la==115: + self.state = 641 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 686 + self.state = 644 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 687 + self.state = 645 localctx.params = self.funcParameters() - self.state = 688 + self.state = 646 self.match(FuncTestCaseParser.Arrow) - self.state = 689 + self.state = 647 localctx.returnType = self.dataType() - self.state = 690 + self.state = 648 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6754,38 +6230,38 @@ def accept(self, visitor:ParseTreeVisitor): def funcParameters(self): localctx = FuncTestCaseParser.FuncParametersContext(self, self._ctx, self.state) - self.enterRule(localctx, 148, self.RULE_funcParameters) + self.enterRule(localctx, 136, self.RULE_funcParameters) self._la = 0 # Token type try: - self.state = 704 + self.state = 662 self._errHandler.sync(self) token = self._input.LA(1) - if token in [54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98]: + if token in [54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93]: localctx = FuncTestCaseParser.SingleFuncParamContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 692 + self.state = 650 self.dataType() pass - elif token in [114]: + elif token in [109]: localctx = FuncTestCaseParser.FuncParamsWithParensContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 693 + self.state = 651 self.match(FuncTestCaseParser.OParen) - self.state = 694 + self.state = 652 self.dataType() - self.state = 699 + self.state = 657 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 695 + while _la==113: + self.state = 653 self.match(FuncTestCaseParser.Comma) - self.state = 696 + self.state = 654 self.dataType() - self.state = 701 + self.state = 659 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 702 + self.state = 660 self.match(FuncTestCaseParser.CParen) pass else: @@ -6874,64 +6350,64 @@ def accept(self, visitor:ParseTreeVisitor): def parameterizedType(self): localctx = FuncTestCaseParser.ParameterizedTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 150, self.RULE_parameterizedType) + self.enterRule(localctx, 138, self.RULE_parameterizedType) try: - self.state = 717 + self.state = 675 self._errHandler.sync(self) token = self._input.LA(1) - if token in [76, 96]: + if token in [73, 91]: self.enterOuterAlt(localctx, 1) - self.state = 706 + self.state = 664 self.fixedCharType() pass - elif token in [77, 97]: + elif token in [74, 92]: self.enterOuterAlt(localctx, 2) - self.state = 707 + self.state = 665 self.varCharType() pass - elif token in [78, 98]: + elif token in [75, 93]: self.enterOuterAlt(localctx, 3) - self.state = 708 + self.state = 666 self.fixedBinaryType() pass - elif token in [72, 92]: + elif token in [69, 87]: self.enterOuterAlt(localctx, 4) - self.state = 709 + self.state = 667 self.decimalType() pass - elif token in [69, 90]: + elif token in [66, 85]: self.enterOuterAlt(localctx, 5) - self.state = 710 + self.state = 668 self.intervalDayType() pass - elif token in [70, 91]: + elif token in [67, 86]: self.enterOuterAlt(localctx, 6) - self.state = 711 + self.state = 669 self.intervalCompoundType() pass - elif token in [73, 93]: + elif token in [70, 88]: self.enterOuterAlt(localctx, 7) - self.state = 712 + self.state = 670 self.precisionTimeType() pass - elif token in [74, 94]: + elif token in [71, 89]: self.enterOuterAlt(localctx, 8) - self.state = 713 + self.state = 671 self.precisionTimestampType() pass - elif token in [75, 95]: + elif token in [72, 90]: self.enterOuterAlt(localctx, 9) - self.state = 714 + self.state = 672 self.precisionTimestampTZType() pass - elif token in [81]: + elif token in [78]: self.enterOuterAlt(localctx, 10) - self.state = 715 + self.state = 673 self.listType() pass elif token in [54]: self.enterOuterAlt(localctx, 11) - self.state = 716 + self.state = 674 self.funcType() pass else: @@ -6991,11 +6467,11 @@ def accept(self, visitor:ParseTreeVisitor): def numericParameter(self): localctx = FuncTestCaseParser.NumericParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 152, self.RULE_numericParameter) + self.enterRule(localctx, 140, self.RULE_numericParameter) try: localctx = FuncTestCaseParser.IntegerLiteralContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 719 + self.state = 677 self.match(FuncTestCaseParser.IntegerLiteral) except RecognitionException as re: localctx.exception = re @@ -7042,11 +6518,11 @@ def accept(self, visitor:ParseTreeVisitor): def substraitError(self): localctx = FuncTestCaseParser.SubstraitErrorContext(self, self._ctx, self.state) - self.enterRule(localctx, 154, self.RULE_substraitError) + self.enterRule(localctx, 142, self.RULE_substraitError) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 721 + self.state = 679 _la = self._input.LA(1) if not(_la==10 or _la==11): self._errHandler.recoverInline(self) @@ -7103,14 +6579,14 @@ def accept(self, visitor:ParseTreeVisitor): def funcOption(self): localctx = FuncTestCaseParser.FuncOptionContext(self, self._ctx, self.state) - self.enterRule(localctx, 156, self.RULE_funcOption) + self.enterRule(localctx, 144, self.RULE_funcOption) try: self.enterOuterAlt(localctx, 1) - self.state = 723 + self.state = 681 self.optionName() - self.state = 724 + self.state = 682 self.match(FuncTestCaseParser.Colon) - self.state = 725 + self.state = 683 self.optionValue() except RecognitionException as re: localctx.exception = re @@ -7166,13 +6642,13 @@ def accept(self, visitor:ParseTreeVisitor): def optionName(self): localctx = FuncTestCaseParser.OptionNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 158, self.RULE_optionName) + self.enterRule(localctx, 146, self.RULE_optionName) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 727 + self.state = 685 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 6303744) != 0) or _la==128): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 6303744) != 0) or _la==123): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -7249,13 +6725,13 @@ def accept(self, visitor:ParseTreeVisitor): def optionValue(self): localctx = FuncTestCaseParser.OptionValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 160, self.RULE_optionValue) + self.enterRule(localctx, 148, self.RULE_optionValue) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 729 + self.state = 687 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 35184516775936) != 0) or _la==128): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 35184516775936) != 0) or _la==123): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -7312,21 +6788,21 @@ def accept(self, visitor:ParseTreeVisitor): def funcOptions(self): localctx = FuncTestCaseParser.FuncOptionsContext(self, self._ctx, self.state) - self.enterRule(localctx, 162, self.RULE_funcOptions) + self.enterRule(localctx, 150, self.RULE_funcOptions) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 731 + self.state = 689 self.funcOption() - self.state = 736 + self.state = 694 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==118: - self.state = 732 + while _la==113: + self.state = 690 self.match(FuncTestCaseParser.Comma) - self.state = 733 + self.state = 691 self.funcOption() - self.state = 738 + self.state = 696 self._errHandler.sync(self) _la = self._input.LA(1) @@ -7378,13 +6854,13 @@ def accept(self, visitor:ParseTreeVisitor): def nonReserved(self): localctx = FuncTestCaseParser.NonReservedContext(self, self._ctx, self.state) - self.enterRule(localctx, 164, self.RULE_nonReserved) + self.enterRule(localctx, 152, self.RULE_nonReserved) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 739 + self.state = 697 _la = self._input.LA(1) - if not(_la==23 or _la==123 or _la==124): + if not(_la==23 or _la==118 or _la==119): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -7435,19 +6911,19 @@ def accept(self, visitor:ParseTreeVisitor): def identifier(self): localctx = FuncTestCaseParser.IdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 166, self.RULE_identifier) + self.enterRule(localctx, 154, self.RULE_identifier) try: - self.state = 743 + self.state = 701 self._errHandler.sync(self) token = self._input.LA(1) - if token in [23, 123, 124]: + if token in [23, 118, 119]: self.enterOuterAlt(localctx, 1) - self.state = 741 + self.state = 699 self.nonReserved() pass - elif token in [128]: + elif token in [123]: self.enterOuterAlt(localctx, 2) - self.state = 742 + self.state = 700 self.match(FuncTestCaseParser.Identifier) pass else: diff --git a/tests/coverage/antlr_parser/FuncTestCaseParserListener.py b/tests/coverage/antlr_parser/FuncTestCaseParserListener.py index 68d8d9354..e9f293015 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseParserListener.py +++ b/tests/coverage/antlr_parser/FuncTestCaseParserListener.py @@ -315,33 +315,6 @@ def exitDateArg(self, ctx:FuncTestCaseParser.DateArgContext): pass - # Enter a parse tree produced by FuncTestCaseParser#timeArg. - def enterTimeArg(self, ctx:FuncTestCaseParser.TimeArgContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timeArg. - def exitTimeArg(self, ctx:FuncTestCaseParser.TimeArgContext): - pass - - - # Enter a parse tree produced by FuncTestCaseParser#timestampArg. - def enterTimestampArg(self, ctx:FuncTestCaseParser.TimestampArgContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timestampArg. - def exitTimestampArg(self, ctx:FuncTestCaseParser.TimestampArgContext): - pass - - - # Enter a parse tree produced by FuncTestCaseParser#timestampTzArg. - def enterTimestampTzArg(self, ctx:FuncTestCaseParser.TimestampTzArgContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timestampTzArg. - def exitTimestampTzArg(self, ctx:FuncTestCaseParser.TimestampTzArgContext): - pass - - # Enter a parse tree produced by FuncTestCaseParser#intervalYearArg. def enterIntervalYearArg(self, ctx:FuncTestCaseParser.IntervalYearArgContext): pass @@ -558,24 +531,6 @@ def exitBinary(self, ctx:FuncTestCaseParser.BinaryContext): pass - # Enter a parse tree produced by FuncTestCaseParser#timestamp. - def enterTimestamp(self, ctx:FuncTestCaseParser.TimestampContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timestamp. - def exitTimestamp(self, ctx:FuncTestCaseParser.TimestampContext): - pass - - - # Enter a parse tree produced by FuncTestCaseParser#timestampTz. - def enterTimestampTz(self, ctx:FuncTestCaseParser.TimestampTzContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timestampTz. - def exitTimestampTz(self, ctx:FuncTestCaseParser.TimestampTzContext): - pass - - # Enter a parse tree produced by FuncTestCaseParser#date. def enterDate(self, ctx:FuncTestCaseParser.DateContext): pass @@ -585,15 +540,6 @@ def exitDate(self, ctx:FuncTestCaseParser.DateContext): pass - # Enter a parse tree produced by FuncTestCaseParser#time. - def enterTime(self, ctx:FuncTestCaseParser.TimeContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#time. - def exitTime(self, ctx:FuncTestCaseParser.TimeContext): - pass - - # Enter a parse tree produced by FuncTestCaseParser#intervalYear. def enterIntervalYear(self, ctx:FuncTestCaseParser.IntervalYearContext): pass @@ -675,33 +621,6 @@ def exitDateType(self, ctx:FuncTestCaseParser.DateTypeContext): pass - # Enter a parse tree produced by FuncTestCaseParser#timeType. - def enterTimeType(self, ctx:FuncTestCaseParser.TimeTypeContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timeType. - def exitTimeType(self, ctx:FuncTestCaseParser.TimeTypeContext): - pass - - - # Enter a parse tree produced by FuncTestCaseParser#timestampType. - def enterTimestampType(self, ctx:FuncTestCaseParser.TimestampTypeContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timestampType. - def exitTimestampType(self, ctx:FuncTestCaseParser.TimestampTypeContext): - pass - - - # Enter a parse tree produced by FuncTestCaseParser#timestampTZType. - def enterTimestampTZType(self, ctx:FuncTestCaseParser.TimestampTZTypeContext): - pass - - # Exit a parse tree produced by FuncTestCaseParser#timestampTZType. - def exitTimestampTZType(self, ctx:FuncTestCaseParser.TimestampTZTypeContext): - pass - - # Enter a parse tree produced by FuncTestCaseParser#intervalYearType. def enterIntervalYearType(self, ctx:FuncTestCaseParser.IntervalYearTypeContext): pass diff --git a/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py b/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py index 2888a99e5..c717e5b92 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py +++ b/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py @@ -180,21 +180,6 @@ def visitDateArg(self, ctx:FuncTestCaseParser.DateArgContext): return self.visitChildren(ctx) - # Visit a parse tree produced by FuncTestCaseParser#timeArg. - def visitTimeArg(self, ctx:FuncTestCaseParser.TimeArgContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by FuncTestCaseParser#timestampArg. - def visitTimestampArg(self, ctx:FuncTestCaseParser.TimestampArgContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by FuncTestCaseParser#timestampTzArg. - def visitTimestampTzArg(self, ctx:FuncTestCaseParser.TimestampTzArgContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by FuncTestCaseParser#intervalYearArg. def visitIntervalYearArg(self, ctx:FuncTestCaseParser.IntervalYearArgContext): return self.visitChildren(ctx) @@ -315,26 +300,11 @@ def visitBinary(self, ctx:FuncTestCaseParser.BinaryContext): return self.visitChildren(ctx) - # Visit a parse tree produced by FuncTestCaseParser#timestamp. - def visitTimestamp(self, ctx:FuncTestCaseParser.TimestampContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by FuncTestCaseParser#timestampTz. - def visitTimestampTz(self, ctx:FuncTestCaseParser.TimestampTzContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by FuncTestCaseParser#date. def visitDate(self, ctx:FuncTestCaseParser.DateContext): return self.visitChildren(ctx) - # Visit a parse tree produced by FuncTestCaseParser#time. - def visitTime(self, ctx:FuncTestCaseParser.TimeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by FuncTestCaseParser#intervalYear. def visitIntervalYear(self, ctx:FuncTestCaseParser.IntervalYearContext): return self.visitChildren(ctx) @@ -380,21 +350,6 @@ def visitDateType(self, ctx:FuncTestCaseParser.DateTypeContext): return self.visitChildren(ctx) - # Visit a parse tree produced by FuncTestCaseParser#timeType. - def visitTimeType(self, ctx:FuncTestCaseParser.TimeTypeContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by FuncTestCaseParser#timestampType. - def visitTimestampType(self, ctx:FuncTestCaseParser.TimestampTypeContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by FuncTestCaseParser#timestampTZType. - def visitTimestampTZType(self, ctx:FuncTestCaseParser.TimestampTZTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by FuncTestCaseParser#intervalYearType. def visitIntervalYearType(self, ctx:FuncTestCaseParser.IntervalYearTypeContext): return self.visitChildren(ctx) diff --git a/tests/coverage/extensions.py b/tests/coverage/extensions.py index 4f9ae1d3c..7587167fa 100644 --- a/tests/coverage/extensions.py +++ b/tests/coverage/extensions.py @@ -32,10 +32,7 @@ def build_type_to_short_type(): FuncTestCaseLexer.String: FuncTestCaseLexer.Str, FuncTestCaseLexer.Binary: FuncTestCaseLexer.VBin, FuncTestCaseLexer.Boolean: FuncTestCaseLexer.Bool, - FuncTestCaseLexer.Timestamp: FuncTestCaseLexer.Ts, - FuncTestCaseLexer.Timestamp_TZ: FuncTestCaseLexer.TsTZ, FuncTestCaseLexer.Date: FuncTestCaseLexer.Date, - FuncTestCaseLexer.Time: FuncTestCaseLexer.Time, FuncTestCaseLexer.Interval_Year: FuncTestCaseLexer.IYear, FuncTestCaseLexer.Interval_Day: FuncTestCaseLexer.IDay, FuncTestCaseLexer.Interval_Compound: FuncTestCaseLexer.ICompound, @@ -44,6 +41,7 @@ def build_type_to_short_type(): FuncTestCaseLexer.VarChar: FuncTestCaseLexer.VChar, FuncTestCaseLexer.FixedBinary: FuncTestCaseLexer.FBin, FuncTestCaseLexer.Decimal: FuncTestCaseLexer.Dec, + FuncTestCaseLexer.Precision_Time: FuncTestCaseLexer.PT, FuncTestCaseLexer.Precision_Timestamp: FuncTestCaseLexer.PTs, FuncTestCaseLexer.Precision_Timestamp_TZ: FuncTestCaseLexer.PTsTZ, FuncTestCaseLexer.Struct: FuncTestCaseLexer.Struct, diff --git a/tests/coverage/test_coverage.py b/tests/coverage/test_coverage.py index 5b0179609..75c60ed92 100644 --- a/tests/coverage/test_coverage.py +++ b/tests/coverage/test_coverage.py @@ -45,8 +45,8 @@ def test_parse_basic_example(): def test_parse_date_time_example(): header = make_header("v1.0", "/extensions/functions_datetime.yaml") - tests = """# timestamp examples using the timestamp type -lt('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool + tests = """# timestamp examples using the precision_timestamp type +lt('2016-12-31T13:30:15'::pts<6>, '2017-12-31T13:30:15'::pts<6>) = true::bool """ test_file = parse_string(header + tests) @@ -55,11 +55,15 @@ def test_parse_date_time_example(): assert test_file.testcases[0].base_uri == "/extensions/functions_datetime.yaml" assert ( test_file.testcases[0].group.name - == "timestamp examples using the timestamp type" + == "timestamp examples using the precision_timestamp type" ) assert test_file.testcases[0].result == CaseLiteral("true", "bool") - assert test_file.testcases[0].args[0] == CaseLiteral("2016-12-31T13:30:15", "ts") - assert test_file.testcases[0].args[1] == CaseLiteral("2017-12-31T13:30:15", "ts") + assert test_file.testcases[0].args[0] == CaseLiteral( + "2016-12-31T13:30:15", "pts<6>" + ) + assert test_file.testcases[0].args[1] == CaseLiteral( + "2017-12-31T13:30:15", "pts<6>" + ) def test_parse_decimal_example(): @@ -430,10 +434,10 @@ def test_parse_errors_with_bad_aggregate_testcases(input_func_test, expected_mes "f6(1.1::dec<38,10>, 2.2::dec<38,10>) = 3.3::dec<38,10>", "f7(1.1::dec<38,10>, 2.2::decimal<38,10>) = 3.3::decimal<38,10>", "f8('1991-01-01'::date) = '2001-01-01'::date", - "f9('13:01:01.2345678'::time) = '23:59:59.999'::time", - "f10('1991-01-01T01:02:03.456'::ts, '1991-01-01T00:00:00'::timestamp) = '1991-01-01T22:33:44'::ts", - "f11('1991-01-01T01:02:03.456+05:30'::tstz, '1991-01-01T00:00:00+15:30'::timestamp_tz) = 23::i32", - "f12('1991-01-01'::date, 5::i64) = '1991-01-01T00:00:00+15:30'::timestamp_tz", + "f9('13:01:01.2345678'::pt<6>) = '23:59:59.999'::pt<6>", + "f10('1991-01-01T01:02:03.456'::pts<6>, '1991-01-01T00:00:00'::pts<6>) = '1991-01-01T22:33:44'::pts<6>", + "f11('1991-01-01T01:02:03.456+05:30'::ptstz<6>, '1991-01-01T00:00:00+15:30'::ptstz<6>) = 23::i32", + "f12('1991-01-01'::date, 5::i64) = '1991-01-01T00:00:00+15:30'::ptstz<6>", "f13('P10Y5M'::interval_year, 5::i64) = 'P15Y5M'::interval_year", "f14('P10Y5M'::iyear, 5::i64) = 'P15Y5M'::iyear", "f15('P10DT5H6M7.2000S'::interval_day<6>, 5::i64) = 'P10DT10H6M7.2000S'::interval_day<6>", @@ -563,9 +567,9 @@ def test_nullable_types(): "concat([1, 2]::List?, [3]::List?) = [1, 2, 3]::List?", # Date and time types "lt('2020-01-01'::date?, '2020-01-02'::date?) = true::bool", - "lt('12:00:00'::time?, '13:00:00'::time?) = true::bool", - "lt('2020-01-01T12:00:00'::ts?, '2020-01-02T12:00:00'::ts?) = true::bool", - "lt('2020-01-01T12:00:00+00:00'::tstz?, '2020-01-02T12:00:00+00:00'::tstz?) = true::bool", + "lt('12:00:00'::pt?<6>, '13:00:00'::pt?<6>) = true::bool", + "lt('2020-01-01T12:00:00'::pts?<6>, '2020-01-02T12:00:00'::pts?<6>) = true::bool", + "lt('2020-01-01T12:00:00+00:00'::ptstz?<6>, '2020-01-02T12:00:00+00:00'::ptstz?<6>) = true::bool", # Interval types "lt('P1Y'::iyear?, 'P2Y'::iyear?) = true::bool", "lt('P1D'::iday?, 'P2D'::iday?) = true::bool", diff --git a/tests/coverage/visitor.py b/tests/coverage/visitor.py index 820eb6583..0f964ce5f 100644 --- a/tests/coverage/visitor.py +++ b/tests/coverage/visitor.py @@ -243,11 +243,11 @@ def visitLiteral(self, ctx: FuncTestCaseParser.LiteralContext): if ctx.DateLiteral() is not None: return ctx.getText(), "date" if ctx.TimeLiteral() is not None: - return ctx.getText(), "time" + return ctx.getText(), "pt" if ctx.TimestampLiteral() is not None: - return ctx.getText(), "ts" + return ctx.getText(), "pts" if ctx.TimestampTzLiteral() is not None: - return ctx.getText(), "tstz" + return ctx.getText(), "ptstz" if ctx.IntervalDayLiteral() is not None: return ctx.getText(), "iday" if ctx.IntervalYearLiteral() is not None: @@ -286,12 +286,6 @@ def visitArgument(self, ctx: FuncTestCaseParser.ArgumentContext): return self.visitDecimalArg(ctx.decimalArg()) if ctx.dateArg() is not None: return self.visitDateArg(ctx.dateArg()) - if ctx.timeArg() is not None: - return self.visitTimeArg(ctx.timeArg()) - if ctx.timestampArg() is not None: - return self.visitTimestampArg(ctx.timestampArg()) - if ctx.timestampTzArg() is not None: - return self.visitTimestampTzArg(ctx.timestampTzArg()) if ctx.intervalDayArg() is not None: return self.visitIntervalDayArg(ctx.intervalDayArg()) if ctx.intervalYearArg() is not None: @@ -387,30 +381,6 @@ def visitDateArg(self, ctx: FuncTestCaseParser.DateArgContext): nullable=ctx.dateType().isnull is not None, ) - def visitTimeArg(self, ctx: FuncTestCaseParser.TimeArgContext): - type_str = ctx.timeType().getText().lower() - return CaseLiteral( - value=ctx.TimeLiteral().getText().strip("'"), - type=type_str, - nullable=ctx.timeType().isnull is not None, - ) - - def visitTimestampArg(self, ctx: FuncTestCaseParser.TimestampArgContext): - type_str = ctx.timestampType().getText().lower() - return CaseLiteral( - value=ctx.TimestampLiteral().getText().strip("'"), - type=type_str, - nullable=ctx.timestampType().isnull is not None, - ) - - def visitTimestampTzArg(self, ctx: FuncTestCaseParser.TimestampTzArgContext): - type_str = ctx.timestampTZType().getText().lower() - return CaseLiteral( - value=ctx.TimestampTzLiteral().getText().strip("'"), - type=type_str, - nullable=ctx.timestampTZType().isnull is not None, - ) - def visitIntervalDayArg(self, ctx: FuncTestCaseParser.IntervalDayArgContext): type_str = ctx.intervalDayType().getText().lower() return CaseLiteral( diff --git a/tests/test_extensions.py b/tests/test_extensions.py index a9e4e4e71..0a444afb5 100644 --- a/tests/test_extensions.py +++ b/tests/test_extensions.py @@ -62,10 +62,9 @@ def test_build_type_to_short_type(): long_to_short = build_type_to_short_type() assert long_to_short["i64"] == "i64" assert long_to_short["fp64"] == "fp64" - assert long_to_short["timestamp"] == "ts" - assert long_to_short["timestamp_tz"] == "tstz" assert long_to_short["precision_timestamp"] == "pts" assert long_to_short["precision_timestamp_tz"] == "ptstz" + assert long_to_short["precision_time"] == "pt" assert long_to_short["interval_year"] == "iyear" assert long_to_short["interval_day"] == "iday" assert long_to_short["interval_compound"] == "icompound" diff --git a/tests/type/antlr_parser/SubstraitLexer.py b/tests/type/antlr_parser/SubstraitLexer.py index 93a45f4c2..4c99f8a51 100644 --- a/tests/type/antlr_parser/SubstraitLexer.py +++ b/tests/type/antlr_parser/SubstraitLexer.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,0,84,670,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, + 4,0,79,624,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, @@ -23,229 +23,213 @@ def serializedATN(): 58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2, 65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7, 71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2, - 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7, - 84,2,85,7,85,2,86,7,86,1,0,1,0,1,0,1,0,5,0,180,8,0,10,0,12,0,183, - 9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,192,8,1,11,1,12,1,193,1,1,3, - 1,197,8,1,1,1,5,1,200,8,1,10,1,12,1,203,9,1,1,1,1,1,1,1,1,1,1,1, - 1,2,4,2,211,8,2,11,2,12,2,212,1,2,1,2,1,3,1,3,1,4,1,4,1,4,1,5,1, - 5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1, - 8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11, - 1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,14,1,14, - 1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17, - 1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, - 1,18,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22, - 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23, - 1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23, - 1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25, - 1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36, - 1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39, - 1,39,1,39,1,39,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42, - 1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44, - 1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,1,46, - 1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,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,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55, - 1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,1,60,1,60,1,61,1,61,1,61, - 1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,65,1,65,1,66,1,66,1,67, - 1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1,71,1,72,1,72,1,73,1,73, - 1,74,1,74,1,75,1,75,1,76,1,76,1,77,1,77,1,78,1,78,1,78,1,78,1,79, - 1,79,1,79,1,80,1,80,1,80,1,81,1,81,1,81,1,82,1,82,5,82,641,8,82, - 10,82,12,82,644,9,82,1,82,3,82,647,8,82,1,83,1,83,1,84,3,84,652, - 8,84,1,84,1,84,1,85,1,85,1,85,5,85,659,8,85,10,85,12,85,662,9,85, - 1,86,1,86,3,86,666,8,86,1,86,3,86,669,8,86,0,0,87,1,1,3,2,5,3,7, - 0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23,11,25,12,27,13,29,14,31, - 15,33,16,35,17,37,18,39,19,41,20,43,21,45,22,47,23,49,24,51,25,53, - 26,55,27,57,28,59,29,61,30,63,31,65,32,67,33,69,34,71,35,73,36,75, - 37,77,38,79,39,81,40,83,41,85,42,87,43,89,44,91,45,93,46,95,47,97, - 48,99,49,101,50,103,51,105,52,107,53,109,54,111,55,113,56,115,57, - 117,58,119,59,121,60,123,61,125,62,127,63,129,64,131,65,133,66,135, - 67,137,68,139,69,141,70,143,71,145,72,147,73,149,74,151,75,153,76, - 155,77,157,78,159,79,161,80,163,81,165,0,167,0,169,82,171,83,173, - 84,1,0,28,2,0,10,10,13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13, - 32,32,1,0,48,57,2,0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116, - 116,2,0,72,72,104,104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76, - 76,108,108,2,0,83,83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2, - 0,66,66,98,98,2,0,79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112, - 2,0,82,82,114,114,2,0,71,71,103,103,2,0,89,89,121,121,2,0,77,77, - 109,109,2,0,90,90,122,122,2,0,68,68,100,100,2,0,86,86,118,118,2, - 0,88,88,120,120,4,0,36,36,65,90,95,95,97,122,678,0,1,1,0,0,0,0,3, - 1,0,0,0,0,5,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,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1, - 0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1, - 0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1, - 0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1, - 0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1, - 0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1, - 0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105, - 1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0, - 0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1, - 0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0, - 133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0, - 0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151, - 1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0, - 0,161,1,0,0,0,0,163,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1, - 0,0,0,1,175,1,0,0,0,3,186,1,0,0,0,5,210,1,0,0,0,7,216,1,0,0,0,9, - 218,1,0,0,0,11,221,1,0,0,0,13,226,1,0,0,0,15,231,1,0,0,0,17,236, - 1,0,0,0,19,244,1,0,0,0,21,247,1,0,0,0,23,251,1,0,0,0,25,255,1,0, - 0,0,27,259,1,0,0,0,29,264,1,0,0,0,31,269,1,0,0,0,33,276,1,0,0,0, - 35,283,1,0,0,0,37,293,1,0,0,0,39,306,1,0,0,0,41,311,1,0,0,0,43,316, - 1,0,0,0,45,330,1,0,0,0,47,343,1,0,0,0,49,361,1,0,0,0,51,366,1,0, - 0,0,53,374,1,0,0,0,55,389,1,0,0,0,57,409,1,0,0,0,59,432,1,0,0,0, - 61,442,1,0,0,0,63,450,1,0,0,0,65,462,1,0,0,0,67,469,1,0,0,0,69,477, - 1,0,0,0,71,482,1,0,0,0,73,486,1,0,0,0,75,489,1,0,0,0,77,494,1,0, - 0,0,79,498,1,0,0,0,81,503,1,0,0,0,83,506,1,0,0,0,85,511,1,0,0,0, - 87,517,1,0,0,0,89,522,1,0,0,0,91,532,1,0,0,0,93,536,1,0,0,0,95,539, - 1,0,0,0,97,543,1,0,0,0,99,549,1,0,0,0,101,555,1,0,0,0,103,561,1, - 0,0,0,105,566,1,0,0,0,107,570,1,0,0,0,109,573,1,0,0,0,111,576,1, - 0,0,0,113,578,1,0,0,0,115,580,1,0,0,0,117,582,1,0,0,0,119,584,1, - 0,0,0,121,586,1,0,0,0,123,588,1,0,0,0,125,591,1,0,0,0,127,594,1, - 0,0,0,129,597,1,0,0,0,131,599,1,0,0,0,133,601,1,0,0,0,135,603,1, - 0,0,0,137,605,1,0,0,0,139,607,1,0,0,0,141,609,1,0,0,0,143,611,1, - 0,0,0,145,613,1,0,0,0,147,615,1,0,0,0,149,617,1,0,0,0,151,619,1, - 0,0,0,153,621,1,0,0,0,155,623,1,0,0,0,157,625,1,0,0,0,159,629,1, - 0,0,0,161,632,1,0,0,0,163,635,1,0,0,0,165,646,1,0,0,0,167,648,1, - 0,0,0,169,651,1,0,0,0,171,655,1,0,0,0,173,668,1,0,0,0,175,176,5, - 47,0,0,176,177,5,47,0,0,177,181,1,0,0,0,178,180,8,0,0,0,179,178, - 1,0,0,0,180,183,1,0,0,0,181,179,1,0,0,0,181,182,1,0,0,0,182,184, - 1,0,0,0,183,181,1,0,0,0,184,185,6,0,0,0,185,2,1,0,0,0,186,187,5, - 47,0,0,187,188,5,42,0,0,188,196,1,0,0,0,189,197,8,1,0,0,190,192, - 5,42,0,0,191,190,1,0,0,0,192,193,1,0,0,0,193,191,1,0,0,0,193,194, - 1,0,0,0,194,195,1,0,0,0,195,197,8,2,0,0,196,189,1,0,0,0,196,191, - 1,0,0,0,197,201,1,0,0,0,198,200,5,42,0,0,199,198,1,0,0,0,200,203, - 1,0,0,0,201,199,1,0,0,0,201,202,1,0,0,0,202,204,1,0,0,0,203,201, - 1,0,0,0,204,205,5,42,0,0,205,206,5,47,0,0,206,207,1,0,0,0,207,208, - 6,1,0,0,208,4,1,0,0,0,209,211,7,3,0,0,210,209,1,0,0,0,211,212,1, - 0,0,0,212,210,1,0,0,0,212,213,1,0,0,0,213,214,1,0,0,0,214,215,6, - 2,0,0,215,6,1,0,0,0,216,217,7,4,0,0,217,8,1,0,0,0,218,219,7,5,0, - 0,219,220,7,6,0,0,220,10,1,0,0,0,221,222,7,7,0,0,222,223,7,8,0,0, - 223,224,7,9,0,0,224,225,7,10,0,0,225,12,1,0,0,0,226,227,7,9,0,0, - 227,228,7,11,0,0,228,229,7,12,0,0,229,230,7,9,0,0,230,14,1,0,0,0, - 231,232,7,6,0,0,232,233,7,13,0,0,233,234,7,10,0,0,234,235,7,14,0, - 0,235,16,1,0,0,0,236,237,7,15,0,0,237,238,7,16,0,0,238,239,7,16, - 0,0,239,240,7,11,0,0,240,241,7,9,0,0,241,242,7,17,0,0,242,243,7, - 10,0,0,243,18,1,0,0,0,244,245,7,5,0,0,245,246,5,56,0,0,246,20,1, - 0,0,0,247,248,7,5,0,0,248,249,5,49,0,0,249,250,5,54,0,0,250,22,1, - 0,0,0,251,252,7,5,0,0,252,253,5,51,0,0,253,254,5,50,0,0,254,24,1, - 0,0,0,255,256,7,5,0,0,256,257,5,54,0,0,257,258,5,52,0,0,258,26,1, - 0,0,0,259,260,7,6,0,0,260,261,7,18,0,0,261,262,5,51,0,0,262,263, - 5,50,0,0,263,28,1,0,0,0,264,265,7,6,0,0,265,266,7,18,0,0,266,267, - 5,54,0,0,267,268,5,52,0,0,268,30,1,0,0,0,269,270,7,12,0,0,270,271, - 7,7,0,0,271,272,7,19,0,0,272,273,7,5,0,0,273,274,7,10,0,0,274,275, - 7,20,0,0,275,32,1,0,0,0,276,277,7,15,0,0,277,278,7,5,0,0,278,279, - 7,10,0,0,279,280,7,17,0,0,280,281,7,19,0,0,281,282,7,21,0,0,282, - 34,1,0,0,0,283,284,7,7,0,0,284,285,7,5,0,0,285,286,7,22,0,0,286, - 287,7,9,0,0,287,288,7,12,0,0,288,289,7,7,0,0,289,290,7,17,0,0,290, - 291,7,22,0,0,291,292,7,18,0,0,292,36,1,0,0,0,293,294,7,7,0,0,294, - 295,7,5,0,0,295,296,7,22,0,0,296,297,7,9,0,0,297,298,7,12,0,0,298, - 299,7,7,0,0,299,300,7,17,0,0,300,301,7,22,0,0,301,302,7,18,0,0,302, - 303,5,95,0,0,303,304,7,7,0,0,304,305,7,23,0,0,305,38,1,0,0,0,306, - 307,7,24,0,0,307,308,7,17,0,0,308,309,7,7,0,0,309,310,7,9,0,0,310, - 40,1,0,0,0,311,312,7,7,0,0,312,313,7,5,0,0,313,314,7,22,0,0,314, - 315,7,9,0,0,315,42,1,0,0,0,316,317,7,5,0,0,317,318,7,10,0,0,318, - 319,7,7,0,0,319,320,7,9,0,0,320,321,7,19,0,0,321,322,7,25,0,0,322, - 323,7,17,0,0,323,324,7,11,0,0,324,325,5,95,0,0,325,326,7,21,0,0, - 326,327,7,9,0,0,327,328,7,17,0,0,328,329,7,19,0,0,329,44,1,0,0,0, - 330,331,7,5,0,0,331,332,7,10,0,0,332,333,7,7,0,0,333,334,7,9,0,0, - 334,335,7,19,0,0,335,336,7,25,0,0,336,337,7,17,0,0,337,338,7,11, - 0,0,338,339,5,95,0,0,339,340,7,24,0,0,340,341,7,17,0,0,341,342,7, - 21,0,0,342,46,1,0,0,0,343,344,7,5,0,0,344,345,7,10,0,0,345,346,7, - 7,0,0,346,347,7,9,0,0,347,348,7,19,0,0,348,349,7,25,0,0,349,350, - 7,17,0,0,350,351,7,11,0,0,351,352,5,95,0,0,352,353,7,14,0,0,353, - 354,7,16,0,0,354,355,7,22,0,0,355,356,7,18,0,0,356,357,7,16,0,0, - 357,358,7,13,0,0,358,359,7,10,0,0,359,360,7,24,0,0,360,48,1,0,0, - 0,361,362,7,13,0,0,362,363,7,13,0,0,363,364,7,5,0,0,364,365,7,24, - 0,0,365,50,1,0,0,0,366,367,7,24,0,0,367,368,7,9,0,0,368,369,7,14, - 0,0,369,370,7,5,0,0,370,371,7,22,0,0,371,372,7,17,0,0,372,373,7, - 11,0,0,373,52,1,0,0,0,374,375,7,18,0,0,375,376,7,19,0,0,376,377, - 7,9,0,0,377,378,7,14,0,0,378,379,7,5,0,0,379,380,7,12,0,0,380,381, - 7,5,0,0,381,382,7,16,0,0,382,383,7,10,0,0,383,384,5,95,0,0,384,385, - 7,7,0,0,385,386,7,5,0,0,386,387,7,22,0,0,387,388,7,9,0,0,388,54, - 1,0,0,0,389,390,7,18,0,0,390,391,7,19,0,0,391,392,7,9,0,0,392,393, - 7,14,0,0,393,394,7,5,0,0,394,395,7,12,0,0,395,396,7,5,0,0,396,397, - 7,16,0,0,397,398,7,10,0,0,398,399,5,95,0,0,399,400,7,7,0,0,400,401, - 7,5,0,0,401,402,7,22,0,0,402,403,7,9,0,0,403,404,7,12,0,0,404,405, - 7,7,0,0,405,406,7,17,0,0,406,407,7,22,0,0,407,408,7,18,0,0,408,56, - 1,0,0,0,409,410,7,18,0,0,410,411,7,19,0,0,411,412,7,9,0,0,412,413, - 7,14,0,0,413,414,7,5,0,0,414,415,7,12,0,0,415,416,7,5,0,0,416,417, - 7,16,0,0,417,418,7,10,0,0,418,419,5,95,0,0,419,420,7,7,0,0,420,421, - 7,5,0,0,421,422,7,22,0,0,422,423,7,9,0,0,423,424,7,12,0,0,424,425, - 7,7,0,0,425,426,7,17,0,0,426,427,7,22,0,0,427,428,7,18,0,0,428,429, - 5,95,0,0,429,430,7,7,0,0,430,431,7,23,0,0,431,58,1,0,0,0,432,433, - 7,6,0,0,433,434,7,5,0,0,434,435,7,26,0,0,435,436,7,9,0,0,436,437, - 7,24,0,0,437,438,7,14,0,0,438,439,7,8,0,0,439,440,7,17,0,0,440,441, - 7,19,0,0,441,60,1,0,0,0,442,443,7,25,0,0,443,444,7,17,0,0,444,445, - 7,19,0,0,445,446,7,14,0,0,446,447,7,8,0,0,447,448,7,17,0,0,448,449, - 7,19,0,0,449,62,1,0,0,0,450,451,7,6,0,0,451,452,7,5,0,0,452,453, - 7,26,0,0,453,454,7,9,0,0,454,455,7,24,0,0,455,456,7,15,0,0,456,457, - 7,5,0,0,457,458,7,10,0,0,458,459,7,17,0,0,459,460,7,19,0,0,460,461, - 7,21,0,0,461,64,1,0,0,0,462,463,7,12,0,0,463,464,7,7,0,0,464,465, - 7,19,0,0,465,466,7,13,0,0,466,467,7,14,0,0,467,468,7,7,0,0,468,66, - 1,0,0,0,469,470,7,10,0,0,470,471,7,12,0,0,471,472,7,7,0,0,472,473, - 7,19,0,0,473,474,7,13,0,0,474,475,7,14,0,0,475,476,7,7,0,0,476,68, - 1,0,0,0,477,478,7,11,0,0,478,479,7,5,0,0,479,480,7,12,0,0,480,481, - 7,7,0,0,481,70,1,0,0,0,482,483,7,22,0,0,483,484,7,17,0,0,484,485, - 7,18,0,0,485,72,1,0,0,0,486,487,7,13,0,0,487,488,5,33,0,0,488,74, - 1,0,0,0,489,490,7,15,0,0,490,491,7,16,0,0,491,492,7,16,0,0,492,493, - 7,11,0,0,493,76,1,0,0,0,494,495,7,12,0,0,495,496,7,7,0,0,496,497, - 7,19,0,0,497,78,1,0,0,0,498,499,7,25,0,0,499,500,7,15,0,0,500,501, - 7,5,0,0,501,502,7,10,0,0,502,80,1,0,0,0,503,504,7,7,0,0,504,505, - 7,12,0,0,505,82,1,0,0,0,506,507,7,7,0,0,507,508,7,12,0,0,508,509, - 7,7,0,0,509,510,7,23,0,0,510,84,1,0,0,0,511,512,7,5,0,0,512,513, - 7,21,0,0,513,514,7,9,0,0,514,515,7,17,0,0,515,516,7,19,0,0,516,86, - 1,0,0,0,517,518,7,5,0,0,518,519,7,24,0,0,519,520,7,17,0,0,520,521, - 7,21,0,0,521,88,1,0,0,0,522,523,7,5,0,0,523,524,7,14,0,0,524,525, - 7,16,0,0,525,526,7,22,0,0,526,527,7,18,0,0,527,528,7,16,0,0,528, - 529,7,13,0,0,529,530,7,10,0,0,530,531,7,24,0,0,531,90,1,0,0,0,532, - 533,7,24,0,0,533,534,7,9,0,0,534,535,7,14,0,0,535,92,1,0,0,0,536, - 537,7,18,0,0,537,538,7,7,0,0,538,94,1,0,0,0,539,540,7,18,0,0,540, - 541,7,7,0,0,541,542,7,12,0,0,542,96,1,0,0,0,543,544,7,18,0,0,544, - 545,7,7,0,0,545,546,7,12,0,0,546,547,7,7,0,0,547,548,7,23,0,0,548, - 98,1,0,0,0,549,550,7,6,0,0,550,551,7,14,0,0,551,552,7,8,0,0,552, - 553,7,17,0,0,553,554,7,19,0,0,554,100,1,0,0,0,555,556,7,25,0,0,556, - 557,7,14,0,0,557,558,7,8,0,0,558,559,7,17,0,0,559,560,7,19,0,0,560, - 102,1,0,0,0,561,562,7,6,0,0,562,563,7,15,0,0,563,564,7,5,0,0,564, - 565,7,10,0,0,565,104,1,0,0,0,566,567,7,17,0,0,567,568,7,10,0,0,568, - 569,7,21,0,0,569,106,1,0,0,0,570,571,3,105,52,0,571,572,7,4,0,0, - 572,108,1,0,0,0,573,574,5,58,0,0,574,575,5,58,0,0,575,110,1,0,0, - 0,576,577,5,43,0,0,577,112,1,0,0,0,578,579,5,45,0,0,579,114,1,0, - 0,0,580,581,5,42,0,0,581,116,1,0,0,0,582,583,5,47,0,0,583,118,1, - 0,0,0,584,585,5,37,0,0,585,120,1,0,0,0,586,587,5,61,0,0,587,122, - 1,0,0,0,588,589,5,33,0,0,589,590,5,61,0,0,590,124,1,0,0,0,591,592, - 5,62,0,0,592,593,5,61,0,0,593,126,1,0,0,0,594,595,5,60,0,0,595,596, - 5,61,0,0,596,128,1,0,0,0,597,598,5,62,0,0,598,130,1,0,0,0,599,600, - 5,60,0,0,600,132,1,0,0,0,601,602,5,33,0,0,602,134,1,0,0,0,603,604, - 3,131,65,0,604,136,1,0,0,0,605,606,3,129,64,0,606,138,1,0,0,0,607, - 608,5,40,0,0,608,140,1,0,0,0,609,610,5,41,0,0,610,142,1,0,0,0,611, - 612,5,91,0,0,612,144,1,0,0,0,613,614,5,93,0,0,614,146,1,0,0,0,615, - 616,5,44,0,0,616,148,1,0,0,0,617,618,5,58,0,0,618,150,1,0,0,0,619, - 620,5,63,0,0,620,152,1,0,0,0,621,622,5,35,0,0,622,154,1,0,0,0,623, - 624,5,46,0,0,624,156,1,0,0,0,625,626,7,17,0,0,626,627,7,10,0,0,627, - 628,7,24,0,0,628,158,1,0,0,0,629,630,7,16,0,0,630,631,7,19,0,0,631, - 160,1,0,0,0,632,633,5,58,0,0,633,634,5,61,0,0,634,162,1,0,0,0,635, - 636,5,45,0,0,636,637,5,62,0,0,637,164,1,0,0,0,638,642,2,49,57,0, - 639,641,3,167,83,0,640,639,1,0,0,0,641,644,1,0,0,0,642,640,1,0,0, - 0,642,643,1,0,0,0,643,647,1,0,0,0,644,642,1,0,0,0,645,647,5,48,0, - 0,646,638,1,0,0,0,646,645,1,0,0,0,647,166,1,0,0,0,648,649,2,48,57, - 0,649,168,1,0,0,0,650,652,5,45,0,0,651,650,1,0,0,0,651,652,1,0,0, - 0,652,653,1,0,0,0,653,654,3,165,82,0,654,170,1,0,0,0,655,660,7,27, - 0,0,656,659,7,27,0,0,657,659,3,167,83,0,658,656,1,0,0,0,658,657, - 1,0,0,0,659,662,1,0,0,0,660,658,1,0,0,0,660,661,1,0,0,0,661,172, - 1,0,0,0,662,660,1,0,0,0,663,665,5,13,0,0,664,666,5,10,0,0,665,664, - 1,0,0,0,665,666,1,0,0,0,666,669,1,0,0,0,667,669,5,10,0,0,668,663, - 1,0,0,0,668,667,1,0,0,0,669,174,1,0,0,0,13,0,181,193,196,201,212, - 642,646,651,658,660,665,668,1,0,1,0 + 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,1,0,1,0,1,0,1,0,5,0,170,8, + 0,10,0,12,0,173,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,182,8,1,11,1, + 12,1,183,1,1,3,1,187,8,1,1,1,5,1,190,8,1,10,1,12,1,193,9,1,1,1,1, + 1,1,1,1,1,1,1,1,2,4,2,201,8,2,11,2,12,2,202,1,2,1,2,1,3,1,3,1,4, + 1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7, + 1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1, + 10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, + 13,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1, + 16,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, + 20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1, + 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1, + 27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1, + 30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, + 33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36,1, + 36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1, + 38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1, + 40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1, + 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1, + 45,1,45,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,49,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,1,54,1, + 54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1, + 59,1,60,1,60,1,61,1,61,1,62,1,62,1,63,1,63,1,64,1,64,1,65,1,65,1, + 66,1,66,1,67,1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1,71,1,72,1, + 72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76,1, + 76,1,77,1,77,5,77,595,8,77,10,77,12,77,598,9,77,1,77,3,77,601,8, + 77,1,78,1,78,1,79,3,79,606,8,79,1,79,1,79,1,80,1,80,1,80,5,80,613, + 8,80,10,80,12,80,616,9,80,1,81,1,81,3,81,620,8,81,1,81,3,81,623, + 8,81,0,0,82,1,1,3,2,5,3,7,0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23, + 11,25,12,27,13,29,14,31,15,33,16,35,17,37,18,39,19,41,20,43,21,45, + 22,47,23,49,24,51,25,53,26,55,27,57,28,59,29,61,30,63,31,65,32,67, + 33,69,34,71,35,73,36,75,37,77,38,79,39,81,40,83,41,85,42,87,43,89, + 44,91,45,93,46,95,47,97,48,99,49,101,50,103,51,105,52,107,53,109, + 54,111,55,113,56,115,57,117,58,119,59,121,60,123,61,125,62,127,63, + 129,64,131,65,133,66,135,67,137,68,139,69,141,70,143,71,145,72,147, + 73,149,74,151,75,153,76,155,0,157,0,159,77,161,78,163,79,1,0,28, + 2,0,10,10,13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13,32,32,1, + 0,48,57,2,0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116,116,2, + 0,72,72,104,104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76,76,108, + 108,2,0,83,83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2,0,66,66, + 98,98,2,0,79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112,2,0,82, + 82,114,114,2,0,71,71,103,103,2,0,89,89,121,121,2,0,68,68,100,100, + 2,0,86,86,118,118,2,0,77,77,109,109,2,0,90,90,122,122,2,0,88,88, + 120,120,4,0,36,36,65,90,95,95,97,122,632,0,1,1,0,0,0,0,3,1,0,0,0, + 0,5,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,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0, + 47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0, + 57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0, + 67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0, + 77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0, + 87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0, + 97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0, + 0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115, + 1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0, + 0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1, + 0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0, + 143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0, + 0,0,0,153,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,1,165, + 1,0,0,0,3,176,1,0,0,0,5,200,1,0,0,0,7,206,1,0,0,0,9,208,1,0,0,0, + 11,211,1,0,0,0,13,216,1,0,0,0,15,221,1,0,0,0,17,226,1,0,0,0,19,234, + 1,0,0,0,21,237,1,0,0,0,23,241,1,0,0,0,25,245,1,0,0,0,27,249,1,0, + 0,0,29,254,1,0,0,0,31,259,1,0,0,0,33,266,1,0,0,0,35,273,1,0,0,0, + 37,278,1,0,0,0,39,292,1,0,0,0,41,305,1,0,0,0,43,323,1,0,0,0,45,328, + 1,0,0,0,47,336,1,0,0,0,49,351,1,0,0,0,51,371,1,0,0,0,53,394,1,0, + 0,0,55,404,1,0,0,0,57,412,1,0,0,0,59,424,1,0,0,0,61,431,1,0,0,0, + 63,439,1,0,0,0,65,444,1,0,0,0,67,448,1,0,0,0,69,451,1,0,0,0,71,456, + 1,0,0,0,73,460,1,0,0,0,75,465,1,0,0,0,77,471,1,0,0,0,79,476,1,0, + 0,0,81,486,1,0,0,0,83,490,1,0,0,0,85,493,1,0,0,0,87,497,1,0,0,0, + 89,503,1,0,0,0,91,509,1,0,0,0,93,515,1,0,0,0,95,520,1,0,0,0,97,524, + 1,0,0,0,99,527,1,0,0,0,101,530,1,0,0,0,103,532,1,0,0,0,105,534,1, + 0,0,0,107,536,1,0,0,0,109,538,1,0,0,0,111,540,1,0,0,0,113,542,1, + 0,0,0,115,545,1,0,0,0,117,548,1,0,0,0,119,551,1,0,0,0,121,553,1, + 0,0,0,123,555,1,0,0,0,125,557,1,0,0,0,127,559,1,0,0,0,129,561,1, + 0,0,0,131,563,1,0,0,0,133,565,1,0,0,0,135,567,1,0,0,0,137,569,1, + 0,0,0,139,571,1,0,0,0,141,573,1,0,0,0,143,575,1,0,0,0,145,577,1, + 0,0,0,147,579,1,0,0,0,149,583,1,0,0,0,151,586,1,0,0,0,153,589,1, + 0,0,0,155,600,1,0,0,0,157,602,1,0,0,0,159,605,1,0,0,0,161,609,1, + 0,0,0,163,622,1,0,0,0,165,166,5,47,0,0,166,167,5,47,0,0,167,171, + 1,0,0,0,168,170,8,0,0,0,169,168,1,0,0,0,170,173,1,0,0,0,171,169, + 1,0,0,0,171,172,1,0,0,0,172,174,1,0,0,0,173,171,1,0,0,0,174,175, + 6,0,0,0,175,2,1,0,0,0,176,177,5,47,0,0,177,178,5,42,0,0,178,186, + 1,0,0,0,179,187,8,1,0,0,180,182,5,42,0,0,181,180,1,0,0,0,182,183, + 1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,185,1,0,0,0,185,187, + 8,2,0,0,186,179,1,0,0,0,186,181,1,0,0,0,187,191,1,0,0,0,188,190, + 5,42,0,0,189,188,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192, + 1,0,0,0,192,194,1,0,0,0,193,191,1,0,0,0,194,195,5,42,0,0,195,196, + 5,47,0,0,196,197,1,0,0,0,197,198,6,1,0,0,198,4,1,0,0,0,199,201,7, + 3,0,0,200,199,1,0,0,0,201,202,1,0,0,0,202,200,1,0,0,0,202,203,1, + 0,0,0,203,204,1,0,0,0,204,205,6,2,0,0,205,6,1,0,0,0,206,207,7,4, + 0,0,207,8,1,0,0,0,208,209,7,5,0,0,209,210,7,6,0,0,210,10,1,0,0,0, + 211,212,7,7,0,0,212,213,7,8,0,0,213,214,7,9,0,0,214,215,7,10,0,0, + 215,12,1,0,0,0,216,217,7,9,0,0,217,218,7,11,0,0,218,219,7,12,0,0, + 219,220,7,9,0,0,220,14,1,0,0,0,221,222,7,6,0,0,222,223,7,13,0,0, + 223,224,7,10,0,0,224,225,7,14,0,0,225,16,1,0,0,0,226,227,7,15,0, + 0,227,228,7,16,0,0,228,229,7,16,0,0,229,230,7,11,0,0,230,231,7,9, + 0,0,231,232,7,17,0,0,232,233,7,10,0,0,233,18,1,0,0,0,234,235,7,5, + 0,0,235,236,5,56,0,0,236,20,1,0,0,0,237,238,7,5,0,0,238,239,5,49, + 0,0,239,240,5,54,0,0,240,22,1,0,0,0,241,242,7,5,0,0,242,243,5,51, + 0,0,243,244,5,50,0,0,244,24,1,0,0,0,245,246,7,5,0,0,246,247,5,54, + 0,0,247,248,5,52,0,0,248,26,1,0,0,0,249,250,7,6,0,0,250,251,7,18, + 0,0,251,252,5,51,0,0,252,253,5,50,0,0,253,28,1,0,0,0,254,255,7,6, + 0,0,255,256,7,18,0,0,256,257,5,54,0,0,257,258,5,52,0,0,258,30,1, + 0,0,0,259,260,7,12,0,0,260,261,7,7,0,0,261,262,7,19,0,0,262,263, + 7,5,0,0,263,264,7,10,0,0,264,265,7,20,0,0,265,32,1,0,0,0,266,267, + 7,15,0,0,267,268,7,5,0,0,268,269,7,10,0,0,269,270,7,17,0,0,270,271, + 7,19,0,0,271,272,7,21,0,0,272,34,1,0,0,0,273,274,7,22,0,0,274,275, + 7,17,0,0,275,276,7,7,0,0,276,277,7,9,0,0,277,36,1,0,0,0,278,279, + 7,5,0,0,279,280,7,10,0,0,280,281,7,7,0,0,281,282,7,9,0,0,282,283, + 7,19,0,0,283,284,7,23,0,0,284,285,7,17,0,0,285,286,7,11,0,0,286, + 287,5,95,0,0,287,288,7,21,0,0,288,289,7,9,0,0,289,290,7,17,0,0,290, + 291,7,19,0,0,291,38,1,0,0,0,292,293,7,5,0,0,293,294,7,10,0,0,294, + 295,7,7,0,0,295,296,7,9,0,0,296,297,7,19,0,0,297,298,7,23,0,0,298, + 299,7,17,0,0,299,300,7,11,0,0,300,301,5,95,0,0,301,302,7,22,0,0, + 302,303,7,17,0,0,303,304,7,21,0,0,304,40,1,0,0,0,305,306,7,5,0,0, + 306,307,7,10,0,0,307,308,7,7,0,0,308,309,7,9,0,0,309,310,7,19,0, + 0,310,311,7,23,0,0,311,312,7,17,0,0,312,313,7,11,0,0,313,314,5,95, + 0,0,314,315,7,14,0,0,315,316,7,16,0,0,316,317,7,24,0,0,317,318,7, + 18,0,0,318,319,7,16,0,0,319,320,7,13,0,0,320,321,7,10,0,0,321,322, + 7,22,0,0,322,42,1,0,0,0,323,324,7,13,0,0,324,325,7,13,0,0,325,326, + 7,5,0,0,326,327,7,22,0,0,327,44,1,0,0,0,328,329,7,22,0,0,329,330, + 7,9,0,0,330,331,7,14,0,0,331,332,7,5,0,0,332,333,7,24,0,0,333,334, + 7,17,0,0,334,335,7,11,0,0,335,46,1,0,0,0,336,337,7,18,0,0,337,338, + 7,19,0,0,338,339,7,9,0,0,339,340,7,14,0,0,340,341,7,5,0,0,341,342, + 7,12,0,0,342,343,7,5,0,0,343,344,7,16,0,0,344,345,7,10,0,0,345,346, + 5,95,0,0,346,347,7,7,0,0,347,348,7,5,0,0,348,349,7,24,0,0,349,350, + 7,9,0,0,350,48,1,0,0,0,351,352,7,18,0,0,352,353,7,19,0,0,353,354, + 7,9,0,0,354,355,7,14,0,0,355,356,7,5,0,0,356,357,7,12,0,0,357,358, + 7,5,0,0,358,359,7,16,0,0,359,360,7,10,0,0,360,361,5,95,0,0,361,362, + 7,7,0,0,362,363,7,5,0,0,363,364,7,24,0,0,364,365,7,9,0,0,365,366, + 7,12,0,0,366,367,7,7,0,0,367,368,7,17,0,0,368,369,7,24,0,0,369,370, + 7,18,0,0,370,50,1,0,0,0,371,372,7,18,0,0,372,373,7,19,0,0,373,374, + 7,9,0,0,374,375,7,14,0,0,375,376,7,5,0,0,376,377,7,12,0,0,377,378, + 7,5,0,0,378,379,7,16,0,0,379,380,7,10,0,0,380,381,5,95,0,0,381,382, + 7,7,0,0,382,383,7,5,0,0,383,384,7,24,0,0,384,385,7,9,0,0,385,386, + 7,12,0,0,386,387,7,7,0,0,387,388,7,17,0,0,388,389,7,24,0,0,389,390, + 7,18,0,0,390,391,5,95,0,0,391,392,7,7,0,0,392,393,7,25,0,0,393,52, + 1,0,0,0,394,395,7,6,0,0,395,396,7,5,0,0,396,397,7,26,0,0,397,398, + 7,9,0,0,398,399,7,22,0,0,399,400,7,14,0,0,400,401,7,8,0,0,401,402, + 7,17,0,0,402,403,7,19,0,0,403,54,1,0,0,0,404,405,7,23,0,0,405,406, + 7,17,0,0,406,407,7,19,0,0,407,408,7,14,0,0,408,409,7,8,0,0,409,410, + 7,17,0,0,410,411,7,19,0,0,411,56,1,0,0,0,412,413,7,6,0,0,413,414, + 7,5,0,0,414,415,7,26,0,0,415,416,7,9,0,0,416,417,7,22,0,0,417,418, + 7,15,0,0,418,419,7,5,0,0,419,420,7,10,0,0,420,421,7,17,0,0,421,422, + 7,19,0,0,422,423,7,21,0,0,423,58,1,0,0,0,424,425,7,12,0,0,425,426, + 7,7,0,0,426,427,7,19,0,0,427,428,7,13,0,0,428,429,7,14,0,0,429,430, + 7,7,0,0,430,60,1,0,0,0,431,432,7,10,0,0,432,433,7,12,0,0,433,434, + 7,7,0,0,434,435,7,19,0,0,435,436,7,13,0,0,436,437,7,14,0,0,437,438, + 7,7,0,0,438,62,1,0,0,0,439,440,7,11,0,0,440,441,7,5,0,0,441,442, + 7,12,0,0,442,443,7,7,0,0,443,64,1,0,0,0,444,445,7,24,0,0,445,446, + 7,17,0,0,446,447,7,18,0,0,447,66,1,0,0,0,448,449,7,13,0,0,449,450, + 5,33,0,0,450,68,1,0,0,0,451,452,7,15,0,0,452,453,7,16,0,0,453,454, + 7,16,0,0,454,455,7,11,0,0,455,70,1,0,0,0,456,457,7,12,0,0,457,458, + 7,7,0,0,458,459,7,19,0,0,459,72,1,0,0,0,460,461,7,23,0,0,461,462, + 7,15,0,0,462,463,7,5,0,0,463,464,7,10,0,0,464,74,1,0,0,0,465,466, + 7,5,0,0,466,467,7,21,0,0,467,468,7,9,0,0,468,469,7,17,0,0,469,470, + 7,19,0,0,470,76,1,0,0,0,471,472,7,5,0,0,472,473,7,22,0,0,473,474, + 7,17,0,0,474,475,7,21,0,0,475,78,1,0,0,0,476,477,7,5,0,0,477,478, + 7,14,0,0,478,479,7,16,0,0,479,480,7,24,0,0,480,481,7,18,0,0,481, + 482,7,16,0,0,482,483,7,13,0,0,483,484,7,10,0,0,484,485,7,22,0,0, + 485,80,1,0,0,0,486,487,7,22,0,0,487,488,7,9,0,0,488,489,7,14,0,0, + 489,82,1,0,0,0,490,491,7,18,0,0,491,492,7,7,0,0,492,84,1,0,0,0,493, + 494,7,18,0,0,494,495,7,7,0,0,495,496,7,12,0,0,496,86,1,0,0,0,497, + 498,7,18,0,0,498,499,7,7,0,0,499,500,7,12,0,0,500,501,7,7,0,0,501, + 502,7,25,0,0,502,88,1,0,0,0,503,504,7,6,0,0,504,505,7,14,0,0,505, + 506,7,8,0,0,506,507,7,17,0,0,507,508,7,19,0,0,508,90,1,0,0,0,509, + 510,7,23,0,0,510,511,7,14,0,0,511,512,7,8,0,0,512,513,7,17,0,0,513, + 514,7,19,0,0,514,92,1,0,0,0,515,516,7,6,0,0,516,517,7,15,0,0,517, + 518,7,5,0,0,518,519,7,10,0,0,519,94,1,0,0,0,520,521,7,17,0,0,521, + 522,7,10,0,0,522,523,7,21,0,0,523,96,1,0,0,0,524,525,3,95,47,0,525, + 526,7,4,0,0,526,98,1,0,0,0,527,528,5,58,0,0,528,529,5,58,0,0,529, + 100,1,0,0,0,530,531,5,43,0,0,531,102,1,0,0,0,532,533,5,45,0,0,533, + 104,1,0,0,0,534,535,5,42,0,0,535,106,1,0,0,0,536,537,5,47,0,0,537, + 108,1,0,0,0,538,539,5,37,0,0,539,110,1,0,0,0,540,541,5,61,0,0,541, + 112,1,0,0,0,542,543,5,33,0,0,543,544,5,61,0,0,544,114,1,0,0,0,545, + 546,5,62,0,0,546,547,5,61,0,0,547,116,1,0,0,0,548,549,5,60,0,0,549, + 550,5,61,0,0,550,118,1,0,0,0,551,552,5,62,0,0,552,120,1,0,0,0,553, + 554,5,60,0,0,554,122,1,0,0,0,555,556,5,33,0,0,556,124,1,0,0,0,557, + 558,3,121,60,0,558,126,1,0,0,0,559,560,3,119,59,0,560,128,1,0,0, + 0,561,562,5,40,0,0,562,130,1,0,0,0,563,564,5,41,0,0,564,132,1,0, + 0,0,565,566,5,91,0,0,566,134,1,0,0,0,567,568,5,93,0,0,568,136,1, + 0,0,0,569,570,5,44,0,0,570,138,1,0,0,0,571,572,5,58,0,0,572,140, + 1,0,0,0,573,574,5,63,0,0,574,142,1,0,0,0,575,576,5,35,0,0,576,144, + 1,0,0,0,577,578,5,46,0,0,578,146,1,0,0,0,579,580,7,17,0,0,580,581, + 7,10,0,0,581,582,7,22,0,0,582,148,1,0,0,0,583,584,7,16,0,0,584,585, + 7,19,0,0,585,150,1,0,0,0,586,587,5,58,0,0,587,588,5,61,0,0,588,152, + 1,0,0,0,589,590,5,45,0,0,590,591,5,62,0,0,591,154,1,0,0,0,592,596, + 2,49,57,0,593,595,3,157,78,0,594,593,1,0,0,0,595,598,1,0,0,0,596, + 594,1,0,0,0,596,597,1,0,0,0,597,601,1,0,0,0,598,596,1,0,0,0,599, + 601,5,48,0,0,600,592,1,0,0,0,600,599,1,0,0,0,601,156,1,0,0,0,602, + 603,2,48,57,0,603,158,1,0,0,0,604,606,5,45,0,0,605,604,1,0,0,0,605, + 606,1,0,0,0,606,607,1,0,0,0,607,608,3,155,77,0,608,160,1,0,0,0,609, + 614,7,27,0,0,610,613,7,27,0,0,611,613,3,157,78,0,612,610,1,0,0,0, + 612,611,1,0,0,0,613,616,1,0,0,0,614,612,1,0,0,0,614,615,1,0,0,0, + 615,162,1,0,0,0,616,614,1,0,0,0,617,619,5,13,0,0,618,620,5,10,0, + 0,619,618,1,0,0,0,619,620,1,0,0,0,620,623,1,0,0,0,621,623,5,10,0, + 0,622,617,1,0,0,0,622,621,1,0,0,0,623,164,1,0,0,0,13,0,171,183,186, + 191,202,596,600,605,612,614,619,622,1,0,1,0 ] class SubstraitLexer(Lexer): @@ -270,74 +254,69 @@ class SubstraitLexer(Lexer): FP64 = 14 String = 15 Binary = 16 - Timestamp = 17 - Timestamp_TZ = 18 - Date = 19 - Time = 20 - Interval_Year = 21 - Interval_Day = 22 - Interval_Compound = 23 - UUID = 24 - Decimal = 25 - Precision_Time = 26 - Precision_Timestamp = 27 - Precision_Timestamp_TZ = 28 - FixedChar = 29 - VarChar = 30 - FixedBinary = 31 - Struct = 32 - NStruct = 33 - List = 34 - Map = 35 - UserDefined = 36 - Bool = 37 - Str = 38 - VBin = 39 - Ts = 40 - TsTZ = 41 - IYear = 42 - IDay = 43 - ICompound = 44 - Dec = 45 - PT = 46 - PTs = 47 - PTsTZ = 48 - FChar = 49 - VChar = 50 - FBin = 51 - Any = 52 - AnyVar = 53 - DoubleColon = 54 - Plus = 55 - Minus = 56 - Asterisk = 57 - ForwardSlash = 58 - Percent = 59 - Eq = 60 - Ne = 61 - Gte = 62 - Lte = 63 - Gt = 64 - Lt = 65 - Bang = 66 - OAngleBracket = 67 - CAngleBracket = 68 - OParen = 69 - CParen = 70 - OBracket = 71 - CBracket = 72 - Comma = 73 - Colon = 74 - QMark = 75 - Hash = 76 - Dot = 77 - And = 78 - Or = 79 - Assign = 80 - Arrow = 81 - Number = 82 - Identifier = 83 - Newline = 84 + Date = 17 + Interval_Year = 18 + Interval_Day = 19 + Interval_Compound = 20 + UUID = 21 + Decimal = 22 + Precision_Time = 23 + Precision_Timestamp = 24 + Precision_Timestamp_TZ = 25 + FixedChar = 26 + VarChar = 27 + FixedBinary = 28 + Struct = 29 + NStruct = 30 + List = 31 + Map = 32 + UserDefined = 33 + Bool = 34 + Str = 35 + VBin = 36 + IYear = 37 + IDay = 38 + ICompound = 39 + Dec = 40 + PT = 41 + PTs = 42 + PTsTZ = 43 + FChar = 44 + VChar = 45 + FBin = 46 + Any = 47 + AnyVar = 48 + DoubleColon = 49 + Plus = 50 + Minus = 51 + Asterisk = 52 + ForwardSlash = 53 + Percent = 54 + Eq = 55 + Ne = 56 + Gte = 57 + Lte = 58 + Gt = 59 + Lt = 60 + Bang = 61 + OAngleBracket = 62 + CAngleBracket = 63 + OParen = 64 + CParen = 65 + OBracket = 66 + CBracket = 67 + Comma = 68 + Colon = 69 + QMark = 70 + Hash = 71 + Dot = 72 + And = 73 + Or = 74 + Assign = 75 + Arrow = 76 + Number = 77 + Identifier = 78 + Newline = 79 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -346,49 +325,47 @@ class SubstraitLexer(Lexer): literalNames = [ "", "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", - "'TIMESTAMP'", "'TIMESTAMP_TZ'", "'DATE'", "'TIME'", "'INTERVAL_YEAR'", - "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", - "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", - "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", - "'LIST'", "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'TS'", - "'TSTZ'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", "'DEC'", "'PT'", - "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", "'ANY'", - "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", "'>='", - "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", "','", - "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", "'->'" ] + "'DATE'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", + "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", + "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", + "'STRUCT'", "'NSTRUCT'", "'LIST'", "'MAP'", "'U!'", "'BOOL'", + "'STR'", "'VBIN'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", "'DEC'", + "'PT'", "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", + "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", + "'>='", "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", + "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", + "'->'" ] symbolicNames = [ "", "LineComment", "BlockComment", "Whitespace", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", - "String", "Binary", "Timestamp", "Timestamp_TZ", "Date", "Time", - "Interval_Year", "Interval_Day", "Interval_Compound", "UUID", - "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", - "List", "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", - "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", - "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", - "Asterisk", "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", - "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", "OParen", - "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", - "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", "Identifier", - "Newline" ] + "String", "Binary", "Date", "Interval_Year", "Interval_Day", + "Interval_Compound", "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", + "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", "Str", + "VBin", "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", + "FChar", "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", + "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", "Ne", + "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", + "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", + "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", + "Identifier", "Newline" ] ruleNames = [ "LineComment", "BlockComment", "Whitespace", "DIGIT", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", - "I32", "I64", "FP32", "FP64", "String", "Binary", "Timestamp", - "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", - "Interval_Compound", "UUID", "Decimal", "Precision_Time", - "Precision_Timestamp", "Precision_Timestamp_TZ", "FixedChar", - "VarChar", "FixedBinary", "Struct", "NStruct", "List", - "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", - "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", - "FChar", "VChar", "FBin", "Any", "AnyVar", "DoubleColon", - "Plus", "Minus", "Asterisk", "ForwardSlash", "Percent", - "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", - "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", - "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", - "Assign", "Arrow", "Int", "Digit", "Number", "Identifier", - "Newline" ] + "I32", "I64", "FP32", "FP64", "String", "Binary", "Date", + "Interval_Year", "Interval_Day", "Interval_Compound", + "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", + "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", + "Str", "VBin", "IYear", "IDay", "ICompound", "Dec", "PT", + "PTs", "PTsTZ", "FChar", "VChar", "FBin", "Any", "AnyVar", + "DoubleColon", "Plus", "Minus", "Asterisk", "ForwardSlash", + "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", + "OAngleBracket", "CAngleBracket", "OParen", "CParen", + "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", + "Dot", "And", "Or", "Assign", "Arrow", "Int", "Digit", + "Number", "Identifier", "Newline" ] grammarFileName = "SubstraitLexer.g4" diff --git a/tests/type/antlr_parser/SubstraitTypeLexer.py b/tests/type/antlr_parser/SubstraitTypeLexer.py index 2f95655af..de89d481a 100644 --- a/tests/type/antlr_parser/SubstraitTypeLexer.py +++ b/tests/type/antlr_parser/SubstraitTypeLexer.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,0,84,670,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, + 4,0,79,624,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, @@ -23,229 +23,213 @@ def serializedATN(): 58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2, 65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7, 71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2, - 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7, - 84,2,85,7,85,2,86,7,86,1,0,1,0,1,0,1,0,5,0,180,8,0,10,0,12,0,183, - 9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,192,8,1,11,1,12,1,193,1,1,3, - 1,197,8,1,1,1,5,1,200,8,1,10,1,12,1,203,9,1,1,1,1,1,1,1,1,1,1,1, - 1,2,4,2,211,8,2,11,2,12,2,212,1,2,1,2,1,3,1,3,1,4,1,4,1,4,1,5,1, - 5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1, - 8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11, - 1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,14,1,14, - 1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17, - 1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, - 1,18,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22, - 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23, - 1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23, - 1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25, - 1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36, - 1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39, - 1,39,1,39,1,39,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42, - 1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44, - 1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,1,46, - 1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,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,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55, - 1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,1,60,1,60,1,61,1,61,1,61, - 1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,65,1,65,1,66,1,66,1,67, - 1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1,71,1,72,1,72,1,73,1,73, - 1,74,1,74,1,75,1,75,1,76,1,76,1,77,1,77,1,78,1,78,1,78,1,78,1,79, - 1,79,1,79,1,80,1,80,1,80,1,81,1,81,1,81,1,82,1,82,5,82,641,8,82, - 10,82,12,82,644,9,82,1,82,3,82,647,8,82,1,83,1,83,1,84,3,84,652, - 8,84,1,84,1,84,1,85,1,85,1,85,5,85,659,8,85,10,85,12,85,662,9,85, - 1,86,1,86,3,86,666,8,86,1,86,3,86,669,8,86,0,0,87,1,1,3,2,5,3,7, - 0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23,11,25,12,27,13,29,14,31, - 15,33,16,35,17,37,18,39,19,41,20,43,21,45,22,47,23,49,24,51,25,53, - 26,55,27,57,28,59,29,61,30,63,31,65,32,67,33,69,34,71,35,73,36,75, - 37,77,38,79,39,81,40,83,41,85,42,87,43,89,44,91,45,93,46,95,47,97, - 48,99,49,101,50,103,51,105,52,107,53,109,54,111,55,113,56,115,57, - 117,58,119,59,121,60,123,61,125,62,127,63,129,64,131,65,133,66,135, - 67,137,68,139,69,141,70,143,71,145,72,147,73,149,74,151,75,153,76, - 155,77,157,78,159,79,161,80,163,81,165,0,167,0,169,82,171,83,173, - 84,1,0,28,2,0,10,10,13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13, - 32,32,1,0,48,57,2,0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116, - 116,2,0,72,72,104,104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76, - 76,108,108,2,0,83,83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2, - 0,66,66,98,98,2,0,79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112, - 2,0,82,82,114,114,2,0,71,71,103,103,2,0,89,89,121,121,2,0,77,77, - 109,109,2,0,90,90,122,122,2,0,68,68,100,100,2,0,86,86,118,118,2, - 0,88,88,120,120,4,0,36,36,65,90,95,95,97,122,678,0,1,1,0,0,0,0,3, - 1,0,0,0,0,5,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,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1, - 0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1, - 0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1, - 0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1, - 0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1, - 0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1, - 0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105, - 1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0, - 0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1, - 0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0, - 133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0, - 0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151, - 1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0, - 0,161,1,0,0,0,0,163,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1, - 0,0,0,1,175,1,0,0,0,3,186,1,0,0,0,5,210,1,0,0,0,7,216,1,0,0,0,9, - 218,1,0,0,0,11,221,1,0,0,0,13,226,1,0,0,0,15,231,1,0,0,0,17,236, - 1,0,0,0,19,244,1,0,0,0,21,247,1,0,0,0,23,251,1,0,0,0,25,255,1,0, - 0,0,27,259,1,0,0,0,29,264,1,0,0,0,31,269,1,0,0,0,33,276,1,0,0,0, - 35,283,1,0,0,0,37,293,1,0,0,0,39,306,1,0,0,0,41,311,1,0,0,0,43,316, - 1,0,0,0,45,330,1,0,0,0,47,343,1,0,0,0,49,361,1,0,0,0,51,366,1,0, - 0,0,53,374,1,0,0,0,55,389,1,0,0,0,57,409,1,0,0,0,59,432,1,0,0,0, - 61,442,1,0,0,0,63,450,1,0,0,0,65,462,1,0,0,0,67,469,1,0,0,0,69,477, - 1,0,0,0,71,482,1,0,0,0,73,486,1,0,0,0,75,489,1,0,0,0,77,494,1,0, - 0,0,79,498,1,0,0,0,81,503,1,0,0,0,83,506,1,0,0,0,85,511,1,0,0,0, - 87,517,1,0,0,0,89,522,1,0,0,0,91,532,1,0,0,0,93,536,1,0,0,0,95,539, - 1,0,0,0,97,543,1,0,0,0,99,549,1,0,0,0,101,555,1,0,0,0,103,561,1, - 0,0,0,105,566,1,0,0,0,107,570,1,0,0,0,109,573,1,0,0,0,111,576,1, - 0,0,0,113,578,1,0,0,0,115,580,1,0,0,0,117,582,1,0,0,0,119,584,1, - 0,0,0,121,586,1,0,0,0,123,588,1,0,0,0,125,591,1,0,0,0,127,594,1, - 0,0,0,129,597,1,0,0,0,131,599,1,0,0,0,133,601,1,0,0,0,135,603,1, - 0,0,0,137,605,1,0,0,0,139,607,1,0,0,0,141,609,1,0,0,0,143,611,1, - 0,0,0,145,613,1,0,0,0,147,615,1,0,0,0,149,617,1,0,0,0,151,619,1, - 0,0,0,153,621,1,0,0,0,155,623,1,0,0,0,157,625,1,0,0,0,159,629,1, - 0,0,0,161,632,1,0,0,0,163,635,1,0,0,0,165,646,1,0,0,0,167,648,1, - 0,0,0,169,651,1,0,0,0,171,655,1,0,0,0,173,668,1,0,0,0,175,176,5, - 47,0,0,176,177,5,47,0,0,177,181,1,0,0,0,178,180,8,0,0,0,179,178, - 1,0,0,0,180,183,1,0,0,0,181,179,1,0,0,0,181,182,1,0,0,0,182,184, - 1,0,0,0,183,181,1,0,0,0,184,185,6,0,0,0,185,2,1,0,0,0,186,187,5, - 47,0,0,187,188,5,42,0,0,188,196,1,0,0,0,189,197,8,1,0,0,190,192, - 5,42,0,0,191,190,1,0,0,0,192,193,1,0,0,0,193,191,1,0,0,0,193,194, - 1,0,0,0,194,195,1,0,0,0,195,197,8,2,0,0,196,189,1,0,0,0,196,191, - 1,0,0,0,197,201,1,0,0,0,198,200,5,42,0,0,199,198,1,0,0,0,200,203, - 1,0,0,0,201,199,1,0,0,0,201,202,1,0,0,0,202,204,1,0,0,0,203,201, - 1,0,0,0,204,205,5,42,0,0,205,206,5,47,0,0,206,207,1,0,0,0,207,208, - 6,1,0,0,208,4,1,0,0,0,209,211,7,3,0,0,210,209,1,0,0,0,211,212,1, - 0,0,0,212,210,1,0,0,0,212,213,1,0,0,0,213,214,1,0,0,0,214,215,6, - 2,0,0,215,6,1,0,0,0,216,217,7,4,0,0,217,8,1,0,0,0,218,219,7,5,0, - 0,219,220,7,6,0,0,220,10,1,0,0,0,221,222,7,7,0,0,222,223,7,8,0,0, - 223,224,7,9,0,0,224,225,7,10,0,0,225,12,1,0,0,0,226,227,7,9,0,0, - 227,228,7,11,0,0,228,229,7,12,0,0,229,230,7,9,0,0,230,14,1,0,0,0, - 231,232,7,6,0,0,232,233,7,13,0,0,233,234,7,10,0,0,234,235,7,14,0, - 0,235,16,1,0,0,0,236,237,7,15,0,0,237,238,7,16,0,0,238,239,7,16, - 0,0,239,240,7,11,0,0,240,241,7,9,0,0,241,242,7,17,0,0,242,243,7, - 10,0,0,243,18,1,0,0,0,244,245,7,5,0,0,245,246,5,56,0,0,246,20,1, - 0,0,0,247,248,7,5,0,0,248,249,5,49,0,0,249,250,5,54,0,0,250,22,1, - 0,0,0,251,252,7,5,0,0,252,253,5,51,0,0,253,254,5,50,0,0,254,24,1, - 0,0,0,255,256,7,5,0,0,256,257,5,54,0,0,257,258,5,52,0,0,258,26,1, - 0,0,0,259,260,7,6,0,0,260,261,7,18,0,0,261,262,5,51,0,0,262,263, - 5,50,0,0,263,28,1,0,0,0,264,265,7,6,0,0,265,266,7,18,0,0,266,267, - 5,54,0,0,267,268,5,52,0,0,268,30,1,0,0,0,269,270,7,12,0,0,270,271, - 7,7,0,0,271,272,7,19,0,0,272,273,7,5,0,0,273,274,7,10,0,0,274,275, - 7,20,0,0,275,32,1,0,0,0,276,277,7,15,0,0,277,278,7,5,0,0,278,279, - 7,10,0,0,279,280,7,17,0,0,280,281,7,19,0,0,281,282,7,21,0,0,282, - 34,1,0,0,0,283,284,7,7,0,0,284,285,7,5,0,0,285,286,7,22,0,0,286, - 287,7,9,0,0,287,288,7,12,0,0,288,289,7,7,0,0,289,290,7,17,0,0,290, - 291,7,22,0,0,291,292,7,18,0,0,292,36,1,0,0,0,293,294,7,7,0,0,294, - 295,7,5,0,0,295,296,7,22,0,0,296,297,7,9,0,0,297,298,7,12,0,0,298, - 299,7,7,0,0,299,300,7,17,0,0,300,301,7,22,0,0,301,302,7,18,0,0,302, - 303,5,95,0,0,303,304,7,7,0,0,304,305,7,23,0,0,305,38,1,0,0,0,306, - 307,7,24,0,0,307,308,7,17,0,0,308,309,7,7,0,0,309,310,7,9,0,0,310, - 40,1,0,0,0,311,312,7,7,0,0,312,313,7,5,0,0,313,314,7,22,0,0,314, - 315,7,9,0,0,315,42,1,0,0,0,316,317,7,5,0,0,317,318,7,10,0,0,318, - 319,7,7,0,0,319,320,7,9,0,0,320,321,7,19,0,0,321,322,7,25,0,0,322, - 323,7,17,0,0,323,324,7,11,0,0,324,325,5,95,0,0,325,326,7,21,0,0, - 326,327,7,9,0,0,327,328,7,17,0,0,328,329,7,19,0,0,329,44,1,0,0,0, - 330,331,7,5,0,0,331,332,7,10,0,0,332,333,7,7,0,0,333,334,7,9,0,0, - 334,335,7,19,0,0,335,336,7,25,0,0,336,337,7,17,0,0,337,338,7,11, - 0,0,338,339,5,95,0,0,339,340,7,24,0,0,340,341,7,17,0,0,341,342,7, - 21,0,0,342,46,1,0,0,0,343,344,7,5,0,0,344,345,7,10,0,0,345,346,7, - 7,0,0,346,347,7,9,0,0,347,348,7,19,0,0,348,349,7,25,0,0,349,350, - 7,17,0,0,350,351,7,11,0,0,351,352,5,95,0,0,352,353,7,14,0,0,353, - 354,7,16,0,0,354,355,7,22,0,0,355,356,7,18,0,0,356,357,7,16,0,0, - 357,358,7,13,0,0,358,359,7,10,0,0,359,360,7,24,0,0,360,48,1,0,0, - 0,361,362,7,13,0,0,362,363,7,13,0,0,363,364,7,5,0,0,364,365,7,24, - 0,0,365,50,1,0,0,0,366,367,7,24,0,0,367,368,7,9,0,0,368,369,7,14, - 0,0,369,370,7,5,0,0,370,371,7,22,0,0,371,372,7,17,0,0,372,373,7, - 11,0,0,373,52,1,0,0,0,374,375,7,18,0,0,375,376,7,19,0,0,376,377, - 7,9,0,0,377,378,7,14,0,0,378,379,7,5,0,0,379,380,7,12,0,0,380,381, - 7,5,0,0,381,382,7,16,0,0,382,383,7,10,0,0,383,384,5,95,0,0,384,385, - 7,7,0,0,385,386,7,5,0,0,386,387,7,22,0,0,387,388,7,9,0,0,388,54, - 1,0,0,0,389,390,7,18,0,0,390,391,7,19,0,0,391,392,7,9,0,0,392,393, - 7,14,0,0,393,394,7,5,0,0,394,395,7,12,0,0,395,396,7,5,0,0,396,397, - 7,16,0,0,397,398,7,10,0,0,398,399,5,95,0,0,399,400,7,7,0,0,400,401, - 7,5,0,0,401,402,7,22,0,0,402,403,7,9,0,0,403,404,7,12,0,0,404,405, - 7,7,0,0,405,406,7,17,0,0,406,407,7,22,0,0,407,408,7,18,0,0,408,56, - 1,0,0,0,409,410,7,18,0,0,410,411,7,19,0,0,411,412,7,9,0,0,412,413, - 7,14,0,0,413,414,7,5,0,0,414,415,7,12,0,0,415,416,7,5,0,0,416,417, - 7,16,0,0,417,418,7,10,0,0,418,419,5,95,0,0,419,420,7,7,0,0,420,421, - 7,5,0,0,421,422,7,22,0,0,422,423,7,9,0,0,423,424,7,12,0,0,424,425, - 7,7,0,0,425,426,7,17,0,0,426,427,7,22,0,0,427,428,7,18,0,0,428,429, - 5,95,0,0,429,430,7,7,0,0,430,431,7,23,0,0,431,58,1,0,0,0,432,433, - 7,6,0,0,433,434,7,5,0,0,434,435,7,26,0,0,435,436,7,9,0,0,436,437, - 7,24,0,0,437,438,7,14,0,0,438,439,7,8,0,0,439,440,7,17,0,0,440,441, - 7,19,0,0,441,60,1,0,0,0,442,443,7,25,0,0,443,444,7,17,0,0,444,445, - 7,19,0,0,445,446,7,14,0,0,446,447,7,8,0,0,447,448,7,17,0,0,448,449, - 7,19,0,0,449,62,1,0,0,0,450,451,7,6,0,0,451,452,7,5,0,0,452,453, - 7,26,0,0,453,454,7,9,0,0,454,455,7,24,0,0,455,456,7,15,0,0,456,457, - 7,5,0,0,457,458,7,10,0,0,458,459,7,17,0,0,459,460,7,19,0,0,460,461, - 7,21,0,0,461,64,1,0,0,0,462,463,7,12,0,0,463,464,7,7,0,0,464,465, - 7,19,0,0,465,466,7,13,0,0,466,467,7,14,0,0,467,468,7,7,0,0,468,66, - 1,0,0,0,469,470,7,10,0,0,470,471,7,12,0,0,471,472,7,7,0,0,472,473, - 7,19,0,0,473,474,7,13,0,0,474,475,7,14,0,0,475,476,7,7,0,0,476,68, - 1,0,0,0,477,478,7,11,0,0,478,479,7,5,0,0,479,480,7,12,0,0,480,481, - 7,7,0,0,481,70,1,0,0,0,482,483,7,22,0,0,483,484,7,17,0,0,484,485, - 7,18,0,0,485,72,1,0,0,0,486,487,7,13,0,0,487,488,5,33,0,0,488,74, - 1,0,0,0,489,490,7,15,0,0,490,491,7,16,0,0,491,492,7,16,0,0,492,493, - 7,11,0,0,493,76,1,0,0,0,494,495,7,12,0,0,495,496,7,7,0,0,496,497, - 7,19,0,0,497,78,1,0,0,0,498,499,7,25,0,0,499,500,7,15,0,0,500,501, - 7,5,0,0,501,502,7,10,0,0,502,80,1,0,0,0,503,504,7,7,0,0,504,505, - 7,12,0,0,505,82,1,0,0,0,506,507,7,7,0,0,507,508,7,12,0,0,508,509, - 7,7,0,0,509,510,7,23,0,0,510,84,1,0,0,0,511,512,7,5,0,0,512,513, - 7,21,0,0,513,514,7,9,0,0,514,515,7,17,0,0,515,516,7,19,0,0,516,86, - 1,0,0,0,517,518,7,5,0,0,518,519,7,24,0,0,519,520,7,17,0,0,520,521, - 7,21,0,0,521,88,1,0,0,0,522,523,7,5,0,0,523,524,7,14,0,0,524,525, - 7,16,0,0,525,526,7,22,0,0,526,527,7,18,0,0,527,528,7,16,0,0,528, - 529,7,13,0,0,529,530,7,10,0,0,530,531,7,24,0,0,531,90,1,0,0,0,532, - 533,7,24,0,0,533,534,7,9,0,0,534,535,7,14,0,0,535,92,1,0,0,0,536, - 537,7,18,0,0,537,538,7,7,0,0,538,94,1,0,0,0,539,540,7,18,0,0,540, - 541,7,7,0,0,541,542,7,12,0,0,542,96,1,0,0,0,543,544,7,18,0,0,544, - 545,7,7,0,0,545,546,7,12,0,0,546,547,7,7,0,0,547,548,7,23,0,0,548, - 98,1,0,0,0,549,550,7,6,0,0,550,551,7,14,0,0,551,552,7,8,0,0,552, - 553,7,17,0,0,553,554,7,19,0,0,554,100,1,0,0,0,555,556,7,25,0,0,556, - 557,7,14,0,0,557,558,7,8,0,0,558,559,7,17,0,0,559,560,7,19,0,0,560, - 102,1,0,0,0,561,562,7,6,0,0,562,563,7,15,0,0,563,564,7,5,0,0,564, - 565,7,10,0,0,565,104,1,0,0,0,566,567,7,17,0,0,567,568,7,10,0,0,568, - 569,7,21,0,0,569,106,1,0,0,0,570,571,3,105,52,0,571,572,7,4,0,0, - 572,108,1,0,0,0,573,574,5,58,0,0,574,575,5,58,0,0,575,110,1,0,0, - 0,576,577,5,43,0,0,577,112,1,0,0,0,578,579,5,45,0,0,579,114,1,0, - 0,0,580,581,5,42,0,0,581,116,1,0,0,0,582,583,5,47,0,0,583,118,1, - 0,0,0,584,585,5,37,0,0,585,120,1,0,0,0,586,587,5,61,0,0,587,122, - 1,0,0,0,588,589,5,33,0,0,589,590,5,61,0,0,590,124,1,0,0,0,591,592, - 5,62,0,0,592,593,5,61,0,0,593,126,1,0,0,0,594,595,5,60,0,0,595,596, - 5,61,0,0,596,128,1,0,0,0,597,598,5,62,0,0,598,130,1,0,0,0,599,600, - 5,60,0,0,600,132,1,0,0,0,601,602,5,33,0,0,602,134,1,0,0,0,603,604, - 3,131,65,0,604,136,1,0,0,0,605,606,3,129,64,0,606,138,1,0,0,0,607, - 608,5,40,0,0,608,140,1,0,0,0,609,610,5,41,0,0,610,142,1,0,0,0,611, - 612,5,91,0,0,612,144,1,0,0,0,613,614,5,93,0,0,614,146,1,0,0,0,615, - 616,5,44,0,0,616,148,1,0,0,0,617,618,5,58,0,0,618,150,1,0,0,0,619, - 620,5,63,0,0,620,152,1,0,0,0,621,622,5,35,0,0,622,154,1,0,0,0,623, - 624,5,46,0,0,624,156,1,0,0,0,625,626,7,17,0,0,626,627,7,10,0,0,627, - 628,7,24,0,0,628,158,1,0,0,0,629,630,7,16,0,0,630,631,7,19,0,0,631, - 160,1,0,0,0,632,633,5,58,0,0,633,634,5,61,0,0,634,162,1,0,0,0,635, - 636,5,45,0,0,636,637,5,62,0,0,637,164,1,0,0,0,638,642,2,49,57,0, - 639,641,3,167,83,0,640,639,1,0,0,0,641,644,1,0,0,0,642,640,1,0,0, - 0,642,643,1,0,0,0,643,647,1,0,0,0,644,642,1,0,0,0,645,647,5,48,0, - 0,646,638,1,0,0,0,646,645,1,0,0,0,647,166,1,0,0,0,648,649,2,48,57, - 0,649,168,1,0,0,0,650,652,5,45,0,0,651,650,1,0,0,0,651,652,1,0,0, - 0,652,653,1,0,0,0,653,654,3,165,82,0,654,170,1,0,0,0,655,660,7,27, - 0,0,656,659,7,27,0,0,657,659,3,167,83,0,658,656,1,0,0,0,658,657, - 1,0,0,0,659,662,1,0,0,0,660,658,1,0,0,0,660,661,1,0,0,0,661,172, - 1,0,0,0,662,660,1,0,0,0,663,665,5,13,0,0,664,666,5,10,0,0,665,664, - 1,0,0,0,665,666,1,0,0,0,666,669,1,0,0,0,667,669,5,10,0,0,668,663, - 1,0,0,0,668,667,1,0,0,0,669,174,1,0,0,0,13,0,181,193,196,201,212, - 642,646,651,658,660,665,668,1,0,1,0 + 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,1,0,1,0,1,0,1,0,5,0,170,8, + 0,10,0,12,0,173,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,182,8,1,11,1, + 12,1,183,1,1,3,1,187,8,1,1,1,5,1,190,8,1,10,1,12,1,193,9,1,1,1,1, + 1,1,1,1,1,1,1,1,2,4,2,201,8,2,11,2,12,2,202,1,2,1,2,1,3,1,3,1,4, + 1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7, + 1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1, + 10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, + 13,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1, + 16,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, + 20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1, + 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1, + 27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1, + 30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, + 33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36,1, + 36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1, + 38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1, + 40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1, + 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1, + 45,1,45,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,49,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,1,54,1, + 54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1, + 59,1,60,1,60,1,61,1,61,1,62,1,62,1,63,1,63,1,64,1,64,1,65,1,65,1, + 66,1,66,1,67,1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1,71,1,72,1, + 72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76,1, + 76,1,77,1,77,5,77,595,8,77,10,77,12,77,598,9,77,1,77,3,77,601,8, + 77,1,78,1,78,1,79,3,79,606,8,79,1,79,1,79,1,80,1,80,1,80,5,80,613, + 8,80,10,80,12,80,616,9,80,1,81,1,81,3,81,620,8,81,1,81,3,81,623, + 8,81,0,0,82,1,1,3,2,5,3,7,0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23, + 11,25,12,27,13,29,14,31,15,33,16,35,17,37,18,39,19,41,20,43,21,45, + 22,47,23,49,24,51,25,53,26,55,27,57,28,59,29,61,30,63,31,65,32,67, + 33,69,34,71,35,73,36,75,37,77,38,79,39,81,40,83,41,85,42,87,43,89, + 44,91,45,93,46,95,47,97,48,99,49,101,50,103,51,105,52,107,53,109, + 54,111,55,113,56,115,57,117,58,119,59,121,60,123,61,125,62,127,63, + 129,64,131,65,133,66,135,67,137,68,139,69,141,70,143,71,145,72,147, + 73,149,74,151,75,153,76,155,0,157,0,159,77,161,78,163,79,1,0,28, + 2,0,10,10,13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13,32,32,1, + 0,48,57,2,0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116,116,2, + 0,72,72,104,104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76,76,108, + 108,2,0,83,83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2,0,66,66, + 98,98,2,0,79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112,2,0,82, + 82,114,114,2,0,71,71,103,103,2,0,89,89,121,121,2,0,68,68,100,100, + 2,0,86,86,118,118,2,0,77,77,109,109,2,0,90,90,122,122,2,0,88,88, + 120,120,4,0,36,36,65,90,95,95,97,122,632,0,1,1,0,0,0,0,3,1,0,0,0, + 0,5,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,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0, + 47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0, + 57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0, + 67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0, + 77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0, + 87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0, + 97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0, + 0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115, + 1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0, + 0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1, + 0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0, + 143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0, + 0,0,0,153,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,1,165, + 1,0,0,0,3,176,1,0,0,0,5,200,1,0,0,0,7,206,1,0,0,0,9,208,1,0,0,0, + 11,211,1,0,0,0,13,216,1,0,0,0,15,221,1,0,0,0,17,226,1,0,0,0,19,234, + 1,0,0,0,21,237,1,0,0,0,23,241,1,0,0,0,25,245,1,0,0,0,27,249,1,0, + 0,0,29,254,1,0,0,0,31,259,1,0,0,0,33,266,1,0,0,0,35,273,1,0,0,0, + 37,278,1,0,0,0,39,292,1,0,0,0,41,305,1,0,0,0,43,323,1,0,0,0,45,328, + 1,0,0,0,47,336,1,0,0,0,49,351,1,0,0,0,51,371,1,0,0,0,53,394,1,0, + 0,0,55,404,1,0,0,0,57,412,1,0,0,0,59,424,1,0,0,0,61,431,1,0,0,0, + 63,439,1,0,0,0,65,444,1,0,0,0,67,448,1,0,0,0,69,451,1,0,0,0,71,456, + 1,0,0,0,73,460,1,0,0,0,75,465,1,0,0,0,77,471,1,0,0,0,79,476,1,0, + 0,0,81,486,1,0,0,0,83,490,1,0,0,0,85,493,1,0,0,0,87,497,1,0,0,0, + 89,503,1,0,0,0,91,509,1,0,0,0,93,515,1,0,0,0,95,520,1,0,0,0,97,524, + 1,0,0,0,99,527,1,0,0,0,101,530,1,0,0,0,103,532,1,0,0,0,105,534,1, + 0,0,0,107,536,1,0,0,0,109,538,1,0,0,0,111,540,1,0,0,0,113,542,1, + 0,0,0,115,545,1,0,0,0,117,548,1,0,0,0,119,551,1,0,0,0,121,553,1, + 0,0,0,123,555,1,0,0,0,125,557,1,0,0,0,127,559,1,0,0,0,129,561,1, + 0,0,0,131,563,1,0,0,0,133,565,1,0,0,0,135,567,1,0,0,0,137,569,1, + 0,0,0,139,571,1,0,0,0,141,573,1,0,0,0,143,575,1,0,0,0,145,577,1, + 0,0,0,147,579,1,0,0,0,149,583,1,0,0,0,151,586,1,0,0,0,153,589,1, + 0,0,0,155,600,1,0,0,0,157,602,1,0,0,0,159,605,1,0,0,0,161,609,1, + 0,0,0,163,622,1,0,0,0,165,166,5,47,0,0,166,167,5,47,0,0,167,171, + 1,0,0,0,168,170,8,0,0,0,169,168,1,0,0,0,170,173,1,0,0,0,171,169, + 1,0,0,0,171,172,1,0,0,0,172,174,1,0,0,0,173,171,1,0,0,0,174,175, + 6,0,0,0,175,2,1,0,0,0,176,177,5,47,0,0,177,178,5,42,0,0,178,186, + 1,0,0,0,179,187,8,1,0,0,180,182,5,42,0,0,181,180,1,0,0,0,182,183, + 1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,185,1,0,0,0,185,187, + 8,2,0,0,186,179,1,0,0,0,186,181,1,0,0,0,187,191,1,0,0,0,188,190, + 5,42,0,0,189,188,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192, + 1,0,0,0,192,194,1,0,0,0,193,191,1,0,0,0,194,195,5,42,0,0,195,196, + 5,47,0,0,196,197,1,0,0,0,197,198,6,1,0,0,198,4,1,0,0,0,199,201,7, + 3,0,0,200,199,1,0,0,0,201,202,1,0,0,0,202,200,1,0,0,0,202,203,1, + 0,0,0,203,204,1,0,0,0,204,205,6,2,0,0,205,6,1,0,0,0,206,207,7,4, + 0,0,207,8,1,0,0,0,208,209,7,5,0,0,209,210,7,6,0,0,210,10,1,0,0,0, + 211,212,7,7,0,0,212,213,7,8,0,0,213,214,7,9,0,0,214,215,7,10,0,0, + 215,12,1,0,0,0,216,217,7,9,0,0,217,218,7,11,0,0,218,219,7,12,0,0, + 219,220,7,9,0,0,220,14,1,0,0,0,221,222,7,6,0,0,222,223,7,13,0,0, + 223,224,7,10,0,0,224,225,7,14,0,0,225,16,1,0,0,0,226,227,7,15,0, + 0,227,228,7,16,0,0,228,229,7,16,0,0,229,230,7,11,0,0,230,231,7,9, + 0,0,231,232,7,17,0,0,232,233,7,10,0,0,233,18,1,0,0,0,234,235,7,5, + 0,0,235,236,5,56,0,0,236,20,1,0,0,0,237,238,7,5,0,0,238,239,5,49, + 0,0,239,240,5,54,0,0,240,22,1,0,0,0,241,242,7,5,0,0,242,243,5,51, + 0,0,243,244,5,50,0,0,244,24,1,0,0,0,245,246,7,5,0,0,246,247,5,54, + 0,0,247,248,5,52,0,0,248,26,1,0,0,0,249,250,7,6,0,0,250,251,7,18, + 0,0,251,252,5,51,0,0,252,253,5,50,0,0,253,28,1,0,0,0,254,255,7,6, + 0,0,255,256,7,18,0,0,256,257,5,54,0,0,257,258,5,52,0,0,258,30,1, + 0,0,0,259,260,7,12,0,0,260,261,7,7,0,0,261,262,7,19,0,0,262,263, + 7,5,0,0,263,264,7,10,0,0,264,265,7,20,0,0,265,32,1,0,0,0,266,267, + 7,15,0,0,267,268,7,5,0,0,268,269,7,10,0,0,269,270,7,17,0,0,270,271, + 7,19,0,0,271,272,7,21,0,0,272,34,1,0,0,0,273,274,7,22,0,0,274,275, + 7,17,0,0,275,276,7,7,0,0,276,277,7,9,0,0,277,36,1,0,0,0,278,279, + 7,5,0,0,279,280,7,10,0,0,280,281,7,7,0,0,281,282,7,9,0,0,282,283, + 7,19,0,0,283,284,7,23,0,0,284,285,7,17,0,0,285,286,7,11,0,0,286, + 287,5,95,0,0,287,288,7,21,0,0,288,289,7,9,0,0,289,290,7,17,0,0,290, + 291,7,19,0,0,291,38,1,0,0,0,292,293,7,5,0,0,293,294,7,10,0,0,294, + 295,7,7,0,0,295,296,7,9,0,0,296,297,7,19,0,0,297,298,7,23,0,0,298, + 299,7,17,0,0,299,300,7,11,0,0,300,301,5,95,0,0,301,302,7,22,0,0, + 302,303,7,17,0,0,303,304,7,21,0,0,304,40,1,0,0,0,305,306,7,5,0,0, + 306,307,7,10,0,0,307,308,7,7,0,0,308,309,7,9,0,0,309,310,7,19,0, + 0,310,311,7,23,0,0,311,312,7,17,0,0,312,313,7,11,0,0,313,314,5,95, + 0,0,314,315,7,14,0,0,315,316,7,16,0,0,316,317,7,24,0,0,317,318,7, + 18,0,0,318,319,7,16,0,0,319,320,7,13,0,0,320,321,7,10,0,0,321,322, + 7,22,0,0,322,42,1,0,0,0,323,324,7,13,0,0,324,325,7,13,0,0,325,326, + 7,5,0,0,326,327,7,22,0,0,327,44,1,0,0,0,328,329,7,22,0,0,329,330, + 7,9,0,0,330,331,7,14,0,0,331,332,7,5,0,0,332,333,7,24,0,0,333,334, + 7,17,0,0,334,335,7,11,0,0,335,46,1,0,0,0,336,337,7,18,0,0,337,338, + 7,19,0,0,338,339,7,9,0,0,339,340,7,14,0,0,340,341,7,5,0,0,341,342, + 7,12,0,0,342,343,7,5,0,0,343,344,7,16,0,0,344,345,7,10,0,0,345,346, + 5,95,0,0,346,347,7,7,0,0,347,348,7,5,0,0,348,349,7,24,0,0,349,350, + 7,9,0,0,350,48,1,0,0,0,351,352,7,18,0,0,352,353,7,19,0,0,353,354, + 7,9,0,0,354,355,7,14,0,0,355,356,7,5,0,0,356,357,7,12,0,0,357,358, + 7,5,0,0,358,359,7,16,0,0,359,360,7,10,0,0,360,361,5,95,0,0,361,362, + 7,7,0,0,362,363,7,5,0,0,363,364,7,24,0,0,364,365,7,9,0,0,365,366, + 7,12,0,0,366,367,7,7,0,0,367,368,7,17,0,0,368,369,7,24,0,0,369,370, + 7,18,0,0,370,50,1,0,0,0,371,372,7,18,0,0,372,373,7,19,0,0,373,374, + 7,9,0,0,374,375,7,14,0,0,375,376,7,5,0,0,376,377,7,12,0,0,377,378, + 7,5,0,0,378,379,7,16,0,0,379,380,7,10,0,0,380,381,5,95,0,0,381,382, + 7,7,0,0,382,383,7,5,0,0,383,384,7,24,0,0,384,385,7,9,0,0,385,386, + 7,12,0,0,386,387,7,7,0,0,387,388,7,17,0,0,388,389,7,24,0,0,389,390, + 7,18,0,0,390,391,5,95,0,0,391,392,7,7,0,0,392,393,7,25,0,0,393,52, + 1,0,0,0,394,395,7,6,0,0,395,396,7,5,0,0,396,397,7,26,0,0,397,398, + 7,9,0,0,398,399,7,22,0,0,399,400,7,14,0,0,400,401,7,8,0,0,401,402, + 7,17,0,0,402,403,7,19,0,0,403,54,1,0,0,0,404,405,7,23,0,0,405,406, + 7,17,0,0,406,407,7,19,0,0,407,408,7,14,0,0,408,409,7,8,0,0,409,410, + 7,17,0,0,410,411,7,19,0,0,411,56,1,0,0,0,412,413,7,6,0,0,413,414, + 7,5,0,0,414,415,7,26,0,0,415,416,7,9,0,0,416,417,7,22,0,0,417,418, + 7,15,0,0,418,419,7,5,0,0,419,420,7,10,0,0,420,421,7,17,0,0,421,422, + 7,19,0,0,422,423,7,21,0,0,423,58,1,0,0,0,424,425,7,12,0,0,425,426, + 7,7,0,0,426,427,7,19,0,0,427,428,7,13,0,0,428,429,7,14,0,0,429,430, + 7,7,0,0,430,60,1,0,0,0,431,432,7,10,0,0,432,433,7,12,0,0,433,434, + 7,7,0,0,434,435,7,19,0,0,435,436,7,13,0,0,436,437,7,14,0,0,437,438, + 7,7,0,0,438,62,1,0,0,0,439,440,7,11,0,0,440,441,7,5,0,0,441,442, + 7,12,0,0,442,443,7,7,0,0,443,64,1,0,0,0,444,445,7,24,0,0,445,446, + 7,17,0,0,446,447,7,18,0,0,447,66,1,0,0,0,448,449,7,13,0,0,449,450, + 5,33,0,0,450,68,1,0,0,0,451,452,7,15,0,0,452,453,7,16,0,0,453,454, + 7,16,0,0,454,455,7,11,0,0,455,70,1,0,0,0,456,457,7,12,0,0,457,458, + 7,7,0,0,458,459,7,19,0,0,459,72,1,0,0,0,460,461,7,23,0,0,461,462, + 7,15,0,0,462,463,7,5,0,0,463,464,7,10,0,0,464,74,1,0,0,0,465,466, + 7,5,0,0,466,467,7,21,0,0,467,468,7,9,0,0,468,469,7,17,0,0,469,470, + 7,19,0,0,470,76,1,0,0,0,471,472,7,5,0,0,472,473,7,22,0,0,473,474, + 7,17,0,0,474,475,7,21,0,0,475,78,1,0,0,0,476,477,7,5,0,0,477,478, + 7,14,0,0,478,479,7,16,0,0,479,480,7,24,0,0,480,481,7,18,0,0,481, + 482,7,16,0,0,482,483,7,13,0,0,483,484,7,10,0,0,484,485,7,22,0,0, + 485,80,1,0,0,0,486,487,7,22,0,0,487,488,7,9,0,0,488,489,7,14,0,0, + 489,82,1,0,0,0,490,491,7,18,0,0,491,492,7,7,0,0,492,84,1,0,0,0,493, + 494,7,18,0,0,494,495,7,7,0,0,495,496,7,12,0,0,496,86,1,0,0,0,497, + 498,7,18,0,0,498,499,7,7,0,0,499,500,7,12,0,0,500,501,7,7,0,0,501, + 502,7,25,0,0,502,88,1,0,0,0,503,504,7,6,0,0,504,505,7,14,0,0,505, + 506,7,8,0,0,506,507,7,17,0,0,507,508,7,19,0,0,508,90,1,0,0,0,509, + 510,7,23,0,0,510,511,7,14,0,0,511,512,7,8,0,0,512,513,7,17,0,0,513, + 514,7,19,0,0,514,92,1,0,0,0,515,516,7,6,0,0,516,517,7,15,0,0,517, + 518,7,5,0,0,518,519,7,10,0,0,519,94,1,0,0,0,520,521,7,17,0,0,521, + 522,7,10,0,0,522,523,7,21,0,0,523,96,1,0,0,0,524,525,3,95,47,0,525, + 526,7,4,0,0,526,98,1,0,0,0,527,528,5,58,0,0,528,529,5,58,0,0,529, + 100,1,0,0,0,530,531,5,43,0,0,531,102,1,0,0,0,532,533,5,45,0,0,533, + 104,1,0,0,0,534,535,5,42,0,0,535,106,1,0,0,0,536,537,5,47,0,0,537, + 108,1,0,0,0,538,539,5,37,0,0,539,110,1,0,0,0,540,541,5,61,0,0,541, + 112,1,0,0,0,542,543,5,33,0,0,543,544,5,61,0,0,544,114,1,0,0,0,545, + 546,5,62,0,0,546,547,5,61,0,0,547,116,1,0,0,0,548,549,5,60,0,0,549, + 550,5,61,0,0,550,118,1,0,0,0,551,552,5,62,0,0,552,120,1,0,0,0,553, + 554,5,60,0,0,554,122,1,0,0,0,555,556,5,33,0,0,556,124,1,0,0,0,557, + 558,3,121,60,0,558,126,1,0,0,0,559,560,3,119,59,0,560,128,1,0,0, + 0,561,562,5,40,0,0,562,130,1,0,0,0,563,564,5,41,0,0,564,132,1,0, + 0,0,565,566,5,91,0,0,566,134,1,0,0,0,567,568,5,93,0,0,568,136,1, + 0,0,0,569,570,5,44,0,0,570,138,1,0,0,0,571,572,5,58,0,0,572,140, + 1,0,0,0,573,574,5,63,0,0,574,142,1,0,0,0,575,576,5,35,0,0,576,144, + 1,0,0,0,577,578,5,46,0,0,578,146,1,0,0,0,579,580,7,17,0,0,580,581, + 7,10,0,0,581,582,7,22,0,0,582,148,1,0,0,0,583,584,7,16,0,0,584,585, + 7,19,0,0,585,150,1,0,0,0,586,587,5,58,0,0,587,588,5,61,0,0,588,152, + 1,0,0,0,589,590,5,45,0,0,590,591,5,62,0,0,591,154,1,0,0,0,592,596, + 2,49,57,0,593,595,3,157,78,0,594,593,1,0,0,0,595,598,1,0,0,0,596, + 594,1,0,0,0,596,597,1,0,0,0,597,601,1,0,0,0,598,596,1,0,0,0,599, + 601,5,48,0,0,600,592,1,0,0,0,600,599,1,0,0,0,601,156,1,0,0,0,602, + 603,2,48,57,0,603,158,1,0,0,0,604,606,5,45,0,0,605,604,1,0,0,0,605, + 606,1,0,0,0,606,607,1,0,0,0,607,608,3,155,77,0,608,160,1,0,0,0,609, + 614,7,27,0,0,610,613,7,27,0,0,611,613,3,157,78,0,612,610,1,0,0,0, + 612,611,1,0,0,0,613,616,1,0,0,0,614,612,1,0,0,0,614,615,1,0,0,0, + 615,162,1,0,0,0,616,614,1,0,0,0,617,619,5,13,0,0,618,620,5,10,0, + 0,619,618,1,0,0,0,619,620,1,0,0,0,620,623,1,0,0,0,621,623,5,10,0, + 0,622,617,1,0,0,0,622,621,1,0,0,0,623,164,1,0,0,0,13,0,171,183,186, + 191,202,596,600,605,612,614,619,622,1,0,1,0 ] class SubstraitTypeLexer(Lexer): @@ -270,74 +254,69 @@ class SubstraitTypeLexer(Lexer): FP64 = 14 String = 15 Binary = 16 - Timestamp = 17 - Timestamp_TZ = 18 - Date = 19 - Time = 20 - Interval_Year = 21 - Interval_Day = 22 - Interval_Compound = 23 - UUID = 24 - Decimal = 25 - Precision_Time = 26 - Precision_Timestamp = 27 - Precision_Timestamp_TZ = 28 - FixedChar = 29 - VarChar = 30 - FixedBinary = 31 - Struct = 32 - NStruct = 33 - List = 34 - Map = 35 - UserDefined = 36 - Bool = 37 - Str = 38 - VBin = 39 - Ts = 40 - TsTZ = 41 - IYear = 42 - IDay = 43 - ICompound = 44 - Dec = 45 - PT = 46 - PTs = 47 - PTsTZ = 48 - FChar = 49 - VChar = 50 - FBin = 51 - Any = 52 - AnyVar = 53 - DoubleColon = 54 - Plus = 55 - Minus = 56 - Asterisk = 57 - ForwardSlash = 58 - Percent = 59 - Eq = 60 - Ne = 61 - Gte = 62 - Lte = 63 - Gt = 64 - Lt = 65 - Bang = 66 - OAngleBracket = 67 - CAngleBracket = 68 - OParen = 69 - CParen = 70 - OBracket = 71 - CBracket = 72 - Comma = 73 - Colon = 74 - QMark = 75 - Hash = 76 - Dot = 77 - And = 78 - Or = 79 - Assign = 80 - Arrow = 81 - Number = 82 - Identifier = 83 - Newline = 84 + Date = 17 + Interval_Year = 18 + Interval_Day = 19 + Interval_Compound = 20 + UUID = 21 + Decimal = 22 + Precision_Time = 23 + Precision_Timestamp = 24 + Precision_Timestamp_TZ = 25 + FixedChar = 26 + VarChar = 27 + FixedBinary = 28 + Struct = 29 + NStruct = 30 + List = 31 + Map = 32 + UserDefined = 33 + Bool = 34 + Str = 35 + VBin = 36 + IYear = 37 + IDay = 38 + ICompound = 39 + Dec = 40 + PT = 41 + PTs = 42 + PTsTZ = 43 + FChar = 44 + VChar = 45 + FBin = 46 + Any = 47 + AnyVar = 48 + DoubleColon = 49 + Plus = 50 + Minus = 51 + Asterisk = 52 + ForwardSlash = 53 + Percent = 54 + Eq = 55 + Ne = 56 + Gte = 57 + Lte = 58 + Gt = 59 + Lt = 60 + Bang = 61 + OAngleBracket = 62 + CAngleBracket = 63 + OParen = 64 + CParen = 65 + OBracket = 66 + CBracket = 67 + Comma = 68 + Colon = 69 + QMark = 70 + Hash = 71 + Dot = 72 + And = 73 + Or = 74 + Assign = 75 + Arrow = 76 + Number = 77 + Identifier = 78 + Newline = 79 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -346,49 +325,47 @@ class SubstraitTypeLexer(Lexer): literalNames = [ "", "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", - "'TIMESTAMP'", "'TIMESTAMP_TZ'", "'DATE'", "'TIME'", "'INTERVAL_YEAR'", - "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", - "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", - "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", - "'LIST'", "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'TS'", - "'TSTZ'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", "'DEC'", "'PT'", - "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", "'ANY'", - "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", "'>='", - "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", "','", - "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", "'->'" ] + "'DATE'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", + "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", + "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", + "'STRUCT'", "'NSTRUCT'", "'LIST'", "'MAP'", "'U!'", "'BOOL'", + "'STR'", "'VBIN'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", "'DEC'", + "'PT'", "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", + "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", + "'>='", "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", + "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", + "'->'" ] symbolicNames = [ "", "LineComment", "BlockComment", "Whitespace", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", - "String", "Binary", "Timestamp", "Timestamp_TZ", "Date", "Time", - "Interval_Year", "Interval_Day", "Interval_Compound", "UUID", - "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", - "List", "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", - "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", - "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", - "Asterisk", "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", - "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", "OParen", - "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", - "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", "Identifier", - "Newline" ] + "String", "Binary", "Date", "Interval_Year", "Interval_Day", + "Interval_Compound", "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", + "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", "Str", + "VBin", "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", + "FChar", "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", + "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", "Ne", + "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", + "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", + "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", + "Identifier", "Newline" ] ruleNames = [ "LineComment", "BlockComment", "Whitespace", "DIGIT", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", - "I32", "I64", "FP32", "FP64", "String", "Binary", "Timestamp", - "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", - "Interval_Compound", "UUID", "Decimal", "Precision_Time", - "Precision_Timestamp", "Precision_Timestamp_TZ", "FixedChar", - "VarChar", "FixedBinary", "Struct", "NStruct", "List", - "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", - "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", - "FChar", "VChar", "FBin", "Any", "AnyVar", "DoubleColon", - "Plus", "Minus", "Asterisk", "ForwardSlash", "Percent", - "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", - "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", - "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", - "Assign", "Arrow", "Int", "Digit", "Number", "Identifier", - "Newline" ] + "I32", "I64", "FP32", "FP64", "String", "Binary", "Date", + "Interval_Year", "Interval_Day", "Interval_Compound", + "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", + "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", + "Str", "VBin", "IYear", "IDay", "ICompound", "Dec", "PT", + "PTs", "PTsTZ", "FChar", "VChar", "FBin", "Any", "AnyVar", + "DoubleColon", "Plus", "Minus", "Asterisk", "ForwardSlash", + "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", + "OAngleBracket", "CAngleBracket", "OParen", "CParen", + "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", + "Dot", "And", "Or", "Assign", "Arrow", "Int", "Digit", + "Number", "Identifier", "Newline" ] grammarFileName = "SubstraitType.g4" diff --git a/tests/type/antlr_parser/SubstraitTypeListener.py b/tests/type/antlr_parser/SubstraitTypeListener.py index 9d2c0293a..68a7561fd 100644 --- a/tests/type/antlr_parser/SubstraitTypeListener.py +++ b/tests/type/antlr_parser/SubstraitTypeListener.py @@ -108,24 +108,6 @@ def exitBinary(self, ctx:SubstraitTypeParser.BinaryContext): pass - # Enter a parse tree produced by SubstraitTypeParser#timestamp. - def enterTimestamp(self, ctx:SubstraitTypeParser.TimestampContext): - pass - - # Exit a parse tree produced by SubstraitTypeParser#timestamp. - def exitTimestamp(self, ctx:SubstraitTypeParser.TimestampContext): - pass - - - # Enter a parse tree produced by SubstraitTypeParser#timestampTz. - def enterTimestampTz(self, ctx:SubstraitTypeParser.TimestampTzContext): - pass - - # Exit a parse tree produced by SubstraitTypeParser#timestampTz. - def exitTimestampTz(self, ctx:SubstraitTypeParser.TimestampTzContext): - pass - - # Enter a parse tree produced by SubstraitTypeParser#date. def enterDate(self, ctx:SubstraitTypeParser.DateContext): pass @@ -135,15 +117,6 @@ def exitDate(self, ctx:SubstraitTypeParser.DateContext): pass - # Enter a parse tree produced by SubstraitTypeParser#time. - def enterTime(self, ctx:SubstraitTypeParser.TimeContext): - pass - - # Exit a parse tree produced by SubstraitTypeParser#time. - def exitTime(self, ctx:SubstraitTypeParser.TimeContext): - pass - - # Enter a parse tree produced by SubstraitTypeParser#intervalYear. def enterIntervalYear(self, ctx:SubstraitTypeParser.IntervalYearContext): pass diff --git a/tests/type/antlr_parser/SubstraitTypeParser.py b/tests/type/antlr_parser/SubstraitTypeParser.py index 7061168de..a43f99d09 100644 --- a/tests/type/antlr_parser/SubstraitTypeParser.py +++ b/tests/type/antlr_parser/SubstraitTypeParser.py @@ -11,123 +11,121 @@ def serializedATN(): return [ - 4,1,84,310,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, + 4,1,79,307,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,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1, - 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,40,8,2,1,3,1,3,3,3,44, - 8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,52,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3, - 3,60,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,68,8,3,1,3,1,3,1,3,1,3,1,3, - 1,3,1,3,1,3,3,3,78,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,86,8,3,1,3,1, - 3,1,3,1,3,1,3,1,3,3,3,94,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,102,8,3, - 1,3,1,3,1,3,1,3,1,3,1,3,3,3,110,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3, - 118,8,3,1,3,1,3,1,3,1,3,5,3,124,8,3,10,3,12,3,127,9,3,1,3,1,3,1, - 3,1,3,3,3,133,8,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,141,8,3,10,3,12,3, - 144,9,3,1,3,1,3,1,3,1,3,3,3,150,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3, - 158,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,168,8,3,1,3,1,3,1,3, - 1,3,1,3,1,3,1,3,1,3,1,3,3,3,179,8,3,1,3,1,3,1,3,1,3,5,3,185,8,3, - 10,3,12,3,188,9,3,1,3,1,3,3,3,192,8,3,3,3,194,8,3,1,4,1,4,1,4,1, - 4,1,4,5,4,201,8,4,10,4,12,4,204,9,4,1,4,1,4,3,4,208,8,4,1,5,1,5, - 1,5,3,5,213,8,5,1,6,1,6,3,6,217,8,6,1,6,1,6,3,6,221,8,6,3,6,223, - 8,6,1,7,1,7,3,7,227,8,7,1,7,1,7,3,7,231,8,7,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,4,8,242,8,8,11,8,12,8,243,1,8,1,8,1,8,1,8,4,8,250, - 8,8,11,8,12,8,251,5,8,254,8,8,10,8,12,8,257,9,8,1,8,1,8,5,8,261, - 8,8,10,8,12,8,264,9,8,1,8,1,8,1,8,1,8,3,8,270,8,8,1,8,1,8,1,8,1, - 8,1,8,5,8,277,8,8,10,8,12,8,280,9,8,3,8,282,8,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,3,8,294,8,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,5,8,305,8,8,10,8,12,8,308,9,8,1,8,0,1,16,9,0,2,4,6,8,10, - 12,14,16,0,1,3,0,55,58,60,65,78,79,373,0,18,1,0,0,0,2,21,1,0,0,0, - 4,39,1,0,0,0,6,193,1,0,0,0,8,207,1,0,0,0,10,212,1,0,0,0,12,222,1, - 0,0,0,14,230,1,0,0,0,16,293,1,0,0,0,18,19,3,16,8,0,19,20,5,0,0,1, - 20,1,1,0,0,0,21,22,3,14,7,0,22,23,5,0,0,1,23,3,1,0,0,0,24,40,5,8, - 0,0,25,40,5,9,0,0,26,40,5,10,0,0,27,40,5,11,0,0,28,40,5,12,0,0,29, - 40,5,13,0,0,30,40,5,14,0,0,31,40,5,15,0,0,32,40,5,16,0,0,33,40,5, - 17,0,0,34,40,5,18,0,0,35,40,5,19,0,0,36,40,5,20,0,0,37,40,5,21,0, - 0,38,40,5,24,0,0,39,24,1,0,0,0,39,25,1,0,0,0,39,26,1,0,0,0,39,27, - 1,0,0,0,39,28,1,0,0,0,39,29,1,0,0,0,39,30,1,0,0,0,39,31,1,0,0,0, - 39,32,1,0,0,0,39,33,1,0,0,0,39,34,1,0,0,0,39,35,1,0,0,0,39,36,1, - 0,0,0,39,37,1,0,0,0,39,38,1,0,0,0,40,5,1,0,0,0,41,43,5,29,0,0,42, - 44,5,75,0,0,43,42,1,0,0,0,43,44,1,0,0,0,44,45,1,0,0,0,45,46,5,65, - 0,0,46,47,3,10,5,0,47,48,5,64,0,0,48,194,1,0,0,0,49,51,5,30,0,0, - 50,52,5,75,0,0,51,50,1,0,0,0,51,52,1,0,0,0,52,53,1,0,0,0,53,54,5, - 65,0,0,54,55,3,10,5,0,55,56,5,64,0,0,56,194,1,0,0,0,57,59,5,31,0, - 0,58,60,5,75,0,0,59,58,1,0,0,0,59,60,1,0,0,0,60,61,1,0,0,0,61,62, - 5,65,0,0,62,63,3,10,5,0,63,64,5,64,0,0,64,194,1,0,0,0,65,67,5,25, - 0,0,66,68,5,75,0,0,67,66,1,0,0,0,67,68,1,0,0,0,68,69,1,0,0,0,69, - 70,5,65,0,0,70,71,3,10,5,0,71,72,5,73,0,0,72,73,3,10,5,0,73,74,5, - 64,0,0,74,194,1,0,0,0,75,77,5,22,0,0,76,78,5,75,0,0,77,76,1,0,0, - 0,77,78,1,0,0,0,78,79,1,0,0,0,79,80,5,65,0,0,80,81,3,10,5,0,81,82, - 5,64,0,0,82,194,1,0,0,0,83,85,5,23,0,0,84,86,5,75,0,0,85,84,1,0, - 0,0,85,86,1,0,0,0,86,87,1,0,0,0,87,88,5,65,0,0,88,89,3,10,5,0,89, - 90,5,64,0,0,90,194,1,0,0,0,91,93,5,26,0,0,92,94,5,75,0,0,93,92,1, - 0,0,0,93,94,1,0,0,0,94,95,1,0,0,0,95,96,5,65,0,0,96,97,3,10,5,0, - 97,98,5,64,0,0,98,194,1,0,0,0,99,101,5,27,0,0,100,102,5,75,0,0,101, - 100,1,0,0,0,101,102,1,0,0,0,102,103,1,0,0,0,103,104,5,65,0,0,104, - 105,3,10,5,0,105,106,5,64,0,0,106,194,1,0,0,0,107,109,5,28,0,0,108, - 110,5,75,0,0,109,108,1,0,0,0,109,110,1,0,0,0,110,111,1,0,0,0,111, - 112,5,65,0,0,112,113,3,10,5,0,113,114,5,64,0,0,114,194,1,0,0,0,115, - 117,5,32,0,0,116,118,5,75,0,0,117,116,1,0,0,0,117,118,1,0,0,0,118, - 119,1,0,0,0,119,120,5,65,0,0,120,125,3,16,8,0,121,122,5,73,0,0,122, - 124,3,16,8,0,123,121,1,0,0,0,124,127,1,0,0,0,125,123,1,0,0,0,125, - 126,1,0,0,0,126,128,1,0,0,0,127,125,1,0,0,0,128,129,5,64,0,0,129, - 194,1,0,0,0,130,132,5,33,0,0,131,133,5,75,0,0,132,131,1,0,0,0,132, - 133,1,0,0,0,133,134,1,0,0,0,134,135,5,65,0,0,135,136,5,83,0,0,136, - 142,3,16,8,0,137,138,5,73,0,0,138,139,5,83,0,0,139,141,3,16,8,0, - 140,137,1,0,0,0,141,144,1,0,0,0,142,140,1,0,0,0,142,143,1,0,0,0, - 143,145,1,0,0,0,144,142,1,0,0,0,145,146,5,64,0,0,146,194,1,0,0,0, - 147,149,5,34,0,0,148,150,5,75,0,0,149,148,1,0,0,0,149,150,1,0,0, - 0,150,151,1,0,0,0,151,152,5,65,0,0,152,153,3,16,8,0,153,154,5,64, - 0,0,154,194,1,0,0,0,155,157,5,35,0,0,156,158,5,75,0,0,157,156,1, - 0,0,0,157,158,1,0,0,0,158,159,1,0,0,0,159,160,5,65,0,0,160,161,3, - 16,8,0,161,162,5,73,0,0,162,163,3,16,8,0,163,164,5,64,0,0,164,194, - 1,0,0,0,165,167,5,7,0,0,166,168,5,75,0,0,167,166,1,0,0,0,167,168, - 1,0,0,0,168,169,1,0,0,0,169,170,5,65,0,0,170,171,3,8,4,0,171,172, - 5,81,0,0,172,173,3,16,8,0,173,174,5,64,0,0,174,194,1,0,0,0,175,176, - 5,36,0,0,176,178,5,83,0,0,177,179,5,75,0,0,178,177,1,0,0,0,178,179, - 1,0,0,0,179,191,1,0,0,0,180,181,5,65,0,0,181,186,3,16,8,0,182,183, - 5,73,0,0,183,185,3,16,8,0,184,182,1,0,0,0,185,188,1,0,0,0,186,184, - 1,0,0,0,186,187,1,0,0,0,187,189,1,0,0,0,188,186,1,0,0,0,189,190, - 5,64,0,0,190,192,1,0,0,0,191,180,1,0,0,0,191,192,1,0,0,0,192,194, - 1,0,0,0,193,41,1,0,0,0,193,49,1,0,0,0,193,57,1,0,0,0,193,65,1,0, - 0,0,193,75,1,0,0,0,193,83,1,0,0,0,193,91,1,0,0,0,193,99,1,0,0,0, - 193,107,1,0,0,0,193,115,1,0,0,0,193,130,1,0,0,0,193,147,1,0,0,0, - 193,155,1,0,0,0,193,165,1,0,0,0,193,175,1,0,0,0,194,7,1,0,0,0,195, - 208,3,16,8,0,196,197,5,69,0,0,197,202,3,16,8,0,198,199,5,73,0,0, - 199,201,3,16,8,0,200,198,1,0,0,0,201,204,1,0,0,0,202,200,1,0,0,0, - 202,203,1,0,0,0,203,205,1,0,0,0,204,202,1,0,0,0,205,206,5,70,0,0, - 206,208,1,0,0,0,207,195,1,0,0,0,207,196,1,0,0,0,208,9,1,0,0,0,209, - 213,5,82,0,0,210,213,5,83,0,0,211,213,3,16,8,0,212,209,1,0,0,0,212, - 210,1,0,0,0,212,211,1,0,0,0,213,11,1,0,0,0,214,216,5,52,0,0,215, - 217,5,75,0,0,216,215,1,0,0,0,216,217,1,0,0,0,217,223,1,0,0,0,218, - 220,5,53,0,0,219,221,5,75,0,0,220,219,1,0,0,0,220,221,1,0,0,0,221, - 223,1,0,0,0,222,214,1,0,0,0,222,218,1,0,0,0,223,13,1,0,0,0,224,226, - 3,4,2,0,225,227,5,75,0,0,226,225,1,0,0,0,226,227,1,0,0,0,227,231, - 1,0,0,0,228,231,3,6,3,0,229,231,3,12,6,0,230,224,1,0,0,0,230,228, - 1,0,0,0,230,229,1,0,0,0,231,15,1,0,0,0,232,233,6,8,-1,0,233,234, - 5,69,0,0,234,235,3,16,8,0,235,236,5,70,0,0,236,294,1,0,0,0,237,238, - 5,83,0,0,238,239,5,60,0,0,239,241,3,16,8,0,240,242,5,84,0,0,241, - 240,1,0,0,0,242,243,1,0,0,0,243,241,1,0,0,0,243,244,1,0,0,0,244, - 255,1,0,0,0,245,246,5,83,0,0,246,247,5,60,0,0,247,249,3,16,8,0,248, - 250,5,84,0,0,249,248,1,0,0,0,250,251,1,0,0,0,251,249,1,0,0,0,251, - 252,1,0,0,0,252,254,1,0,0,0,253,245,1,0,0,0,254,257,1,0,0,0,255, - 253,1,0,0,0,255,256,1,0,0,0,256,258,1,0,0,0,257,255,1,0,0,0,258, - 262,3,14,7,0,259,261,5,84,0,0,260,259,1,0,0,0,261,264,1,0,0,0,262, - 260,1,0,0,0,262,263,1,0,0,0,263,294,1,0,0,0,264,262,1,0,0,0,265, - 294,3,14,7,0,266,294,5,82,0,0,267,269,5,83,0,0,268,270,5,75,0,0, - 269,268,1,0,0,0,269,270,1,0,0,0,270,294,1,0,0,0,271,272,5,83,0,0, - 272,281,5,69,0,0,273,278,3,16,8,0,274,275,5,73,0,0,275,277,3,16, - 8,0,276,274,1,0,0,0,277,280,1,0,0,0,278,276,1,0,0,0,278,279,1,0, - 0,0,279,282,1,0,0,0,280,278,1,0,0,0,281,273,1,0,0,0,281,282,1,0, - 0,0,282,283,1,0,0,0,283,294,5,70,0,0,284,285,5,4,0,0,285,286,3,16, - 8,0,286,287,5,5,0,0,287,288,3,16,8,0,288,289,5,6,0,0,289,290,3,16, - 8,3,290,294,1,0,0,0,291,292,5,66,0,0,292,294,3,16,8,2,293,232,1, - 0,0,0,293,237,1,0,0,0,293,265,1,0,0,0,293,266,1,0,0,0,293,267,1, - 0,0,0,293,271,1,0,0,0,293,284,1,0,0,0,293,291,1,0,0,0,294,306,1, - 0,0,0,295,296,10,4,0,0,296,297,7,0,0,0,297,305,3,16,8,5,298,299, - 10,1,0,0,299,300,5,75,0,0,300,301,3,16,8,0,301,302,5,74,0,0,302, - 303,3,16,8,2,303,305,1,0,0,0,304,295,1,0,0,0,304,298,1,0,0,0,305, - 308,1,0,0,0,306,304,1,0,0,0,306,307,1,0,0,0,307,17,1,0,0,0,308,306, - 1,0,0,0,39,39,43,51,59,67,77,85,93,101,109,117,125,132,142,149,157, - 167,178,186,191,193,202,207,212,216,220,222,226,230,243,251,255, - 262,269,278,281,293,304,306 + 2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,37,8,2,1,3,1,3,3,3,41,8,3,1,3,1,3, + 1,3,1,3,1,3,1,3,3,3,49,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,57,8,3,1, + 3,1,3,1,3,1,3,1,3,1,3,3,3,65,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 3,3,75,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,83,8,3,1,3,1,3,1,3,1,3,1, + 3,1,3,3,3,91,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,99,8,3,1,3,1,3,1,3, + 1,3,1,3,1,3,3,3,107,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,115,8,3,1,3, + 1,3,1,3,1,3,5,3,121,8,3,10,3,12,3,124,9,3,1,3,1,3,1,3,1,3,3,3,130, + 8,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,138,8,3,10,3,12,3,141,9,3,1,3,1, + 3,1,3,1,3,3,3,147,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,155,8,3,1,3,1, + 3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,165,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,1,3,1,3,3,3,176,8,3,1,3,1,3,1,3,1,3,5,3,182,8,3,10,3,12,3,185, + 9,3,1,3,1,3,3,3,189,8,3,3,3,191,8,3,1,4,1,4,1,4,1,4,1,4,5,4,198, + 8,4,10,4,12,4,201,9,4,1,4,1,4,3,4,205,8,4,1,5,1,5,1,5,3,5,210,8, + 5,1,6,1,6,3,6,214,8,6,1,6,1,6,3,6,218,8,6,3,6,220,8,6,1,7,1,7,3, + 7,224,8,7,1,7,1,7,3,7,228,8,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, + 8,4,8,239,8,8,11,8,12,8,240,1,8,1,8,1,8,1,8,4,8,247,8,8,11,8,12, + 8,248,5,8,251,8,8,10,8,12,8,254,9,8,1,8,1,8,5,8,258,8,8,10,8,12, + 8,261,9,8,1,8,1,8,1,8,1,8,3,8,267,8,8,1,8,1,8,1,8,1,8,1,8,5,8,274, + 8,8,10,8,12,8,277,9,8,3,8,279,8,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, + 8,1,8,1,8,3,8,291,8,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,302, + 8,8,10,8,12,8,305,9,8,1,8,0,1,16,9,0,2,4,6,8,10,12,14,16,0,1,3,0, + 50,53,55,60,73,74,367,0,18,1,0,0,0,2,21,1,0,0,0,4,36,1,0,0,0,6,190, + 1,0,0,0,8,204,1,0,0,0,10,209,1,0,0,0,12,219,1,0,0,0,14,227,1,0,0, + 0,16,290,1,0,0,0,18,19,3,16,8,0,19,20,5,0,0,1,20,1,1,0,0,0,21,22, + 3,14,7,0,22,23,5,0,0,1,23,3,1,0,0,0,24,37,5,8,0,0,25,37,5,9,0,0, + 26,37,5,10,0,0,27,37,5,11,0,0,28,37,5,12,0,0,29,37,5,13,0,0,30,37, + 5,14,0,0,31,37,5,15,0,0,32,37,5,16,0,0,33,37,5,17,0,0,34,37,5,18, + 0,0,35,37,5,21,0,0,36,24,1,0,0,0,36,25,1,0,0,0,36,26,1,0,0,0,36, + 27,1,0,0,0,36,28,1,0,0,0,36,29,1,0,0,0,36,30,1,0,0,0,36,31,1,0,0, + 0,36,32,1,0,0,0,36,33,1,0,0,0,36,34,1,0,0,0,36,35,1,0,0,0,37,5,1, + 0,0,0,38,40,5,26,0,0,39,41,5,70,0,0,40,39,1,0,0,0,40,41,1,0,0,0, + 41,42,1,0,0,0,42,43,5,60,0,0,43,44,3,10,5,0,44,45,5,59,0,0,45,191, + 1,0,0,0,46,48,5,27,0,0,47,49,5,70,0,0,48,47,1,0,0,0,48,49,1,0,0, + 0,49,50,1,0,0,0,50,51,5,60,0,0,51,52,3,10,5,0,52,53,5,59,0,0,53, + 191,1,0,0,0,54,56,5,28,0,0,55,57,5,70,0,0,56,55,1,0,0,0,56,57,1, + 0,0,0,57,58,1,0,0,0,58,59,5,60,0,0,59,60,3,10,5,0,60,61,5,59,0,0, + 61,191,1,0,0,0,62,64,5,22,0,0,63,65,5,70,0,0,64,63,1,0,0,0,64,65, + 1,0,0,0,65,66,1,0,0,0,66,67,5,60,0,0,67,68,3,10,5,0,68,69,5,68,0, + 0,69,70,3,10,5,0,70,71,5,59,0,0,71,191,1,0,0,0,72,74,5,19,0,0,73, + 75,5,70,0,0,74,73,1,0,0,0,74,75,1,0,0,0,75,76,1,0,0,0,76,77,5,60, + 0,0,77,78,3,10,5,0,78,79,5,59,0,0,79,191,1,0,0,0,80,82,5,20,0,0, + 81,83,5,70,0,0,82,81,1,0,0,0,82,83,1,0,0,0,83,84,1,0,0,0,84,85,5, + 60,0,0,85,86,3,10,5,0,86,87,5,59,0,0,87,191,1,0,0,0,88,90,5,23,0, + 0,89,91,5,70,0,0,90,89,1,0,0,0,90,91,1,0,0,0,91,92,1,0,0,0,92,93, + 5,60,0,0,93,94,3,10,5,0,94,95,5,59,0,0,95,191,1,0,0,0,96,98,5,24, + 0,0,97,99,5,70,0,0,98,97,1,0,0,0,98,99,1,0,0,0,99,100,1,0,0,0,100, + 101,5,60,0,0,101,102,3,10,5,0,102,103,5,59,0,0,103,191,1,0,0,0,104, + 106,5,25,0,0,105,107,5,70,0,0,106,105,1,0,0,0,106,107,1,0,0,0,107, + 108,1,0,0,0,108,109,5,60,0,0,109,110,3,10,5,0,110,111,5,59,0,0,111, + 191,1,0,0,0,112,114,5,29,0,0,113,115,5,70,0,0,114,113,1,0,0,0,114, + 115,1,0,0,0,115,116,1,0,0,0,116,117,5,60,0,0,117,122,3,16,8,0,118, + 119,5,68,0,0,119,121,3,16,8,0,120,118,1,0,0,0,121,124,1,0,0,0,122, + 120,1,0,0,0,122,123,1,0,0,0,123,125,1,0,0,0,124,122,1,0,0,0,125, + 126,5,59,0,0,126,191,1,0,0,0,127,129,5,30,0,0,128,130,5,70,0,0,129, + 128,1,0,0,0,129,130,1,0,0,0,130,131,1,0,0,0,131,132,5,60,0,0,132, + 133,5,78,0,0,133,139,3,16,8,0,134,135,5,68,0,0,135,136,5,78,0,0, + 136,138,3,16,8,0,137,134,1,0,0,0,138,141,1,0,0,0,139,137,1,0,0,0, + 139,140,1,0,0,0,140,142,1,0,0,0,141,139,1,0,0,0,142,143,5,59,0,0, + 143,191,1,0,0,0,144,146,5,31,0,0,145,147,5,70,0,0,146,145,1,0,0, + 0,146,147,1,0,0,0,147,148,1,0,0,0,148,149,5,60,0,0,149,150,3,16, + 8,0,150,151,5,59,0,0,151,191,1,0,0,0,152,154,5,32,0,0,153,155,5, + 70,0,0,154,153,1,0,0,0,154,155,1,0,0,0,155,156,1,0,0,0,156,157,5, + 60,0,0,157,158,3,16,8,0,158,159,5,68,0,0,159,160,3,16,8,0,160,161, + 5,59,0,0,161,191,1,0,0,0,162,164,5,7,0,0,163,165,5,70,0,0,164,163, + 1,0,0,0,164,165,1,0,0,0,165,166,1,0,0,0,166,167,5,60,0,0,167,168, + 3,8,4,0,168,169,5,76,0,0,169,170,3,16,8,0,170,171,5,59,0,0,171,191, + 1,0,0,0,172,173,5,33,0,0,173,175,5,78,0,0,174,176,5,70,0,0,175,174, + 1,0,0,0,175,176,1,0,0,0,176,188,1,0,0,0,177,178,5,60,0,0,178,183, + 3,16,8,0,179,180,5,68,0,0,180,182,3,16,8,0,181,179,1,0,0,0,182,185, + 1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,186,1,0,0,0,185,183, + 1,0,0,0,186,187,5,59,0,0,187,189,1,0,0,0,188,177,1,0,0,0,188,189, + 1,0,0,0,189,191,1,0,0,0,190,38,1,0,0,0,190,46,1,0,0,0,190,54,1,0, + 0,0,190,62,1,0,0,0,190,72,1,0,0,0,190,80,1,0,0,0,190,88,1,0,0,0, + 190,96,1,0,0,0,190,104,1,0,0,0,190,112,1,0,0,0,190,127,1,0,0,0,190, + 144,1,0,0,0,190,152,1,0,0,0,190,162,1,0,0,0,190,172,1,0,0,0,191, + 7,1,0,0,0,192,205,3,16,8,0,193,194,5,64,0,0,194,199,3,16,8,0,195, + 196,5,68,0,0,196,198,3,16,8,0,197,195,1,0,0,0,198,201,1,0,0,0,199, + 197,1,0,0,0,199,200,1,0,0,0,200,202,1,0,0,0,201,199,1,0,0,0,202, + 203,5,65,0,0,203,205,1,0,0,0,204,192,1,0,0,0,204,193,1,0,0,0,205, + 9,1,0,0,0,206,210,5,77,0,0,207,210,5,78,0,0,208,210,3,16,8,0,209, + 206,1,0,0,0,209,207,1,0,0,0,209,208,1,0,0,0,210,11,1,0,0,0,211,213, + 5,47,0,0,212,214,5,70,0,0,213,212,1,0,0,0,213,214,1,0,0,0,214,220, + 1,0,0,0,215,217,5,48,0,0,216,218,5,70,0,0,217,216,1,0,0,0,217,218, + 1,0,0,0,218,220,1,0,0,0,219,211,1,0,0,0,219,215,1,0,0,0,220,13,1, + 0,0,0,221,223,3,4,2,0,222,224,5,70,0,0,223,222,1,0,0,0,223,224,1, + 0,0,0,224,228,1,0,0,0,225,228,3,6,3,0,226,228,3,12,6,0,227,221,1, + 0,0,0,227,225,1,0,0,0,227,226,1,0,0,0,228,15,1,0,0,0,229,230,6,8, + -1,0,230,231,5,64,0,0,231,232,3,16,8,0,232,233,5,65,0,0,233,291, + 1,0,0,0,234,235,5,78,0,0,235,236,5,55,0,0,236,238,3,16,8,0,237,239, + 5,79,0,0,238,237,1,0,0,0,239,240,1,0,0,0,240,238,1,0,0,0,240,241, + 1,0,0,0,241,252,1,0,0,0,242,243,5,78,0,0,243,244,5,55,0,0,244,246, + 3,16,8,0,245,247,5,79,0,0,246,245,1,0,0,0,247,248,1,0,0,0,248,246, + 1,0,0,0,248,249,1,0,0,0,249,251,1,0,0,0,250,242,1,0,0,0,251,254, + 1,0,0,0,252,250,1,0,0,0,252,253,1,0,0,0,253,255,1,0,0,0,254,252, + 1,0,0,0,255,259,3,14,7,0,256,258,5,79,0,0,257,256,1,0,0,0,258,261, + 1,0,0,0,259,257,1,0,0,0,259,260,1,0,0,0,260,291,1,0,0,0,261,259, + 1,0,0,0,262,291,3,14,7,0,263,291,5,77,0,0,264,266,5,78,0,0,265,267, + 5,70,0,0,266,265,1,0,0,0,266,267,1,0,0,0,267,291,1,0,0,0,268,269, + 5,78,0,0,269,278,5,64,0,0,270,275,3,16,8,0,271,272,5,68,0,0,272, + 274,3,16,8,0,273,271,1,0,0,0,274,277,1,0,0,0,275,273,1,0,0,0,275, + 276,1,0,0,0,276,279,1,0,0,0,277,275,1,0,0,0,278,270,1,0,0,0,278, + 279,1,0,0,0,279,280,1,0,0,0,280,291,5,65,0,0,281,282,5,4,0,0,282, + 283,3,16,8,0,283,284,5,5,0,0,284,285,3,16,8,0,285,286,5,6,0,0,286, + 287,3,16,8,3,287,291,1,0,0,0,288,289,5,61,0,0,289,291,3,16,8,2,290, + 229,1,0,0,0,290,234,1,0,0,0,290,262,1,0,0,0,290,263,1,0,0,0,290, + 264,1,0,0,0,290,268,1,0,0,0,290,281,1,0,0,0,290,288,1,0,0,0,291, + 303,1,0,0,0,292,293,10,4,0,0,293,294,7,0,0,0,294,302,3,16,8,5,295, + 296,10,1,0,0,296,297,5,70,0,0,297,298,3,16,8,0,298,299,5,69,0,0, + 299,300,3,16,8,2,300,302,1,0,0,0,301,292,1,0,0,0,301,295,1,0,0,0, + 302,305,1,0,0,0,303,301,1,0,0,0,303,304,1,0,0,0,304,17,1,0,0,0,305, + 303,1,0,0,0,39,36,40,48,56,64,74,82,90,98,106,114,122,129,139,146, + 154,164,175,183,188,190,199,204,209,213,217,219,223,227,240,248, + 252,259,266,275,278,290,301,303 ] class SubstraitTypeParser ( Parser ): @@ -143,36 +141,35 @@ class SubstraitTypeParser ( Parser ): literalNames = [ "", "", "", "", "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", "'I64'", "'FP32'", "'FP64'", - "'STRING'", "'BINARY'", "'TIMESTAMP'", "'TIMESTAMP_TZ'", - "'DATE'", "'TIME'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", - "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", - "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", - "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", "'STRUCT'", - "'NSTRUCT'", "'LIST'", "'MAP'", "'U!'", "'BOOL'", "'STR'", - "'VBIN'", "'TS'", "'TSTZ'", "'IYEAR'", "'IDAY'", "'ICOMPOUND'", - "'DEC'", "'PT'", "'PTS'", "'PTSTZ'", "'FCHAR'", "'VCHAR'", - "'FBIN'", "'ANY'", "", "'::'", "'+'", "'-'", - "'*'", "'/'", "'%'", "'='", "'!='", "'>='", "'<='", - "'>'", "'<'", "'!'", "", "", "'('", - "')'", "'['", "']'", "','", "':'", "'?'", "'#'", "'.'", - "'AND'", "'OR'", "':='", "'->'" ] + "'STRING'", "'BINARY'", "'DATE'", "'INTERVAL_YEAR'", + "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", "'UUID'", + "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", + "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", + "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", "'LIST'", + "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'IYEAR'", + "'IDAY'", "'ICOMPOUND'", "'DEC'", "'PT'", "'PTS'", + "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", "'ANY'", + "", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", + "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", + "", "", "'('", "')'", "'['", "']'", + "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", + "':='", "'->'" ] symbolicNames = [ "", "LineComment", "BlockComment", "Whitespace", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", - "Timestamp", "Timestamp_TZ", "Date", "Time", "Interval_Year", - "Interval_Day", "Interval_Compound", "UUID", "Decimal", - "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", - "List", "Map", "UserDefined", "Bool", "Str", "VBin", - "Ts", "TsTZ", "IYear", "IDay", "ICompound", "Dec", - "PT", "PTs", "PTsTZ", "FChar", "VChar", "FBin", "Any", - "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", - "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", - "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", - "OParen", "CParen", "OBracket", "CBracket", "Comma", - "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", - "Arrow", "Number", "Identifier", "Newline" ] + "Date", "Interval_Year", "Interval_Day", "Interval_Compound", + "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", + "FixedBinary", "Struct", "NStruct", "List", "Map", + "UserDefined", "Bool", "Str", "VBin", "IYear", "IDay", + "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", + "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", + "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", + "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", + "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", + "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", + "Assign", "Arrow", "Number", "Identifier", "Newline" ] RULE_startRule = 0 RULE_typeStatement = 1 @@ -205,74 +202,69 @@ class SubstraitTypeParser ( Parser ): FP64=14 String=15 Binary=16 - Timestamp=17 - Timestamp_TZ=18 - Date=19 - Time=20 - Interval_Year=21 - Interval_Day=22 - Interval_Compound=23 - UUID=24 - Decimal=25 - Precision_Time=26 - Precision_Timestamp=27 - Precision_Timestamp_TZ=28 - FixedChar=29 - VarChar=30 - FixedBinary=31 - Struct=32 - NStruct=33 - List=34 - Map=35 - UserDefined=36 - Bool=37 - Str=38 - VBin=39 - Ts=40 - TsTZ=41 - IYear=42 - IDay=43 - ICompound=44 - Dec=45 - PT=46 - PTs=47 - PTsTZ=48 - FChar=49 - VChar=50 - FBin=51 - Any=52 - AnyVar=53 - DoubleColon=54 - Plus=55 - Minus=56 - Asterisk=57 - ForwardSlash=58 - Percent=59 - Eq=60 - Ne=61 - Gte=62 - Lte=63 - Gt=64 - Lt=65 - Bang=66 - OAngleBracket=67 - CAngleBracket=68 - OParen=69 - CParen=70 - OBracket=71 - CBracket=72 - Comma=73 - Colon=74 - QMark=75 - Hash=76 - Dot=77 - And=78 - Or=79 - Assign=80 - Arrow=81 - Number=82 - Identifier=83 - Newline=84 + Date=17 + Interval_Year=18 + Interval_Day=19 + Interval_Compound=20 + UUID=21 + Decimal=22 + Precision_Time=23 + Precision_Timestamp=24 + Precision_Timestamp_TZ=25 + FixedChar=26 + VarChar=27 + FixedBinary=28 + Struct=29 + NStruct=30 + List=31 + Map=32 + UserDefined=33 + Bool=34 + Str=35 + VBin=36 + IYear=37 + IDay=38 + ICompound=39 + Dec=40 + PT=41 + PTs=42 + PTsTZ=43 + FChar=44 + VChar=45 + FBin=46 + Any=47 + AnyVar=48 + DoubleColon=49 + Plus=50 + Minus=51 + Asterisk=52 + ForwardSlash=53 + Percent=54 + Eq=55 + Ne=56 + Gte=57 + Lte=58 + Gt=59 + Lt=60 + Bang=61 + OAngleBracket=62 + CAngleBracket=63 + OParen=64 + CParen=65 + OBracket=66 + CBracket=67 + Comma=68 + Colon=69 + QMark=70 + Hash=71 + Dot=72 + And=73 + Or=74 + Assign=75 + Arrow=76 + Number=77 + Identifier=78 + Newline=79 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -430,6 +422,30 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class BooleanContext(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Boolean(self): + return self.getToken(SubstraitTypeParser.Boolean, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBoolean" ): + listener.enterBoolean(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBoolean" ): + listener.exitBoolean(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBoolean" ): + return visitor.visitBoolean(self) + else: + return visitor.visitChildren(self) + + class StringContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext @@ -478,290 +494,194 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class I32Context(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def I32(self): - return self.getToken(SubstraitTypeParser.I32, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterI32" ): - listener.enterI32(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitI32" ): - listener.exitI32(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitI32" ): - return visitor.visitI32(self) - else: - return visitor.visitChildren(self) - - - class IntervalYearContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def Interval_Year(self): - return self.getToken(SubstraitTypeParser.Interval_Year, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIntervalYear" ): - listener.enterIntervalYear(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIntervalYear" ): - listener.exitIntervalYear(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIntervalYear" ): - return visitor.visitIntervalYear(self) - else: - return visitor.visitChildren(self) - - - class UuidContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def UUID(self): - return self.getToken(SubstraitTypeParser.UUID, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUuid" ): - listener.enterUuid(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUuid" ): - listener.exitUuid(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUuid" ): - return visitor.visitUuid(self) - else: - return visitor.visitChildren(self) - - - class I8Context(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def I8(self): - return self.getToken(SubstraitTypeParser.I8, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterI8" ): - listener.enterI8(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitI8" ): - listener.exitI8(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitI8" ): - return visitor.visitI8(self) - else: - return visitor.visitChildren(self) - - - class I16Context(ScalarTypeContext): + class BinaryContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def I16(self): - return self.getToken(SubstraitTypeParser.I16, 0) + def Binary(self): + return self.getToken(SubstraitTypeParser.Binary, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterI16" ): - listener.enterI16(self) + if hasattr( listener, "enterBinary" ): + listener.enterBinary(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitI16" ): - listener.exitI16(self) + if hasattr( listener, "exitBinary" ): + listener.exitBinary(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitI16" ): - return visitor.visitI16(self) + if hasattr( visitor, "visitBinary" ): + return visitor.visitBinary(self) else: return visitor.visitChildren(self) - class BooleanContext(ScalarTypeContext): + class Fp64Context(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def Boolean(self): - return self.getToken(SubstraitTypeParser.Boolean, 0) + def FP64(self): + return self.getToken(SubstraitTypeParser.FP64, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBoolean" ): - listener.enterBoolean(self) + if hasattr( listener, "enterFp64" ): + listener.enterFp64(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBoolean" ): - listener.exitBoolean(self) + if hasattr( listener, "exitFp64" ): + listener.exitFp64(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBoolean" ): - return visitor.visitBoolean(self) + if hasattr( visitor, "visitFp64" ): + return visitor.visitFp64(self) else: return visitor.visitChildren(self) - class BinaryContext(ScalarTypeContext): + class I32Context(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def Binary(self): - return self.getToken(SubstraitTypeParser.Binary, 0) + def I32(self): + return self.getToken(SubstraitTypeParser.I32, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBinary" ): - listener.enterBinary(self) + if hasattr( listener, "enterI32" ): + listener.enterI32(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBinary" ): - listener.exitBinary(self) + if hasattr( listener, "exitI32" ): + listener.exitI32(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBinary" ): - return visitor.visitBinary(self) + if hasattr( visitor, "visitI32" ): + return visitor.visitI32(self) else: return visitor.visitChildren(self) - class Fp64Context(ScalarTypeContext): + class Fp32Context(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def FP64(self): - return self.getToken(SubstraitTypeParser.FP64, 0) + def FP32(self): + return self.getToken(SubstraitTypeParser.FP32, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFp64" ): - listener.enterFp64(self) + if hasattr( listener, "enterFp32" ): + listener.enterFp32(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFp64" ): - listener.exitFp64(self) + if hasattr( listener, "exitFp32" ): + listener.exitFp32(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFp64" ): - return visitor.visitFp64(self) + if hasattr( visitor, "visitFp32" ): + return visitor.visitFp32(self) else: return visitor.visitChildren(self) - class Fp32Context(ScalarTypeContext): + class IntervalYearContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def FP32(self): - return self.getToken(SubstraitTypeParser.FP32, 0) + def Interval_Year(self): + return self.getToken(SubstraitTypeParser.Interval_Year, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFp32" ): - listener.enterFp32(self) + if hasattr( listener, "enterIntervalYear" ): + listener.enterIntervalYear(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFp32" ): - listener.exitFp32(self) + if hasattr( listener, "exitIntervalYear" ): + listener.exitIntervalYear(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFp32" ): - return visitor.visitFp32(self) + if hasattr( visitor, "visitIntervalYear" ): + return visitor.visitIntervalYear(self) else: return visitor.visitChildren(self) - class TimeContext(ScalarTypeContext): + class UuidContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def Time(self): - return self.getToken(SubstraitTypeParser.Time, 0) + def UUID(self): + return self.getToken(SubstraitTypeParser.UUID, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTime" ): - listener.enterTime(self) + if hasattr( listener, "enterUuid" ): + listener.enterUuid(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTime" ): - listener.exitTime(self) + if hasattr( listener, "exitUuid" ): + listener.exitUuid(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTime" ): - return visitor.visitTime(self) + if hasattr( visitor, "visitUuid" ): + return visitor.visitUuid(self) else: return visitor.visitChildren(self) - class TimestampContext(ScalarTypeContext): + class I8Context(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def Timestamp(self): - return self.getToken(SubstraitTypeParser.Timestamp, 0) + def I8(self): + return self.getToken(SubstraitTypeParser.I8, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestamp" ): - listener.enterTimestamp(self) + if hasattr( listener, "enterI8" ): + listener.enterI8(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestamp" ): - listener.exitTimestamp(self) + if hasattr( listener, "exitI8" ): + listener.exitI8(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestamp" ): - return visitor.visitTimestamp(self) + if hasattr( visitor, "visitI8" ): + return visitor.visitI8(self) else: return visitor.visitChildren(self) - class TimestampTzContext(ScalarTypeContext): + class I16Context(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext super().__init__(parser) self.copyFrom(ctx) - def Timestamp_TZ(self): - return self.getToken(SubstraitTypeParser.Timestamp_TZ, 0) + def I16(self): + return self.getToken(SubstraitTypeParser.I16, 0) def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampTz" ): - listener.enterTimestampTz(self) + if hasattr( listener, "enterI16" ): + listener.enterI16(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampTz" ): - listener.exitTimestampTz(self) + if hasattr( listener, "exitI16" ): + listener.exitI16(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampTz" ): - return visitor.visitTimestampTz(self) + if hasattr( visitor, "visitI16" ): + return visitor.visitI16(self) else: return visitor.visitChildren(self) @@ -772,7 +692,7 @@ def scalarType(self): localctx = SubstraitTypeParser.ScalarTypeContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_scalarType) try: - self.state = 39 + self.state = 36 self._errHandler.sync(self) token = self._input.LA(1) if token in [8]: @@ -830,39 +750,21 @@ def scalarType(self): self.match(SubstraitTypeParser.Binary) pass elif token in [17]: - localctx = SubstraitTypeParser.TimestampContext(self, localctx) + localctx = SubstraitTypeParser.DateContext(self, localctx) self.enterOuterAlt(localctx, 10) self.state = 33 - self.match(SubstraitTypeParser.Timestamp) + self.match(SubstraitTypeParser.Date) pass elif token in [18]: - localctx = SubstraitTypeParser.TimestampTzContext(self, localctx) + localctx = SubstraitTypeParser.IntervalYearContext(self, localctx) self.enterOuterAlt(localctx, 11) self.state = 34 - self.match(SubstraitTypeParser.Timestamp_TZ) - pass - elif token in [19]: - localctx = SubstraitTypeParser.DateContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 35 - self.match(SubstraitTypeParser.Date) - pass - elif token in [20]: - localctx = SubstraitTypeParser.TimeContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 36 - self.match(SubstraitTypeParser.Time) - pass - elif token in [21]: - localctx = SubstraitTypeParser.IntervalYearContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 37 self.match(SubstraitTypeParser.Interval_Year) pass - elif token in [24]: + elif token in [21]: localctx = SubstraitTypeParser.UuidContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 38 + self.enterOuterAlt(localctx, 12) + self.state = 35 self.match(SubstraitTypeParser.UUID) pass else: @@ -1471,365 +1373,365 @@ def parameterizedType(self): self.enterRule(localctx, 6, self.RULE_parameterizedType) self._la = 0 # Token type try: - self.state = 193 + self.state = 190 self._errHandler.sync(self) token = self._input.LA(1) - if token in [29]: + if token in [26]: localctx = SubstraitTypeParser.FixedCharContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 41 + self.state = 38 self.match(SubstraitTypeParser.FixedChar) - self.state = 43 + self.state = 40 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 42 + if _la==70: + self.state = 39 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 45 + self.state = 42 self.match(SubstraitTypeParser.Lt) - self.state = 46 + self.state = 43 localctx.length = self.numericParameter() - self.state = 47 + self.state = 44 self.match(SubstraitTypeParser.Gt) pass - elif token in [30]: + elif token in [27]: localctx = SubstraitTypeParser.VarCharContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 49 + self.state = 46 self.match(SubstraitTypeParser.VarChar) - self.state = 51 + self.state = 48 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 50 + if _la==70: + self.state = 47 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 53 + self.state = 50 self.match(SubstraitTypeParser.Lt) - self.state = 54 + self.state = 51 localctx.length = self.numericParameter() - self.state = 55 + self.state = 52 self.match(SubstraitTypeParser.Gt) pass - elif token in [31]: + elif token in [28]: localctx = SubstraitTypeParser.FixedBinaryContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 57 + self.state = 54 self.match(SubstraitTypeParser.FixedBinary) - self.state = 59 + self.state = 56 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 58 + if _la==70: + self.state = 55 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 61 + self.state = 58 self.match(SubstraitTypeParser.Lt) - self.state = 62 + self.state = 59 localctx.length = self.numericParameter() - self.state = 63 + self.state = 60 self.match(SubstraitTypeParser.Gt) pass - elif token in [25]: + elif token in [22]: localctx = SubstraitTypeParser.DecimalContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 65 + self.state = 62 self.match(SubstraitTypeParser.Decimal) - self.state = 67 + self.state = 64 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 66 + if _la==70: + self.state = 63 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 69 + self.state = 66 self.match(SubstraitTypeParser.Lt) - self.state = 70 + self.state = 67 localctx.precision = self.numericParameter() - self.state = 71 + self.state = 68 self.match(SubstraitTypeParser.Comma) - self.state = 72 + self.state = 69 localctx.scale = self.numericParameter() - self.state = 73 + self.state = 70 self.match(SubstraitTypeParser.Gt) pass - elif token in [22]: + elif token in [19]: localctx = SubstraitTypeParser.PrecisionIntervalDayContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 75 + self.state = 72 self.match(SubstraitTypeParser.Interval_Day) - self.state = 77 + self.state = 74 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 76 + if _la==70: + self.state = 73 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 79 + self.state = 76 self.match(SubstraitTypeParser.Lt) - self.state = 80 + self.state = 77 localctx.precision = self.numericParameter() - self.state = 81 + self.state = 78 self.match(SubstraitTypeParser.Gt) pass - elif token in [23]: + elif token in [20]: localctx = SubstraitTypeParser.PrecisionIntervalCompoundContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 83 + self.state = 80 self.match(SubstraitTypeParser.Interval_Compound) - self.state = 85 + self.state = 82 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 84 + if _la==70: + self.state = 81 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 87 + self.state = 84 self.match(SubstraitTypeParser.Lt) - self.state = 88 + self.state = 85 localctx.precision = self.numericParameter() - self.state = 89 + self.state = 86 self.match(SubstraitTypeParser.Gt) pass - elif token in [26]: + elif token in [23]: localctx = SubstraitTypeParser.PrecisionTimeContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 91 + self.state = 88 self.match(SubstraitTypeParser.Precision_Time) - self.state = 93 + self.state = 90 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 92 + if _la==70: + self.state = 89 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 95 + self.state = 92 self.match(SubstraitTypeParser.Lt) - self.state = 96 + self.state = 93 localctx.precision = self.numericParameter() - self.state = 97 + self.state = 94 self.match(SubstraitTypeParser.Gt) pass - elif token in [27]: + elif token in [24]: localctx = SubstraitTypeParser.PrecisionTimestampContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 99 + self.state = 96 self.match(SubstraitTypeParser.Precision_Timestamp) - self.state = 101 + self.state = 98 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 100 + if _la==70: + self.state = 97 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 103 + self.state = 100 self.match(SubstraitTypeParser.Lt) - self.state = 104 + self.state = 101 localctx.precision = self.numericParameter() - self.state = 105 + self.state = 102 self.match(SubstraitTypeParser.Gt) pass - elif token in [28]: + elif token in [25]: localctx = SubstraitTypeParser.PrecisionTimestampTZContext(self, localctx) self.enterOuterAlt(localctx, 9) - self.state = 107 + self.state = 104 self.match(SubstraitTypeParser.Precision_Timestamp_TZ) - self.state = 109 + self.state = 106 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 108 + if _la==70: + self.state = 105 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 111 + self.state = 108 self.match(SubstraitTypeParser.Lt) - self.state = 112 + self.state = 109 localctx.precision = self.numericParameter() - self.state = 113 + self.state = 110 self.match(SubstraitTypeParser.Gt) pass - elif token in [32]: + elif token in [29]: localctx = SubstraitTypeParser.StructContext(self, localctx) self.enterOuterAlt(localctx, 10) - self.state = 115 + self.state = 112 self.match(SubstraitTypeParser.Struct) - self.state = 117 + self.state = 114 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 116 + if _la==70: + self.state = 113 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 119 + self.state = 116 self.match(SubstraitTypeParser.Lt) - self.state = 120 + self.state = 117 self.expr(0) - self.state = 125 + self.state = 122 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==73: - self.state = 121 + while _la==68: + self.state = 118 self.match(SubstraitTypeParser.Comma) - self.state = 122 + self.state = 119 self.expr(0) - self.state = 127 + self.state = 124 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 128 + self.state = 125 self.match(SubstraitTypeParser.Gt) pass - elif token in [33]: + elif token in [30]: localctx = SubstraitTypeParser.NStructContext(self, localctx) self.enterOuterAlt(localctx, 11) - self.state = 130 + self.state = 127 self.match(SubstraitTypeParser.NStruct) - self.state = 132 + self.state = 129 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 131 + if _la==70: + self.state = 128 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 134 + self.state = 131 self.match(SubstraitTypeParser.Lt) - self.state = 135 + self.state = 132 self.match(SubstraitTypeParser.Identifier) - self.state = 136 + self.state = 133 self.expr(0) - self.state = 142 + self.state = 139 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==73: - self.state = 137 + while _la==68: + self.state = 134 self.match(SubstraitTypeParser.Comma) - self.state = 138 + self.state = 135 self.match(SubstraitTypeParser.Identifier) - self.state = 139 + self.state = 136 self.expr(0) - self.state = 144 + self.state = 141 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 145 + self.state = 142 self.match(SubstraitTypeParser.Gt) pass - elif token in [34]: + elif token in [31]: localctx = SubstraitTypeParser.ListContext(self, localctx) self.enterOuterAlt(localctx, 12) - self.state = 147 + self.state = 144 self.match(SubstraitTypeParser.List) - self.state = 149 + self.state = 146 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 148 + if _la==70: + self.state = 145 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 151 + self.state = 148 self.match(SubstraitTypeParser.Lt) - self.state = 152 + self.state = 149 self.expr(0) - self.state = 153 + self.state = 150 self.match(SubstraitTypeParser.Gt) pass - elif token in [35]: + elif token in [32]: localctx = SubstraitTypeParser.MapContext(self, localctx) self.enterOuterAlt(localctx, 13) - self.state = 155 + self.state = 152 self.match(SubstraitTypeParser.Map) - self.state = 157 + self.state = 154 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 156 + if _la==70: + self.state = 153 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 159 + self.state = 156 self.match(SubstraitTypeParser.Lt) - self.state = 160 + self.state = 157 localctx.key = self.expr(0) - self.state = 161 + self.state = 158 self.match(SubstraitTypeParser.Comma) - self.state = 162 + self.state = 159 localctx.value = self.expr(0) - self.state = 163 + self.state = 160 self.match(SubstraitTypeParser.Gt) pass elif token in [7]: localctx = SubstraitTypeParser.FuncContext(self, localctx) self.enterOuterAlt(localctx, 14) - self.state = 165 + self.state = 162 self.match(SubstraitTypeParser.Func) - self.state = 167 + self.state = 164 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==75: - self.state = 166 + if _la==70: + self.state = 163 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 169 + self.state = 166 self.match(SubstraitTypeParser.Lt) - self.state = 170 + self.state = 167 localctx.params = self.funcParams() - self.state = 171 + self.state = 168 self.match(SubstraitTypeParser.Arrow) - self.state = 172 + self.state = 169 localctx.returnType = self.expr(0) - self.state = 173 + self.state = 170 self.match(SubstraitTypeParser.Gt) pass - elif token in [36]: + elif token in [33]: localctx = SubstraitTypeParser.UserDefinedContext(self, localctx) self.enterOuterAlt(localctx, 15) - self.state = 175 + self.state = 172 self.match(SubstraitTypeParser.UserDefined) - self.state = 176 + self.state = 173 self.match(SubstraitTypeParser.Identifier) - self.state = 178 + self.state = 175 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,17,self._ctx) if la_ == 1: - self.state = 177 + self.state = 174 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 191 + self.state = 188 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,19,self._ctx) if la_ == 1: - self.state = 180 + self.state = 177 self.match(SubstraitTypeParser.Lt) - self.state = 181 + self.state = 178 self.expr(0) - self.state = 186 + self.state = 183 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==73: - self.state = 182 + while _la==68: + self.state = 179 self.match(SubstraitTypeParser.Comma) - self.state = 183 + self.state = 180 self.expr(0) - self.state = 188 + self.state = 185 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 189 + self.state = 186 self.match(SubstraitTypeParser.Gt) @@ -1932,36 +1834,36 @@ def funcParams(self): self.enterRule(localctx, 8, self.RULE_funcParams) self._la = 0 # Token type try: - self.state = 207 + self.state = 204 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,22,self._ctx) if la_ == 1: localctx = SubstraitTypeParser.SingleFuncParamContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 195 + self.state = 192 self.expr(0) pass elif la_ == 2: localctx = SubstraitTypeParser.FuncParamsWithParensContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 196 + self.state = 193 self.match(SubstraitTypeParser.OParen) - self.state = 197 + self.state = 194 self.expr(0) - self.state = 202 + self.state = 199 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==73: - self.state = 198 + while _la==68: + self.state = 195 self.match(SubstraitTypeParser.Comma) - self.state = 199 + self.state = 196 self.expr(0) - self.state = 204 + self.state = 201 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 205 + self.state = 202 self.match(SubstraitTypeParser.CParen) pass @@ -2071,27 +1973,27 @@ def numericParameter(self): localctx = SubstraitTypeParser.NumericParameterContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_numericParameter) try: - self.state = 212 + self.state = 209 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,23,self._ctx) if la_ == 1: localctx = SubstraitTypeParser.NumericLiteralContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 209 + self.state = 206 self.match(SubstraitTypeParser.Number) pass elif la_ == 2: localctx = SubstraitTypeParser.NumericParameterNameContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 210 + self.state = 207 self.match(SubstraitTypeParser.Identifier) pass elif la_ == 3: localctx = SubstraitTypeParser.NumericExpressionContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 211 + self.state = 208 self.expr(0) pass @@ -2147,31 +2049,31 @@ def anyType(self): localctx = SubstraitTypeParser.AnyTypeContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_anyType) try: - self.state = 222 + self.state = 219 self._errHandler.sync(self) token = self._input.LA(1) - if token in [52]: + if token in [47]: self.enterOuterAlt(localctx, 1) - self.state = 214 + self.state = 211 self.match(SubstraitTypeParser.Any) - self.state = 216 + self.state = 213 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,24,self._ctx) if la_ == 1: - self.state = 215 + self.state = 212 localctx.isnull = self.match(SubstraitTypeParser.QMark) pass - elif token in [53]: + elif token in [48]: self.enterOuterAlt(localctx, 2) - self.state = 218 + self.state = 215 self.match(SubstraitTypeParser.AnyVar) - self.state = 220 + self.state = 217 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,25,self._ctx) if la_ == 1: - self.state = 219 + self.state = 216 localctx.isnull = self.match(SubstraitTypeParser.QMark) @@ -2236,30 +2138,30 @@ def typeDef(self): localctx = SubstraitTypeParser.TypeDefContext(self, self._ctx, self.state) self.enterRule(localctx, 14, self.RULE_typeDef) try: - self.state = 230 + self.state = 227 self._errHandler.sync(self) token = self._input.LA(1) - if token in [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24]: + if token in [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21]: self.enterOuterAlt(localctx, 1) - self.state = 224 + self.state = 221 self.scalarType() - self.state = 226 + self.state = 223 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: - self.state = 225 + self.state = 222 localctx.isnull = self.match(SubstraitTypeParser.QMark) pass - elif token in [7, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]: + elif token in [7, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]: self.enterOuterAlt(localctx, 2) - self.state = 228 + self.state = 225 self.parameterizedType() pass - elif token in [52, 53]: + elif token in [47, 48]: self.enterOuterAlt(localctx, 3) - self.state = 229 + self.state = 226 self.anyType() pass else: @@ -2646,7 +2548,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 293 + self.state = 290 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,36,self._ctx) if la_ == 1: @@ -2654,11 +2556,11 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 233 + self.state = 230 self.match(SubstraitTypeParser.OParen) - self.state = 234 + self.state = 231 self.expr(0) - self.state = 235 + self.state = 232 self.match(SubstraitTypeParser.CParen) pass @@ -2666,60 +2568,60 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.MultilineDefinitionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 237 + self.state = 234 self.match(SubstraitTypeParser.Identifier) - self.state = 238 + self.state = 235 self.match(SubstraitTypeParser.Eq) - self.state = 239 + self.state = 236 self.expr(0) - self.state = 241 + self.state = 238 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 240 + self.state = 237 self.match(SubstraitTypeParser.Newline) - self.state = 243 + self.state = 240 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==84): + if not (_la==79): break - self.state = 255 + self.state = 252 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==83: - self.state = 245 + while _la==78: + self.state = 242 self.match(SubstraitTypeParser.Identifier) - self.state = 246 + self.state = 243 self.match(SubstraitTypeParser.Eq) - self.state = 247 + self.state = 244 self.expr(0) - self.state = 249 + self.state = 246 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 248 + self.state = 245 self.match(SubstraitTypeParser.Newline) - self.state = 251 + self.state = 248 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==84): + if not (_la==79): break - self.state = 257 + self.state = 254 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 258 + self.state = 255 localctx.finalType = self.typeDef() - self.state = 262 + self.state = 259 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 259 + self.state = 256 self.match(SubstraitTypeParser.Newline) - self.state = 264 + self.state = 261 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) @@ -2729,7 +2631,7 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.TypeLiteralContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 265 + self.state = 262 self.typeDef() pass @@ -2737,7 +2639,7 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.LiteralNumberContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 266 + self.state = 263 self.match(SubstraitTypeParser.Number) pass @@ -2745,13 +2647,13 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.ParameterNameContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 267 + self.state = 264 self.match(SubstraitTypeParser.Identifier) - self.state = 269 + self.state = 266 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,33,self._ctx) if la_ == 1: - self.state = 268 + self.state = 265 localctx.isnull = self.match(SubstraitTypeParser.QMark) @@ -2761,31 +2663,31 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.FunctionCallContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 271 + self.state = 268 self.match(SubstraitTypeParser.Identifier) - self.state = 272 + self.state = 269 self.match(SubstraitTypeParser.OParen) - self.state = 281 + self.state = 278 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 13510936321064848) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 196617) != 0): - self.state = 273 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 2306265238858629008) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 24577) != 0): + self.state = 270 self.expr(0) - self.state = 278 + self.state = 275 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==73: - self.state = 274 + while _la==68: + self.state = 271 self.match(SubstraitTypeParser.Comma) - self.state = 275 + self.state = 272 self.expr(0) - self.state = 280 + self.state = 277 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 283 + self.state = 280 self.match(SubstraitTypeParser.CParen) pass @@ -2793,17 +2695,17 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.IfExprContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 284 + self.state = 281 self.match(SubstraitTypeParser.If) - self.state = 285 + self.state = 282 localctx.ifExpr = self.expr(0) - self.state = 286 + self.state = 283 self.match(SubstraitTypeParser.Then) - self.state = 287 + self.state = 284 localctx.thenExpr = self.expr(0) - self.state = 288 + self.state = 285 self.match(SubstraitTypeParser.Else) - self.state = 289 + self.state = 286 localctx.elseExpr = self.expr(3) pass @@ -2812,15 +2714,15 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 291 + self.state = 288 self.match(SubstraitTypeParser.Bang) - self.state = 292 + self.state = 289 self.expr(2) pass self._ctx.stop = self._input.LT(-1) - self.state = 306 + self.state = 303 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -2828,26 +2730,26 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 304 + self.state = 301 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,37,self._ctx) if la_ == 1: localctx = SubstraitTypeParser.BinaryExprContext(self, SubstraitTypeParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 295 + self.state = 292 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 296 + self.state = 293 localctx.op = self._input.LT(1) _la = self._input.LA(1) - if not(((((_la - 55)) & ~0x3f) == 0 and ((1 << (_la - 55)) & 25167855) != 0)): + if not(((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 25167855) != 0)): localctx.op = self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 297 + self.state = 294 localctx.right = self.expr(5) pass @@ -2855,22 +2757,22 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.TernaryContext(self, SubstraitTypeParser.ExprContext(self, _parentctx, _parentState)) localctx.ifExpr = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 298 + self.state = 295 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 299 + self.state = 296 self.match(SubstraitTypeParser.QMark) - self.state = 300 + self.state = 297 localctx.thenExpr = self.expr(0) - self.state = 301 + self.state = 298 self.match(SubstraitTypeParser.Colon) - self.state = 302 + self.state = 299 localctx.elseExpr = self.expr(2) pass - self.state = 308 + self.state = 305 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,38,self._ctx) diff --git a/tests/type/antlr_parser/SubstraitTypeVisitor.py b/tests/type/antlr_parser/SubstraitTypeVisitor.py index c3acac61e..6671f1388 100644 --- a/tests/type/antlr_parser/SubstraitTypeVisitor.py +++ b/tests/type/antlr_parser/SubstraitTypeVisitor.py @@ -65,26 +65,11 @@ def visitBinary(self, ctx:SubstraitTypeParser.BinaryContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SubstraitTypeParser#timestamp. - def visitTimestamp(self, ctx:SubstraitTypeParser.TimestampContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by SubstraitTypeParser#timestampTz. - def visitTimestampTz(self, ctx:SubstraitTypeParser.TimestampTzContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by SubstraitTypeParser#date. def visitDate(self, ctx:SubstraitTypeParser.DateContext): return self.visitChildren(ctx) - # Visit a parse tree produced by SubstraitTypeParser#time. - def visitTime(self, ctx:SubstraitTypeParser.TimeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by SubstraitTypeParser#intervalYear. def visitIntervalYear(self, ctx:SubstraitTypeParser.IntervalYearContext): return self.visitChildren(ctx) diff --git a/text/dialect_schema.yaml b/text/dialect_schema.yaml index 28236fe71..5b2a92bf1 100644 --- a/text/dialect_schema.yaml +++ b/text/dialect_schema.yaml @@ -50,7 +50,6 @@ properties: - PRECISION_TIMESTAMP - PRECISION_TIMESTAMP_TZ - DATE - - TIME - INTERVAL_COMPOUND - INTERVAL_DAY - INTERVAL_YEAR @@ -75,7 +74,6 @@ properties: - $ref: "#/definitions/type_precision_timestamp" - $ref: "#/definitions/type_precision_timestamp_tz" - $ref: "#/definitions/type_date" - - $ref: "#/definitions/type_time" - $ref: "#/definitions/type_interval_compound" - $ref: "#/definitions/type_interval_day" - $ref: "#/definitions/type_interval_year" @@ -518,18 +516,6 @@ definitions: description: Arbitrary data created by the dialect author. system_metadata: $ref: "#/definitions/system_type_metadata" - type_time: - type: object - additionalProperties: false - required: [type] - properties: - type: - const: TIME - metadata: - type: object - description: Arbitrary data created by the dialect author. - system_metadata: - $ref: "#/definitions/system_type_metadata" type_interval_compound: type: object additionalProperties: false diff --git a/tools/proto_prefix.py b/tools/proto_prefix.py index 3e3cec295..7d6949667 100755 --- a/tools/proto_prefix.py +++ b/tools/proto_prefix.py @@ -34,7 +34,7 @@ def tokenize(data): ident=re.compile(r"[a-zA-Z_][a-zA-Z_0-9.]*"), string=re.compile(r'"(?:[^"\\]|\\.)*"'), number=re.compile(r"[0-9]+"), - symbol=re.compile(r"[=;{}\[\]]"), + symbol=re.compile(r"[=;,{}\[\]]"), comment=re.compile(r"//[^\n]*\n|/\*(?:(?!\*/).)*\*/"), space=re.compile(r"\s+"), )