1
0
mirror of https://github.com/MontFerret/ferret.git synced 2024-12-16 11:37:36 +02:00
ferret/pkg/parser/fql/FqlParser.interp
Tim Voronov 5620be211c
Next (#214)
* Renamed DOCUMENT to PAGE

* Added PageLoadParams

* Added PageLoadParams

* Renamed LoadPageParams -> PageLoadParams

* Added support for context.Done() (#201)

* Bug/#189 operators precedence (#202)

* Fixed math operators precedence

* Fixed logical operators precedence

* Fixed array operator

* Added support for parentheses to enforce a different operator evaluation order

* Feature/#200 drivers (#209)

* Added new interfaces

* Renamed dynamic to cdp driver

* Renamed drivers

* Added ELEMENT_EXISTS function (#210)

* Renamed back PAGE to DOCUMENT (#211)

* Added Getter and Setter interfaces
2018-12-21 23:14:41 -05:00

190 lines
19 KiB
Plaintext

token literal names:
null
null
null
null
null
':'
';'
'.'
','
'['
']'
'('
')'
'{'
'}'
'>'
'<'
'=='
'>='
'<='
'!='
'*'
'/'
'%'
'+'
'-'
'--'
'++'
null
null
null
'='
'?'
'!~'
'=~'
'FOR'
'RETURN'
'DISTINCT'
'FILTER'
'SORT'
'LIMIT'
'LET'
'COLLECT'
null
'NONE'
'NULL'
null
'INTO'
'KEEP'
'WITH'
'COUNT'
'ALL'
'ANY'
'AGGREGATE'
'LIKE'
null
'IN'
'@'
null
null
null
null
null
token symbolic names:
null
MultiLineComment
SingleLineComment
WhiteSpaces
LineTerminator
Colon
SemiColon
Dot
Comma
OpenBracket
CloseBracket
OpenParen
CloseParen
OpenBrace
CloseBrace
Gt
Lt
Eq
Gte
Lte
Neq
Multi
Div
Mod
Plus
Minus
MinusMinus
PlusPlus
And
Or
Range
Assign
QuestionMark
RegexNotMatch
RegexMatch
For
Return
Distinct
Filter
Sort
Limit
Let
Collect
SortDirection
None
Null
BooleanLiteral
Into
Keep
With
Count
All
Any
Aggregate
Like
Not
In
Param
Identifier
StringLiteral
TemplateStringLiteral
IntegerLiteral
FloatLiteral
rule names:
program
body
bodyStatement
bodyExpression
returnExpression
forExpression
forExpressionValueVariable
forExpressionKeyVariable
forExpressionSource
forExpressionClause
forExpressionStatement
forExpressionBody
forExpressionReturn
filterClause
limitClause
limitClauseValue
sortClause
sortClauseExpression
collectClause
collectSelector
collectGrouping
collectAggregator
collectAggregateSelector
collectGroupVariable
collectCounter
variableDeclaration
param
variable
rangeOperator
arrayLiteral
objectLiteral
booleanLiteral
stringLiteral
integerLiteral
floatLiteral
noneLiteral
arrayElementList
propertyAssignment
memberExpression
shorthandPropertyName
computedPropertyName
propertyName
expressionGroup
functionCallExpression
arguments
expression
forTernaryExpression
arrayOperator
inOperator
equalityOperator
logicalAndOperator
logicalOrOperator
multiplicativeOperator
additiveOperator
unaryOperator
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 64, 554, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 3, 2, 3, 2, 3, 3, 7, 3, 116, 10, 3, 12, 3, 14, 3, 119, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 125, 10, 4, 3, 5, 3, 5, 5, 5, 129, 10, 5, 3, 6, 3, 6, 5, 6, 133, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 138, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 146, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 152, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 157, 10, 7, 12, 7, 14, 7, 160, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 175, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 181, 10, 11, 3, 12, 3, 12, 5, 12, 185, 10, 12, 3, 13, 3, 13, 5, 13, 189, 10, 13, 3, 14, 3, 14, 5, 14, 193, 10, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 202, 10, 16, 3, 17, 3, 17, 5, 17, 206, 10, 17, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 212, 10, 18, 12, 18, 14, 18, 215, 11, 18, 3, 19, 3, 19, 5, 19, 219, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 239, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 7, 22, 248, 10, 22, 12, 22, 14, 22, 251, 11, 22, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 257, 10, 23, 12, 23, 14, 23, 260, 11, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 272, 10, 25, 5, 25, 274, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 296, 10, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 5, 30, 306, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 312, 10, 30, 3, 31, 3, 31, 5, 31, 316, 10, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 324, 10, 32, 12, 32, 14, 32, 327, 11, 32, 5, 32, 329, 10, 32, 3, 32, 5, 32, 332, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 6, 38, 348, 10, 38, 13, 38, 14, 38, 349, 3, 38, 7, 38, 353, 10, 38, 12, 38, 14, 38, 356, 11, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 367, 10, 39, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 373, 10, 40, 12, 40, 14, 40, 376, 11, 40, 6, 40, 378, 10, 40, 13, 40, 14, 40, 379, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 387, 10, 40, 12, 40, 14, 40, 390, 11, 40, 7, 40, 392, 10, 40, 12, 40, 14, 40, 395, 11, 40, 3, 40, 3, 40, 3, 40, 7, 40, 400, 10, 40, 12, 40, 14, 40, 403, 11, 40, 7, 40, 405, 10, 40, 12, 40, 14, 40, 408, 11, 40, 5, 40, 410, 10, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 5, 43, 420, 10, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 433, 10, 46, 12, 46, 14, 46, 436, 11, 46, 5, 46, 438, 10, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 459, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 473, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 496, 10, 47, 3, 47, 3, 47, 7, 47, 500, 10, 47, 12, 47, 14, 47, 503, 11, 47, 3, 48, 3, 48, 3, 48, 5, 48, 508, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 533, 10, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 540, 10, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 2, 3, 92, 57, 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, 2, 9, 3, 2, 61, 62, 3, 2, 46, 47, 4, 2, 46, 46, 53, 54, 3, 2, 17, 22, 3, 2, 23, 25, 3, 2, 26, 27, 4, 2, 26, 27, 56, 57, 2, 583, 2, 112, 3, 2, 2, 2, 4, 117, 3, 2, 2, 2, 6, 124, 3, 2, 2, 2, 8, 128, 3, 2, 2, 2, 10, 145, 3, 2, 2, 2, 12, 147, 3, 2, 2, 2, 14, 163, 3, 2, 2, 2, 16, 165, 3, 2, 2, 2, 18, 174, 3, 2, 2, 2, 20, 180, 3, 2, 2, 2, 22, 184, 3, 2, 2, 2, 24, 188, 3, 2, 2, 2, 26, 192, 3, 2, 2, 2, 28, 194, 3, 2, 2, 2, 30, 197, 3, 2, 2, 2, 32, 205, 3, 2, 2, 2, 34, 207, 3, 2, 2, 2, 36, 216, 3, 2, 2, 2, 38, 238, 3, 2, 2, 2, 40, 240, 3, 2, 2, 2, 42, 244, 3, 2, 2, 2, 44, 252, 3, 2, 2, 2, 46, 261, 3, 2, 2, 2, 48, 273, 3, 2, 2, 2, 50, 275, 3, 2, 2, 2, 52, 295, 3, 2, 2, 2, 54, 297, 3, 2, 2, 2, 56, 300, 3, 2, 2, 2, 58, 305, 3, 2, 2, 2, 60, 313, 3, 2, 2, 2, 62, 319, 3, 2, 2, 2, 64, 335, 3, 2, 2, 2, 66, 337, 3, 2, 2, 2, 68, 339, 3, 2, 2, 2, 70, 341, 3, 2, 2, 2, 72, 343, 3, 2, 2, 2, 74, 345, 3, 2, 2, 2, 76, 366, 3, 2, 2, 2, 78, 409, 3, 2, 2, 2, 80, 411, 3, 2, 2, 2, 82, 413, 3, 2, 2, 2, 84, 419, 3, 2, 2, 2, 86, 421, 3, 2, 2, 2, 88, 425, 3, 2, 2, 2, 90, 428, 3, 2, 2, 2, 92, 458, 3, 2, 2, 2, 94, 532, 3, 2, 2, 2, 96, 534, 3, 2, 2, 2, 98, 539, 3, 2, 2, 2, 100, 541, 3, 2, 2, 2, 102, 543, 3, 2, 2, 2, 104, 545, 3, 2, 2, 2, 106, 547, 3, 2, 2, 2, 108, 549, 3, 2, 2, 2, 110, 551, 3, 2, 2, 2, 112, 113, 5, 4, 3, 2, 113, 3, 3, 2, 2, 2, 114, 116, 5, 6, 4, 2, 115, 114, 3, 2, 2, 2, 116, 119, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 120, 3, 2, 2, 2, 119, 117, 3, 2, 2, 2, 120, 121, 5, 8, 5, 2, 121, 5, 3, 2, 2, 2, 122, 125, 5, 88, 45, 2, 123, 125, 5, 52, 27, 2, 124, 122, 3, 2, 2, 2, 124, 123, 3, 2, 2, 2, 125, 7, 3, 2, 2, 2, 126, 129, 5, 10, 6, 2, 127, 129, 5, 12, 7, 2, 128, 126, 3, 2, 2, 2, 128, 127, 3, 2, 2, 2, 129, 9, 3, 2, 2, 2, 130, 132, 7, 38, 2, 2, 131, 133, 7, 39, 2, 2, 132, 131, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 146, 5, 92, 47, 2, 135, 137, 7, 38, 2, 2, 136, 138, 7, 39, 2, 2, 137, 136, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 140, 7, 13, 2, 2, 140, 141, 5, 12, 7, 2, 141, 142, 7, 14, 2, 2, 142, 146, 3, 2, 2, 2, 143, 144, 7, 38, 2, 2, 144, 146, 5, 94, 48, 2, 145, 130, 3, 2, 2, 2, 145, 135, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 146, 11, 3, 2, 2, 2, 147, 148, 7, 37, 2, 2, 148, 151, 5, 14, 8, 2, 149, 150, 7, 10, 2, 2, 150, 152, 5, 16, 9, 2, 151, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 7, 58, 2, 2, 154, 158, 5, 18, 10, 2, 155, 157, 5, 24, 13, 2, 156, 155, 3, 2, 2, 2, 157, 160, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 161, 162, 5, 26, 14, 2, 162, 13, 3, 2, 2, 2, 163, 164, 7, 60, 2, 2, 164, 15, 3, 2, 2, 2, 165, 166, 7, 60, 2, 2, 166, 17, 3, 2, 2, 2, 167, 175, 5, 88, 45, 2, 168, 175, 5, 60, 31, 2, 169, 175, 5, 62, 32, 2, 170, 175, 5, 56, 29, 2, 171, 175, 5, 78, 40, 2, 172, 175, 5, 58, 30, 2, 173, 175, 5, 54, 28, 2, 174, 167, 3, 2, 2, 2, 174, 168, 3, 2, 2, 2, 174, 169, 3, 2, 2, 2, 174, 170, 3, 2, 2, 2, 174, 171, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 19, 3, 2, 2, 2, 176, 181, 5, 30, 16, 2, 177, 181, 5, 34, 18, 2, 178, 181, 5, 28, 15, 2, 179, 181, 5, 38, 20, 2, 180, 176, 3, 2, 2, 2, 180, 177, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 180, 179, 3, 2, 2, 2, 181, 21, 3, 2, 2, 2, 182, 185, 5, 52, 27, 2, 183, 185, 5, 88, 45, 2, 184, 182, 3, 2, 2, 2, 184, 183, 3, 2, 2, 2, 185, 23, 3, 2, 2, 2, 186, 189, 5, 22, 12, 2, 187, 189, 5, 20, 11, 2, 188, 186, 3, 2, 2, 2, 188, 187, 3, 2, 2, 2, 189, 25, 3, 2, 2, 2, 190, 193, 5, 10, 6, 2, 191, 193, 5, 12, 7, 2, 192, 190, 3, 2, 2, 2, 192, 191, 3, 2, 2, 2, 193, 27, 3, 2, 2, 2, 194, 195, 7, 40, 2, 2, 195, 196, 5, 92, 47, 2, 196, 29, 3, 2, 2, 2, 197, 198, 7, 42, 2, 2, 198, 201, 5, 32, 17, 2, 199, 200, 7, 10, 2, 2, 200, 202, 5, 32, 17, 2, 201, 199, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 31, 3, 2, 2, 2, 203, 206, 7, 63, 2, 2, 204, 206, 5, 54, 28, 2, 205, 203, 3, 2, 2, 2, 205, 204, 3, 2, 2, 2, 206, 33, 3, 2, 2, 2, 207, 208, 7, 41, 2, 2, 208, 213, 5, 36, 19, 2, 209, 210, 7, 10, 2, 2, 210, 212, 5, 36, 19, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 35, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 218, 5, 92, 47, 2, 217, 219, 7, 45, 2, 2, 218, 217, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 37, 3, 2, 2, 2, 220, 221, 7, 44, 2, 2, 221, 239, 5, 50, 26, 2, 222, 223, 7, 44, 2, 2, 223, 239, 5, 44, 23, 2, 224, 225, 7, 44, 2, 2, 225, 226, 5, 42, 22, 2, 226, 227, 5, 44, 23, 2, 227, 239, 3, 2, 2, 2, 228, 229, 7, 44, 2, 2, 229, 230, 5, 42, 22, 2, 230, 231, 5, 48, 25, 2, 231, 239, 3, 2, 2, 2, 232, 233, 7, 44, 2, 2, 233, 234, 5, 42, 22, 2, 234, 235, 5, 50, 26, 2, 235, 239, 3, 2, 2, 2, 236, 237, 7, 44, 2, 2, 237, 239, 5, 42, 22, 2, 238, 220, 3, 2, 2, 2, 238, 222, 3, 2, 2, 2, 238, 224, 3, 2, 2, 2, 238, 228, 3, 2, 2, 2, 238, 232, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 239, 39, 3, 2, 2, 2, 240, 241, 7, 60, 2, 2, 241, 242, 7, 33, 2, 2, 242, 243, 5, 92, 47, 2, 243, 41, 3, 2, 2, 2, 244, 249, 5, 40, 21, 2, 245, 246, 7, 10, 2, 2, 246, 248, 5, 40, 21, 2, 247, 245, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 43, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 253, 7, 55, 2, 2, 253, 258, 5, 46, 24, 2, 254, 255, 7, 10, 2, 2, 255, 257, 5, 46, 24, 2, 256, 254, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 45, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 262, 7, 60, 2, 2, 262, 263, 7, 33, 2, 2, 263, 264, 5, 88, 45, 2, 264, 47, 3, 2, 2, 2, 265, 266, 7, 49, 2, 2, 266, 274, 5, 40, 21, 2, 267, 268, 7, 49, 2, 2, 268, 271, 7, 60, 2, 2, 269, 270, 7, 50, 2, 2, 270, 272, 7, 60, 2, 2, 271, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 274, 3, 2, 2, 2, 273, 265, 3, 2, 2, 2, 273, 267, 3, 2, 2, 2, 274, 49, 3, 2, 2, 2, 275, 276, 7, 51, 2, 2, 276, 277, 7, 52, 2, 2, 277, 278, 7, 49, 2, 2, 278, 279, 7, 60, 2, 2, 279, 51, 3, 2, 2, 2, 280, 281, 7, 43, 2, 2, 281, 282, 7, 60, 2, 2, 282, 283, 7, 33, 2, 2, 283, 296, 5, 92, 47, 2, 284, 285, 7, 43, 2, 2, 285, 286, 7, 60, 2, 2, 286, 287, 7, 33, 2, 2, 287, 288, 7, 13, 2, 2, 288, 289, 5, 12, 7, 2, 289, 290, 7, 14, 2, 2, 290, 296, 3, 2, 2, 2, 291, 292, 7, 43, 2, 2, 292, 293, 7, 60, 2, 2, 293, 294, 7, 33, 2, 2, 294, 296, 5, 94, 48, 2, 295, 280, 3, 2, 2, 2, 295, 284, 3, 2, 2, 2, 295, 291, 3, 2, 2, 2, 296, 53, 3, 2, 2, 2, 297, 298, 7, 59, 2, 2, 298, 299, 7, 60, 2, 2, 299, 55, 3, 2, 2, 2, 300, 301, 7, 60, 2, 2, 301, 57, 3, 2, 2, 2, 302, 306, 5, 68, 35, 2, 303, 306, 5, 56, 29, 2, 304, 306, 5, 54, 28, 2, 305, 302, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 305, 304, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 311, 7, 32, 2, 2, 308, 312, 5, 68, 35, 2, 309, 312, 5, 56, 29, 2, 310, 312, 5, 54, 28, 2, 311, 308, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 310, 3, 2, 2, 2, 312, 59, 3, 2, 2, 2, 313, 315, 7, 11, 2, 2, 314, 316, 5, 74, 38, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 7, 12, 2, 2, 318, 61, 3, 2, 2, 2, 319, 328, 7, 15, 2, 2, 320, 325, 5, 76, 39, 2, 321, 322, 7, 10, 2, 2, 322, 324, 5, 76, 39, 2, 323, 321, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 329, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 328, 320, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 331, 3, 2, 2, 2, 330, 332, 7, 10, 2, 2, 331, 330, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 7, 16, 2, 2, 334, 63, 3, 2, 2, 2, 335, 336, 7, 48, 2, 2, 336, 65, 3, 2, 2, 2, 337, 338, 9, 2, 2, 2, 338, 67, 3, 2, 2, 2, 339, 340, 7, 63, 2, 2, 340, 69, 3, 2, 2, 2, 341, 342, 7, 64, 2, 2, 342, 71, 3, 2, 2, 2, 343, 344, 9, 3, 2, 2, 344, 73, 3, 2, 2, 2, 345, 354, 5, 92, 47, 2, 346, 348, 7, 10, 2, 2, 347, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 353, 5, 92, 47, 2, 352, 347, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 75, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 357, 358, 5, 84, 43, 2, 358, 359, 7, 7, 2, 2, 359, 360, 5, 92, 47, 2, 360, 367, 3, 2, 2, 2, 361, 362, 5, 82, 42, 2, 362, 363, 7, 7, 2, 2, 363, 364, 5, 92, 47, 2, 364, 367, 3, 2, 2, 2, 365, 367, 5, 80, 41, 2, 366, 357, 3, 2, 2, 2, 366, 361, 3, 2, 2, 2, 366, 365, 3, 2, 2, 2, 367, 77, 3, 2, 2, 2, 368, 377, 7, 60, 2, 2, 369, 370, 7, 9, 2, 2, 370, 374, 5, 84, 43, 2, 371, 373, 5, 82, 42, 2, 372, 371, 3, 2, 2, 2, 373, 376, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 378, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 369, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 410, 3, 2, 2, 2, 381, 382, 7, 60, 2, 2, 382, 393, 5, 82, 42, 2, 383, 384, 7, 9, 2, 2, 384, 388, 5, 84, 43, 2, 385, 387, 5, 82, 42, 2, 386, 385, 3, 2, 2, 2, 387, 390, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 383, 3, 2, 2, 2, 392, 395, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 406, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 396, 401, 5, 82, 42, 2, 397, 398, 7, 9, 2, 2, 398, 400, 5, 84, 43, 2, 399, 397, 3, 2, 2, 2, 400, 403, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 404, 396, 3, 2, 2, 2, 405, 408, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 409, 368, 3, 2, 2, 2, 409, 381, 3, 2, 2, 2, 410, 79, 3, 2, 2, 2, 411, 412, 5, 56, 29, 2, 412, 81, 3, 2, 2, 2, 413, 414, 7, 11, 2, 2, 414, 415, 5, 92, 47, 2, 415, 416, 7, 12, 2, 2, 416, 83, 3, 2, 2, 2, 417, 420, 7, 60, 2, 2, 418, 420, 5, 66, 34, 2, 419, 417, 3, 2, 2, 2, 419, 418, 3, 2, 2, 2, 420, 85, 3, 2, 2, 2, 421, 422, 7, 13, 2, 2, 422, 423, 5, 92, 47, 2, 423, 424, 7, 14, 2, 2, 424, 87, 3, 2, 2, 2, 425, 426, 7, 60, 2, 2, 426, 427, 5, 90, 46, 2, 427, 89, 3, 2, 2, 2, 428, 437, 7, 13, 2, 2, 429, 434, 5, 92, 47, 2, 430, 431, 7, 10, 2, 2, 431, 433, 5, 92, 47, 2, 432, 430, 3, 2, 2, 2, 433, 436, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 438, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 429, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 440, 7, 14, 2, 2, 440, 91, 3, 2, 2, 2, 441, 442, 8, 47, 1, 2, 442, 443, 5, 110, 56, 2, 443, 444, 5, 92, 47, 24, 444, 459, 3, 2, 2, 2, 445, 459, 5, 88, 45, 2, 446, 459, 5, 86, 44, 2, 447, 459, 5, 58, 30, 2, 448, 459, 5, 66, 34, 2, 449, 459, 5, 68, 35, 2, 450, 459, 5, 70, 36, 2, 451, 459, 5, 64, 33, 2, 452, 459, 5, 60, 31, 2, 453, 459, 5, 62, 32, 2, 454, 459, 5, 56, 29, 2, 455, 459, 5, 78, 40, 2, 456, 459, 5, 72, 37, 2, 457, 459, 5, 54, 28, 2, 458, 441, 3, 2, 2, 2, 458, 445, 3, 2, 2, 2, 458, 446, 3, 2, 2, 2, 458, 447, 3, 2, 2, 2, 458, 448, 3, 2, 2, 2, 458, 449, 3, 2, 2, 2, 458, 450, 3, 2, 2, 2, 458, 451, 3, 2, 2, 2, 458, 452, 3, 2, 2, 2, 458, 453, 3, 2, 2, 2, 458, 454, 3, 2, 2, 2, 458, 455, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 458, 457, 3, 2, 2, 2, 459, 501, 3, 2, 2, 2, 460, 461, 12, 23, 2, 2, 461, 462, 5, 106, 54, 2, 462, 463, 5, 92, 47, 24, 463, 500, 3, 2, 2, 2, 464, 465, 12, 22, 2, 2, 465, 466, 5, 108, 55, 2, 466, 467, 5, 92, 47, 23, 467, 500, 3, 2, 2, 2, 468, 469, 12, 19, 2, 2, 469, 472, 5, 96, 49, 2, 470, 473, 5, 98, 50, 2, 471, 473, 5, 100, 51, 2, 472, 470, 3, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 5, 92, 47, 20, 475, 500, 3, 2, 2, 2, 476, 477, 12, 18, 2, 2, 477, 478, 5, 98, 50, 2, 478, 479, 5, 92, 47, 19, 479, 500, 3, 2, 2, 2, 480, 481, 12, 17, 2, 2, 481, 482, 5, 100, 51, 2, 482, 483, 5, 92, 47, 18, 483, 500, 3, 2, 2, 2, 484, 485, 12, 16, 2, 2, 485, 486, 5, 102, 52, 2, 486, 487, 5, 92, 47, 17, 487, 500, 3, 2, 2, 2, 488, 489, 12, 15, 2, 2, 489, 490, 5, 104, 53, 2, 490, 491, 5, 92, 47, 16, 491, 500, 3, 2, 2, 2, 492, 493, 12, 14, 2, 2, 493, 495, 7, 34, 2, 2, 494, 496, 5, 92, 47, 2, 495, 494, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 7, 7, 2, 2, 498, 500, 5, 92, 47, 15, 499, 460, 3, 2, 2, 2, 499, 464, 3, 2, 2, 2, 499, 468, 3, 2, 2, 2, 499, 476, 3, 2, 2, 2, 499, 480, 3, 2, 2, 2, 499, 484, 3, 2, 2, 2, 499, 488, 3, 2, 2, 2, 499, 492, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 93, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 505, 5, 92, 47, 2, 505, 507, 7, 34, 2, 2, 506, 508, 5, 92, 47, 2, 507, 506, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 510, 7, 7, 2, 2, 510, 511, 7, 13, 2, 2, 511, 512, 5, 12, 7, 2, 512, 513, 7, 14, 2, 2, 513, 533, 3, 2, 2, 2, 514, 515, 5, 92, 47, 2, 515, 516, 7, 34, 2, 2, 516, 517, 7, 13, 2, 2, 517, 518, 5, 12, 7, 2, 518, 519, 7, 14, 2, 2, 519, 520, 7, 7, 2, 2, 520, 521, 5, 92, 47, 2, 521, 533, 3, 2, 2, 2, 522, 523, 5, 92, 47, 2, 523, 524, 7, 34, 2, 2, 524, 525, 7, 13, 2, 2, 525, 526, 5, 12, 7, 2, 526, 527, 7, 14, 2, 2, 527, 528, 7, 7, 2, 2, 528, 529, 7, 13, 2, 2, 529, 530, 5, 12, 7, 2, 530, 531, 7, 14, 2, 2, 531, 533, 3, 2, 2, 2, 532, 504, 3, 2, 2, 2, 532, 514, 3, 2, 2, 2, 532, 522, 3, 2, 2, 2, 533, 95, 3, 2, 2, 2, 534, 535, 9, 4, 2, 2, 535, 97, 3, 2, 2, 2, 536, 540, 7, 58, 2, 2, 537, 538, 7, 57, 2, 2, 538, 540, 7, 58, 2, 2, 539, 536, 3, 2, 2, 2, 539, 537, 3, 2, 2, 2, 540, 99, 3, 2, 2, 2, 541, 542, 9, 5, 2, 2, 542, 101, 3, 2, 2, 2, 543, 544, 7, 30, 2, 2, 544, 103, 3, 2, 2, 2, 545, 546, 7, 31, 2, 2, 546, 105, 3, 2, 2, 2, 547, 548, 9, 6, 2, 2, 548, 107, 3, 2, 2, 2, 549, 550, 9, 7, 2, 2, 550, 109, 3, 2, 2, 2, 551, 552, 9, 8, 2, 2, 552, 111, 3, 2, 2, 2, 52, 117, 124, 128, 132, 137, 145, 151, 158, 174, 180, 184, 188, 192, 201, 205, 213, 218, 238, 249, 258, 271, 273, 295, 305, 311, 315, 325, 328, 331, 349, 354, 366, 374, 379, 388, 393, 401, 406, 409, 419, 434, 437, 458, 472, 495, 499, 501, 507, 532, 539]