From e0259658361eae3b6dc8a494e1d163ee9e32c591 Mon Sep 17 00:00:00 2001 From: saharmehrpour Date: Tue, 31 Oct 2023 23:55:16 -0400 Subject: [PATCH] enable string patterns and args for class name, extensions, implementation, issues #49 and #51 --- rulePadGrammar.g4 | 16 +- src/core/generateXPath.js | 66 + .../generated-parser/rulePadGrammar.interp | 4 +- .../rulePadGrammarListener.js | 18 + .../generated-parser/rulePadGrammarParser.js | 2370 +++++++++-------- src/ui/RulePad/rulePad.js | 8 +- .../graphicalEditorConstants.js | 6 +- .../rulePadTextualEditor/generateGuiTree.js | 6 +- 8 files changed, 1386 insertions(+), 1108 deletions(-) diff --git a/rulePadGrammar.g4 b/rulePadGrammar.g4 index 806bfd0..1c85455 100644 --- a/rulePadGrammar.g4 +++ b/rulePadGrammar.g4 @@ -143,6 +143,14 @@ nameCondition ; +classNames + : NAME classNameCondition? + ; + +classNameCondition + : combinatorialWords SPACE + ; + /* annotations */ @@ -178,7 +186,7 @@ extensions ; extensionCondition - : of ( words SPACE | SUPERCLASS) + : of ( combinatorialWords SPACE | words SPACE | SUPERCLASS) ; @@ -199,7 +207,7 @@ implementations ; implementationCondition - : of ( words SPACE | INTERFACE ) + : of ( combinatorialWords SPACE | words SPACE | INTERFACE ) ; @@ -490,7 +498,7 @@ classCondition classExpression : LPAREN classExpression RPAREN | left=classExpression op=binary right=classExpression - | ( annotations | specifiers | visibilities | names | extensions | implementations | functions + | ( annotations | specifiers | visibilities | classNames | extensions | implementations | functions | abstractFunctions | constructors | declarationStatements | returnValues | comments | subclasses) | classExpression SPACE ; @@ -519,7 +527,7 @@ subclassCondition subclassExpression : LPAREN subclassExpression RPAREN | left=subclassExpression op=binary right=subclassExpression - | ( annotations | specifiers | visibilities | names | extensions | implementations | functions | subclasses | + | ( annotations | specifiers | visibilities | classNames | extensions | implementations | functions | subclasses | | abstractFunctions | constructors | declarationStatements | returnValues | comments ) | subclassExpression SPACE ; diff --git a/src/core/generateXPath.js b/src/core/generateXPath.js index 380848c..c2f1b2d 100644 --- a/src/core/generateXPath.js +++ b/src/core/generateXPath.js @@ -140,6 +140,10 @@ class GenerateXPath { this.namesContextTraversal(node, isConstraintCondition); break; + case "ClassNamesContext": + this.classNamesContextTraversal(node, isConstraintCondition); + break; + case "AnnotationsContext": this.annotationsContextTraversal(node, isConstraintCondition); break; @@ -383,6 +387,44 @@ class GenerateXPath { } } + classNamesContextTraversal(node, isConstraintCondition) { + let nodeChildren = node.children.slice(0); + + for (let i = 0; i < node.children.length; i++) { + let nodeType = nodeChildren[i].constructor.name; + + // process ofContext + if (nodeType === "NameOfContext") { + if (!isConstraintCondition) this.XPathQ += "[ancestor-or-self::"; + this.XPathC += "[ancestor-or-self::"; + this.traverseNode(nodeChildren[i], isConstraintCondition); + if (!isConstraintCondition) this.XPathQ += "]"; + this.XPathC += "]"; + } + + if (nodeType === "TerminalNodeImpl") { + if (this.XPathQ === "" && !isConstraintCondition) this.XPathQ += "/"; + if (this.XPathC === "") this.XPathC += "/"; + + if (!isConstraintCondition) this.XPathQ += "src:name"; + this.XPathC += "src:name"; + } + + if (nodeType === "ClassNameConditionContext") { + let tempText = ""; + let messageID = Math.floor(new Date().getTime() / 1000); // to match send and receive messages + for (let j = 0; j < nodeChildren[i].children.length; j++) { + if (nodeChildren[i].getChild(j).constructor.name === "CombinatorialWordsContext") { + tempText = this.combinatorialWordsContextTraversal(nodeChildren[i].getChild(j)); + this.sendTextDataToSrcML(tempText, "className", messageID); + if (!isConstraintCondition) this.XPathQ += "[" + messageID + tempText + "]"; + this.XPathC += "[" + messageID + tempText + "]"; + } + } + } + } + } + // simplified version of wordsContextTraversal identifiersContextTraversal(node) { let identifierTraversal = (node) => { @@ -473,12 +515,19 @@ class GenerateXPath { if (nodeType === "ExtensionConditionContext") { let tempText = ""; + let messageID = Math.floor(new Date().getTime() / 1000); // to match send and receive messages for (let j = 0; j < nodeChildren[i].children.length; j++) { if (nodeChildren[i].getChild(j).constructor.name === "WordsContext") { tempText = this.wordsContextTraversal(nodeChildren[i].getChild(j)); if (!isConstraintCondition) this.XPathQ += "/src:name[" + tempText + "]"; this.XPathC += "/src:name[" + tempText + "]"; } + else if (nodeChildren[i].getChild(j).constructor.name === "CombinatorialWordsContext") { + tempText = this.combinatorialWordsContextTraversal(nodeChildren[i].getChild(j)); + this.sendTextDataToSrcML(tempText, "extensionImplementationName", messageID); + if (!isConstraintCondition) this.XPathQ += "[" + messageID + tempText + "]"; + this.XPathC += "[" + messageID + tempText + "]"; + } } } } @@ -509,12 +558,19 @@ class GenerateXPath { if (nodeType === "ImplementationConditionContext") { let tempText = ""; + let messageID = Math.floor(new Date().getTime() / 1000); // to match send and receive messages for (let j = 0; j < nodeChildren[i].children.length; j++) { if (nodeChildren[i].getChild(j).constructor.name === "WordsContext") { tempText = this.wordsContextTraversal(nodeChildren[i].getChild(j)); if (!isConstraintCondition) this.XPathQ += "/src:name[" + tempText + "]"; this.XPathC += "/src:name[" + tempText + "]"; } + else if (nodeChildren[i].getChild(j).constructor.name === "CombinatorialWordsContext") { + tempText = this.combinatorialWordsContextTraversal(nodeChildren[i].getChild(j)); + this.sendTextDataToSrcML(tempText, "extensionImplementationName", messageID); + if (!isConstraintCondition) this.XPathQ += "[" + messageID + tempText + "]"; + this.XPathC += "[" + messageID + tempText + "]"; + } } } } @@ -975,6 +1031,16 @@ class GenerateXPath { query = "//src:unit[count(src:decl_stmt)=1]/src:decl_stmt/src:decl/src:type"; cuttingLength = 9; // src:type[ break; + case "className": + code = "class " + text + " {}"; + query = "//src:unit[count(src:class)=1]/src:class/src:name"; + cuttingLength = 9; // src:name[ + break; + case "extensionImplementationName": + code = text; + query = "//src:unit[count(src:expr_stmt)=1]/src:expr_stmt/src:expr"; + cuttingLength = 9; // src:expr[ + break; case "returnValue": case "expressionStatement": case "initialValue": diff --git a/src/core/generated-parser/rulePadGrammar.interp b/src/core/generated-parser/rulePadGrammar.interp index c4b95e3..bd39202 100644 --- a/src/core/generated-parser/rulePadGrammar.interp +++ b/src/core/generated-parser/rulePadGrammar.interp @@ -142,6 +142,8 @@ withWord binary names nameCondition +classNames +classNameCondition annotations annotationCondition extensions @@ -194,4 +196,4 @@ subclassExpression atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 60, 741, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 3, 2, 7, 2, 144, 10, 2, 12, 2, 14, 2, 147, 11, 2, 3, 2, 5, 2, 150, 10, 2, 3, 2, 5, 2, 153, 10, 2, 3, 2, 7, 2, 156, 10, 2, 12, 2, 14, 2, 159, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 198, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 207, 10, 4, 12, 4, 14, 4, 210, 11, 4, 3, 4, 3, 4, 3, 4, 3, 5, 6, 5, 216, 10, 5, 13, 5, 14, 5, 217, 3, 5, 3, 5, 6, 5, 222, 10, 5, 13, 5, 14, 5, 223, 3, 5, 3, 5, 6, 5, 228, 10, 5, 13, 5, 14, 5, 229, 3, 5, 3, 5, 6, 5, 234, 10, 5, 13, 5, 14, 5, 235, 3, 5, 6, 5, 239, 10, 5, 13, 5, 14, 5, 240, 3, 5, 3, 5, 3, 5, 6, 5, 246, 10, 5, 13, 5, 14, 5, 247, 3, 5, 3, 5, 3, 5, 6, 5, 253, 10, 5, 13, 5, 14, 5, 254, 3, 5, 3, 5, 3, 5, 6, 5, 260, 10, 5, 13, 5, 14, 5, 261, 3, 5, 5, 5, 265, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 271, 10, 6, 13, 6, 14, 6, 272, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 6, 10, 286, 10, 10, 13, 10, 14, 10, 287, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 296, 10, 11, 12, 11, 14, 11, 299, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 308, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 326, 10, 20, 3, 21, 3, 21, 5, 21, 330, 10, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 5, 23, 337, 10, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 345, 10, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 355, 10, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 365, 10, 28, 3, 29, 3, 29, 5, 29, 369, 10, 29, 3, 29, 5, 29, 372, 10, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 395, 10, 32, 5, 32, 397, 10, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 405, 10, 32, 12, 32, 14, 32, 408, 11, 32, 3, 33, 3, 33, 5, 33, 412, 10, 33, 3, 33, 5, 33, 415, 10, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 434, 10, 36, 5, 36, 436, 10, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 444, 10, 36, 12, 36, 14, 36, 447, 11, 36, 3, 37, 3, 37, 5, 37, 451, 10, 37, 3, 37, 5, 37, 454, 10, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 476, 10, 40, 5, 40, 478, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 486, 10, 40, 12, 40, 14, 40, 489, 11, 40, 3, 41, 3, 41, 5, 41, 493, 10, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 505, 10, 43, 5, 43, 507, 10, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 7, 43, 515, 10, 43, 12, 43, 14, 43, 518, 11, 43, 3, 44, 3, 44, 5, 44, 522, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 530, 10, 45, 3, 46, 3, 46, 5, 46, 534, 10, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 5, 48, 541, 10, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 5, 50, 548, 10, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 5, 52, 555, 10, 52, 3, 52, 5, 52, 558, 10, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 564, 10, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 581, 10, 55, 5, 55, 583, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 591, 10, 55, 12, 55, 14, 55, 594, 11, 55, 3, 56, 3, 56, 5, 56, 598, 10, 56, 3, 56, 5, 56, 601, 10, 56, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 607, 10, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 619, 10, 59, 5, 59, 621, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 629, 10, 59, 12, 59, 14, 59, 632, 11, 59, 3, 60, 3, 60, 5, 60, 636, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 5, 62, 643, 10, 62, 3, 62, 5, 62, 646, 10, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 5, 65, 656, 10, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 679, 10, 67, 5, 67, 681, 10, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 7, 67, 689, 10, 67, 12, 67, 14, 67, 692, 11, 67, 3, 68, 3, 68, 5, 68, 696, 10, 68, 3, 68, 5, 68, 699, 10, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 726, 10, 71, 5, 71, 728, 10, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 736, 10, 71, 12, 71, 14, 71, 739, 11, 71, 3, 71, 2, 10, 62, 70, 78, 84, 108, 116, 132, 140, 72, 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, 2, 4, 4, 2, 9, 15, 39, 40, 3, 2, 16, 29, 2, 817, 2, 149, 3, 2, 2, 2, 4, 197, 3, 2, 2, 2, 6, 199, 3, 2, 2, 2, 8, 264, 3, 2, 2, 2, 10, 266, 3, 2, 2, 2, 12, 276, 3, 2, 2, 2, 14, 278, 3, 2, 2, 2, 16, 280, 3, 2, 2, 2, 18, 285, 3, 2, 2, 2, 20, 297, 3, 2, 2, 2, 22, 302, 3, 2, 2, 2, 24, 304, 3, 2, 2, 2, 26, 311, 3, 2, 2, 2, 28, 313, 3, 2, 2, 2, 30, 315, 3, 2, 2, 2, 32, 317, 3, 2, 2, 2, 34, 319, 3, 2, 2, 2, 36, 321, 3, 2, 2, 2, 38, 325, 3, 2, 2, 2, 40, 327, 3, 2, 2, 2, 42, 331, 3, 2, 2, 2, 44, 334, 3, 2, 2, 2, 46, 344, 3, 2, 2, 2, 48, 346, 3, 2, 2, 2, 50, 349, 3, 2, 2, 2, 52, 356, 3, 2, 2, 2, 54, 359, 3, 2, 2, 2, 56, 366, 3, 2, 2, 2, 58, 373, 3, 2, 2, 2, 60, 376, 3, 2, 2, 2, 62, 396, 3, 2, 2, 2, 64, 409, 3, 2, 2, 2, 66, 416, 3, 2, 2, 2, 68, 419, 3, 2, 2, 2, 70, 435, 3, 2, 2, 2, 72, 448, 3, 2, 2, 2, 74, 455, 3, 2, 2, 2, 76, 458, 3, 2, 2, 2, 78, 477, 3, 2, 2, 2, 80, 490, 3, 2, 2, 2, 82, 494, 3, 2, 2, 2, 84, 506, 3, 2, 2, 2, 86, 519, 3, 2, 2, 2, 88, 529, 3, 2, 2, 2, 90, 531, 3, 2, 2, 2, 92, 535, 3, 2, 2, 2, 94, 538, 3, 2, 2, 2, 96, 542, 3, 2, 2, 2, 98, 545, 3, 2, 2, 2, 100, 549, 3, 2, 2, 2, 102, 552, 3, 2, 2, 2, 104, 559, 3, 2, 2, 2, 106, 565, 3, 2, 2, 2, 108, 582, 3, 2, 2, 2, 110, 595, 3, 2, 2, 2, 112, 602, 3, 2, 2, 2, 114, 608, 3, 2, 2, 2, 116, 620, 3, 2, 2, 2, 118, 633, 3, 2, 2, 2, 120, 637, 3, 2, 2, 2, 122, 640, 3, 2, 2, 2, 124, 647, 3, 2, 2, 2, 126, 650, 3, 2, 2, 2, 128, 653, 3, 2, 2, 2, 130, 657, 3, 2, 2, 2, 132, 680, 3, 2, 2, 2, 134, 693, 3, 2, 2, 2, 136, 700, 3, 2, 2, 2, 138, 703, 3, 2, 2, 2, 140, 727, 3, 2, 2, 2, 142, 144, 5, 16, 9, 2, 143, 142, 3, 2, 2, 2, 144, 147, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 150, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 148, 150, 5, 4, 3, 2, 149, 145, 3, 2, 2, 2, 149, 148, 3, 2, 2, 2, 150, 152, 3, 2, 2, 2, 151, 153, 5, 14, 8, 2, 152, 151, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 157, 3, 2, 2, 2, 154, 156, 7, 38, 2, 2, 155, 154, 3, 2, 2, 2, 156, 159, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 160, 3, 2, 2, 2, 159, 157, 3, 2, 2, 2, 160, 161, 7, 2, 2, 3, 161, 3, 3, 2, 2, 2, 162, 163, 5, 56, 29, 2, 163, 164, 5, 26, 14, 2, 164, 165, 5, 34, 18, 2, 165, 166, 5, 62, 32, 2, 166, 198, 3, 2, 2, 2, 167, 168, 5, 64, 33, 2, 168, 169, 5, 26, 14, 2, 169, 170, 5, 34, 18, 2, 170, 171, 5, 70, 36, 2, 171, 198, 3, 2, 2, 2, 172, 173, 5, 72, 37, 2, 173, 174, 5, 26, 14, 2, 174, 175, 5, 34, 18, 2, 175, 176, 5, 78, 40, 2, 176, 198, 3, 2, 2, 2, 177, 178, 5, 128, 65, 2, 178, 179, 5, 26, 14, 2, 179, 180, 5, 34, 18, 2, 180, 181, 5, 132, 67, 2, 181, 198, 3, 2, 2, 2, 182, 183, 5, 80, 41, 2, 183, 184, 5, 26, 14, 2, 184, 185, 5, 34, 18, 2, 185, 186, 5, 84, 43, 2, 186, 198, 3, 2, 2, 2, 187, 188, 5, 102, 52, 2, 188, 189, 5, 26, 14, 2, 189, 190, 5, 34, 18, 2, 190, 191, 5, 108, 55, 2, 191, 198, 3, 2, 2, 2, 192, 193, 5, 134, 68, 2, 193, 194, 5, 26, 14, 2, 194, 195, 5, 34, 18, 2, 195, 196, 5, 140, 71, 2, 196, 198, 3, 2, 2, 2, 197, 162, 3, 2, 2, 2, 197, 167, 3, 2, 2, 2, 197, 172, 3, 2, 2, 2, 197, 177, 3, 2, 2, 2, 197, 182, 3, 2, 2, 2, 197, 187, 3, 2, 2, 2, 197, 192, 3, 2, 2, 2, 198, 5, 3, 2, 2, 2, 199, 208, 7, 3, 2, 2, 200, 201, 5, 8, 5, 2, 201, 202, 7, 4, 2, 2, 202, 207, 3, 2, 2, 2, 203, 204, 5, 8, 5, 2, 204, 205, 7, 5, 2, 2, 205, 207, 3, 2, 2, 2, 206, 200, 3, 2, 2, 2, 206, 203, 3, 2, 2, 2, 207, 210, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 211, 3, 2, 2, 2, 210, 208, 3, 2, 2, 2, 211, 212, 5, 8, 5, 2, 212, 213, 7, 3, 2, 2, 213, 7, 3, 2, 2, 2, 214, 216, 7, 37, 2, 2, 215, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 265, 3, 2, 2, 2, 219, 221, 7, 6, 2, 2, 220, 222, 7, 37, 2, 2, 221, 220, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 265, 3, 2, 2, 2, 225, 227, 7, 7, 2, 2, 226, 228, 7, 37, 2, 2, 227, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 265, 3, 2, 2, 2, 231, 233, 7, 8, 2, 2, 232, 234, 7, 37, 2, 2, 233, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 265, 3, 2, 2, 2, 237, 239, 7, 37, 2, 2, 238, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 265, 7, 7, 2, 2, 243, 245, 7, 6, 2, 2, 244, 246, 7, 37, 2, 2, 245, 244, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 265, 7, 7, 2, 2, 250, 252, 7, 7, 2, 2, 251, 253, 7, 37, 2, 2, 252, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 265, 7, 7, 2, 2, 257, 259, 7, 8, 2, 2, 258, 260, 7, 37, 2, 2, 259, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 265, 7, 7, 2, 2, 264, 215, 3, 2, 2, 2, 264, 219, 3, 2, 2, 2, 264, 225, 3, 2, 2, 2, 264, 231, 3, 2, 2, 2, 264, 238, 3, 2, 2, 2, 264, 243, 3, 2, 2, 2, 264, 250, 3, 2, 2, 2, 264, 257, 3, 2, 2, 2, 265, 9, 3, 2, 2, 2, 266, 270, 7, 3, 2, 2, 267, 271, 7, 37, 2, 2, 268, 271, 5, 12, 7, 2, 269, 271, 7, 36, 2, 2, 270, 267, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 270, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 7, 3, 2, 2, 275, 11, 3, 2, 2, 2, 276, 277, 9, 2, 2, 2, 277, 13, 3, 2, 2, 2, 278, 279, 7, 9, 2, 2, 279, 15, 3, 2, 2, 2, 280, 281, 7, 38, 2, 2, 281, 17, 3, 2, 2, 2, 282, 286, 7, 37, 2, 2, 283, 286, 5, 12, 7, 2, 284, 286, 7, 36, 2, 2, 285, 282, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 19, 3, 2, 2, 2, 289, 290, 5, 18, 10, 2, 290, 291, 7, 4, 2, 2, 291, 296, 3, 2, 2, 2, 292, 293, 5, 18, 10, 2, 293, 294, 7, 5, 2, 2, 294, 296, 3, 2, 2, 2, 295, 289, 3, 2, 2, 2, 295, 292, 3, 2, 2, 2, 296, 299, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 300, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 300, 301, 5, 18, 10, 2, 301, 21, 3, 2, 2, 2, 302, 303, 9, 3, 2, 2, 303, 23, 3, 2, 2, 2, 304, 305, 7, 3, 2, 2, 305, 307, 5, 22, 12, 2, 306, 308, 5, 20, 11, 2, 307, 306, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 310, 7, 3, 2, 2, 310, 25, 3, 2, 2, 2, 311, 312, 7, 30, 2, 2, 312, 27, 3, 2, 2, 2, 313, 314, 7, 31, 2, 2, 314, 29, 3, 2, 2, 2, 315, 316, 7, 32, 2, 2, 316, 31, 3, 2, 2, 2, 317, 318, 7, 33, 2, 2, 318, 33, 3, 2, 2, 2, 319, 320, 7, 34, 2, 2, 320, 35, 3, 2, 2, 2, 321, 322, 7, 35, 2, 2, 322, 37, 3, 2, 2, 2, 323, 326, 5, 30, 16, 2, 324, 326, 5, 32, 17, 2, 325, 323, 3, 2, 2, 2, 325, 324, 3, 2, 2, 2, 326, 39, 3, 2, 2, 2, 327, 329, 7, 41, 2, 2, 328, 330, 5, 42, 22, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 41, 3, 2, 2, 2, 331, 332, 5, 6, 4, 2, 332, 333, 7, 36, 2, 2, 333, 43, 3, 2, 2, 2, 334, 336, 7, 42, 2, 2, 335, 337, 5, 46, 24, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 45, 3, 2, 2, 2, 338, 339, 5, 10, 6, 2, 339, 340, 7, 36, 2, 2, 340, 345, 3, 2, 2, 2, 341, 342, 5, 6, 4, 2, 342, 343, 7, 36, 2, 2, 343, 345, 3, 2, 2, 2, 344, 338, 3, 2, 2, 2, 344, 341, 3, 2, 2, 2, 345, 47, 3, 2, 2, 2, 346, 347, 7, 43, 2, 2, 347, 348, 5, 50, 26, 2, 348, 49, 3, 2, 2, 2, 349, 354, 5, 28, 15, 2, 350, 351, 5, 6, 4, 2, 351, 352, 7, 36, 2, 2, 352, 355, 3, 2, 2, 2, 353, 355, 7, 44, 2, 2, 354, 350, 3, 2, 2, 2, 354, 353, 3, 2, 2, 2, 355, 51, 3, 2, 2, 2, 356, 357, 7, 45, 2, 2, 357, 358, 5, 54, 28, 2, 358, 53, 3, 2, 2, 2, 359, 364, 5, 28, 15, 2, 360, 361, 5, 6, 4, 2, 361, 362, 7, 36, 2, 2, 362, 365, 3, 2, 2, 2, 363, 365, 7, 46, 2, 2, 364, 360, 3, 2, 2, 2, 364, 363, 3, 2, 2, 2, 365, 55, 3, 2, 2, 2, 366, 368, 7, 47, 2, 2, 367, 369, 5, 60, 31, 2, 368, 367, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 371, 3, 2, 2, 2, 370, 372, 5, 58, 30, 2, 371, 370, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 57, 3, 2, 2, 2, 373, 374, 5, 28, 15, 2, 374, 375, 5, 128, 65, 2, 375, 59, 3, 2, 2, 2, 376, 377, 5, 36, 19, 2, 377, 378, 5, 62, 32, 2, 378, 61, 3, 2, 2, 2, 379, 380, 8, 32, 1, 2, 380, 381, 7, 39, 2, 2, 381, 382, 5, 62, 32, 2, 382, 383, 7, 40, 2, 2, 383, 397, 3, 2, 2, 2, 384, 395, 5, 44, 23, 2, 385, 395, 5, 90, 46, 2, 386, 395, 5, 94, 48, 2, 387, 395, 5, 86, 44, 2, 388, 395, 5, 40, 21, 2, 389, 395, 5, 80, 41, 2, 390, 395, 5, 98, 50, 2, 391, 395, 5, 102, 52, 2, 392, 395, 5, 110, 56, 2, 393, 395, 5, 24, 13, 2, 394, 384, 3, 2, 2, 2, 394, 385, 3, 2, 2, 2, 394, 386, 3, 2, 2, 2, 394, 387, 3, 2, 2, 2, 394, 388, 3, 2, 2, 2, 394, 389, 3, 2, 2, 2, 394, 390, 3, 2, 2, 2, 394, 391, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 394, 393, 3, 2, 2, 2, 395, 397, 3, 2, 2, 2, 396, 379, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 397, 406, 3, 2, 2, 2, 398, 399, 12, 5, 2, 2, 399, 400, 5, 38, 20, 2, 400, 401, 5, 62, 32, 6, 401, 405, 3, 2, 2, 2, 402, 403, 12, 3, 2, 2, 403, 405, 7, 36, 2, 2, 404, 398, 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 405, 408, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 63, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 409, 411, 7, 48, 2, 2, 410, 412, 5, 68, 35, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 415, 5, 66, 34, 2, 414, 413, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 65, 3, 2, 2, 2, 416, 417, 5, 28, 15, 2, 417, 418, 5, 128, 65, 2, 418, 67, 3, 2, 2, 2, 419, 420, 5, 36, 19, 2, 420, 421, 5, 70, 36, 2, 421, 69, 3, 2, 2, 2, 422, 423, 8, 36, 1, 2, 423, 424, 7, 39, 2, 2, 424, 425, 5, 70, 36, 2, 425, 426, 7, 40, 2, 2, 426, 436, 3, 2, 2, 2, 427, 434, 5, 44, 23, 2, 428, 434, 5, 90, 46, 2, 429, 434, 5, 94, 48, 2, 430, 434, 5, 86, 44, 2, 431, 434, 5, 40, 21, 2, 432, 434, 5, 80, 41, 2, 433, 427, 3, 2, 2, 2, 433, 428, 3, 2, 2, 2, 433, 429, 3, 2, 2, 2, 433, 430, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 432, 3, 2, 2, 2, 434, 436, 3, 2, 2, 2, 435, 422, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 445, 3, 2, 2, 2, 437, 438, 12, 5, 2, 2, 438, 439, 5, 38, 20, 2, 439, 440, 5, 70, 36, 6, 440, 444, 3, 2, 2, 2, 441, 442, 12, 3, 2, 2, 442, 444, 7, 36, 2, 2, 443, 437, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 444, 447, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 71, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 448, 450, 7, 49, 2, 2, 449, 451, 5, 76, 39, 2, 450, 449, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 453, 3, 2, 2, 2, 452, 454, 5, 74, 38, 2, 453, 452, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 73, 3, 2, 2, 2, 455, 456, 5, 28, 15, 2, 456, 457, 5, 128, 65, 2, 457, 75, 3, 2, 2, 2, 458, 459, 5, 36, 19, 2, 459, 460, 5, 78, 40, 2, 460, 77, 3, 2, 2, 2, 461, 462, 8, 40, 1, 2, 462, 463, 7, 39, 2, 2, 463, 464, 5, 78, 40, 2, 464, 465, 7, 40, 2, 2, 465, 478, 3, 2, 2, 2, 466, 476, 5, 44, 23, 2, 467, 476, 5, 90, 46, 2, 468, 476, 5, 94, 48, 2, 469, 476, 5, 40, 21, 2, 470, 476, 5, 80, 41, 2, 471, 476, 5, 98, 50, 2, 472, 476, 5, 102, 52, 2, 473, 476, 5, 110, 56, 2, 474, 476, 5, 24, 13, 2, 475, 466, 3, 2, 2, 2, 475, 467, 3, 2, 2, 2, 475, 468, 3, 2, 2, 2, 475, 469, 3, 2, 2, 2, 475, 470, 3, 2, 2, 2, 475, 471, 3, 2, 2, 2, 475, 472, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 474, 3, 2, 2, 2, 476, 478, 3, 2, 2, 2, 477, 461, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 487, 3, 2, 2, 2, 479, 480, 12, 5, 2, 2, 480, 481, 5, 38, 20, 2, 481, 482, 5, 78, 40, 6, 482, 486, 3, 2, 2, 2, 483, 484, 12, 3, 2, 2, 484, 486, 7, 36, 2, 2, 485, 479, 3, 2, 2, 2, 485, 483, 3, 2, 2, 2, 486, 489, 3, 2, 2, 2, 487, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 79, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 490, 492, 7, 50, 2, 2, 491, 493, 5, 82, 42, 2, 492, 491, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 81, 3, 2, 2, 2, 494, 495, 5, 36, 19, 2, 495, 496, 5, 84, 43, 2, 496, 83, 3, 2, 2, 2, 497, 498, 8, 43, 1, 2, 498, 499, 7, 39, 2, 2, 499, 500, 5, 84, 43, 2, 500, 501, 7, 40, 2, 2, 501, 507, 3, 2, 2, 2, 502, 505, 5, 86, 44, 2, 503, 505, 5, 40, 21, 2, 504, 502, 3, 2, 2, 2, 504, 503, 3, 2, 2, 2, 505, 507, 3, 2, 2, 2, 506, 497, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 516, 3, 2, 2, 2, 508, 509, 12, 5, 2, 2, 509, 510, 5, 38, 20, 2, 510, 511, 5, 84, 43, 6, 511, 515, 3, 2, 2, 2, 512, 513, 12, 3, 2, 2, 513, 515, 7, 36, 2, 2, 514, 508, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 515, 518, 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 85, 3, 2, 2, 2, 518, 516, 3, 2, 2, 2, 519, 521, 7, 51, 2, 2, 520, 522, 5, 88, 45, 2, 521, 520, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 87, 3, 2, 2, 2, 523, 524, 5, 10, 6, 2, 524, 525, 7, 36, 2, 2, 525, 530, 3, 2, 2, 2, 526, 527, 5, 6, 4, 2, 527, 528, 7, 36, 2, 2, 528, 530, 3, 2, 2, 2, 529, 523, 3, 2, 2, 2, 529, 526, 3, 2, 2, 2, 530, 89, 3, 2, 2, 2, 531, 533, 7, 52, 2, 2, 532, 534, 5, 92, 47, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 91, 3, 2, 2, 2, 535, 536, 5, 6, 4, 2, 536, 537, 7, 36, 2, 2, 537, 93, 3, 2, 2, 2, 538, 540, 7, 53, 2, 2, 539, 541, 5, 96, 49, 2, 540, 539, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 95, 3, 2, 2, 2, 542, 543, 5, 6, 4, 2, 543, 544, 7, 36, 2, 2, 544, 97, 3, 2, 2, 2, 545, 547, 7, 54, 2, 2, 546, 548, 5, 100, 51, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 99, 3, 2, 2, 2, 549, 550, 5, 10, 6, 2, 550, 551, 7, 36, 2, 2, 551, 101, 3, 2, 2, 2, 552, 554, 7, 55, 2, 2, 553, 555, 5, 106, 54, 2, 554, 553, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 557, 3, 2, 2, 2, 556, 558, 5, 104, 53, 2, 557, 556, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 103, 3, 2, 2, 2, 559, 563, 5, 28, 15, 2, 560, 564, 5, 128, 65, 2, 561, 564, 5, 56, 29, 2, 562, 564, 5, 72, 37, 2, 563, 560, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 563, 562, 3, 2, 2, 2, 564, 105, 3, 2, 2, 2, 565, 566, 5, 36, 19, 2, 566, 567, 5, 108, 55, 2, 567, 107, 3, 2, 2, 2, 568, 569, 8, 55, 1, 2, 569, 570, 7, 39, 2, 2, 570, 571, 5, 108, 55, 2, 571, 572, 7, 40, 2, 2, 572, 583, 3, 2, 2, 2, 573, 581, 5, 44, 23, 2, 574, 581, 5, 90, 46, 2, 575, 581, 5, 94, 48, 2, 576, 581, 5, 86, 44, 2, 577, 581, 5, 40, 21, 2, 578, 581, 5, 122, 62, 2, 579, 581, 5, 24, 13, 2, 580, 573, 3, 2, 2, 2, 580, 574, 3, 2, 2, 2, 580, 575, 3, 2, 2, 2, 580, 576, 3, 2, 2, 2, 580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 583, 3, 2, 2, 2, 582, 568, 3, 2, 2, 2, 582, 580, 3, 2, 2, 2, 583, 592, 3, 2, 2, 2, 584, 585, 12, 5, 2, 2, 585, 586, 5, 38, 20, 2, 586, 587, 5, 108, 55, 6, 587, 591, 3, 2, 2, 2, 588, 589, 12, 3, 2, 2, 589, 591, 7, 36, 2, 2, 590, 584, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 591, 594, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 109, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 597, 7, 56, 2, 2, 596, 598, 5, 114, 58, 2, 597, 596, 3, 2, 2, 2, 597, 598, 3, 2, 2, 2, 598, 600, 3, 2, 2, 2, 599, 601, 5, 112, 57, 2, 600, 599, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 111, 3, 2, 2, 2, 602, 606, 5, 28, 15, 2, 603, 607, 5, 56, 29, 2, 604, 607, 5, 72, 37, 2, 605, 607, 5, 72, 37, 2, 606, 603, 3, 2, 2, 2, 606, 604, 3, 2, 2, 2, 606, 605, 3, 2, 2, 2, 607, 113, 3, 2, 2, 2, 608, 609, 5, 36, 19, 2, 609, 610, 5, 116, 59, 2, 610, 115, 3, 2, 2, 2, 611, 612, 8, 59, 1, 2, 612, 613, 7, 39, 2, 2, 613, 614, 5, 116, 59, 2, 614, 615, 7, 40, 2, 2, 615, 621, 3, 2, 2, 2, 616, 619, 5, 24, 13, 2, 617, 619, 5, 118, 60, 2, 618, 616, 3, 2, 2, 2, 618, 617, 3, 2, 2, 2, 619, 621, 3, 2, 2, 2, 620, 611, 3, 2, 2, 2, 620, 618, 3, 2, 2, 2, 621, 630, 3, 2, 2, 2, 622, 623, 12, 5, 2, 2, 623, 624, 5, 38, 20, 2, 624, 625, 5, 116, 59, 6, 625, 629, 3, 2, 2, 2, 626, 627, 12, 3, 2, 2, 627, 629, 7, 36, 2, 2, 628, 622, 3, 2, 2, 2, 628, 626, 3, 2, 2, 2, 629, 632, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 630, 631, 3, 2, 2, 2, 631, 117, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 633, 635, 7, 57, 2, 2, 634, 636, 5, 120, 61, 2, 635, 634, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 119, 3, 2, 2, 2, 637, 638, 5, 10, 6, 2, 638, 639, 7, 36, 2, 2, 639, 121, 3, 2, 2, 2, 640, 642, 7, 58, 2, 2, 641, 643, 5, 126, 64, 2, 642, 641, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 645, 3, 2, 2, 2, 644, 646, 5, 124, 63, 2, 645, 644, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 123, 3, 2, 2, 2, 647, 648, 5, 28, 15, 2, 648, 649, 5, 102, 52, 2, 649, 125, 3, 2, 2, 2, 650, 651, 5, 10, 6, 2, 651, 652, 7, 36, 2, 2, 652, 127, 3, 2, 2, 2, 653, 655, 7, 59, 2, 2, 654, 656, 5, 130, 66, 2, 655, 654, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 129, 3, 2, 2, 2, 657, 658, 5, 36, 19, 2, 658, 659, 5, 132, 67, 2, 659, 131, 3, 2, 2, 2, 660, 661, 8, 67, 1, 2, 661, 662, 7, 39, 2, 2, 662, 663, 5, 132, 67, 2, 663, 664, 7, 40, 2, 2, 664, 681, 3, 2, 2, 2, 665, 679, 5, 44, 23, 2, 666, 679, 5, 90, 46, 2, 667, 679, 5, 94, 48, 2, 668, 679, 5, 40, 21, 2, 669, 679, 5, 48, 25, 2, 670, 679, 5, 52, 27, 2, 671, 679, 5, 56, 29, 2, 672, 679, 5, 64, 33, 2, 673, 679, 5, 72, 37, 2, 674, 679, 5, 102, 52, 2, 675, 679, 5, 98, 50, 2, 676, 679, 5, 24, 13, 2, 677, 679, 5, 134, 68, 2, 678, 665, 3, 2, 2, 2, 678, 666, 3, 2, 2, 2, 678, 667, 3, 2, 2, 2, 678, 668, 3, 2, 2, 2, 678, 669, 3, 2, 2, 2, 678, 670, 3, 2, 2, 2, 678, 671, 3, 2, 2, 2, 678, 672, 3, 2, 2, 2, 678, 673, 3, 2, 2, 2, 678, 674, 3, 2, 2, 2, 678, 675, 3, 2, 2, 2, 678, 676, 3, 2, 2, 2, 678, 677, 3, 2, 2, 2, 679, 681, 3, 2, 2, 2, 680, 660, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 681, 690, 3, 2, 2, 2, 682, 683, 12, 5, 2, 2, 683, 684, 5, 38, 20, 2, 684, 685, 5, 132, 67, 6, 685, 689, 3, 2, 2, 2, 686, 687, 12, 3, 2, 2, 687, 689, 7, 36, 2, 2, 688, 682, 3, 2, 2, 2, 688, 686, 3, 2, 2, 2, 689, 692, 3, 2, 2, 2, 690, 688, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 133, 3, 2, 2, 2, 692, 690, 3, 2, 2, 2, 693, 695, 7, 60, 2, 2, 694, 696, 5, 138, 70, 2, 695, 694, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 698, 3, 2, 2, 2, 697, 699, 5, 136, 69, 2, 698, 697, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 135, 3, 2, 2, 2, 700, 701, 5, 28, 15, 2, 701, 702, 5, 128, 65, 2, 702, 137, 3, 2, 2, 2, 703, 704, 5, 36, 19, 2, 704, 705, 5, 140, 71, 2, 705, 139, 3, 2, 2, 2, 706, 707, 8, 71, 1, 2, 707, 708, 7, 39, 2, 2, 708, 709, 5, 140, 71, 2, 709, 710, 7, 40, 2, 2, 710, 728, 3, 2, 2, 2, 711, 726, 5, 44, 23, 2, 712, 726, 5, 90, 46, 2, 713, 726, 5, 94, 48, 2, 714, 726, 5, 40, 21, 2, 715, 726, 5, 48, 25, 2, 716, 726, 5, 52, 27, 2, 717, 726, 5, 56, 29, 2, 718, 726, 5, 134, 68, 2, 719, 726, 3, 2, 2, 2, 720, 726, 5, 64, 33, 2, 721, 726, 5, 72, 37, 2, 722, 726, 5, 102, 52, 2, 723, 726, 5, 98, 50, 2, 724, 726, 5, 24, 13, 2, 725, 711, 3, 2, 2, 2, 725, 712, 3, 2, 2, 2, 725, 713, 3, 2, 2, 2, 725, 714, 3, 2, 2, 2, 725, 715, 3, 2, 2, 2, 725, 716, 3, 2, 2, 2, 725, 717, 3, 2, 2, 2, 725, 718, 3, 2, 2, 2, 725, 719, 3, 2, 2, 2, 725, 720, 3, 2, 2, 2, 725, 721, 3, 2, 2, 2, 725, 722, 3, 2, 2, 2, 725, 723, 3, 2, 2, 2, 725, 724, 3, 2, 2, 2, 726, 728, 3, 2, 2, 2, 727, 706, 3, 2, 2, 2, 727, 725, 3, 2, 2, 2, 728, 737, 3, 2, 2, 2, 729, 730, 12, 5, 2, 2, 730, 731, 5, 38, 20, 2, 731, 732, 5, 140, 71, 6, 732, 736, 3, 2, 2, 2, 733, 734, 12, 3, 2, 2, 734, 736, 7, 36, 2, 2, 735, 729, 3, 2, 2, 2, 735, 733, 3, 2, 2, 2, 736, 739, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 141, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 87, 145, 149, 152, 157, 197, 206, 208, 217, 223, 229, 235, 240, 247, 254, 261, 264, 270, 272, 285, 287, 295, 297, 307, 325, 329, 336, 344, 354, 364, 368, 371, 394, 396, 404, 406, 411, 414, 433, 435, 443, 445, 450, 453, 475, 477, 485, 487, 492, 504, 506, 514, 516, 521, 529, 533, 540, 547, 554, 557, 563, 580, 582, 590, 592, 597, 600, 606, 618, 620, 628, 630, 635, 642, 645, 655, 678, 680, 688, 690, 695, 698, 725, 727, 735, 737] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 60, 758, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 3, 2, 7, 2, 148, 10, 2, 12, 2, 14, 2, 151, 11, 2, 3, 2, 5, 2, 154, 10, 2, 3, 2, 5, 2, 157, 10, 2, 3, 2, 7, 2, 160, 10, 2, 12, 2, 14, 2, 163, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 202, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 211, 10, 4, 12, 4, 14, 4, 214, 11, 4, 3, 4, 3, 4, 3, 4, 3, 5, 6, 5, 220, 10, 5, 13, 5, 14, 5, 221, 3, 5, 3, 5, 6, 5, 226, 10, 5, 13, 5, 14, 5, 227, 3, 5, 3, 5, 6, 5, 232, 10, 5, 13, 5, 14, 5, 233, 3, 5, 3, 5, 6, 5, 238, 10, 5, 13, 5, 14, 5, 239, 3, 5, 6, 5, 243, 10, 5, 13, 5, 14, 5, 244, 3, 5, 3, 5, 3, 5, 6, 5, 250, 10, 5, 13, 5, 14, 5, 251, 3, 5, 3, 5, 3, 5, 6, 5, 257, 10, 5, 13, 5, 14, 5, 258, 3, 5, 3, 5, 3, 5, 6, 5, 264, 10, 5, 13, 5, 14, 5, 265, 3, 5, 5, 5, 269, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 6, 6, 275, 10, 6, 13, 6, 14, 6, 276, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 6, 10, 290, 10, 10, 13, 10, 14, 10, 291, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 300, 10, 11, 12, 11, 14, 11, 303, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 5, 13, 312, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 330, 10, 20, 3, 21, 3, 21, 5, 21, 334, 10, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 5, 23, 341, 10, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 5, 25, 348, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 356, 10, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 369, 10, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 382, 10, 30, 3, 31, 3, 31, 5, 31, 386, 10, 31, 3, 31, 5, 31, 389, 10, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 412, 10, 34, 5, 34, 414, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 422, 10, 34, 12, 34, 14, 34, 425, 11, 34, 3, 35, 3, 35, 5, 35, 429, 10, 35, 3, 35, 5, 35, 432, 10, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 451, 10, 38, 5, 38, 453, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 461, 10, 38, 12, 38, 14, 38, 464, 11, 38, 3, 39, 3, 39, 5, 39, 468, 10, 39, 3, 39, 5, 39, 471, 10, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 493, 10, 42, 5, 42, 495, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 503, 10, 42, 12, 42, 14, 42, 506, 11, 42, 3, 43, 3, 43, 5, 43, 510, 10, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 522, 10, 45, 5, 45, 524, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 532, 10, 45, 12, 45, 14, 45, 535, 11, 45, 3, 46, 3, 46, 5, 46, 539, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 547, 10, 47, 3, 48, 3, 48, 5, 48, 551, 10, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 5, 50, 558, 10, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 5, 52, 565, 10, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 5, 54, 572, 10, 54, 3, 54, 5, 54, 575, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 581, 10, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 598, 10, 57, 5, 57, 600, 10, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 608, 10, 57, 12, 57, 14, 57, 611, 11, 57, 3, 58, 3, 58, 5, 58, 615, 10, 58, 3, 58, 5, 58, 618, 10, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 624, 10, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 636, 10, 61, 5, 61, 638, 10, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 7, 61, 646, 10, 61, 12, 61, 14, 61, 649, 11, 61, 3, 62, 3, 62, 5, 62, 653, 10, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 5, 64, 660, 10, 64, 3, 64, 5, 64, 663, 10, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 5, 67, 673, 10, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 696, 10, 69, 5, 69, 698, 10, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 706, 10, 69, 12, 69, 14, 69, 709, 11, 69, 3, 70, 3, 70, 5, 70, 713, 10, 70, 3, 70, 5, 70, 716, 10, 70, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 5, 73, 743, 10, 73, 5, 73, 745, 10, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 753, 10, 73, 12, 73, 14, 73, 756, 11, 73, 3, 73, 2, 10, 66, 74, 82, 88, 112, 120, 136, 144, 74, 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, 2, 4, 4, 2, 9, 15, 39, 40, 3, 2, 16, 29, 2, 835, 2, 153, 3, 2, 2, 2, 4, 201, 3, 2, 2, 2, 6, 203, 3, 2, 2, 2, 8, 268, 3, 2, 2, 2, 10, 270, 3, 2, 2, 2, 12, 280, 3, 2, 2, 2, 14, 282, 3, 2, 2, 2, 16, 284, 3, 2, 2, 2, 18, 289, 3, 2, 2, 2, 20, 301, 3, 2, 2, 2, 22, 306, 3, 2, 2, 2, 24, 308, 3, 2, 2, 2, 26, 315, 3, 2, 2, 2, 28, 317, 3, 2, 2, 2, 30, 319, 3, 2, 2, 2, 32, 321, 3, 2, 2, 2, 34, 323, 3, 2, 2, 2, 36, 325, 3, 2, 2, 2, 38, 329, 3, 2, 2, 2, 40, 331, 3, 2, 2, 2, 42, 335, 3, 2, 2, 2, 44, 338, 3, 2, 2, 2, 46, 342, 3, 2, 2, 2, 48, 345, 3, 2, 2, 2, 50, 355, 3, 2, 2, 2, 52, 357, 3, 2, 2, 2, 54, 360, 3, 2, 2, 2, 56, 370, 3, 2, 2, 2, 58, 373, 3, 2, 2, 2, 60, 383, 3, 2, 2, 2, 62, 390, 3, 2, 2, 2, 64, 393, 3, 2, 2, 2, 66, 413, 3, 2, 2, 2, 68, 426, 3, 2, 2, 2, 70, 433, 3, 2, 2, 2, 72, 436, 3, 2, 2, 2, 74, 452, 3, 2, 2, 2, 76, 465, 3, 2, 2, 2, 78, 472, 3, 2, 2, 2, 80, 475, 3, 2, 2, 2, 82, 494, 3, 2, 2, 2, 84, 507, 3, 2, 2, 2, 86, 511, 3, 2, 2, 2, 88, 523, 3, 2, 2, 2, 90, 536, 3, 2, 2, 2, 92, 546, 3, 2, 2, 2, 94, 548, 3, 2, 2, 2, 96, 552, 3, 2, 2, 2, 98, 555, 3, 2, 2, 2, 100, 559, 3, 2, 2, 2, 102, 562, 3, 2, 2, 2, 104, 566, 3, 2, 2, 2, 106, 569, 3, 2, 2, 2, 108, 576, 3, 2, 2, 2, 110, 582, 3, 2, 2, 2, 112, 599, 3, 2, 2, 2, 114, 612, 3, 2, 2, 2, 116, 619, 3, 2, 2, 2, 118, 625, 3, 2, 2, 2, 120, 637, 3, 2, 2, 2, 122, 650, 3, 2, 2, 2, 124, 654, 3, 2, 2, 2, 126, 657, 3, 2, 2, 2, 128, 664, 3, 2, 2, 2, 130, 667, 3, 2, 2, 2, 132, 670, 3, 2, 2, 2, 134, 674, 3, 2, 2, 2, 136, 697, 3, 2, 2, 2, 138, 710, 3, 2, 2, 2, 140, 717, 3, 2, 2, 2, 142, 720, 3, 2, 2, 2, 144, 744, 3, 2, 2, 2, 146, 148, 5, 16, 9, 2, 147, 146, 3, 2, 2, 2, 148, 151, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 150, 154, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 152, 154, 5, 4, 3, 2, 153, 149, 3, 2, 2, 2, 153, 152, 3, 2, 2, 2, 154, 156, 3, 2, 2, 2, 155, 157, 5, 14, 8, 2, 156, 155, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 161, 3, 2, 2, 2, 158, 160, 7, 38, 2, 2, 159, 158, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 7, 2, 2, 3, 165, 3, 3, 2, 2, 2, 166, 167, 5, 60, 31, 2, 167, 168, 5, 26, 14, 2, 168, 169, 5, 34, 18, 2, 169, 170, 5, 66, 34, 2, 170, 202, 3, 2, 2, 2, 171, 172, 5, 68, 35, 2, 172, 173, 5, 26, 14, 2, 173, 174, 5, 34, 18, 2, 174, 175, 5, 74, 38, 2, 175, 202, 3, 2, 2, 2, 176, 177, 5, 76, 39, 2, 177, 178, 5, 26, 14, 2, 178, 179, 5, 34, 18, 2, 179, 180, 5, 82, 42, 2, 180, 202, 3, 2, 2, 2, 181, 182, 5, 132, 67, 2, 182, 183, 5, 26, 14, 2, 183, 184, 5, 34, 18, 2, 184, 185, 5, 136, 69, 2, 185, 202, 3, 2, 2, 2, 186, 187, 5, 84, 43, 2, 187, 188, 5, 26, 14, 2, 188, 189, 5, 34, 18, 2, 189, 190, 5, 88, 45, 2, 190, 202, 3, 2, 2, 2, 191, 192, 5, 106, 54, 2, 192, 193, 5, 26, 14, 2, 193, 194, 5, 34, 18, 2, 194, 195, 5, 112, 57, 2, 195, 202, 3, 2, 2, 2, 196, 197, 5, 138, 70, 2, 197, 198, 5, 26, 14, 2, 198, 199, 5, 34, 18, 2, 199, 200, 5, 144, 73, 2, 200, 202, 3, 2, 2, 2, 201, 166, 3, 2, 2, 2, 201, 171, 3, 2, 2, 2, 201, 176, 3, 2, 2, 2, 201, 181, 3, 2, 2, 2, 201, 186, 3, 2, 2, 2, 201, 191, 3, 2, 2, 2, 201, 196, 3, 2, 2, 2, 202, 5, 3, 2, 2, 2, 203, 212, 7, 3, 2, 2, 204, 205, 5, 8, 5, 2, 205, 206, 7, 4, 2, 2, 206, 211, 3, 2, 2, 2, 207, 208, 5, 8, 5, 2, 208, 209, 7, 5, 2, 2, 209, 211, 3, 2, 2, 2, 210, 204, 3, 2, 2, 2, 210, 207, 3, 2, 2, 2, 211, 214, 3, 2, 2, 2, 212, 210, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 215, 3, 2, 2, 2, 214, 212, 3, 2, 2, 2, 215, 216, 5, 8, 5, 2, 216, 217, 7, 3, 2, 2, 217, 7, 3, 2, 2, 2, 218, 220, 7, 37, 2, 2, 219, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 269, 3, 2, 2, 2, 223, 225, 7, 6, 2, 2, 224, 226, 7, 37, 2, 2, 225, 224, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 269, 3, 2, 2, 2, 229, 231, 7, 7, 2, 2, 230, 232, 7, 37, 2, 2, 231, 230, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 231, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 269, 3, 2, 2, 2, 235, 237, 7, 8, 2, 2, 236, 238, 7, 37, 2, 2, 237, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 269, 3, 2, 2, 2, 241, 243, 7, 37, 2, 2, 242, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 269, 7, 7, 2, 2, 247, 249, 7, 6, 2, 2, 248, 250, 7, 37, 2, 2, 249, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 269, 7, 7, 2, 2, 254, 256, 7, 7, 2, 2, 255, 257, 7, 37, 2, 2, 256, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 269, 7, 7, 2, 2, 261, 263, 7, 8, 2, 2, 262, 264, 7, 37, 2, 2, 263, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 269, 7, 7, 2, 2, 268, 219, 3, 2, 2, 2, 268, 223, 3, 2, 2, 2, 268, 229, 3, 2, 2, 2, 268, 235, 3, 2, 2, 2, 268, 242, 3, 2, 2, 2, 268, 247, 3, 2, 2, 2, 268, 254, 3, 2, 2, 2, 268, 261, 3, 2, 2, 2, 269, 9, 3, 2, 2, 2, 270, 274, 7, 3, 2, 2, 271, 275, 7, 37, 2, 2, 272, 275, 5, 12, 7, 2, 273, 275, 7, 36, 2, 2, 274, 271, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 273, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 3, 2, 2, 279, 11, 3, 2, 2, 2, 280, 281, 9, 2, 2, 2, 281, 13, 3, 2, 2, 2, 282, 283, 7, 9, 2, 2, 283, 15, 3, 2, 2, 2, 284, 285, 7, 38, 2, 2, 285, 17, 3, 2, 2, 2, 286, 290, 7, 37, 2, 2, 287, 290, 5, 12, 7, 2, 288, 290, 7, 36, 2, 2, 289, 286, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 288, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 19, 3, 2, 2, 2, 293, 294, 5, 18, 10, 2, 294, 295, 7, 4, 2, 2, 295, 300, 3, 2, 2, 2, 296, 297, 5, 18, 10, 2, 297, 298, 7, 5, 2, 2, 298, 300, 3, 2, 2, 2, 299, 293, 3, 2, 2, 2, 299, 296, 3, 2, 2, 2, 300, 303, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 304, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 304, 305, 5, 18, 10, 2, 305, 21, 3, 2, 2, 2, 306, 307, 9, 3, 2, 2, 307, 23, 3, 2, 2, 2, 308, 309, 7, 3, 2, 2, 309, 311, 5, 22, 12, 2, 310, 312, 5, 20, 11, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 7, 3, 2, 2, 314, 25, 3, 2, 2, 2, 315, 316, 7, 30, 2, 2, 316, 27, 3, 2, 2, 2, 317, 318, 7, 31, 2, 2, 318, 29, 3, 2, 2, 2, 319, 320, 7, 32, 2, 2, 320, 31, 3, 2, 2, 2, 321, 322, 7, 33, 2, 2, 322, 33, 3, 2, 2, 2, 323, 324, 7, 34, 2, 2, 324, 35, 3, 2, 2, 2, 325, 326, 7, 35, 2, 2, 326, 37, 3, 2, 2, 2, 327, 330, 5, 30, 16, 2, 328, 330, 5, 32, 17, 2, 329, 327, 3, 2, 2, 2, 329, 328, 3, 2, 2, 2, 330, 39, 3, 2, 2, 2, 331, 333, 7, 41, 2, 2, 332, 334, 5, 42, 22, 2, 333, 332, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 41, 3, 2, 2, 2, 335, 336, 5, 6, 4, 2, 336, 337, 7, 36, 2, 2, 337, 43, 3, 2, 2, 2, 338, 340, 7, 41, 2, 2, 339, 341, 5, 46, 24, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 45, 3, 2, 2, 2, 342, 343, 5, 10, 6, 2, 343, 344, 7, 36, 2, 2, 344, 47, 3, 2, 2, 2, 345, 347, 7, 42, 2, 2, 346, 348, 5, 50, 26, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 49, 3, 2, 2, 2, 349, 350, 5, 10, 6, 2, 350, 351, 7, 36, 2, 2, 351, 356, 3, 2, 2, 2, 352, 353, 5, 6, 4, 2, 353, 354, 7, 36, 2, 2, 354, 356, 3, 2, 2, 2, 355, 349, 3, 2, 2, 2, 355, 352, 3, 2, 2, 2, 356, 51, 3, 2, 2, 2, 357, 358, 7, 43, 2, 2, 358, 359, 5, 54, 28, 2, 359, 53, 3, 2, 2, 2, 360, 368, 5, 28, 15, 2, 361, 362, 5, 10, 6, 2, 362, 363, 7, 36, 2, 2, 363, 369, 3, 2, 2, 2, 364, 365, 5, 6, 4, 2, 365, 366, 7, 36, 2, 2, 366, 369, 3, 2, 2, 2, 367, 369, 7, 44, 2, 2, 368, 361, 3, 2, 2, 2, 368, 364, 3, 2, 2, 2, 368, 367, 3, 2, 2, 2, 369, 55, 3, 2, 2, 2, 370, 371, 7, 45, 2, 2, 371, 372, 5, 58, 30, 2, 372, 57, 3, 2, 2, 2, 373, 381, 5, 28, 15, 2, 374, 375, 5, 10, 6, 2, 375, 376, 7, 36, 2, 2, 376, 382, 3, 2, 2, 2, 377, 378, 5, 6, 4, 2, 378, 379, 7, 36, 2, 2, 379, 382, 3, 2, 2, 2, 380, 382, 7, 46, 2, 2, 381, 374, 3, 2, 2, 2, 381, 377, 3, 2, 2, 2, 381, 380, 3, 2, 2, 2, 382, 59, 3, 2, 2, 2, 383, 385, 7, 47, 2, 2, 384, 386, 5, 64, 33, 2, 385, 384, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 388, 3, 2, 2, 2, 387, 389, 5, 62, 32, 2, 388, 387, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 61, 3, 2, 2, 2, 390, 391, 5, 28, 15, 2, 391, 392, 5, 132, 67, 2, 392, 63, 3, 2, 2, 2, 393, 394, 5, 36, 19, 2, 394, 395, 5, 66, 34, 2, 395, 65, 3, 2, 2, 2, 396, 397, 8, 34, 1, 2, 397, 398, 7, 39, 2, 2, 398, 399, 5, 66, 34, 2, 399, 400, 7, 40, 2, 2, 400, 414, 3, 2, 2, 2, 401, 412, 5, 48, 25, 2, 402, 412, 5, 94, 48, 2, 403, 412, 5, 98, 50, 2, 404, 412, 5, 90, 46, 2, 405, 412, 5, 40, 21, 2, 406, 412, 5, 84, 43, 2, 407, 412, 5, 102, 52, 2, 408, 412, 5, 106, 54, 2, 409, 412, 5, 114, 58, 2, 410, 412, 5, 24, 13, 2, 411, 401, 3, 2, 2, 2, 411, 402, 3, 2, 2, 2, 411, 403, 3, 2, 2, 2, 411, 404, 3, 2, 2, 2, 411, 405, 3, 2, 2, 2, 411, 406, 3, 2, 2, 2, 411, 407, 3, 2, 2, 2, 411, 408, 3, 2, 2, 2, 411, 409, 3, 2, 2, 2, 411, 410, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 396, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 414, 423, 3, 2, 2, 2, 415, 416, 12, 5, 2, 2, 416, 417, 5, 38, 20, 2, 417, 418, 5, 66, 34, 6, 418, 422, 3, 2, 2, 2, 419, 420, 12, 3, 2, 2, 420, 422, 7, 36, 2, 2, 421, 415, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 425, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 67, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 426, 428, 7, 48, 2, 2, 427, 429, 5, 72, 37, 2, 428, 427, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 431, 3, 2, 2, 2, 430, 432, 5, 70, 36, 2, 431, 430, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 69, 3, 2, 2, 2, 433, 434, 5, 28, 15, 2, 434, 435, 5, 132, 67, 2, 435, 71, 3, 2, 2, 2, 436, 437, 5, 36, 19, 2, 437, 438, 5, 74, 38, 2, 438, 73, 3, 2, 2, 2, 439, 440, 8, 38, 1, 2, 440, 441, 7, 39, 2, 2, 441, 442, 5, 74, 38, 2, 442, 443, 7, 40, 2, 2, 443, 453, 3, 2, 2, 2, 444, 451, 5, 48, 25, 2, 445, 451, 5, 94, 48, 2, 446, 451, 5, 98, 50, 2, 447, 451, 5, 90, 46, 2, 448, 451, 5, 40, 21, 2, 449, 451, 5, 84, 43, 2, 450, 444, 3, 2, 2, 2, 450, 445, 3, 2, 2, 2, 450, 446, 3, 2, 2, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 453, 3, 2, 2, 2, 452, 439, 3, 2, 2, 2, 452, 450, 3, 2, 2, 2, 453, 462, 3, 2, 2, 2, 454, 455, 12, 5, 2, 2, 455, 456, 5, 38, 20, 2, 456, 457, 5, 74, 38, 6, 457, 461, 3, 2, 2, 2, 458, 459, 12, 3, 2, 2, 459, 461, 7, 36, 2, 2, 460, 454, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 75, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 467, 7, 49, 2, 2, 466, 468, 5, 80, 41, 2, 467, 466, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 470, 3, 2, 2, 2, 469, 471, 5, 78, 40, 2, 470, 469, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 77, 3, 2, 2, 2, 472, 473, 5, 28, 15, 2, 473, 474, 5, 132, 67, 2, 474, 79, 3, 2, 2, 2, 475, 476, 5, 36, 19, 2, 476, 477, 5, 82, 42, 2, 477, 81, 3, 2, 2, 2, 478, 479, 8, 42, 1, 2, 479, 480, 7, 39, 2, 2, 480, 481, 5, 82, 42, 2, 481, 482, 7, 40, 2, 2, 482, 495, 3, 2, 2, 2, 483, 493, 5, 48, 25, 2, 484, 493, 5, 94, 48, 2, 485, 493, 5, 98, 50, 2, 486, 493, 5, 40, 21, 2, 487, 493, 5, 84, 43, 2, 488, 493, 5, 102, 52, 2, 489, 493, 5, 106, 54, 2, 490, 493, 5, 114, 58, 2, 491, 493, 5, 24, 13, 2, 492, 483, 3, 2, 2, 2, 492, 484, 3, 2, 2, 2, 492, 485, 3, 2, 2, 2, 492, 486, 3, 2, 2, 2, 492, 487, 3, 2, 2, 2, 492, 488, 3, 2, 2, 2, 492, 489, 3, 2, 2, 2, 492, 490, 3, 2, 2, 2, 492, 491, 3, 2, 2, 2, 493, 495, 3, 2, 2, 2, 494, 478, 3, 2, 2, 2, 494, 492, 3, 2, 2, 2, 495, 504, 3, 2, 2, 2, 496, 497, 12, 5, 2, 2, 497, 498, 5, 38, 20, 2, 498, 499, 5, 82, 42, 6, 499, 503, 3, 2, 2, 2, 500, 501, 12, 3, 2, 2, 501, 503, 7, 36, 2, 2, 502, 496, 3, 2, 2, 2, 502, 500, 3, 2, 2, 2, 503, 506, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 83, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 509, 7, 50, 2, 2, 508, 510, 5, 86, 44, 2, 509, 508, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 85, 3, 2, 2, 2, 511, 512, 5, 36, 19, 2, 512, 513, 5, 88, 45, 2, 513, 87, 3, 2, 2, 2, 514, 515, 8, 45, 1, 2, 515, 516, 7, 39, 2, 2, 516, 517, 5, 88, 45, 2, 517, 518, 7, 40, 2, 2, 518, 524, 3, 2, 2, 2, 519, 522, 5, 90, 46, 2, 520, 522, 5, 40, 21, 2, 521, 519, 3, 2, 2, 2, 521, 520, 3, 2, 2, 2, 522, 524, 3, 2, 2, 2, 523, 514, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 524, 533, 3, 2, 2, 2, 525, 526, 12, 5, 2, 2, 526, 527, 5, 38, 20, 2, 527, 528, 5, 88, 45, 6, 528, 532, 3, 2, 2, 2, 529, 530, 12, 3, 2, 2, 530, 532, 7, 36, 2, 2, 531, 525, 3, 2, 2, 2, 531, 529, 3, 2, 2, 2, 532, 535, 3, 2, 2, 2, 533, 531, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 89, 3, 2, 2, 2, 535, 533, 3, 2, 2, 2, 536, 538, 7, 51, 2, 2, 537, 539, 5, 92, 47, 2, 538, 537, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 91, 3, 2, 2, 2, 540, 541, 5, 10, 6, 2, 541, 542, 7, 36, 2, 2, 542, 547, 3, 2, 2, 2, 543, 544, 5, 6, 4, 2, 544, 545, 7, 36, 2, 2, 545, 547, 3, 2, 2, 2, 546, 540, 3, 2, 2, 2, 546, 543, 3, 2, 2, 2, 547, 93, 3, 2, 2, 2, 548, 550, 7, 52, 2, 2, 549, 551, 5, 96, 49, 2, 550, 549, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 95, 3, 2, 2, 2, 552, 553, 5, 6, 4, 2, 553, 554, 7, 36, 2, 2, 554, 97, 3, 2, 2, 2, 555, 557, 7, 53, 2, 2, 556, 558, 5, 100, 51, 2, 557, 556, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 99, 3, 2, 2, 2, 559, 560, 5, 6, 4, 2, 560, 561, 7, 36, 2, 2, 561, 101, 3, 2, 2, 2, 562, 564, 7, 54, 2, 2, 563, 565, 5, 104, 53, 2, 564, 563, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 103, 3, 2, 2, 2, 566, 567, 5, 10, 6, 2, 567, 568, 7, 36, 2, 2, 568, 105, 3, 2, 2, 2, 569, 571, 7, 55, 2, 2, 570, 572, 5, 110, 56, 2, 571, 570, 3, 2, 2, 2, 571, 572, 3, 2, 2, 2, 572, 574, 3, 2, 2, 2, 573, 575, 5, 108, 55, 2, 574, 573, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 107, 3, 2, 2, 2, 576, 580, 5, 28, 15, 2, 577, 581, 5, 132, 67, 2, 578, 581, 5, 60, 31, 2, 579, 581, 5, 76, 39, 2, 580, 577, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 109, 3, 2, 2, 2, 582, 583, 5, 36, 19, 2, 583, 584, 5, 112, 57, 2, 584, 111, 3, 2, 2, 2, 585, 586, 8, 57, 1, 2, 586, 587, 7, 39, 2, 2, 587, 588, 5, 112, 57, 2, 588, 589, 7, 40, 2, 2, 589, 600, 3, 2, 2, 2, 590, 598, 5, 48, 25, 2, 591, 598, 5, 94, 48, 2, 592, 598, 5, 98, 50, 2, 593, 598, 5, 90, 46, 2, 594, 598, 5, 40, 21, 2, 595, 598, 5, 126, 64, 2, 596, 598, 5, 24, 13, 2, 597, 590, 3, 2, 2, 2, 597, 591, 3, 2, 2, 2, 597, 592, 3, 2, 2, 2, 597, 593, 3, 2, 2, 2, 597, 594, 3, 2, 2, 2, 597, 595, 3, 2, 2, 2, 597, 596, 3, 2, 2, 2, 598, 600, 3, 2, 2, 2, 599, 585, 3, 2, 2, 2, 599, 597, 3, 2, 2, 2, 600, 609, 3, 2, 2, 2, 601, 602, 12, 5, 2, 2, 602, 603, 5, 38, 20, 2, 603, 604, 5, 112, 57, 6, 604, 608, 3, 2, 2, 2, 605, 606, 12, 3, 2, 2, 606, 608, 7, 36, 2, 2, 607, 601, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 611, 3, 2, 2, 2, 609, 607, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 113, 3, 2, 2, 2, 611, 609, 3, 2, 2, 2, 612, 614, 7, 56, 2, 2, 613, 615, 5, 118, 60, 2, 614, 613, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 617, 3, 2, 2, 2, 616, 618, 5, 116, 59, 2, 617, 616, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 618, 115, 3, 2, 2, 2, 619, 623, 5, 28, 15, 2, 620, 624, 5, 60, 31, 2, 621, 624, 5, 76, 39, 2, 622, 624, 5, 76, 39, 2, 623, 620, 3, 2, 2, 2, 623, 621, 3, 2, 2, 2, 623, 622, 3, 2, 2, 2, 624, 117, 3, 2, 2, 2, 625, 626, 5, 36, 19, 2, 626, 627, 5, 120, 61, 2, 627, 119, 3, 2, 2, 2, 628, 629, 8, 61, 1, 2, 629, 630, 7, 39, 2, 2, 630, 631, 5, 120, 61, 2, 631, 632, 7, 40, 2, 2, 632, 638, 3, 2, 2, 2, 633, 636, 5, 24, 13, 2, 634, 636, 5, 122, 62, 2, 635, 633, 3, 2, 2, 2, 635, 634, 3, 2, 2, 2, 636, 638, 3, 2, 2, 2, 637, 628, 3, 2, 2, 2, 637, 635, 3, 2, 2, 2, 638, 647, 3, 2, 2, 2, 639, 640, 12, 5, 2, 2, 640, 641, 5, 38, 20, 2, 641, 642, 5, 120, 61, 6, 642, 646, 3, 2, 2, 2, 643, 644, 12, 3, 2, 2, 644, 646, 7, 36, 2, 2, 645, 639, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 646, 649, 3, 2, 2, 2, 647, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 121, 3, 2, 2, 2, 649, 647, 3, 2, 2, 2, 650, 652, 7, 57, 2, 2, 651, 653, 5, 124, 63, 2, 652, 651, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 123, 3, 2, 2, 2, 654, 655, 5, 10, 6, 2, 655, 656, 7, 36, 2, 2, 656, 125, 3, 2, 2, 2, 657, 659, 7, 58, 2, 2, 658, 660, 5, 130, 66, 2, 659, 658, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 662, 3, 2, 2, 2, 661, 663, 5, 128, 65, 2, 662, 661, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 127, 3, 2, 2, 2, 664, 665, 5, 28, 15, 2, 665, 666, 5, 106, 54, 2, 666, 129, 3, 2, 2, 2, 667, 668, 5, 10, 6, 2, 668, 669, 7, 36, 2, 2, 669, 131, 3, 2, 2, 2, 670, 672, 7, 59, 2, 2, 671, 673, 5, 134, 68, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 133, 3, 2, 2, 2, 674, 675, 5, 36, 19, 2, 675, 676, 5, 136, 69, 2, 676, 135, 3, 2, 2, 2, 677, 678, 8, 69, 1, 2, 678, 679, 7, 39, 2, 2, 679, 680, 5, 136, 69, 2, 680, 681, 7, 40, 2, 2, 681, 698, 3, 2, 2, 2, 682, 696, 5, 48, 25, 2, 683, 696, 5, 94, 48, 2, 684, 696, 5, 98, 50, 2, 685, 696, 5, 44, 23, 2, 686, 696, 5, 52, 27, 2, 687, 696, 5, 56, 29, 2, 688, 696, 5, 60, 31, 2, 689, 696, 5, 68, 35, 2, 690, 696, 5, 76, 39, 2, 691, 696, 5, 106, 54, 2, 692, 696, 5, 102, 52, 2, 693, 696, 5, 24, 13, 2, 694, 696, 5, 138, 70, 2, 695, 682, 3, 2, 2, 2, 695, 683, 3, 2, 2, 2, 695, 684, 3, 2, 2, 2, 695, 685, 3, 2, 2, 2, 695, 686, 3, 2, 2, 2, 695, 687, 3, 2, 2, 2, 695, 688, 3, 2, 2, 2, 695, 689, 3, 2, 2, 2, 695, 690, 3, 2, 2, 2, 695, 691, 3, 2, 2, 2, 695, 692, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 695, 694, 3, 2, 2, 2, 696, 698, 3, 2, 2, 2, 697, 677, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 698, 707, 3, 2, 2, 2, 699, 700, 12, 5, 2, 2, 700, 701, 5, 38, 20, 2, 701, 702, 5, 136, 69, 6, 702, 706, 3, 2, 2, 2, 703, 704, 12, 3, 2, 2, 704, 706, 7, 36, 2, 2, 705, 699, 3, 2, 2, 2, 705, 703, 3, 2, 2, 2, 706, 709, 3, 2, 2, 2, 707, 705, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 137, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 710, 712, 7, 60, 2, 2, 711, 713, 5, 142, 72, 2, 712, 711, 3, 2, 2, 2, 712, 713, 3, 2, 2, 2, 713, 715, 3, 2, 2, 2, 714, 716, 5, 140, 71, 2, 715, 714, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 139, 3, 2, 2, 2, 717, 718, 5, 28, 15, 2, 718, 719, 5, 132, 67, 2, 719, 141, 3, 2, 2, 2, 720, 721, 5, 36, 19, 2, 721, 722, 5, 144, 73, 2, 722, 143, 3, 2, 2, 2, 723, 724, 8, 73, 1, 2, 724, 725, 7, 39, 2, 2, 725, 726, 5, 144, 73, 2, 726, 727, 7, 40, 2, 2, 727, 745, 3, 2, 2, 2, 728, 743, 5, 48, 25, 2, 729, 743, 5, 94, 48, 2, 730, 743, 5, 98, 50, 2, 731, 743, 5, 44, 23, 2, 732, 743, 5, 52, 27, 2, 733, 743, 5, 56, 29, 2, 734, 743, 5, 60, 31, 2, 735, 743, 5, 138, 70, 2, 736, 743, 3, 2, 2, 2, 737, 743, 5, 68, 35, 2, 738, 743, 5, 76, 39, 2, 739, 743, 5, 106, 54, 2, 740, 743, 5, 102, 52, 2, 741, 743, 5, 24, 13, 2, 742, 728, 3, 2, 2, 2, 742, 729, 3, 2, 2, 2, 742, 730, 3, 2, 2, 2, 742, 731, 3, 2, 2, 2, 742, 732, 3, 2, 2, 2, 742, 733, 3, 2, 2, 2, 742, 734, 3, 2, 2, 2, 742, 735, 3, 2, 2, 2, 742, 736, 3, 2, 2, 2, 742, 737, 3, 2, 2, 2, 742, 738, 3, 2, 2, 2, 742, 739, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 742, 741, 3, 2, 2, 2, 743, 745, 3, 2, 2, 2, 744, 723, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 745, 754, 3, 2, 2, 2, 746, 747, 12, 5, 2, 2, 747, 748, 5, 38, 20, 2, 748, 749, 5, 144, 73, 6, 749, 753, 3, 2, 2, 2, 750, 751, 12, 3, 2, 2, 751, 753, 7, 36, 2, 2, 752, 746, 3, 2, 2, 2, 752, 750, 3, 2, 2, 2, 753, 756, 3, 2, 2, 2, 754, 752, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 145, 3, 2, 2, 2, 756, 754, 3, 2, 2, 2, 88, 149, 153, 156, 161, 201, 210, 212, 221, 227, 233, 239, 244, 251, 258, 265, 268, 274, 276, 289, 291, 299, 301, 311, 329, 333, 340, 347, 355, 368, 381, 385, 388, 411, 413, 421, 423, 428, 431, 450, 452, 460, 462, 467, 470, 492, 494, 502, 504, 509, 521, 523, 531, 533, 538, 546, 550, 557, 564, 571, 574, 580, 597, 599, 607, 609, 614, 617, 623, 635, 637, 645, 647, 652, 659, 662, 672, 695, 697, 705, 707, 712, 715, 742, 744, 752, 754] \ No newline at end of file diff --git a/src/core/generated-parser/rulePadGrammarListener.js b/src/core/generated-parser/rulePadGrammarListener.js index c065995..986ccd4 100644 --- a/src/core/generated-parser/rulePadGrammarListener.js +++ b/src/core/generated-parser/rulePadGrammarListener.js @@ -200,6 +200,24 @@ rulePadGrammarListener.prototype.exitNameCondition = function(ctx) { }; +// Enter a parse tree produced by rulePadGrammarParser#classNames. +rulePadGrammarListener.prototype.enterClassNames = function(ctx) { +}; + +// Exit a parse tree produced by rulePadGrammarParser#classNames. +rulePadGrammarListener.prototype.exitClassNames = function(ctx) { +}; + + +// Enter a parse tree produced by rulePadGrammarParser#classNameCondition. +rulePadGrammarListener.prototype.enterClassNameCondition = function(ctx) { +}; + +// Exit a parse tree produced by rulePadGrammarParser#classNameCondition. +rulePadGrammarListener.prototype.exitClassNameCondition = function(ctx) { +}; + + // Enter a parse tree produced by rulePadGrammarParser#annotations. rulePadGrammarListener.prototype.enterAnnotations = function(ctx) { }; diff --git a/src/core/generated-parser/rulePadGrammarParser.js b/src/core/generated-parser/rulePadGrammarParser.js index c88bcdb..19750ab 100644 --- a/src/core/generated-parser/rulePadGrammarParser.js +++ b/src/core/generated-parser/rulePadGrammarParser.js @@ -5,7 +5,7 @@ var rulePadGrammarListener = require('./rulePadGrammarListener').rulePadGrammarL var grammarFileName = "rulePadGrammar.g4"; var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", - "\u0003<\u02e5\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t", + "\u0003<\u02f6\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t", "\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007\u0004", "\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f\u0004", "\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010\u0004", @@ -18,486 +18,497 @@ var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964", ",\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u00041\t1\u00042\t2\u0004", "3\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u00048\t8\u00049\t9\u0004", ":\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004@\t@\u0004", - "A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004G\tG\u0003", - "\u0002\u0007\u0002\u0090\n\u0002\f\u0002\u000e\u0002\u0093\u000b\u0002", - "\u0003\u0002\u0005\u0002\u0096\n\u0002\u0003\u0002\u0005\u0002\u0099", - "\n\u0002\u0003\u0002\u0007\u0002\u009c\n\u0002\f\u0002\u000e\u0002\u009f", - "\u000b\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003\u0003\u0003", + "A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004G\tG\u0004", + "H\tH\u0004I\tI\u0003\u0002\u0007\u0002\u0094\n\u0002\f\u0002\u000e\u0002", + "\u0097\u000b\u0002\u0003\u0002\u0005\u0002\u009a\n\u0002\u0003\u0002", + "\u0005\u0002\u009d\n\u0002\u0003\u0002\u0007\u0002\u00a0\n\u0002\f\u0002", + "\u000e\u0002\u00a3\u000b\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003", "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003", "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003", "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003", "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003", "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003", - "\u0003\u0003\u0003\u0003\u0005\u0003\u00c6\n\u0003\u0003\u0004\u0003", - "\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0007", - "\u0004\u00cf\n\u0004\f\u0004\u000e\u0004\u00d2\u000b\u0004\u0003\u0004", - "\u0003\u0004\u0003\u0004\u0003\u0005\u0006\u0005\u00d8\n\u0005\r\u0005", - "\u000e\u0005\u00d9\u0003\u0005\u0003\u0005\u0006\u0005\u00de\n\u0005", - "\r\u0005\u000e\u0005\u00df\u0003\u0005\u0003\u0005\u0006\u0005\u00e4", - "\n\u0005\r\u0005\u000e\u0005\u00e5\u0003\u0005\u0003\u0005\u0006\u0005", - "\u00ea\n\u0005\r\u0005\u000e\u0005\u00eb\u0003\u0005\u0006\u0005\u00ef", - "\n\u0005\r\u0005\u000e\u0005\u00f0\u0003\u0005\u0003\u0005\u0003\u0005", - "\u0006\u0005\u00f6\n\u0005\r\u0005\u000e\u0005\u00f7\u0003\u0005\u0003", - "\u0005\u0003\u0005\u0006\u0005\u00fd\n\u0005\r\u0005\u000e\u0005\u00fe", - "\u0003\u0005\u0003\u0005\u0003\u0005\u0006\u0005\u0104\n\u0005\r\u0005", - "\u000e\u0005\u0105\u0003\u0005\u0005\u0005\u0109\n\u0005\u0003\u0006", - "\u0003\u0006\u0003\u0006\u0003\u0006\u0006\u0006\u010f\n\u0006\r\u0006", - "\u000e\u0006\u0110\u0003\u0006\u0003\u0006\u0003\u0007\u0003\u0007\u0003", - "\b\u0003\b\u0003\t\u0003\t\u0003\n\u0003\n\u0003\n\u0006\n\u011e\n\n", - "\r\n\u000e\n\u011f\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003", - "\u000b\u0003\u000b\u0007\u000b\u0128\n\u000b\f\u000b\u000e\u000b\u012b", - "\u000b\u000b\u0003\u000b\u0003\u000b\u0003\f\u0003\f\u0003\r\u0003\r", - "\u0003\r\u0005\r\u0134\n\r\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0003", - "\u000f\u0003\u000f\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003", - "\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0014\u0003\u0014\u0005", - "\u0014\u0146\n\u0014\u0003\u0015\u0003\u0015\u0005\u0015\u014a\n\u0015", - "\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0005\u0017", - "\u0151\n\u0017\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003", - "\u0018\u0003\u0018\u0005\u0018\u0159\n\u0018\u0003\u0019\u0003\u0019", - "\u0003\u0019\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a", - "\u0005\u001a\u0163\n\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003", - "\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0005\u001c\u016d", - "\n\u001c\u0003\u001d\u0003\u001d\u0005\u001d\u0171\n\u001d\u0003\u001d", - "\u0005\u001d\u0174\n\u001d\u0003\u001e\u0003\u001e\u0003\u001e\u0003", - "\u001f\u0003\u001f\u0003\u001f\u0003 \u0003 \u0003 \u0003 \u0003 \u0003", - " \u0003 \u0003 \u0003 \u0003 \u0003 \u0003 \u0003 \u0003 \u0003 \u0005", - " \u018b\n \u0005 \u018d\n \u0003 \u0003 \u0003 \u0003 \u0003 \u0003", - " \u0007 \u0195\n \f \u000e \u0198\u000b \u0003!\u0003!\u0005!\u019c", - "\n!\u0003!\u0005!\u019f\n!\u0003\"\u0003\"\u0003\"\u0003#\u0003#\u0003", - "#\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003", - "$\u0003$\u0005$\u01b2\n$\u0005$\u01b4\n$\u0003$\u0003$\u0003$\u0003", - "$\u0003$\u0003$\u0007$\u01bc\n$\f$\u000e$\u01bf\u000b$\u0003%\u0003", - "%\u0005%\u01c3\n%\u0003%\u0005%\u01c6\n%\u0003&\u0003&\u0003&\u0003", - "\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(", - "\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0005(\u01dc\n(\u0005", - "(\u01de\n(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0007(\u01e6\n", - "(\f(\u000e(\u01e9\u000b(\u0003)\u0003)\u0005)\u01ed\n)\u0003*\u0003", - "*\u0003*\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0005+\u01f9", - "\n+\u0005+\u01fb\n+\u0003+\u0003+\u0003+\u0003+\u0003+\u0003+\u0007", - "+\u0203\n+\f+\u000e+\u0206\u000b+\u0003,\u0003,\u0005,\u020a\n,\u0003", - "-\u0003-\u0003-\u0003-\u0003-\u0003-\u0005-\u0212\n-\u0003.\u0003.\u0005", - ".\u0216\n.\u0003/\u0003/\u0003/\u00030\u00030\u00050\u021d\n0\u0003", - "1\u00031\u00031\u00032\u00032\u00052\u0224\n2\u00033\u00033\u00033\u0003", - "4\u00034\u00054\u022b\n4\u00034\u00054\u022e\n4\u00035\u00035\u0003", - "5\u00035\u00055\u0234\n5\u00036\u00036\u00036\u00037\u00037\u00037\u0003", - "7\u00037\u00037\u00037\u00037\u00037\u00037\u00037\u00037\u00057\u0245", - "\n7\u00057\u0247\n7\u00037\u00037\u00037\u00037\u00037\u00037\u0007", - "7\u024f\n7\f7\u000e7\u0252\u000b7\u00038\u00038\u00058\u0256\n8\u0003", - "8\u00058\u0259\n8\u00039\u00039\u00039\u00039\u00059\u025f\n9\u0003", - ":\u0003:\u0003:\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003;\u0005", - ";\u026b\n;\u0005;\u026d\n;\u0003;\u0003;\u0003;\u0003;\u0003;\u0003", - ";\u0007;\u0275\n;\f;\u000e;\u0278\u000b;\u0003<\u0003<\u0005<\u027c", - "\n<\u0003=\u0003=\u0003=\u0003>\u0003>\u0005>\u0283\n>\u0003>\u0005", - ">\u0286\n>\u0003?\u0003?\u0003?\u0003@\u0003@\u0003@\u0003A\u0003A\u0005", - "A\u0290\nA\u0003B\u0003B\u0003B\u0003C\u0003C\u0003C\u0003C\u0003C\u0003", - "C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003", - "C\u0003C\u0003C\u0005C\u02a7\nC\u0005C\u02a9\nC\u0003C\u0003C\u0003", - "C\u0003C\u0003C\u0003C\u0007C\u02b1\nC\fC\u000eC\u02b4\u000bC\u0003", - "D\u0003D\u0005D\u02b8\nD\u0003D\u0005D\u02bb\nD\u0003E\u0003E\u0003", - "E\u0003F\u0003F\u0003F\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003", - "G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003", - "G\u0003G\u0003G\u0005G\u02d6\nG\u0005G\u02d8\nG\u0003G\u0003G\u0003", - "G\u0003G\u0003G\u0003G\u0007G\u02e0\nG\fG\u000eG\u02e3\u000bG\u0003", - "G\u0002\n>FNTlt\u0084\u008cH\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012", - "\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ", - "\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u0002", - "\u0004\u0004\u0002\t\u000f\'(\u0003\u0002\u0010\u001d\u0002\u0331\u0002", - "\u0095\u0003\u0002\u0002\u0002\u0004\u00c5\u0003\u0002\u0002\u0002\u0006", - "\u00c7\u0003\u0002\u0002\u0002\b\u0108\u0003\u0002\u0002\u0002\n\u010a", - "\u0003\u0002\u0002\u0002\f\u0114\u0003\u0002\u0002\u0002\u000e\u0116", - "\u0003\u0002\u0002\u0002\u0010\u0118\u0003\u0002\u0002\u0002\u0012\u011d", - "\u0003\u0002\u0002\u0002\u0014\u0129\u0003\u0002\u0002\u0002\u0016\u012e", - "\u0003\u0002\u0002\u0002\u0018\u0130\u0003\u0002\u0002\u0002\u001a\u0137", - "\u0003\u0002\u0002\u0002\u001c\u0139\u0003\u0002\u0002\u0002\u001e\u013b", - "\u0003\u0002\u0002\u0002 \u013d\u0003\u0002\u0002\u0002\"\u013f\u0003", - "\u0002\u0002\u0002$\u0141\u0003\u0002\u0002\u0002&\u0145\u0003\u0002", - "\u0002\u0002(\u0147\u0003\u0002\u0002\u0002*\u014b\u0003\u0002\u0002", - "\u0002,\u014e\u0003\u0002\u0002\u0002.\u0158\u0003\u0002\u0002\u0002", - "0\u015a\u0003\u0002\u0002\u00022\u015d\u0003\u0002\u0002\u00024\u0164", - "\u0003\u0002\u0002\u00026\u0167\u0003\u0002\u0002\u00028\u016e\u0003", - "\u0002\u0002\u0002:\u0175\u0003\u0002\u0002\u0002<\u0178\u0003\u0002", - "\u0002\u0002>\u018c\u0003\u0002\u0002\u0002@\u0199\u0003\u0002\u0002", - "\u0002B\u01a0\u0003\u0002\u0002\u0002D\u01a3\u0003\u0002\u0002\u0002", - "F\u01b3\u0003\u0002\u0002\u0002H\u01c0\u0003\u0002\u0002\u0002J\u01c7", - "\u0003\u0002\u0002\u0002L\u01ca\u0003\u0002\u0002\u0002N\u01dd\u0003", - "\u0002\u0002\u0002P\u01ea\u0003\u0002\u0002\u0002R\u01ee\u0003\u0002", - "\u0002\u0002T\u01fa\u0003\u0002\u0002\u0002V\u0207\u0003\u0002\u0002", - "\u0002X\u0211\u0003\u0002\u0002\u0002Z\u0213\u0003\u0002\u0002\u0002", - "\\\u0217\u0003\u0002\u0002\u0002^\u021a\u0003\u0002\u0002\u0002`\u021e", - "\u0003\u0002\u0002\u0002b\u0221\u0003\u0002\u0002\u0002d\u0225\u0003", - "\u0002\u0002\u0002f\u0228\u0003\u0002\u0002\u0002h\u022f\u0003\u0002", - "\u0002\u0002j\u0235\u0003\u0002\u0002\u0002l\u0246\u0003\u0002\u0002", - "\u0002n\u0253\u0003\u0002\u0002\u0002p\u025a\u0003\u0002\u0002\u0002", - "r\u0260\u0003\u0002\u0002\u0002t\u026c\u0003\u0002\u0002\u0002v\u0279", - "\u0003\u0002\u0002\u0002x\u027d\u0003\u0002\u0002\u0002z\u0280\u0003", - "\u0002\u0002\u0002|\u0287\u0003\u0002\u0002\u0002~\u028a\u0003\u0002", - "\u0002\u0002\u0080\u028d\u0003\u0002\u0002\u0002\u0082\u0291\u0003\u0002", - "\u0002\u0002\u0084\u02a8\u0003\u0002\u0002\u0002\u0086\u02b5\u0003\u0002", - "\u0002\u0002\u0088\u02bc\u0003\u0002\u0002\u0002\u008a\u02bf\u0003\u0002", - "\u0002\u0002\u008c\u02d7\u0003\u0002\u0002\u0002\u008e\u0090\u0005\u0010", - "\t\u0002\u008f\u008e\u0003\u0002\u0002\u0002\u0090\u0093\u0003\u0002", - "\u0002\u0002\u0091\u008f\u0003\u0002\u0002\u0002\u0091\u0092\u0003\u0002", - "\u0002\u0002\u0092\u0096\u0003\u0002\u0002\u0002\u0093\u0091\u0003\u0002", - "\u0002\u0002\u0094\u0096\u0005\u0004\u0003\u0002\u0095\u0091\u0003\u0002", - "\u0002\u0002\u0095\u0094\u0003\u0002\u0002\u0002\u0096\u0098\u0003\u0002", - "\u0002\u0002\u0097\u0099\u0005\u000e\b\u0002\u0098\u0097\u0003\u0002", - "\u0002\u0002\u0098\u0099\u0003\u0002\u0002\u0002\u0099\u009d\u0003\u0002", - "\u0002\u0002\u009a\u009c\u0007&\u0002\u0002\u009b\u009a\u0003\u0002", - "\u0002\u0002\u009c\u009f\u0003\u0002\u0002\u0002\u009d\u009b\u0003\u0002", - "\u0002\u0002\u009d\u009e\u0003\u0002\u0002\u0002\u009e\u00a0\u0003\u0002", - "\u0002\u0002\u009f\u009d\u0003\u0002\u0002\u0002\u00a0\u00a1\u0007\u0002", - "\u0002\u0003\u00a1\u0003\u0003\u0002\u0002\u0002\u00a2\u00a3\u00058", - "\u001d\u0002\u00a3\u00a4\u0005\u001a\u000e\u0002\u00a4\u00a5\u0005\"", - "\u0012\u0002\u00a5\u00a6\u0005> \u0002\u00a6\u00c6\u0003\u0002\u0002", - "\u0002\u00a7\u00a8\u0005@!\u0002\u00a8\u00a9\u0005\u001a\u000e\u0002", - "\u00a9\u00aa\u0005\"\u0012\u0002\u00aa\u00ab\u0005F$\u0002\u00ab\u00c6", - "\u0003\u0002\u0002\u0002\u00ac\u00ad\u0005H%\u0002\u00ad\u00ae\u0005", - "\u001a\u000e\u0002\u00ae\u00af\u0005\"\u0012\u0002\u00af\u00b0\u0005", - "N(\u0002\u00b0\u00c6\u0003\u0002\u0002\u0002\u00b1\u00b2\u0005\u0080", - "A\u0002\u00b2\u00b3\u0005\u001a\u000e\u0002\u00b3\u00b4\u0005\"\u0012", - "\u0002\u00b4\u00b5\u0005\u0084C\u0002\u00b5\u00c6\u0003\u0002\u0002", - "\u0002\u00b6\u00b7\u0005P)\u0002\u00b7\u00b8\u0005\u001a\u000e\u0002", - "\u00b8\u00b9\u0005\"\u0012\u0002\u00b9\u00ba\u0005T+\u0002\u00ba\u00c6", - "\u0003\u0002\u0002\u0002\u00bb\u00bc\u0005f4\u0002\u00bc\u00bd\u0005", - "\u001a\u000e\u0002\u00bd\u00be\u0005\"\u0012\u0002\u00be\u00bf\u0005", - "l7\u0002\u00bf\u00c6\u0003\u0002\u0002\u0002\u00c0\u00c1\u0005\u0086", - "D\u0002\u00c1\u00c2\u0005\u001a\u000e\u0002\u00c2\u00c3\u0005\"\u0012", - "\u0002\u00c3\u00c4\u0005\u008cG\u0002\u00c4\u00c6\u0003\u0002\u0002", - "\u0002\u00c5\u00a2\u0003\u0002\u0002\u0002\u00c5\u00a7\u0003\u0002\u0002", - "\u0002\u00c5\u00ac\u0003\u0002\u0002\u0002\u00c5\u00b1\u0003\u0002\u0002", - "\u0002\u00c5\u00b6\u0003\u0002\u0002\u0002\u00c5\u00bb\u0003\u0002\u0002", - "\u0002\u00c5\u00c0\u0003\u0002\u0002\u0002\u00c6\u0005\u0003\u0002\u0002", - "\u0002\u00c7\u00d0\u0007\u0003\u0002\u0002\u00c8\u00c9\u0005\b\u0005", - "\u0002\u00c9\u00ca\u0007\u0004\u0002\u0002\u00ca\u00cf\u0003\u0002\u0002", - "\u0002\u00cb\u00cc\u0005\b\u0005\u0002\u00cc\u00cd\u0007\u0005\u0002", - "\u0002\u00cd\u00cf\u0003\u0002\u0002\u0002\u00ce\u00c8\u0003\u0002\u0002", - "\u0002\u00ce\u00cb\u0003\u0002\u0002\u0002\u00cf\u00d2\u0003\u0002\u0002", - "\u0002\u00d0\u00ce\u0003\u0002\u0002\u0002\u00d0\u00d1\u0003\u0002\u0002", - "\u0002\u00d1\u00d3\u0003\u0002\u0002\u0002\u00d2\u00d0\u0003\u0002\u0002", - "\u0002\u00d3\u00d4\u0005\b\u0005\u0002\u00d4\u00d5\u0007\u0003\u0002", - "\u0002\u00d5\u0007\u0003\u0002\u0002\u0002\u00d6\u00d8\u0007%\u0002", - "\u0002\u00d7\u00d6\u0003\u0002\u0002\u0002\u00d8\u00d9\u0003\u0002\u0002", - "\u0002\u00d9\u00d7\u0003\u0002\u0002\u0002\u00d9\u00da\u0003\u0002\u0002", - "\u0002\u00da\u0109\u0003\u0002\u0002\u0002\u00db\u00dd\u0007\u0006\u0002", - "\u0002\u00dc\u00de\u0007%\u0002\u0002\u00dd\u00dc\u0003\u0002\u0002", - "\u0002\u00de\u00df\u0003\u0002\u0002\u0002\u00df\u00dd\u0003\u0002\u0002", - "\u0002\u00df\u00e0\u0003\u0002\u0002\u0002\u00e0\u0109\u0003\u0002\u0002", - "\u0002\u00e1\u00e3\u0007\u0007\u0002\u0002\u00e2\u00e4\u0007%\u0002", - "\u0002\u00e3\u00e2\u0003\u0002\u0002\u0002\u00e4\u00e5\u0003\u0002\u0002", - "\u0002\u00e5\u00e3\u0003\u0002\u0002\u0002\u00e5\u00e6\u0003\u0002\u0002", - "\u0002\u00e6\u0109\u0003\u0002\u0002\u0002\u00e7\u00e9\u0007\b\u0002", - "\u0002\u00e8\u00ea\u0007%\u0002\u0002\u00e9\u00e8\u0003\u0002\u0002", - "\u0002\u00ea\u00eb\u0003\u0002\u0002\u0002\u00eb\u00e9\u0003\u0002\u0002", - "\u0002\u00eb\u00ec\u0003\u0002\u0002\u0002\u00ec\u0109\u0003\u0002\u0002", - "\u0002\u00ed\u00ef\u0007%\u0002\u0002\u00ee\u00ed\u0003\u0002\u0002", - "\u0002\u00ef\u00f0\u0003\u0002\u0002\u0002\u00f0\u00ee\u0003\u0002\u0002", - "\u0002\u00f0\u00f1\u0003\u0002\u0002\u0002\u00f1\u00f2\u0003\u0002\u0002", - "\u0002\u00f2\u0109\u0007\u0007\u0002\u0002\u00f3\u00f5\u0007\u0006\u0002", - "\u0002\u00f4\u00f6\u0007%\u0002\u0002\u00f5\u00f4\u0003\u0002\u0002", - "\u0002\u00f6\u00f7\u0003\u0002\u0002\u0002\u00f7\u00f5\u0003\u0002\u0002", - "\u0002\u00f7\u00f8\u0003\u0002\u0002\u0002\u00f8\u00f9\u0003\u0002\u0002", - "\u0002\u00f9\u0109\u0007\u0007\u0002\u0002\u00fa\u00fc\u0007\u0007\u0002", - "\u0002\u00fb\u00fd\u0007%\u0002\u0002\u00fc\u00fb\u0003\u0002\u0002", - "\u0002\u00fd\u00fe\u0003\u0002\u0002\u0002\u00fe\u00fc\u0003\u0002\u0002", - "\u0002\u00fe\u00ff\u0003\u0002\u0002\u0002\u00ff\u0100\u0003\u0002\u0002", - "\u0002\u0100\u0109\u0007\u0007\u0002\u0002\u0101\u0103\u0007\b\u0002", - "\u0002\u0102\u0104\u0007%\u0002\u0002\u0103\u0102\u0003\u0002\u0002", - "\u0002\u0104\u0105\u0003\u0002\u0002\u0002\u0105\u0103\u0003\u0002\u0002", - "\u0002\u0105\u0106\u0003\u0002\u0002\u0002\u0106\u0107\u0003\u0002\u0002", - "\u0002\u0107\u0109\u0007\u0007\u0002\u0002\u0108\u00d7\u0003\u0002\u0002", - "\u0002\u0108\u00db\u0003\u0002\u0002\u0002\u0108\u00e1\u0003\u0002\u0002", - "\u0002\u0108\u00e7\u0003\u0002\u0002\u0002\u0108\u00ee\u0003\u0002\u0002", - "\u0002\u0108\u00f3\u0003\u0002\u0002\u0002\u0108\u00fa\u0003\u0002\u0002", - "\u0002\u0108\u0101\u0003\u0002\u0002\u0002\u0109\t\u0003\u0002\u0002", - "\u0002\u010a\u010e\u0007\u0003\u0002\u0002\u010b\u010f\u0007%\u0002", - "\u0002\u010c\u010f\u0005\f\u0007\u0002\u010d\u010f\u0007$\u0002\u0002", - "\u010e\u010b\u0003\u0002\u0002\u0002\u010e\u010c\u0003\u0002\u0002\u0002", - "\u010e\u010d\u0003\u0002\u0002\u0002\u010f\u0110\u0003\u0002\u0002\u0002", - "\u0110\u010e\u0003\u0002\u0002\u0002\u0110\u0111\u0003\u0002\u0002\u0002", - "\u0111\u0112\u0003\u0002\u0002\u0002\u0112\u0113\u0007\u0003\u0002\u0002", - "\u0113\u000b\u0003\u0002\u0002\u0002\u0114\u0115\t\u0002\u0002\u0002", - "\u0115\r\u0003\u0002\u0002\u0002\u0116\u0117\u0007\t\u0002\u0002\u0117", - "\u000f\u0003\u0002\u0002\u0002\u0118\u0119\u0007&\u0002\u0002\u0119", - "\u0011\u0003\u0002\u0002\u0002\u011a\u011e\u0007%\u0002\u0002\u011b", - "\u011e\u0005\f\u0007\u0002\u011c\u011e\u0007$\u0002\u0002\u011d\u011a", - "\u0003\u0002\u0002\u0002\u011d\u011b\u0003\u0002\u0002\u0002\u011d\u011c", - "\u0003\u0002\u0002\u0002\u011e\u011f\u0003\u0002\u0002\u0002\u011f\u011d", - "\u0003\u0002\u0002\u0002\u011f\u0120\u0003\u0002\u0002\u0002\u0120\u0013", - "\u0003\u0002\u0002\u0002\u0121\u0122\u0005\u0012\n\u0002\u0122\u0123", - "\u0007\u0004\u0002\u0002\u0123\u0128\u0003\u0002\u0002\u0002\u0124\u0125", - "\u0005\u0012\n\u0002\u0125\u0126\u0007\u0005\u0002\u0002\u0126\u0128", - "\u0003\u0002\u0002\u0002\u0127\u0121\u0003\u0002\u0002\u0002\u0127\u0124", - "\u0003\u0002\u0002\u0002\u0128\u012b\u0003\u0002\u0002\u0002\u0129\u0127", - "\u0003\u0002\u0002\u0002\u0129\u012a\u0003\u0002\u0002\u0002\u012a\u012c", - "\u0003\u0002\u0002\u0002\u012b\u0129\u0003\u0002\u0002\u0002\u012c\u012d", - "\u0005\u0012\n\u0002\u012d\u0015\u0003\u0002\u0002\u0002\u012e\u012f", - "\t\u0003\u0002\u0002\u012f\u0017\u0003\u0002\u0002\u0002\u0130\u0131", - "\u0007\u0003\u0002\u0002\u0131\u0133\u0005\u0016\f\u0002\u0132\u0134", - "\u0005\u0014\u000b\u0002\u0133\u0132\u0003\u0002\u0002\u0002\u0133\u0134", - "\u0003\u0002\u0002\u0002\u0134\u0135\u0003\u0002\u0002\u0002\u0135\u0136", - "\u0007\u0003\u0002\u0002\u0136\u0019\u0003\u0002\u0002\u0002\u0137\u0138", - "\u0007\u001e\u0002\u0002\u0138\u001b\u0003\u0002\u0002\u0002\u0139\u013a", - "\u0007\u001f\u0002\u0002\u013a\u001d\u0003\u0002\u0002\u0002\u013b\u013c", - "\u0007 \u0002\u0002\u013c\u001f\u0003\u0002\u0002\u0002\u013d\u013e", - "\u0007!\u0002\u0002\u013e!\u0003\u0002\u0002\u0002\u013f\u0140\u0007", - "\"\u0002\u0002\u0140#\u0003\u0002\u0002\u0002\u0141\u0142\u0007#\u0002", - "\u0002\u0142%\u0003\u0002\u0002\u0002\u0143\u0146\u0005\u001e\u0010", - "\u0002\u0144\u0146\u0005 \u0011\u0002\u0145\u0143\u0003\u0002\u0002", - "\u0002\u0145\u0144\u0003\u0002\u0002\u0002\u0146\'\u0003\u0002\u0002", - "\u0002\u0147\u0149\u0007)\u0002\u0002\u0148\u014a\u0005*\u0016\u0002", - "\u0149\u0148\u0003\u0002\u0002\u0002\u0149\u014a\u0003\u0002\u0002\u0002", - "\u014a)\u0003\u0002\u0002\u0002\u014b\u014c\u0005\u0006\u0004\u0002", - "\u014c\u014d\u0007$\u0002\u0002\u014d+\u0003\u0002\u0002\u0002\u014e", - "\u0150\u0007*\u0002\u0002\u014f\u0151\u0005.\u0018\u0002\u0150\u014f", - "\u0003\u0002\u0002\u0002\u0150\u0151\u0003\u0002\u0002\u0002\u0151-", - "\u0003\u0002\u0002\u0002\u0152\u0153\u0005\n\u0006\u0002\u0153\u0154", - "\u0007$\u0002\u0002\u0154\u0159\u0003\u0002\u0002\u0002\u0155\u0156", - "\u0005\u0006\u0004\u0002\u0156\u0157\u0007$\u0002\u0002\u0157\u0159", - "\u0003\u0002\u0002\u0002\u0158\u0152\u0003\u0002\u0002\u0002\u0158\u0155", - "\u0003\u0002\u0002\u0002\u0159/\u0003\u0002\u0002\u0002\u015a\u015b", - "\u0007+\u0002\u0002\u015b\u015c\u00052\u001a\u0002\u015c1\u0003\u0002", - "\u0002\u0002\u015d\u0162\u0005\u001c\u000f\u0002\u015e\u015f\u0005\u0006", - "\u0004\u0002\u015f\u0160\u0007$\u0002\u0002\u0160\u0163\u0003\u0002", - "\u0002\u0002\u0161\u0163\u0007,\u0002\u0002\u0162\u015e\u0003\u0002", - "\u0002\u0002\u0162\u0161\u0003\u0002\u0002\u0002\u01633\u0003\u0002", - "\u0002\u0002\u0164\u0165\u0007-\u0002\u0002\u0165\u0166\u00056\u001c", - "\u0002\u01665\u0003\u0002\u0002\u0002\u0167\u016c\u0005\u001c\u000f", - "\u0002\u0168\u0169\u0005\u0006\u0004\u0002\u0169\u016a\u0007$\u0002", - "\u0002\u016a\u016d\u0003\u0002\u0002\u0002\u016b\u016d\u0007.\u0002", - "\u0002\u016c\u0168\u0003\u0002\u0002\u0002\u016c\u016b\u0003\u0002\u0002", - "\u0002\u016d7\u0003\u0002\u0002\u0002\u016e\u0170\u0007/\u0002\u0002", - "\u016f\u0171\u0005<\u001f\u0002\u0170\u016f\u0003\u0002\u0002\u0002", - "\u0170\u0171\u0003\u0002\u0002\u0002\u0171\u0173\u0003\u0002\u0002\u0002", - "\u0172\u0174\u0005:\u001e\u0002\u0173\u0172\u0003\u0002\u0002\u0002", - "\u0173\u0174\u0003\u0002\u0002\u0002\u01749\u0003\u0002\u0002\u0002", - "\u0175\u0176\u0005\u001c\u000f\u0002\u0176\u0177\u0005\u0080A\u0002", - "\u0177;\u0003\u0002\u0002\u0002\u0178\u0179\u0005$\u0013\u0002\u0179", - "\u017a\u0005> \u0002\u017a=\u0003\u0002\u0002\u0002\u017b\u017c\b \u0001", - "\u0002\u017c\u017d\u0007\'\u0002\u0002\u017d\u017e\u0005> \u0002\u017e", - "\u017f\u0007(\u0002\u0002\u017f\u018d\u0003\u0002\u0002\u0002\u0180", - "\u018b\u0005,\u0017\u0002\u0181\u018b\u0005Z.\u0002\u0182\u018b\u0005", - "^0\u0002\u0183\u018b\u0005V,\u0002\u0184\u018b\u0005(\u0015\u0002\u0185", - "\u018b\u0005P)\u0002\u0186\u018b\u0005b2\u0002\u0187\u018b\u0005f4\u0002", - "\u0188\u018b\u0005n8\u0002\u0189\u018b\u0005\u0018\r\u0002\u018a\u0180", - "\u0003\u0002\u0002\u0002\u018a\u0181\u0003\u0002\u0002\u0002\u018a\u0182", - "\u0003\u0002\u0002\u0002\u018a\u0183\u0003\u0002\u0002\u0002\u018a\u0184", - "\u0003\u0002\u0002\u0002\u018a\u0185\u0003\u0002\u0002\u0002\u018a\u0186", - "\u0003\u0002\u0002\u0002\u018a\u0187\u0003\u0002\u0002\u0002\u018a\u0188", - "\u0003\u0002\u0002\u0002\u018a\u0189\u0003\u0002\u0002\u0002\u018b\u018d", - "\u0003\u0002\u0002\u0002\u018c\u017b\u0003\u0002\u0002\u0002\u018c\u018a", - "\u0003\u0002\u0002\u0002\u018d\u0196\u0003\u0002\u0002\u0002\u018e\u018f", - "\f\u0005\u0002\u0002\u018f\u0190\u0005&\u0014\u0002\u0190\u0191\u0005", - "> \u0006\u0191\u0195\u0003\u0002\u0002\u0002\u0192\u0193\f\u0003\u0002", - "\u0002\u0193\u0195\u0007$\u0002\u0002\u0194\u018e\u0003\u0002\u0002", - "\u0002\u0194\u0192\u0003\u0002\u0002\u0002\u0195\u0198\u0003\u0002\u0002", - "\u0002\u0196\u0194\u0003\u0002\u0002\u0002\u0196\u0197\u0003\u0002\u0002", - "\u0002\u0197?\u0003\u0002\u0002\u0002\u0198\u0196\u0003\u0002\u0002", - "\u0002\u0199\u019b\u00070\u0002\u0002\u019a\u019c\u0005D#\u0002\u019b", - "\u019a\u0003\u0002\u0002\u0002\u019b\u019c\u0003\u0002\u0002\u0002\u019c", - "\u019e\u0003\u0002\u0002\u0002\u019d\u019f\u0005B\"\u0002\u019e\u019d", - "\u0003\u0002\u0002\u0002\u019e\u019f\u0003\u0002\u0002\u0002\u019fA", - "\u0003\u0002\u0002\u0002\u01a0\u01a1\u0005\u001c\u000f\u0002\u01a1\u01a2", - "\u0005\u0080A\u0002\u01a2C\u0003\u0002\u0002\u0002\u01a3\u01a4\u0005", - "$\u0013\u0002\u01a4\u01a5\u0005F$\u0002\u01a5E\u0003\u0002\u0002\u0002", - "\u01a6\u01a7\b$\u0001\u0002\u01a7\u01a8\u0007\'\u0002\u0002\u01a8\u01a9", - "\u0005F$\u0002\u01a9\u01aa\u0007(\u0002\u0002\u01aa\u01b4\u0003\u0002", - "\u0002\u0002\u01ab\u01b2\u0005,\u0017\u0002\u01ac\u01b2\u0005Z.\u0002", - "\u01ad\u01b2\u0005^0\u0002\u01ae\u01b2\u0005V,\u0002\u01af\u01b2\u0005", - "(\u0015\u0002\u01b0\u01b2\u0005P)\u0002\u01b1\u01ab\u0003\u0002\u0002", - "\u0002\u01b1\u01ac\u0003\u0002\u0002\u0002\u01b1\u01ad\u0003\u0002\u0002", - "\u0002\u01b1\u01ae\u0003\u0002\u0002\u0002\u01b1\u01af\u0003\u0002\u0002", - "\u0002\u01b1\u01b0\u0003\u0002\u0002\u0002\u01b2\u01b4\u0003\u0002\u0002", - "\u0002\u01b3\u01a6\u0003\u0002\u0002\u0002\u01b3\u01b1\u0003\u0002\u0002", - "\u0002\u01b4\u01bd\u0003\u0002\u0002\u0002\u01b5\u01b6\f\u0005\u0002", - "\u0002\u01b6\u01b7\u0005&\u0014\u0002\u01b7\u01b8\u0005F$\u0006\u01b8", - "\u01bc\u0003\u0002\u0002\u0002\u01b9\u01ba\f\u0003\u0002\u0002\u01ba", - "\u01bc\u0007$\u0002\u0002\u01bb\u01b5\u0003\u0002\u0002\u0002\u01bb", - "\u01b9\u0003\u0002\u0002\u0002\u01bc\u01bf\u0003\u0002\u0002\u0002\u01bd", - "\u01bb\u0003\u0002\u0002\u0002\u01bd\u01be\u0003\u0002\u0002\u0002\u01be", - "G\u0003\u0002\u0002\u0002\u01bf\u01bd\u0003\u0002\u0002\u0002\u01c0", - "\u01c2\u00071\u0002\u0002\u01c1\u01c3\u0005L\'\u0002\u01c2\u01c1\u0003", - "\u0002\u0002\u0002\u01c2\u01c3\u0003\u0002\u0002\u0002\u01c3\u01c5\u0003", - "\u0002\u0002\u0002\u01c4\u01c6\u0005J&\u0002\u01c5\u01c4\u0003\u0002", - "\u0002\u0002\u01c5\u01c6\u0003\u0002\u0002\u0002\u01c6I\u0003\u0002", - "\u0002\u0002\u01c7\u01c8\u0005\u001c\u000f\u0002\u01c8\u01c9\u0005\u0080", - "A\u0002\u01c9K\u0003\u0002\u0002\u0002\u01ca\u01cb\u0005$\u0013\u0002", - "\u01cb\u01cc\u0005N(\u0002\u01ccM\u0003\u0002\u0002\u0002\u01cd\u01ce", - "\b(\u0001\u0002\u01ce\u01cf\u0007\'\u0002\u0002\u01cf\u01d0\u0005N(", - "\u0002\u01d0\u01d1\u0007(\u0002\u0002\u01d1\u01de\u0003\u0002\u0002", - "\u0002\u01d2\u01dc\u0005,\u0017\u0002\u01d3\u01dc\u0005Z.\u0002\u01d4", - "\u01dc\u0005^0\u0002\u01d5\u01dc\u0005(\u0015\u0002\u01d6\u01dc\u0005", - "P)\u0002\u01d7\u01dc\u0005b2\u0002\u01d8\u01dc\u0005f4\u0002\u01d9\u01dc", - "\u0005n8\u0002\u01da\u01dc\u0005\u0018\r\u0002\u01db\u01d2\u0003\u0002", - "\u0002\u0002\u01db\u01d3\u0003\u0002\u0002\u0002\u01db\u01d4\u0003\u0002", - "\u0002\u0002\u01db\u01d5\u0003\u0002\u0002\u0002\u01db\u01d6\u0003\u0002", - "\u0002\u0002\u01db\u01d7\u0003\u0002\u0002\u0002\u01db\u01d8\u0003\u0002", - "\u0002\u0002\u01db\u01d9\u0003\u0002\u0002\u0002\u01db\u01da\u0003\u0002", - "\u0002\u0002\u01dc\u01de\u0003\u0002\u0002\u0002\u01dd\u01cd\u0003\u0002", - "\u0002\u0002\u01dd\u01db\u0003\u0002\u0002\u0002\u01de\u01e7\u0003\u0002", - "\u0002\u0002\u01df\u01e0\f\u0005\u0002\u0002\u01e0\u01e1\u0005&\u0014", - "\u0002\u01e1\u01e2\u0005N(\u0006\u01e2\u01e6\u0003\u0002\u0002\u0002", - "\u01e3\u01e4\f\u0003\u0002\u0002\u01e4\u01e6\u0007$\u0002\u0002\u01e5", - "\u01df\u0003\u0002\u0002\u0002\u01e5\u01e3\u0003\u0002\u0002\u0002\u01e6", - "\u01e9\u0003\u0002\u0002\u0002\u01e7\u01e5\u0003\u0002\u0002\u0002\u01e7", - "\u01e8\u0003\u0002\u0002\u0002\u01e8O\u0003\u0002\u0002\u0002\u01e9", - "\u01e7\u0003\u0002\u0002\u0002\u01ea\u01ec\u00072\u0002\u0002\u01eb", - "\u01ed\u0005R*\u0002\u01ec\u01eb\u0003\u0002\u0002\u0002\u01ec\u01ed", - "\u0003\u0002\u0002\u0002\u01edQ\u0003\u0002\u0002\u0002\u01ee\u01ef", - "\u0005$\u0013\u0002\u01ef\u01f0\u0005T+\u0002\u01f0S\u0003\u0002\u0002", - "\u0002\u01f1\u01f2\b+\u0001\u0002\u01f2\u01f3\u0007\'\u0002\u0002\u01f3", - "\u01f4\u0005T+\u0002\u01f4\u01f5\u0007(\u0002\u0002\u01f5\u01fb\u0003", - "\u0002\u0002\u0002\u01f6\u01f9\u0005V,\u0002\u01f7\u01f9\u0005(\u0015", - "\u0002\u01f8\u01f6\u0003\u0002\u0002\u0002\u01f8\u01f7\u0003\u0002\u0002", - "\u0002\u01f9\u01fb\u0003\u0002\u0002\u0002\u01fa\u01f1\u0003\u0002\u0002", - "\u0002\u01fa\u01f8\u0003\u0002\u0002\u0002\u01fb\u0204\u0003\u0002\u0002", - "\u0002\u01fc\u01fd\f\u0005\u0002\u0002\u01fd\u01fe\u0005&\u0014\u0002", - "\u01fe\u01ff\u0005T+\u0006\u01ff\u0203\u0003\u0002\u0002\u0002\u0200", - "\u0201\f\u0003\u0002\u0002\u0201\u0203\u0007$\u0002\u0002\u0202\u01fc", - "\u0003\u0002\u0002\u0002\u0202\u0200\u0003\u0002\u0002\u0002\u0203\u0206", - "\u0003\u0002\u0002\u0002\u0204\u0202\u0003\u0002\u0002\u0002\u0204\u0205", - "\u0003\u0002\u0002\u0002\u0205U\u0003\u0002\u0002\u0002\u0206\u0204", - "\u0003\u0002\u0002\u0002\u0207\u0209\u00073\u0002\u0002\u0208\u020a", - "\u0005X-\u0002\u0209\u0208\u0003\u0002\u0002\u0002\u0209\u020a\u0003", - "\u0002\u0002\u0002\u020aW\u0003\u0002\u0002\u0002\u020b\u020c\u0005", - "\n\u0006\u0002\u020c\u020d\u0007$\u0002\u0002\u020d\u0212\u0003\u0002", - "\u0002\u0002\u020e\u020f\u0005\u0006\u0004\u0002\u020f\u0210\u0007$", - "\u0002\u0002\u0210\u0212\u0003\u0002\u0002\u0002\u0211\u020b\u0003\u0002", - "\u0002\u0002\u0211\u020e\u0003\u0002\u0002\u0002\u0212Y\u0003\u0002", - "\u0002\u0002\u0213\u0215\u00074\u0002\u0002\u0214\u0216\u0005\\/\u0002", - "\u0215\u0214\u0003\u0002\u0002\u0002\u0215\u0216\u0003\u0002\u0002\u0002", - "\u0216[\u0003\u0002\u0002\u0002\u0217\u0218\u0005\u0006\u0004\u0002", - "\u0218\u0219\u0007$\u0002\u0002\u0219]\u0003\u0002\u0002\u0002\u021a", - "\u021c\u00075\u0002\u0002\u021b\u021d\u0005`1\u0002\u021c\u021b\u0003", - "\u0002\u0002\u0002\u021c\u021d\u0003\u0002\u0002\u0002\u021d_\u0003", - "\u0002\u0002\u0002\u021e\u021f\u0005\u0006\u0004\u0002\u021f\u0220\u0007", - "$\u0002\u0002\u0220a\u0003\u0002\u0002\u0002\u0221\u0223\u00076\u0002", - "\u0002\u0222\u0224\u0005d3\u0002\u0223\u0222\u0003\u0002\u0002\u0002", - "\u0223\u0224\u0003\u0002\u0002\u0002\u0224c\u0003\u0002\u0002\u0002", - "\u0225\u0226\u0005\n\u0006\u0002\u0226\u0227\u0007$\u0002\u0002\u0227", - "e\u0003\u0002\u0002\u0002\u0228\u022a\u00077\u0002\u0002\u0229\u022b", - "\u0005j6\u0002\u022a\u0229\u0003\u0002\u0002\u0002\u022a\u022b\u0003", - "\u0002\u0002\u0002\u022b\u022d\u0003\u0002\u0002\u0002\u022c\u022e\u0005", - "h5\u0002\u022d\u022c\u0003\u0002\u0002\u0002\u022d\u022e\u0003\u0002", - "\u0002\u0002\u022eg\u0003\u0002\u0002\u0002\u022f\u0233\u0005\u001c", - "\u000f\u0002\u0230\u0234\u0005\u0080A\u0002\u0231\u0234\u00058\u001d", - "\u0002\u0232\u0234\u0005H%\u0002\u0233\u0230\u0003\u0002\u0002\u0002", - "\u0233\u0231\u0003\u0002\u0002\u0002\u0233\u0232\u0003\u0002\u0002\u0002", - "\u0234i\u0003\u0002\u0002\u0002\u0235\u0236\u0005$\u0013\u0002\u0236", - "\u0237\u0005l7\u0002\u0237k\u0003\u0002\u0002\u0002\u0238\u0239\b7\u0001", - "\u0002\u0239\u023a\u0007\'\u0002\u0002\u023a\u023b\u0005l7\u0002\u023b", - "\u023c\u0007(\u0002\u0002\u023c\u0247\u0003\u0002\u0002\u0002\u023d", - "\u0245\u0005,\u0017\u0002\u023e\u0245\u0005Z.\u0002\u023f\u0245\u0005", - "^0\u0002\u0240\u0245\u0005V,\u0002\u0241\u0245\u0005(\u0015\u0002\u0242", - "\u0245\u0005z>\u0002\u0243\u0245\u0005\u0018\r\u0002\u0244\u023d\u0003", - "\u0002\u0002\u0002\u0244\u023e\u0003\u0002\u0002\u0002\u0244\u023f\u0003", - "\u0002\u0002\u0002\u0244\u0240\u0003\u0002\u0002\u0002\u0244\u0241\u0003", - "\u0002\u0002\u0002\u0244\u0242\u0003\u0002\u0002\u0002\u0244\u0243\u0003", - "\u0002\u0002\u0002\u0245\u0247\u0003\u0002\u0002\u0002\u0246\u0238\u0003", - "\u0002\u0002\u0002\u0246\u0244\u0003\u0002\u0002\u0002\u0247\u0250\u0003", - "\u0002\u0002\u0002\u0248\u0249\f\u0005\u0002\u0002\u0249\u024a\u0005", - "&\u0014\u0002\u024a\u024b\u0005l7\u0006\u024b\u024f\u0003\u0002\u0002", - "\u0002\u024c\u024d\f\u0003\u0002\u0002\u024d\u024f\u0007$\u0002\u0002", - "\u024e\u0248\u0003\u0002\u0002\u0002\u024e\u024c\u0003\u0002\u0002\u0002", - "\u024f\u0252\u0003\u0002\u0002\u0002\u0250\u024e\u0003\u0002\u0002\u0002", - "\u0250\u0251\u0003\u0002\u0002\u0002\u0251m\u0003\u0002\u0002\u0002", - "\u0252\u0250\u0003\u0002\u0002\u0002\u0253\u0255\u00078\u0002\u0002", - "\u0254\u0256\u0005r:\u0002\u0255\u0254\u0003\u0002\u0002\u0002\u0255", - "\u0256\u0003\u0002\u0002\u0002\u0256\u0258\u0003\u0002\u0002\u0002\u0257", - "\u0259\u0005p9\u0002\u0258\u0257\u0003\u0002\u0002\u0002\u0258\u0259", - "\u0003\u0002\u0002\u0002\u0259o\u0003\u0002\u0002\u0002\u025a\u025e", - "\u0005\u001c\u000f\u0002\u025b\u025f\u00058\u001d\u0002\u025c\u025f", - "\u0005H%\u0002\u025d\u025f\u0005H%\u0002\u025e\u025b\u0003\u0002\u0002", - "\u0002\u025e\u025c\u0003\u0002\u0002\u0002\u025e\u025d\u0003\u0002\u0002", - "\u0002\u025fq\u0003\u0002\u0002\u0002\u0260\u0261\u0005$\u0013\u0002", - "\u0261\u0262\u0005t;\u0002\u0262s\u0003\u0002\u0002\u0002\u0263\u0264", - "\b;\u0001\u0002\u0264\u0265\u0007\'\u0002\u0002\u0265\u0266\u0005t;", - "\u0002\u0266\u0267\u0007(\u0002\u0002\u0267\u026d\u0003\u0002\u0002", - "\u0002\u0268\u026b\u0005\u0018\r\u0002\u0269\u026b\u0005v<\u0002\u026a", - "\u0268\u0003\u0002\u0002\u0002\u026a\u0269\u0003\u0002\u0002\u0002\u026b", - "\u026d\u0003\u0002\u0002\u0002\u026c\u0263\u0003\u0002\u0002\u0002\u026c", - "\u026a\u0003\u0002\u0002\u0002\u026d\u0276\u0003\u0002\u0002\u0002\u026e", - "\u026f\f\u0005\u0002\u0002\u026f\u0270\u0005&\u0014\u0002\u0270\u0271", - "\u0005t;\u0006\u0271\u0275\u0003\u0002\u0002\u0002\u0272\u0273\f\u0003", - "\u0002\u0002\u0273\u0275\u0007$\u0002\u0002\u0274\u026e\u0003\u0002", - "\u0002\u0002\u0274\u0272\u0003\u0002\u0002\u0002\u0275\u0278\u0003\u0002", - "\u0002\u0002\u0276\u0274\u0003\u0002\u0002\u0002\u0276\u0277\u0003\u0002", - "\u0002\u0002\u0277u\u0003\u0002\u0002\u0002\u0278\u0276\u0003\u0002", - "\u0002\u0002\u0279\u027b\u00079\u0002\u0002\u027a\u027c\u0005x=\u0002", - "\u027b\u027a\u0003\u0002\u0002\u0002\u027b\u027c\u0003\u0002\u0002\u0002", - "\u027cw\u0003\u0002\u0002\u0002\u027d\u027e\u0005\n\u0006\u0002\u027e", - "\u027f\u0007$\u0002\u0002\u027fy\u0003\u0002\u0002\u0002\u0280\u0282", - "\u0007:\u0002\u0002\u0281\u0283\u0005~@\u0002\u0282\u0281\u0003\u0002", - "\u0002\u0002\u0282\u0283\u0003\u0002\u0002\u0002\u0283\u0285\u0003\u0002", - "\u0002\u0002\u0284\u0286\u0005|?\u0002\u0285\u0284\u0003\u0002\u0002", - "\u0002\u0285\u0286\u0003\u0002\u0002\u0002\u0286{\u0003\u0002\u0002", - "\u0002\u0287\u0288\u0005\u001c\u000f\u0002\u0288\u0289\u0005f4\u0002", - "\u0289}\u0003\u0002\u0002\u0002\u028a\u028b\u0005\n\u0006\u0002\u028b", - "\u028c\u0007$\u0002\u0002\u028c\u007f\u0003\u0002\u0002\u0002\u028d", - "\u028f\u0007;\u0002\u0002\u028e\u0290\u0005\u0082B\u0002\u028f\u028e", - "\u0003\u0002\u0002\u0002\u028f\u0290\u0003\u0002\u0002\u0002\u0290\u0081", - "\u0003\u0002\u0002\u0002\u0291\u0292\u0005$\u0013\u0002\u0292\u0293", - "\u0005\u0084C\u0002\u0293\u0083\u0003\u0002\u0002\u0002\u0294\u0295", - "\bC\u0001\u0002\u0295\u0296\u0007\'\u0002\u0002\u0296\u0297\u0005\u0084", - "C\u0002\u0297\u0298\u0007(\u0002\u0002\u0298\u02a9\u0003\u0002\u0002", - "\u0002\u0299\u02a7\u0005,\u0017\u0002\u029a\u02a7\u0005Z.\u0002\u029b", - "\u02a7\u0005^0\u0002\u029c\u02a7\u0005(\u0015\u0002\u029d\u02a7\u0005", - "0\u0019\u0002\u029e\u02a7\u00054\u001b\u0002\u029f\u02a7\u00058\u001d", - "\u0002\u02a0\u02a7\u0005@!\u0002\u02a1\u02a7\u0005H%\u0002\u02a2\u02a7", - "\u0005f4\u0002\u02a3\u02a7\u0005b2\u0002\u02a4\u02a7\u0005\u0018\r\u0002", - "\u02a5\u02a7\u0005\u0086D\u0002\u02a6\u0299\u0003\u0002\u0002\u0002", - "\u02a6\u029a\u0003\u0002\u0002\u0002\u02a6\u029b\u0003\u0002\u0002\u0002", - "\u02a6\u029c\u0003\u0002\u0002\u0002\u02a6\u029d\u0003\u0002\u0002\u0002", - "\u02a6\u029e\u0003\u0002\u0002\u0002\u02a6\u029f\u0003\u0002\u0002\u0002", - "\u02a6\u02a0\u0003\u0002\u0002\u0002\u02a6\u02a1\u0003\u0002\u0002\u0002", - "\u02a6\u02a2\u0003\u0002\u0002\u0002\u02a6\u02a3\u0003\u0002\u0002\u0002", - "\u02a6\u02a4\u0003\u0002\u0002\u0002\u02a6\u02a5\u0003\u0002\u0002\u0002", - "\u02a7\u02a9\u0003\u0002\u0002\u0002\u02a8\u0294\u0003\u0002\u0002\u0002", - "\u02a8\u02a6\u0003\u0002\u0002\u0002\u02a9\u02b2\u0003\u0002\u0002\u0002", - "\u02aa\u02ab\f\u0005\u0002\u0002\u02ab\u02ac\u0005&\u0014\u0002\u02ac", - "\u02ad\u0005\u0084C\u0006\u02ad\u02b1\u0003\u0002\u0002\u0002\u02ae", - "\u02af\f\u0003\u0002\u0002\u02af\u02b1\u0007$\u0002\u0002\u02b0\u02aa", - "\u0003\u0002\u0002\u0002\u02b0\u02ae\u0003\u0002\u0002\u0002\u02b1\u02b4", - "\u0003\u0002\u0002\u0002\u02b2\u02b0\u0003\u0002\u0002\u0002\u02b2\u02b3", - "\u0003\u0002\u0002\u0002\u02b3\u0085\u0003\u0002\u0002\u0002\u02b4\u02b2", - "\u0003\u0002\u0002\u0002\u02b5\u02b7\u0007<\u0002\u0002\u02b6\u02b8", - "\u0005\u008aF\u0002\u02b7\u02b6\u0003\u0002\u0002\u0002\u02b7\u02b8", - "\u0003\u0002\u0002\u0002\u02b8\u02ba\u0003\u0002\u0002\u0002\u02b9\u02bb", - "\u0005\u0088E\u0002\u02ba\u02b9\u0003\u0002\u0002\u0002\u02ba\u02bb", - "\u0003\u0002\u0002\u0002\u02bb\u0087\u0003\u0002\u0002\u0002\u02bc\u02bd", - "\u0005\u001c\u000f\u0002\u02bd\u02be\u0005\u0080A\u0002\u02be\u0089", - "\u0003\u0002\u0002\u0002\u02bf\u02c0\u0005$\u0013\u0002\u02c0\u02c1", - "\u0005\u008cG\u0002\u02c1\u008b\u0003\u0002\u0002\u0002\u02c2\u02c3", - "\bG\u0001\u0002\u02c3\u02c4\u0007\'\u0002\u0002\u02c4\u02c5\u0005\u008c", - "G\u0002\u02c5\u02c6\u0007(\u0002\u0002\u02c6\u02d8\u0003\u0002\u0002", - "\u0002\u02c7\u02d6\u0005,\u0017\u0002\u02c8\u02d6\u0005Z.\u0002\u02c9", - "\u02d6\u0005^0\u0002\u02ca\u02d6\u0005(\u0015\u0002\u02cb\u02d6\u0005", - "0\u0019\u0002\u02cc\u02d6\u00054\u001b\u0002\u02cd\u02d6\u00058\u001d", - "\u0002\u02ce\u02d6\u0005\u0086D\u0002\u02cf\u02d6\u0003\u0002\u0002", - "\u0002\u02d0\u02d6\u0005@!\u0002\u02d1\u02d6\u0005H%\u0002\u02d2\u02d6", - "\u0005f4\u0002\u02d3\u02d6\u0005b2\u0002\u02d4\u02d6\u0005\u0018\r\u0002", - "\u02d5\u02c7\u0003\u0002\u0002\u0002\u02d5\u02c8\u0003\u0002\u0002\u0002", - "\u02d5\u02c9\u0003\u0002\u0002\u0002\u02d5\u02ca\u0003\u0002\u0002\u0002", - "\u02d5\u02cb\u0003\u0002\u0002\u0002\u02d5\u02cc\u0003\u0002\u0002\u0002", - "\u02d5\u02cd\u0003\u0002\u0002\u0002\u02d5\u02ce\u0003\u0002\u0002\u0002", - "\u02d5\u02cf\u0003\u0002\u0002\u0002\u02d5\u02d0\u0003\u0002\u0002\u0002", - "\u02d5\u02d1\u0003\u0002\u0002\u0002\u02d5\u02d2\u0003\u0002\u0002\u0002", - "\u02d5\u02d3\u0003\u0002\u0002\u0002\u02d5\u02d4\u0003\u0002\u0002\u0002", - "\u02d6\u02d8\u0003\u0002\u0002\u0002\u02d7\u02c2\u0003\u0002\u0002\u0002", - "\u02d7\u02d5\u0003\u0002\u0002\u0002\u02d8\u02e1\u0003\u0002\u0002\u0002", - "\u02d9\u02da\f\u0005\u0002\u0002\u02da\u02db\u0005&\u0014\u0002\u02db", - "\u02dc\u0005\u008cG\u0006\u02dc\u02e0\u0003\u0002\u0002\u0002\u02dd", - "\u02de\f\u0003\u0002\u0002\u02de\u02e0\u0007$\u0002\u0002\u02df\u02d9", - "\u0003\u0002\u0002\u0002\u02df\u02dd\u0003\u0002\u0002\u0002\u02e0\u02e3", - "\u0003\u0002\u0002\u0002\u02e1\u02df\u0003\u0002\u0002\u0002\u02e1\u02e2", - "\u0003\u0002\u0002\u0002\u02e2\u008d\u0003\u0002\u0002\u0002\u02e3\u02e1", - "\u0003\u0002\u0002\u0002W\u0091\u0095\u0098\u009d\u00c5\u00ce\u00d0", - "\u00d9\u00df\u00e5\u00eb\u00f0\u00f7\u00fe\u0105\u0108\u010e\u0110\u011d", - "\u011f\u0127\u0129\u0133\u0145\u0149\u0150\u0158\u0162\u016c\u0170\u0173", - "\u018a\u018c\u0194\u0196\u019b\u019e\u01b1\u01b3\u01bb\u01bd\u01c2\u01c5", - "\u01db\u01dd\u01e5\u01e7\u01ec\u01f8\u01fa\u0202\u0204\u0209\u0211\u0215", - "\u021c\u0223\u022a\u022d\u0233\u0244\u0246\u024e\u0250\u0255\u0258\u025e", - "\u026a\u026c\u0274\u0276\u027b\u0282\u0285\u028f\u02a6\u02a8\u02b0\u02b2", - "\u02b7\u02ba\u02d5\u02d7\u02df\u02e1"].join(""); + "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0005\u0003\u00ca\n\u0003", + "\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004", + "\u0003\u0004\u0007\u0004\u00d3\n\u0004\f\u0004\u000e\u0004\u00d6\u000b", + "\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0005\u0006\u0005\u00dc", + "\n\u0005\r\u0005\u000e\u0005\u00dd\u0003\u0005\u0003\u0005\u0006\u0005", + "\u00e2\n\u0005\r\u0005\u000e\u0005\u00e3\u0003\u0005\u0003\u0005\u0006", + "\u0005\u00e8\n\u0005\r\u0005\u000e\u0005\u00e9\u0003\u0005\u0003\u0005", + "\u0006\u0005\u00ee\n\u0005\r\u0005\u000e\u0005\u00ef\u0003\u0005\u0006", + "\u0005\u00f3\n\u0005\r\u0005\u000e\u0005\u00f4\u0003\u0005\u0003\u0005", + "\u0003\u0005\u0006\u0005\u00fa\n\u0005\r\u0005\u000e\u0005\u00fb\u0003", + "\u0005\u0003\u0005\u0003\u0005\u0006\u0005\u0101\n\u0005\r\u0005\u000e", + "\u0005\u0102\u0003\u0005\u0003\u0005\u0003\u0005\u0006\u0005\u0108\n", + "\u0005\r\u0005\u000e\u0005\u0109\u0003\u0005\u0005\u0005\u010d\n\u0005", + "\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0006\u0006\u0113\n", + "\u0006\r\u0006\u000e\u0006\u0114\u0003\u0006\u0003\u0006\u0003\u0007", + "\u0003\u0007\u0003\b\u0003\b\u0003\t\u0003\t\u0003\n\u0003\n\u0003\n", + "\u0006\n\u0122\n\n\r\n\u000e\n\u0123\u0003\u000b\u0003\u000b\u0003\u000b", + "\u0003\u000b\u0003\u000b\u0003\u000b\u0007\u000b\u012c\n\u000b\f\u000b", + "\u000e\u000b\u012f\u000b\u000b\u0003\u000b\u0003\u000b\u0003\f\u0003", + "\f\u0003\r\u0003\r\u0003\r\u0005\r\u0138\n\r\u0003\r\u0003\r\u0003\u000e", + "\u0003\u000e\u0003\u000f\u0003\u000f\u0003\u0010\u0003\u0010\u0003\u0011", + "\u0003\u0011\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0014", + "\u0003\u0014\u0005\u0014\u014a\n\u0014\u0003\u0015\u0003\u0015\u0005", + "\u0015\u014e\n\u0015\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0017", + "\u0003\u0017\u0005\u0017\u0155\n\u0017\u0003\u0018\u0003\u0018\u0003", + "\u0018\u0003\u0019\u0003\u0019\u0005\u0019\u015c\n\u0019\u0003\u001a", + "\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0005\u001a", + "\u0164\n\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001c\u0003", + "\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003", + "\u001c\u0005\u001c\u0171\n\u001c\u0003\u001d\u0003\u001d\u0003\u001d", + "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e", + "\u0003\u001e\u0003\u001e\u0005\u001e\u017e\n\u001e\u0003\u001f\u0003", + "\u001f\u0005\u001f\u0182\n\u001f\u0003\u001f\u0005\u001f\u0185\n\u001f", + "\u0003 \u0003 \u0003 \u0003!\u0003!\u0003!\u0003\"\u0003\"\u0003\"\u0003", + "\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003\"\u0003", + "\"\u0003\"\u0003\"\u0005\"\u019c\n\"\u0005\"\u019e\n\"\u0003\"\u0003", + "\"\u0003\"\u0003\"\u0003\"\u0003\"\u0007\"\u01a6\n\"\f\"\u000e\"\u01a9", + "\u000b\"\u0003#\u0003#\u0005#\u01ad\n#\u0003#\u0005#\u01b0\n#\u0003", + "$\u0003$\u0003$\u0003%\u0003%\u0003%\u0003&\u0003&\u0003&\u0003&\u0003", + "&\u0003&\u0003&\u0003&\u0003&\u0003&\u0003&\u0005&\u01c3\n&\u0005&\u01c5", + "\n&\u0003&\u0003&\u0003&\u0003&\u0003&\u0003&\u0007&\u01cd\n&\f&\u000e", + "&\u01d0\u000b&\u0003\'\u0003\'\u0005\'\u01d4\n\'\u0003\'\u0005\'\u01d7", + "\n\'\u0003(\u0003(\u0003(\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*", + "\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003", + "*\u0003*\u0005*\u01ed\n*\u0005*\u01ef\n*\u0003*\u0003*\u0003*\u0003", + "*\u0003*\u0003*\u0007*\u01f7\n*\f*\u000e*\u01fa\u000b*\u0003+\u0003", + "+\u0005+\u01fe\n+\u0003,\u0003,\u0003,\u0003-\u0003-\u0003-\u0003-\u0003", + "-\u0003-\u0003-\u0005-\u020a\n-\u0005-\u020c\n-\u0003-\u0003-\u0003", + "-\u0003-\u0003-\u0003-\u0007-\u0214\n-\f-\u000e-\u0217\u000b-\u0003", + ".\u0003.\u0005.\u021b\n.\u0003/\u0003/\u0003/\u0003/\u0003/\u0003/\u0005", + "/\u0223\n/\u00030\u00030\u00050\u0227\n0\u00031\u00031\u00031\u0003", + "2\u00032\u00052\u022e\n2\u00033\u00033\u00033\u00034\u00034\u00054\u0235", + "\n4\u00035\u00035\u00035\u00036\u00036\u00056\u023c\n6\u00036\u0005", + "6\u023f\n6\u00037\u00037\u00037\u00037\u00057\u0245\n7\u00038\u0003", + "8\u00038\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003", + "9\u00039\u00039\u00039\u00059\u0256\n9\u00059\u0258\n9\u00039\u0003", + "9\u00039\u00039\u00039\u00039\u00079\u0260\n9\f9\u000e9\u0263\u000b", + "9\u0003:\u0003:\u0005:\u0267\n:\u0003:\u0005:\u026a\n:\u0003;\u0003", + ";\u0003;\u0003;\u0005;\u0270\n;\u0003<\u0003<\u0003<\u0003=\u0003=\u0003", + "=\u0003=\u0003=\u0003=\u0003=\u0005=\u027c\n=\u0005=\u027e\n=\u0003", + "=\u0003=\u0003=\u0003=\u0003=\u0003=\u0007=\u0286\n=\f=\u000e=\u0289", + "\u000b=\u0003>\u0003>\u0005>\u028d\n>\u0003?\u0003?\u0003?\u0003@\u0003", + "@\u0005@\u0294\n@\u0003@\u0005@\u0297\n@\u0003A\u0003A\u0003A\u0003", + "B\u0003B\u0003B\u0003C\u0003C\u0005C\u02a1\nC\u0003D\u0003D\u0003D\u0003", + "E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003", + "E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0005E\u02b8\nE\u0005", + "E\u02ba\nE\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0007E\u02c2\n", + "E\fE\u000eE\u02c5\u000bE\u0003F\u0003F\u0005F\u02c9\nF\u0003F\u0005", + "F\u02cc\nF\u0003G\u0003G\u0003G\u0003H\u0003H\u0003H\u0003I\u0003I\u0003", + "I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003", + "I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0005I\u02e7\nI\u0005I\u02e9", + "\nI\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0007I\u02f1\nI\fI\u000e", + "I\u02f4\u000bI\u0003I\u0002\nBJRXpx\u0088\u0090J\u0002\u0004\u0006\b", + "\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.", + "02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088", + "\u008a\u008c\u008e\u0090\u0002\u0004\u0004\u0002\t\u000f\'(\u0003\u0002", + "\u0010\u001d\u0002\u0343\u0002\u0099\u0003\u0002\u0002\u0002\u0004\u00c9", + "\u0003\u0002\u0002\u0002\u0006\u00cb\u0003\u0002\u0002\u0002\b\u010c", + "\u0003\u0002\u0002\u0002\n\u010e\u0003\u0002\u0002\u0002\f\u0118\u0003", + "\u0002\u0002\u0002\u000e\u011a\u0003\u0002\u0002\u0002\u0010\u011c\u0003", + "\u0002\u0002\u0002\u0012\u0121\u0003\u0002\u0002\u0002\u0014\u012d\u0003", + "\u0002\u0002\u0002\u0016\u0132\u0003\u0002\u0002\u0002\u0018\u0134\u0003", + "\u0002\u0002\u0002\u001a\u013b\u0003\u0002\u0002\u0002\u001c\u013d\u0003", + "\u0002\u0002\u0002\u001e\u013f\u0003\u0002\u0002\u0002 \u0141\u0003", + "\u0002\u0002\u0002\"\u0143\u0003\u0002\u0002\u0002$\u0145\u0003\u0002", + "\u0002\u0002&\u0149\u0003\u0002\u0002\u0002(\u014b\u0003\u0002\u0002", + "\u0002*\u014f\u0003\u0002\u0002\u0002,\u0152\u0003\u0002\u0002\u0002", + ".\u0156\u0003\u0002\u0002\u00020\u0159\u0003\u0002\u0002\u00022\u0163", + "\u0003\u0002\u0002\u00024\u0165\u0003\u0002\u0002\u00026\u0168\u0003", + "\u0002\u0002\u00028\u0172\u0003\u0002\u0002\u0002:\u0175\u0003\u0002", + "\u0002\u0002<\u017f\u0003\u0002\u0002\u0002>\u0186\u0003\u0002\u0002", + "\u0002@\u0189\u0003\u0002\u0002\u0002B\u019d\u0003\u0002\u0002\u0002", + "D\u01aa\u0003\u0002\u0002\u0002F\u01b1\u0003\u0002\u0002\u0002H\u01b4", + "\u0003\u0002\u0002\u0002J\u01c4\u0003\u0002\u0002\u0002L\u01d1\u0003", + "\u0002\u0002\u0002N\u01d8\u0003\u0002\u0002\u0002P\u01db\u0003\u0002", + "\u0002\u0002R\u01ee\u0003\u0002\u0002\u0002T\u01fb\u0003\u0002\u0002", + "\u0002V\u01ff\u0003\u0002\u0002\u0002X\u020b\u0003\u0002\u0002\u0002", + "Z\u0218\u0003\u0002\u0002\u0002\\\u0222\u0003\u0002\u0002\u0002^\u0224", + "\u0003\u0002\u0002\u0002`\u0228\u0003\u0002\u0002\u0002b\u022b\u0003", + "\u0002\u0002\u0002d\u022f\u0003\u0002\u0002\u0002f\u0232\u0003\u0002", + "\u0002\u0002h\u0236\u0003\u0002\u0002\u0002j\u0239\u0003\u0002\u0002", + "\u0002l\u0240\u0003\u0002\u0002\u0002n\u0246\u0003\u0002\u0002\u0002", + "p\u0257\u0003\u0002\u0002\u0002r\u0264\u0003\u0002\u0002\u0002t\u026b", + "\u0003\u0002\u0002\u0002v\u0271\u0003\u0002\u0002\u0002x\u027d\u0003", + "\u0002\u0002\u0002z\u028a\u0003\u0002\u0002\u0002|\u028e\u0003\u0002", + "\u0002\u0002~\u0291\u0003\u0002\u0002\u0002\u0080\u0298\u0003\u0002", + "\u0002\u0002\u0082\u029b\u0003\u0002\u0002\u0002\u0084\u029e\u0003\u0002", + "\u0002\u0002\u0086\u02a2\u0003\u0002\u0002\u0002\u0088\u02b9\u0003\u0002", + "\u0002\u0002\u008a\u02c6\u0003\u0002\u0002\u0002\u008c\u02cd\u0003\u0002", + "\u0002\u0002\u008e\u02d0\u0003\u0002\u0002\u0002\u0090\u02e8\u0003\u0002", + "\u0002\u0002\u0092\u0094\u0005\u0010\t\u0002\u0093\u0092\u0003\u0002", + "\u0002\u0002\u0094\u0097\u0003\u0002\u0002\u0002\u0095\u0093\u0003\u0002", + "\u0002\u0002\u0095\u0096\u0003\u0002\u0002\u0002\u0096\u009a\u0003\u0002", + "\u0002\u0002\u0097\u0095\u0003\u0002\u0002\u0002\u0098\u009a\u0005\u0004", + "\u0003\u0002\u0099\u0095\u0003\u0002\u0002\u0002\u0099\u0098\u0003\u0002", + "\u0002\u0002\u009a\u009c\u0003\u0002\u0002\u0002\u009b\u009d\u0005\u000e", + "\b\u0002\u009c\u009b\u0003\u0002\u0002\u0002\u009c\u009d\u0003\u0002", + "\u0002\u0002\u009d\u00a1\u0003\u0002\u0002\u0002\u009e\u00a0\u0007&", + "\u0002\u0002\u009f\u009e\u0003\u0002\u0002\u0002\u00a0\u00a3\u0003\u0002", + "\u0002\u0002\u00a1\u009f\u0003\u0002\u0002\u0002\u00a1\u00a2\u0003\u0002", + "\u0002\u0002\u00a2\u00a4\u0003\u0002\u0002\u0002\u00a3\u00a1\u0003\u0002", + "\u0002\u0002\u00a4\u00a5\u0007\u0002\u0002\u0003\u00a5\u0003\u0003\u0002", + "\u0002\u0002\u00a6\u00a7\u0005<\u001f\u0002\u00a7\u00a8\u0005\u001a", + "\u000e\u0002\u00a8\u00a9\u0005\"\u0012\u0002\u00a9\u00aa\u0005B\"\u0002", + "\u00aa\u00ca\u0003\u0002\u0002\u0002\u00ab\u00ac\u0005D#\u0002\u00ac", + "\u00ad\u0005\u001a\u000e\u0002\u00ad\u00ae\u0005\"\u0012\u0002\u00ae", + "\u00af\u0005J&\u0002\u00af\u00ca\u0003\u0002\u0002\u0002\u00b0\u00b1", + "\u0005L\'\u0002\u00b1\u00b2\u0005\u001a\u000e\u0002\u00b2\u00b3\u0005", + "\"\u0012\u0002\u00b3\u00b4\u0005R*\u0002\u00b4\u00ca\u0003\u0002\u0002", + "\u0002\u00b5\u00b6\u0005\u0084C\u0002\u00b6\u00b7\u0005\u001a\u000e", + "\u0002\u00b7\u00b8\u0005\"\u0012\u0002\u00b8\u00b9\u0005\u0088E\u0002", + "\u00b9\u00ca\u0003\u0002\u0002\u0002\u00ba\u00bb\u0005T+\u0002\u00bb", + "\u00bc\u0005\u001a\u000e\u0002\u00bc\u00bd\u0005\"\u0012\u0002\u00bd", + "\u00be\u0005X-\u0002\u00be\u00ca\u0003\u0002\u0002\u0002\u00bf\u00c0", + "\u0005j6\u0002\u00c0\u00c1\u0005\u001a\u000e\u0002\u00c1\u00c2\u0005", + "\"\u0012\u0002\u00c2\u00c3\u0005p9\u0002\u00c3\u00ca\u0003\u0002\u0002", + "\u0002\u00c4\u00c5\u0005\u008aF\u0002\u00c5\u00c6\u0005\u001a\u000e", + "\u0002\u00c6\u00c7\u0005\"\u0012\u0002\u00c7\u00c8\u0005\u0090I\u0002", + "\u00c8\u00ca\u0003\u0002\u0002\u0002\u00c9\u00a6\u0003\u0002\u0002\u0002", + "\u00c9\u00ab\u0003\u0002\u0002\u0002\u00c9\u00b0\u0003\u0002\u0002\u0002", + "\u00c9\u00b5\u0003\u0002\u0002\u0002\u00c9\u00ba\u0003\u0002\u0002\u0002", + "\u00c9\u00bf\u0003\u0002\u0002\u0002\u00c9\u00c4\u0003\u0002\u0002\u0002", + "\u00ca\u0005\u0003\u0002\u0002\u0002\u00cb\u00d4\u0007\u0003\u0002\u0002", + "\u00cc\u00cd\u0005\b\u0005\u0002\u00cd\u00ce\u0007\u0004\u0002\u0002", + "\u00ce\u00d3\u0003\u0002\u0002\u0002\u00cf\u00d0\u0005\b\u0005\u0002", + "\u00d0\u00d1\u0007\u0005\u0002\u0002\u00d1\u00d3\u0003\u0002\u0002\u0002", + "\u00d2\u00cc\u0003\u0002\u0002\u0002\u00d2\u00cf\u0003\u0002\u0002\u0002", + "\u00d3\u00d6\u0003\u0002\u0002\u0002\u00d4\u00d2\u0003\u0002\u0002\u0002", + "\u00d4\u00d5\u0003\u0002\u0002\u0002\u00d5\u00d7\u0003\u0002\u0002\u0002", + "\u00d6\u00d4\u0003\u0002\u0002\u0002\u00d7\u00d8\u0005\b\u0005\u0002", + "\u00d8\u00d9\u0007\u0003\u0002\u0002\u00d9\u0007\u0003\u0002\u0002\u0002", + "\u00da\u00dc\u0007%\u0002\u0002\u00db\u00da\u0003\u0002\u0002\u0002", + "\u00dc\u00dd\u0003\u0002\u0002\u0002\u00dd\u00db\u0003\u0002\u0002\u0002", + "\u00dd\u00de\u0003\u0002\u0002\u0002\u00de\u010d\u0003\u0002\u0002\u0002", + "\u00df\u00e1\u0007\u0006\u0002\u0002\u00e0\u00e2\u0007%\u0002\u0002", + "\u00e1\u00e0\u0003\u0002\u0002\u0002\u00e2\u00e3\u0003\u0002\u0002\u0002", + "\u00e3\u00e1\u0003\u0002\u0002\u0002\u00e3\u00e4\u0003\u0002\u0002\u0002", + "\u00e4\u010d\u0003\u0002\u0002\u0002\u00e5\u00e7\u0007\u0007\u0002\u0002", + "\u00e6\u00e8\u0007%\u0002\u0002\u00e7\u00e6\u0003\u0002\u0002\u0002", + "\u00e8\u00e9\u0003\u0002\u0002\u0002\u00e9\u00e7\u0003\u0002\u0002\u0002", + "\u00e9\u00ea\u0003\u0002\u0002\u0002\u00ea\u010d\u0003\u0002\u0002\u0002", + "\u00eb\u00ed\u0007\b\u0002\u0002\u00ec\u00ee\u0007%\u0002\u0002\u00ed", + "\u00ec\u0003\u0002\u0002\u0002\u00ee\u00ef\u0003\u0002\u0002\u0002\u00ef", + "\u00ed\u0003\u0002\u0002\u0002\u00ef\u00f0\u0003\u0002\u0002\u0002\u00f0", + "\u010d\u0003\u0002\u0002\u0002\u00f1\u00f3\u0007%\u0002\u0002\u00f2", + "\u00f1\u0003\u0002\u0002\u0002\u00f3\u00f4\u0003\u0002\u0002\u0002\u00f4", + "\u00f2\u0003\u0002\u0002\u0002\u00f4\u00f5\u0003\u0002\u0002\u0002\u00f5", + "\u00f6\u0003\u0002\u0002\u0002\u00f6\u010d\u0007\u0007\u0002\u0002\u00f7", + "\u00f9\u0007\u0006\u0002\u0002\u00f8\u00fa\u0007%\u0002\u0002\u00f9", + "\u00f8\u0003\u0002\u0002\u0002\u00fa\u00fb\u0003\u0002\u0002\u0002\u00fb", + "\u00f9\u0003\u0002\u0002\u0002\u00fb\u00fc\u0003\u0002\u0002\u0002\u00fc", + "\u00fd\u0003\u0002\u0002\u0002\u00fd\u010d\u0007\u0007\u0002\u0002\u00fe", + "\u0100\u0007\u0007\u0002\u0002\u00ff\u0101\u0007%\u0002\u0002\u0100", + "\u00ff\u0003\u0002\u0002\u0002\u0101\u0102\u0003\u0002\u0002\u0002\u0102", + "\u0100\u0003\u0002\u0002\u0002\u0102\u0103\u0003\u0002\u0002\u0002\u0103", + "\u0104\u0003\u0002\u0002\u0002\u0104\u010d\u0007\u0007\u0002\u0002\u0105", + "\u0107\u0007\b\u0002\u0002\u0106\u0108\u0007%\u0002\u0002\u0107\u0106", + "\u0003\u0002\u0002\u0002\u0108\u0109\u0003\u0002\u0002\u0002\u0109\u0107", + "\u0003\u0002\u0002\u0002\u0109\u010a\u0003\u0002\u0002\u0002\u010a\u010b", + "\u0003\u0002\u0002\u0002\u010b\u010d\u0007\u0007\u0002\u0002\u010c\u00db", + "\u0003\u0002\u0002\u0002\u010c\u00df\u0003\u0002\u0002\u0002\u010c\u00e5", + "\u0003\u0002\u0002\u0002\u010c\u00eb\u0003\u0002\u0002\u0002\u010c\u00f2", + "\u0003\u0002\u0002\u0002\u010c\u00f7\u0003\u0002\u0002\u0002\u010c\u00fe", + "\u0003\u0002\u0002\u0002\u010c\u0105\u0003\u0002\u0002\u0002\u010d\t", + "\u0003\u0002\u0002\u0002\u010e\u0112\u0007\u0003\u0002\u0002\u010f\u0113", + "\u0007%\u0002\u0002\u0110\u0113\u0005\f\u0007\u0002\u0111\u0113\u0007", + "$\u0002\u0002\u0112\u010f\u0003\u0002\u0002\u0002\u0112\u0110\u0003", + "\u0002\u0002\u0002\u0112\u0111\u0003\u0002\u0002\u0002\u0113\u0114\u0003", + "\u0002\u0002\u0002\u0114\u0112\u0003\u0002\u0002\u0002\u0114\u0115\u0003", + "\u0002\u0002\u0002\u0115\u0116\u0003\u0002\u0002\u0002\u0116\u0117\u0007", + "\u0003\u0002\u0002\u0117\u000b\u0003\u0002\u0002\u0002\u0118\u0119\t", + "\u0002\u0002\u0002\u0119\r\u0003\u0002\u0002\u0002\u011a\u011b\u0007", + "\t\u0002\u0002\u011b\u000f\u0003\u0002\u0002\u0002\u011c\u011d\u0007", + "&\u0002\u0002\u011d\u0011\u0003\u0002\u0002\u0002\u011e\u0122\u0007", + "%\u0002\u0002\u011f\u0122\u0005\f\u0007\u0002\u0120\u0122\u0007$\u0002", + "\u0002\u0121\u011e\u0003\u0002\u0002\u0002\u0121\u011f\u0003\u0002\u0002", + "\u0002\u0121\u0120\u0003\u0002\u0002\u0002\u0122\u0123\u0003\u0002\u0002", + "\u0002\u0123\u0121\u0003\u0002\u0002\u0002\u0123\u0124\u0003\u0002\u0002", + "\u0002\u0124\u0013\u0003\u0002\u0002\u0002\u0125\u0126\u0005\u0012\n", + "\u0002\u0126\u0127\u0007\u0004\u0002\u0002\u0127\u012c\u0003\u0002\u0002", + "\u0002\u0128\u0129\u0005\u0012\n\u0002\u0129\u012a\u0007\u0005\u0002", + "\u0002\u012a\u012c\u0003\u0002\u0002\u0002\u012b\u0125\u0003\u0002\u0002", + "\u0002\u012b\u0128\u0003\u0002\u0002\u0002\u012c\u012f\u0003\u0002\u0002", + "\u0002\u012d\u012b\u0003\u0002\u0002\u0002\u012d\u012e\u0003\u0002\u0002", + "\u0002\u012e\u0130\u0003\u0002\u0002\u0002\u012f\u012d\u0003\u0002\u0002", + "\u0002\u0130\u0131\u0005\u0012\n\u0002\u0131\u0015\u0003\u0002\u0002", + "\u0002\u0132\u0133\t\u0003\u0002\u0002\u0133\u0017\u0003\u0002\u0002", + "\u0002\u0134\u0135\u0007\u0003\u0002\u0002\u0135\u0137\u0005\u0016\f", + "\u0002\u0136\u0138\u0005\u0014\u000b\u0002\u0137\u0136\u0003\u0002\u0002", + "\u0002\u0137\u0138\u0003\u0002\u0002\u0002\u0138\u0139\u0003\u0002\u0002", + "\u0002\u0139\u013a\u0007\u0003\u0002\u0002\u013a\u0019\u0003\u0002\u0002", + "\u0002\u013b\u013c\u0007\u001e\u0002\u0002\u013c\u001b\u0003\u0002\u0002", + "\u0002\u013d\u013e\u0007\u001f\u0002\u0002\u013e\u001d\u0003\u0002\u0002", + "\u0002\u013f\u0140\u0007 \u0002\u0002\u0140\u001f\u0003\u0002\u0002", + "\u0002\u0141\u0142\u0007!\u0002\u0002\u0142!\u0003\u0002\u0002\u0002", + "\u0143\u0144\u0007\"\u0002\u0002\u0144#\u0003\u0002\u0002\u0002\u0145", + "\u0146\u0007#\u0002\u0002\u0146%\u0003\u0002\u0002\u0002\u0147\u014a", + "\u0005\u001e\u0010\u0002\u0148\u014a\u0005 \u0011\u0002\u0149\u0147", + "\u0003\u0002\u0002\u0002\u0149\u0148\u0003\u0002\u0002\u0002\u014a\'", + "\u0003\u0002\u0002\u0002\u014b\u014d\u0007)\u0002\u0002\u014c\u014e", + "\u0005*\u0016\u0002\u014d\u014c\u0003\u0002\u0002\u0002\u014d\u014e", + "\u0003\u0002\u0002\u0002\u014e)\u0003\u0002\u0002\u0002\u014f\u0150", + "\u0005\u0006\u0004\u0002\u0150\u0151\u0007$\u0002\u0002\u0151+\u0003", + "\u0002\u0002\u0002\u0152\u0154\u0007)\u0002\u0002\u0153\u0155\u0005", + ".\u0018\u0002\u0154\u0153\u0003\u0002\u0002\u0002\u0154\u0155\u0003", + "\u0002\u0002\u0002\u0155-\u0003\u0002\u0002\u0002\u0156\u0157\u0005", + "\n\u0006\u0002\u0157\u0158\u0007$\u0002\u0002\u0158/\u0003\u0002\u0002", + "\u0002\u0159\u015b\u0007*\u0002\u0002\u015a\u015c\u00052\u001a\u0002", + "\u015b\u015a\u0003\u0002\u0002\u0002\u015b\u015c\u0003\u0002\u0002\u0002", + "\u015c1\u0003\u0002\u0002\u0002\u015d\u015e\u0005\n\u0006\u0002\u015e", + "\u015f\u0007$\u0002\u0002\u015f\u0164\u0003\u0002\u0002\u0002\u0160", + "\u0161\u0005\u0006\u0004\u0002\u0161\u0162\u0007$\u0002\u0002\u0162", + "\u0164\u0003\u0002\u0002\u0002\u0163\u015d\u0003\u0002\u0002\u0002\u0163", + "\u0160\u0003\u0002\u0002\u0002\u01643\u0003\u0002\u0002\u0002\u0165", + "\u0166\u0007+\u0002\u0002\u0166\u0167\u00056\u001c\u0002\u01675\u0003", + "\u0002\u0002\u0002\u0168\u0170\u0005\u001c\u000f\u0002\u0169\u016a\u0005", + "\n\u0006\u0002\u016a\u016b\u0007$\u0002\u0002\u016b\u0171\u0003\u0002", + "\u0002\u0002\u016c\u016d\u0005\u0006\u0004\u0002\u016d\u016e\u0007$", + "\u0002\u0002\u016e\u0171\u0003\u0002\u0002\u0002\u016f\u0171\u0007,", + "\u0002\u0002\u0170\u0169\u0003\u0002\u0002\u0002\u0170\u016c\u0003\u0002", + "\u0002\u0002\u0170\u016f\u0003\u0002\u0002\u0002\u01717\u0003\u0002", + "\u0002\u0002\u0172\u0173\u0007-\u0002\u0002\u0173\u0174\u0005:\u001e", + "\u0002\u01749\u0003\u0002\u0002\u0002\u0175\u017d\u0005\u001c\u000f", + "\u0002\u0176\u0177\u0005\n\u0006\u0002\u0177\u0178\u0007$\u0002\u0002", + "\u0178\u017e\u0003\u0002\u0002\u0002\u0179\u017a\u0005\u0006\u0004\u0002", + "\u017a\u017b\u0007$\u0002\u0002\u017b\u017e\u0003\u0002\u0002\u0002", + "\u017c\u017e\u0007.\u0002\u0002\u017d\u0176\u0003\u0002\u0002\u0002", + "\u017d\u0179\u0003\u0002\u0002\u0002\u017d\u017c\u0003\u0002\u0002\u0002", + "\u017e;\u0003\u0002\u0002\u0002\u017f\u0181\u0007/\u0002\u0002\u0180", + "\u0182\u0005@!\u0002\u0181\u0180\u0003\u0002\u0002\u0002\u0181\u0182", + "\u0003\u0002\u0002\u0002\u0182\u0184\u0003\u0002\u0002\u0002\u0183\u0185", + "\u0005> \u0002\u0184\u0183\u0003\u0002\u0002\u0002\u0184\u0185\u0003", + "\u0002\u0002\u0002\u0185=\u0003\u0002\u0002\u0002\u0186\u0187\u0005", + "\u001c\u000f\u0002\u0187\u0188\u0005\u0084C\u0002\u0188?\u0003\u0002", + "\u0002\u0002\u0189\u018a\u0005$\u0013\u0002\u018a\u018b\u0005B\"\u0002", + "\u018bA\u0003\u0002\u0002\u0002\u018c\u018d\b\"\u0001\u0002\u018d\u018e", + "\u0007\'\u0002\u0002\u018e\u018f\u0005B\"\u0002\u018f\u0190\u0007(\u0002", + "\u0002\u0190\u019e\u0003\u0002\u0002\u0002\u0191\u019c\u00050\u0019", + "\u0002\u0192\u019c\u0005^0\u0002\u0193\u019c\u0005b2\u0002\u0194\u019c", + "\u0005Z.\u0002\u0195\u019c\u0005(\u0015\u0002\u0196\u019c\u0005T+\u0002", + "\u0197\u019c\u0005f4\u0002\u0198\u019c\u0005j6\u0002\u0199\u019c\u0005", + "r:\u0002\u019a\u019c\u0005\u0018\r\u0002\u019b\u0191\u0003\u0002\u0002", + "\u0002\u019b\u0192\u0003\u0002\u0002\u0002\u019b\u0193\u0003\u0002\u0002", + "\u0002\u019b\u0194\u0003\u0002\u0002\u0002\u019b\u0195\u0003\u0002\u0002", + "\u0002\u019b\u0196\u0003\u0002\u0002\u0002\u019b\u0197\u0003\u0002\u0002", + "\u0002\u019b\u0198\u0003\u0002\u0002\u0002\u019b\u0199\u0003\u0002\u0002", + "\u0002\u019b\u019a\u0003\u0002\u0002\u0002\u019c\u019e\u0003\u0002\u0002", + "\u0002\u019d\u018c\u0003\u0002\u0002\u0002\u019d\u019b\u0003\u0002\u0002", + "\u0002\u019e\u01a7\u0003\u0002\u0002\u0002\u019f\u01a0\f\u0005\u0002", + "\u0002\u01a0\u01a1\u0005&\u0014\u0002\u01a1\u01a2\u0005B\"\u0006\u01a2", + "\u01a6\u0003\u0002\u0002\u0002\u01a3\u01a4\f\u0003\u0002\u0002\u01a4", + "\u01a6\u0007$\u0002\u0002\u01a5\u019f\u0003\u0002\u0002\u0002\u01a5", + "\u01a3\u0003\u0002\u0002\u0002\u01a6\u01a9\u0003\u0002\u0002\u0002\u01a7", + "\u01a5\u0003\u0002\u0002\u0002\u01a7\u01a8\u0003\u0002\u0002\u0002\u01a8", + "C\u0003\u0002\u0002\u0002\u01a9\u01a7\u0003\u0002\u0002\u0002\u01aa", + "\u01ac\u00070\u0002\u0002\u01ab\u01ad\u0005H%\u0002\u01ac\u01ab\u0003", + "\u0002\u0002\u0002\u01ac\u01ad\u0003\u0002\u0002\u0002\u01ad\u01af\u0003", + "\u0002\u0002\u0002\u01ae\u01b0\u0005F$\u0002\u01af\u01ae\u0003\u0002", + "\u0002\u0002\u01af\u01b0\u0003\u0002\u0002\u0002\u01b0E\u0003\u0002", + "\u0002\u0002\u01b1\u01b2\u0005\u001c\u000f\u0002\u01b2\u01b3\u0005\u0084", + "C\u0002\u01b3G\u0003\u0002\u0002\u0002\u01b4\u01b5\u0005$\u0013\u0002", + "\u01b5\u01b6\u0005J&\u0002\u01b6I\u0003\u0002\u0002\u0002\u01b7\u01b8", + "\b&\u0001\u0002\u01b8\u01b9\u0007\'\u0002\u0002\u01b9\u01ba\u0005J&", + "\u0002\u01ba\u01bb\u0007(\u0002\u0002\u01bb\u01c5\u0003\u0002\u0002", + "\u0002\u01bc\u01c3\u00050\u0019\u0002\u01bd\u01c3\u0005^0\u0002\u01be", + "\u01c3\u0005b2\u0002\u01bf\u01c3\u0005Z.\u0002\u01c0\u01c3\u0005(\u0015", + "\u0002\u01c1\u01c3\u0005T+\u0002\u01c2\u01bc\u0003\u0002\u0002\u0002", + "\u01c2\u01bd\u0003\u0002\u0002\u0002\u01c2\u01be\u0003\u0002\u0002\u0002", + "\u01c2\u01bf\u0003\u0002\u0002\u0002\u01c2\u01c0\u0003\u0002\u0002\u0002", + "\u01c2\u01c1\u0003\u0002\u0002\u0002\u01c3\u01c5\u0003\u0002\u0002\u0002", + "\u01c4\u01b7\u0003\u0002\u0002\u0002\u01c4\u01c2\u0003\u0002\u0002\u0002", + "\u01c5\u01ce\u0003\u0002\u0002\u0002\u01c6\u01c7\f\u0005\u0002\u0002", + "\u01c7\u01c8\u0005&\u0014\u0002\u01c8\u01c9\u0005J&\u0006\u01c9\u01cd", + "\u0003\u0002\u0002\u0002\u01ca\u01cb\f\u0003\u0002\u0002\u01cb\u01cd", + "\u0007$\u0002\u0002\u01cc\u01c6\u0003\u0002\u0002\u0002\u01cc\u01ca", + "\u0003\u0002\u0002\u0002\u01cd\u01d0\u0003\u0002\u0002\u0002\u01ce\u01cc", + "\u0003\u0002\u0002\u0002\u01ce\u01cf\u0003\u0002\u0002\u0002\u01cfK", + "\u0003\u0002\u0002\u0002\u01d0\u01ce\u0003\u0002\u0002\u0002\u01d1\u01d3", + "\u00071\u0002\u0002\u01d2\u01d4\u0005P)\u0002\u01d3\u01d2\u0003\u0002", + "\u0002\u0002\u01d3\u01d4\u0003\u0002\u0002\u0002\u01d4\u01d6\u0003\u0002", + "\u0002\u0002\u01d5\u01d7\u0005N(\u0002\u01d6\u01d5\u0003\u0002\u0002", + "\u0002\u01d6\u01d7\u0003\u0002\u0002\u0002\u01d7M\u0003\u0002\u0002", + "\u0002\u01d8\u01d9\u0005\u001c\u000f\u0002\u01d9\u01da\u0005\u0084C", + "\u0002\u01daO\u0003\u0002\u0002\u0002\u01db\u01dc\u0005$\u0013\u0002", + "\u01dc\u01dd\u0005R*\u0002\u01ddQ\u0003\u0002\u0002\u0002\u01de\u01df", + "\b*\u0001\u0002\u01df\u01e0\u0007\'\u0002\u0002\u01e0\u01e1\u0005R*", + "\u0002\u01e1\u01e2\u0007(\u0002\u0002\u01e2\u01ef\u0003\u0002\u0002", + "\u0002\u01e3\u01ed\u00050\u0019\u0002\u01e4\u01ed\u0005^0\u0002\u01e5", + "\u01ed\u0005b2\u0002\u01e6\u01ed\u0005(\u0015\u0002\u01e7\u01ed\u0005", + "T+\u0002\u01e8\u01ed\u0005f4\u0002\u01e9\u01ed\u0005j6\u0002\u01ea\u01ed", + "\u0005r:\u0002\u01eb\u01ed\u0005\u0018\r\u0002\u01ec\u01e3\u0003\u0002", + "\u0002\u0002\u01ec\u01e4\u0003\u0002\u0002\u0002\u01ec\u01e5\u0003\u0002", + "\u0002\u0002\u01ec\u01e6\u0003\u0002\u0002\u0002\u01ec\u01e7\u0003\u0002", + "\u0002\u0002\u01ec\u01e8\u0003\u0002\u0002\u0002\u01ec\u01e9\u0003\u0002", + "\u0002\u0002\u01ec\u01ea\u0003\u0002\u0002\u0002\u01ec\u01eb\u0003\u0002", + "\u0002\u0002\u01ed\u01ef\u0003\u0002\u0002\u0002\u01ee\u01de\u0003\u0002", + "\u0002\u0002\u01ee\u01ec\u0003\u0002\u0002\u0002\u01ef\u01f8\u0003\u0002", + "\u0002\u0002\u01f0\u01f1\f\u0005\u0002\u0002\u01f1\u01f2\u0005&\u0014", + "\u0002\u01f2\u01f3\u0005R*\u0006\u01f3\u01f7\u0003\u0002\u0002\u0002", + "\u01f4\u01f5\f\u0003\u0002\u0002\u01f5\u01f7\u0007$\u0002\u0002\u01f6", + "\u01f0\u0003\u0002\u0002\u0002\u01f6\u01f4\u0003\u0002\u0002\u0002\u01f7", + "\u01fa\u0003\u0002\u0002\u0002\u01f8\u01f6\u0003\u0002\u0002\u0002\u01f8", + "\u01f9\u0003\u0002\u0002\u0002\u01f9S\u0003\u0002\u0002\u0002\u01fa", + "\u01f8\u0003\u0002\u0002\u0002\u01fb\u01fd\u00072\u0002\u0002\u01fc", + "\u01fe\u0005V,\u0002\u01fd\u01fc\u0003\u0002\u0002\u0002\u01fd\u01fe", + "\u0003\u0002\u0002\u0002\u01feU\u0003\u0002\u0002\u0002\u01ff\u0200", + "\u0005$\u0013\u0002\u0200\u0201\u0005X-\u0002\u0201W\u0003\u0002\u0002", + "\u0002\u0202\u0203\b-\u0001\u0002\u0203\u0204\u0007\'\u0002\u0002\u0204", + "\u0205\u0005X-\u0002\u0205\u0206\u0007(\u0002\u0002\u0206\u020c\u0003", + "\u0002\u0002\u0002\u0207\u020a\u0005Z.\u0002\u0208\u020a\u0005(\u0015", + "\u0002\u0209\u0207\u0003\u0002\u0002\u0002\u0209\u0208\u0003\u0002\u0002", + "\u0002\u020a\u020c\u0003\u0002\u0002\u0002\u020b\u0202\u0003\u0002\u0002", + "\u0002\u020b\u0209\u0003\u0002\u0002\u0002\u020c\u0215\u0003\u0002\u0002", + "\u0002\u020d\u020e\f\u0005\u0002\u0002\u020e\u020f\u0005&\u0014\u0002", + "\u020f\u0210\u0005X-\u0006\u0210\u0214\u0003\u0002\u0002\u0002\u0211", + "\u0212\f\u0003\u0002\u0002\u0212\u0214\u0007$\u0002\u0002\u0213\u020d", + "\u0003\u0002\u0002\u0002\u0213\u0211\u0003\u0002\u0002\u0002\u0214\u0217", + "\u0003\u0002\u0002\u0002\u0215\u0213\u0003\u0002\u0002\u0002\u0215\u0216", + "\u0003\u0002\u0002\u0002\u0216Y\u0003\u0002\u0002\u0002\u0217\u0215", + "\u0003\u0002\u0002\u0002\u0218\u021a\u00073\u0002\u0002\u0219\u021b", + "\u0005\\/\u0002\u021a\u0219\u0003\u0002\u0002\u0002\u021a\u021b\u0003", + "\u0002\u0002\u0002\u021b[\u0003\u0002\u0002\u0002\u021c\u021d\u0005", + "\n\u0006\u0002\u021d\u021e\u0007$\u0002\u0002\u021e\u0223\u0003\u0002", + "\u0002\u0002\u021f\u0220\u0005\u0006\u0004\u0002\u0220\u0221\u0007$", + "\u0002\u0002\u0221\u0223\u0003\u0002\u0002\u0002\u0222\u021c\u0003\u0002", + "\u0002\u0002\u0222\u021f\u0003\u0002\u0002\u0002\u0223]\u0003\u0002", + "\u0002\u0002\u0224\u0226\u00074\u0002\u0002\u0225\u0227\u0005`1\u0002", + "\u0226\u0225\u0003\u0002\u0002\u0002\u0226\u0227\u0003\u0002\u0002\u0002", + "\u0227_\u0003\u0002\u0002\u0002\u0228\u0229\u0005\u0006\u0004\u0002", + "\u0229\u022a\u0007$\u0002\u0002\u022aa\u0003\u0002\u0002\u0002\u022b", + "\u022d\u00075\u0002\u0002\u022c\u022e\u0005d3\u0002\u022d\u022c\u0003", + "\u0002\u0002\u0002\u022d\u022e\u0003\u0002\u0002\u0002\u022ec\u0003", + "\u0002\u0002\u0002\u022f\u0230\u0005\u0006\u0004\u0002\u0230\u0231\u0007", + "$\u0002\u0002\u0231e\u0003\u0002\u0002\u0002\u0232\u0234\u00076\u0002", + "\u0002\u0233\u0235\u0005h5\u0002\u0234\u0233\u0003\u0002\u0002\u0002", + "\u0234\u0235\u0003\u0002\u0002\u0002\u0235g\u0003\u0002\u0002\u0002", + "\u0236\u0237\u0005\n\u0006\u0002\u0237\u0238\u0007$\u0002\u0002\u0238", + "i\u0003\u0002\u0002\u0002\u0239\u023b\u00077\u0002\u0002\u023a\u023c", + "\u0005n8\u0002\u023b\u023a\u0003\u0002\u0002\u0002\u023b\u023c\u0003", + "\u0002\u0002\u0002\u023c\u023e\u0003\u0002\u0002\u0002\u023d\u023f\u0005", + "l7\u0002\u023e\u023d\u0003\u0002\u0002\u0002\u023e\u023f\u0003\u0002", + "\u0002\u0002\u023fk\u0003\u0002\u0002\u0002\u0240\u0244\u0005\u001c", + "\u000f\u0002\u0241\u0245\u0005\u0084C\u0002\u0242\u0245\u0005<\u001f", + "\u0002\u0243\u0245\u0005L\'\u0002\u0244\u0241\u0003\u0002\u0002\u0002", + "\u0244\u0242\u0003\u0002\u0002\u0002\u0244\u0243\u0003\u0002\u0002\u0002", + "\u0245m\u0003\u0002\u0002\u0002\u0246\u0247\u0005$\u0013\u0002\u0247", + "\u0248\u0005p9\u0002\u0248o\u0003\u0002\u0002\u0002\u0249\u024a\b9\u0001", + "\u0002\u024a\u024b\u0007\'\u0002\u0002\u024b\u024c\u0005p9\u0002\u024c", + "\u024d\u0007(\u0002\u0002\u024d\u0258\u0003\u0002\u0002\u0002\u024e", + "\u0256\u00050\u0019\u0002\u024f\u0256\u0005^0\u0002\u0250\u0256\u0005", + "b2\u0002\u0251\u0256\u0005Z.\u0002\u0252\u0256\u0005(\u0015\u0002\u0253", + "\u0256\u0005~@\u0002\u0254\u0256\u0005\u0018\r\u0002\u0255\u024e\u0003", + "\u0002\u0002\u0002\u0255\u024f\u0003\u0002\u0002\u0002\u0255\u0250\u0003", + "\u0002\u0002\u0002\u0255\u0251\u0003\u0002\u0002\u0002\u0255\u0252\u0003", + "\u0002\u0002\u0002\u0255\u0253\u0003\u0002\u0002\u0002\u0255\u0254\u0003", + "\u0002\u0002\u0002\u0256\u0258\u0003\u0002\u0002\u0002\u0257\u0249\u0003", + "\u0002\u0002\u0002\u0257\u0255\u0003\u0002\u0002\u0002\u0258\u0261\u0003", + "\u0002\u0002\u0002\u0259\u025a\f\u0005\u0002\u0002\u025a\u025b\u0005", + "&\u0014\u0002\u025b\u025c\u0005p9\u0006\u025c\u0260\u0003\u0002\u0002", + "\u0002\u025d\u025e\f\u0003\u0002\u0002\u025e\u0260\u0007$\u0002\u0002", + "\u025f\u0259\u0003\u0002\u0002\u0002\u025f\u025d\u0003\u0002\u0002\u0002", + "\u0260\u0263\u0003\u0002\u0002\u0002\u0261\u025f\u0003\u0002\u0002\u0002", + "\u0261\u0262\u0003\u0002\u0002\u0002\u0262q\u0003\u0002\u0002\u0002", + "\u0263\u0261\u0003\u0002\u0002\u0002\u0264\u0266\u00078\u0002\u0002", + "\u0265\u0267\u0005v<\u0002\u0266\u0265\u0003\u0002\u0002\u0002\u0266", + "\u0267\u0003\u0002\u0002\u0002\u0267\u0269\u0003\u0002\u0002\u0002\u0268", + "\u026a\u0005t;\u0002\u0269\u0268\u0003\u0002\u0002\u0002\u0269\u026a", + "\u0003\u0002\u0002\u0002\u026as\u0003\u0002\u0002\u0002\u026b\u026f", + "\u0005\u001c\u000f\u0002\u026c\u0270\u0005<\u001f\u0002\u026d\u0270", + "\u0005L\'\u0002\u026e\u0270\u0005L\'\u0002\u026f\u026c\u0003\u0002\u0002", + "\u0002\u026f\u026d\u0003\u0002\u0002\u0002\u026f\u026e\u0003\u0002\u0002", + "\u0002\u0270u\u0003\u0002\u0002\u0002\u0271\u0272\u0005$\u0013\u0002", + "\u0272\u0273\u0005x=\u0002\u0273w\u0003\u0002\u0002\u0002\u0274\u0275", + "\b=\u0001\u0002\u0275\u0276\u0007\'\u0002\u0002\u0276\u0277\u0005x=", + "\u0002\u0277\u0278\u0007(\u0002\u0002\u0278\u027e\u0003\u0002\u0002", + "\u0002\u0279\u027c\u0005\u0018\r\u0002\u027a\u027c\u0005z>\u0002\u027b", + "\u0279\u0003\u0002\u0002\u0002\u027b\u027a\u0003\u0002\u0002\u0002\u027c", + "\u027e\u0003\u0002\u0002\u0002\u027d\u0274\u0003\u0002\u0002\u0002\u027d", + "\u027b\u0003\u0002\u0002\u0002\u027e\u0287\u0003\u0002\u0002\u0002\u027f", + "\u0280\f\u0005\u0002\u0002\u0280\u0281\u0005&\u0014\u0002\u0281\u0282", + "\u0005x=\u0006\u0282\u0286\u0003\u0002\u0002\u0002\u0283\u0284\f\u0003", + "\u0002\u0002\u0284\u0286\u0007$\u0002\u0002\u0285\u027f\u0003\u0002", + "\u0002\u0002\u0285\u0283\u0003\u0002\u0002\u0002\u0286\u0289\u0003\u0002", + "\u0002\u0002\u0287\u0285\u0003\u0002\u0002\u0002\u0287\u0288\u0003\u0002", + "\u0002\u0002\u0288y\u0003\u0002\u0002\u0002\u0289\u0287\u0003\u0002", + "\u0002\u0002\u028a\u028c\u00079\u0002\u0002\u028b\u028d\u0005|?\u0002", + "\u028c\u028b\u0003\u0002\u0002\u0002\u028c\u028d\u0003\u0002\u0002\u0002", + "\u028d{\u0003\u0002\u0002\u0002\u028e\u028f\u0005\n\u0006\u0002\u028f", + "\u0290\u0007$\u0002\u0002\u0290}\u0003\u0002\u0002\u0002\u0291\u0293", + "\u0007:\u0002\u0002\u0292\u0294\u0005\u0082B\u0002\u0293\u0292\u0003", + "\u0002\u0002\u0002\u0293\u0294\u0003\u0002\u0002\u0002\u0294\u0296\u0003", + "\u0002\u0002\u0002\u0295\u0297\u0005\u0080A\u0002\u0296\u0295\u0003", + "\u0002\u0002\u0002\u0296\u0297\u0003\u0002\u0002\u0002\u0297\u007f\u0003", + "\u0002\u0002\u0002\u0298\u0299\u0005\u001c\u000f\u0002\u0299\u029a\u0005", + "j6\u0002\u029a\u0081\u0003\u0002\u0002\u0002\u029b\u029c\u0005\n\u0006", + "\u0002\u029c\u029d\u0007$\u0002\u0002\u029d\u0083\u0003\u0002\u0002", + "\u0002\u029e\u02a0\u0007;\u0002\u0002\u029f\u02a1\u0005\u0086D\u0002", + "\u02a0\u029f\u0003\u0002\u0002\u0002\u02a0\u02a1\u0003\u0002\u0002\u0002", + "\u02a1\u0085\u0003\u0002\u0002\u0002\u02a2\u02a3\u0005$\u0013\u0002", + "\u02a3\u02a4\u0005\u0088E\u0002\u02a4\u0087\u0003\u0002\u0002\u0002", + "\u02a5\u02a6\bE\u0001\u0002\u02a6\u02a7\u0007\'\u0002\u0002\u02a7\u02a8", + "\u0005\u0088E\u0002\u02a8\u02a9\u0007(\u0002\u0002\u02a9\u02ba\u0003", + "\u0002\u0002\u0002\u02aa\u02b8\u00050\u0019\u0002\u02ab\u02b8\u0005", + "^0\u0002\u02ac\u02b8\u0005b2\u0002\u02ad\u02b8\u0005,\u0017\u0002\u02ae", + "\u02b8\u00054\u001b\u0002\u02af\u02b8\u00058\u001d\u0002\u02b0\u02b8", + "\u0005<\u001f\u0002\u02b1\u02b8\u0005D#\u0002\u02b2\u02b8\u0005L\'\u0002", + "\u02b3\u02b8\u0005j6\u0002\u02b4\u02b8\u0005f4\u0002\u02b5\u02b8\u0005", + "\u0018\r\u0002\u02b6\u02b8\u0005\u008aF\u0002\u02b7\u02aa\u0003\u0002", + "\u0002\u0002\u02b7\u02ab\u0003\u0002\u0002\u0002\u02b7\u02ac\u0003\u0002", + "\u0002\u0002\u02b7\u02ad\u0003\u0002\u0002\u0002\u02b7\u02ae\u0003\u0002", + "\u0002\u0002\u02b7\u02af\u0003\u0002\u0002\u0002\u02b7\u02b0\u0003\u0002", + "\u0002\u0002\u02b7\u02b1\u0003\u0002\u0002\u0002\u02b7\u02b2\u0003\u0002", + "\u0002\u0002\u02b7\u02b3\u0003\u0002\u0002\u0002\u02b7\u02b4\u0003\u0002", + "\u0002\u0002\u02b7\u02b5\u0003\u0002\u0002\u0002\u02b7\u02b6\u0003\u0002", + "\u0002\u0002\u02b8\u02ba\u0003\u0002\u0002\u0002\u02b9\u02a5\u0003\u0002", + "\u0002\u0002\u02b9\u02b7\u0003\u0002\u0002\u0002\u02ba\u02c3\u0003\u0002", + "\u0002\u0002\u02bb\u02bc\f\u0005\u0002\u0002\u02bc\u02bd\u0005&\u0014", + "\u0002\u02bd\u02be\u0005\u0088E\u0006\u02be\u02c2\u0003\u0002\u0002", + "\u0002\u02bf\u02c0\f\u0003\u0002\u0002\u02c0\u02c2\u0007$\u0002\u0002", + "\u02c1\u02bb\u0003\u0002\u0002\u0002\u02c1\u02bf\u0003\u0002\u0002\u0002", + "\u02c2\u02c5\u0003\u0002\u0002\u0002\u02c3\u02c1\u0003\u0002\u0002\u0002", + "\u02c3\u02c4\u0003\u0002\u0002\u0002\u02c4\u0089\u0003\u0002\u0002\u0002", + "\u02c5\u02c3\u0003\u0002\u0002\u0002\u02c6\u02c8\u0007<\u0002\u0002", + "\u02c7\u02c9\u0005\u008eH\u0002\u02c8\u02c7\u0003\u0002\u0002\u0002", + "\u02c8\u02c9\u0003\u0002\u0002\u0002\u02c9\u02cb\u0003\u0002\u0002\u0002", + "\u02ca\u02cc\u0005\u008cG\u0002\u02cb\u02ca\u0003\u0002\u0002\u0002", + "\u02cb\u02cc\u0003\u0002\u0002\u0002\u02cc\u008b\u0003\u0002\u0002\u0002", + "\u02cd\u02ce\u0005\u001c\u000f\u0002\u02ce\u02cf\u0005\u0084C\u0002", + "\u02cf\u008d\u0003\u0002\u0002\u0002\u02d0\u02d1\u0005$\u0013\u0002", + "\u02d1\u02d2\u0005\u0090I\u0002\u02d2\u008f\u0003\u0002\u0002\u0002", + "\u02d3\u02d4\bI\u0001\u0002\u02d4\u02d5\u0007\'\u0002\u0002\u02d5\u02d6", + "\u0005\u0090I\u0002\u02d6\u02d7\u0007(\u0002\u0002\u02d7\u02e9\u0003", + "\u0002\u0002\u0002\u02d8\u02e7\u00050\u0019\u0002\u02d9\u02e7\u0005", + "^0\u0002\u02da\u02e7\u0005b2\u0002\u02db\u02e7\u0005,\u0017\u0002\u02dc", + "\u02e7\u00054\u001b\u0002\u02dd\u02e7\u00058\u001d\u0002\u02de\u02e7", + "\u0005<\u001f\u0002\u02df\u02e7\u0005\u008aF\u0002\u02e0\u02e7\u0003", + "\u0002\u0002\u0002\u02e1\u02e7\u0005D#\u0002\u02e2\u02e7\u0005L\'\u0002", + "\u02e3\u02e7\u0005j6\u0002\u02e4\u02e7\u0005f4\u0002\u02e5\u02e7\u0005", + "\u0018\r\u0002\u02e6\u02d8\u0003\u0002\u0002\u0002\u02e6\u02d9\u0003", + "\u0002\u0002\u0002\u02e6\u02da\u0003\u0002\u0002\u0002\u02e6\u02db\u0003", + "\u0002\u0002\u0002\u02e6\u02dc\u0003\u0002\u0002\u0002\u02e6\u02dd\u0003", + "\u0002\u0002\u0002\u02e6\u02de\u0003\u0002\u0002\u0002\u02e6\u02df\u0003", + "\u0002\u0002\u0002\u02e6\u02e0\u0003\u0002\u0002\u0002\u02e6\u02e1\u0003", + "\u0002\u0002\u0002\u02e6\u02e2\u0003\u0002\u0002\u0002\u02e6\u02e3\u0003", + "\u0002\u0002\u0002\u02e6\u02e4\u0003\u0002\u0002\u0002\u02e6\u02e5\u0003", + "\u0002\u0002\u0002\u02e7\u02e9\u0003\u0002\u0002\u0002\u02e8\u02d3\u0003", + "\u0002\u0002\u0002\u02e8\u02e6\u0003\u0002\u0002\u0002\u02e9\u02f2\u0003", + "\u0002\u0002\u0002\u02ea\u02eb\f\u0005\u0002\u0002\u02eb\u02ec\u0005", + "&\u0014\u0002\u02ec\u02ed\u0005\u0090I\u0006\u02ed\u02f1\u0003\u0002", + "\u0002\u0002\u02ee\u02ef\f\u0003\u0002\u0002\u02ef\u02f1\u0007$\u0002", + "\u0002\u02f0\u02ea\u0003\u0002\u0002\u0002\u02f0\u02ee\u0003\u0002\u0002", + "\u0002\u02f1\u02f4\u0003\u0002\u0002\u0002\u02f2\u02f0\u0003\u0002\u0002", + "\u0002\u02f2\u02f3\u0003\u0002\u0002\u0002\u02f3\u0091\u0003\u0002\u0002", + "\u0002\u02f4\u02f2\u0003\u0002\u0002\u0002X\u0095\u0099\u009c\u00a1", + "\u00c9\u00d2\u00d4\u00dd\u00e3\u00e9\u00ef\u00f4\u00fb\u0102\u0109\u010c", + "\u0112\u0114\u0121\u0123\u012b\u012d\u0137\u0149\u014d\u0154\u015b\u0163", + "\u0170\u017d\u0181\u0184\u019b\u019d\u01a5\u01a7\u01ac\u01af\u01c2\u01c4", + "\u01cc\u01ce\u01d3\u01d6\u01ec\u01ee\u01f6\u01f8\u01fd\u0209\u020b\u0213", + "\u0215\u021a\u0222\u0226\u022d\u0234\u023b\u023e\u0244\u0255\u0257\u025f", + "\u0261\u0266\u0269\u026f\u027b\u027d\u0285\u0287\u028c\u0293\u0296\u02a0", + "\u02b7\u02b9\u02c1\u02c3\u02c8\u02cb\u02e6\u02e8\u02f0\u02f2"].join(""); var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -537,18 +548,19 @@ var ruleNames = [ "inputSentence", "mustClause", "words", "word", "combinatoria "symbols", "end", "emptyLine", "identifier", "identifiers", "commentPrefix", "comments", "must", "of", "and", "or", "have", "withWord", "binary", "names", "nameCondition", - "annotations", "annotationCondition", "extensions", "extensionCondition", - "implementations", "implementationCondition", "functions", - "functionOf", "functionCondition", "functionExpression", - "abstractFunctions", "abstractFunctionOf", "abstractFunctionCondition", - "abstractFunctionExpression", "constructors", "constructorOf", - "constructorCondition", "constructorExpression", "parameters", - "parameterCondition", "parameterExpression", "types", - "typeCondition", "specifiers", "specifierCondition", - "visibilities", "visibilityCondition", "returnValues", - "returnValueCondition", "declarationStatements", "declarationStatementOf", - "declarationStatementCondition", "declarationStatementExpression", - "expressionStatements", "expressionStatementOf", "expressionStatementCondition", + "classNames", "classNameCondition", "annotations", "annotationCondition", + "extensions", "extensionCondition", "implementations", + "implementationCondition", "functions", "functionOf", + "functionCondition", "functionExpression", "abstractFunctions", + "abstractFunctionOf", "abstractFunctionCondition", "abstractFunctionExpression", + "constructors", "constructorOf", "constructorCondition", + "constructorExpression", "parameters", "parameterCondition", + "parameterExpression", "types", "typeCondition", "specifiers", + "specifierCondition", "visibilities", "visibilityCondition", + "returnValues", "returnValueCondition", "declarationStatements", + "declarationStatementOf", "declarationStatementCondition", + "declarationStatementExpression", "expressionStatements", + "expressionStatementOf", "expressionStatementCondition", "expressionStatementExpression", "value", "valueCondition", "initialValues", "initialValueOf", "initialValueCondition", "classes", "classCondition", "classExpression", "subclasses", @@ -653,55 +665,57 @@ rulePadGrammarParser.RULE_withWord = 17; rulePadGrammarParser.RULE_binary = 18; rulePadGrammarParser.RULE_names = 19; rulePadGrammarParser.RULE_nameCondition = 20; -rulePadGrammarParser.RULE_annotations = 21; -rulePadGrammarParser.RULE_annotationCondition = 22; -rulePadGrammarParser.RULE_extensions = 23; -rulePadGrammarParser.RULE_extensionCondition = 24; -rulePadGrammarParser.RULE_implementations = 25; -rulePadGrammarParser.RULE_implementationCondition = 26; -rulePadGrammarParser.RULE_functions = 27; -rulePadGrammarParser.RULE_functionOf = 28; -rulePadGrammarParser.RULE_functionCondition = 29; -rulePadGrammarParser.RULE_functionExpression = 30; -rulePadGrammarParser.RULE_abstractFunctions = 31; -rulePadGrammarParser.RULE_abstractFunctionOf = 32; -rulePadGrammarParser.RULE_abstractFunctionCondition = 33; -rulePadGrammarParser.RULE_abstractFunctionExpression = 34; -rulePadGrammarParser.RULE_constructors = 35; -rulePadGrammarParser.RULE_constructorOf = 36; -rulePadGrammarParser.RULE_constructorCondition = 37; -rulePadGrammarParser.RULE_constructorExpression = 38; -rulePadGrammarParser.RULE_parameters = 39; -rulePadGrammarParser.RULE_parameterCondition = 40; -rulePadGrammarParser.RULE_parameterExpression = 41; -rulePadGrammarParser.RULE_types = 42; -rulePadGrammarParser.RULE_typeCondition = 43; -rulePadGrammarParser.RULE_specifiers = 44; -rulePadGrammarParser.RULE_specifierCondition = 45; -rulePadGrammarParser.RULE_visibilities = 46; -rulePadGrammarParser.RULE_visibilityCondition = 47; -rulePadGrammarParser.RULE_returnValues = 48; -rulePadGrammarParser.RULE_returnValueCondition = 49; -rulePadGrammarParser.RULE_declarationStatements = 50; -rulePadGrammarParser.RULE_declarationStatementOf = 51; -rulePadGrammarParser.RULE_declarationStatementCondition = 52; -rulePadGrammarParser.RULE_declarationStatementExpression = 53; -rulePadGrammarParser.RULE_expressionStatements = 54; -rulePadGrammarParser.RULE_expressionStatementOf = 55; -rulePadGrammarParser.RULE_expressionStatementCondition = 56; -rulePadGrammarParser.RULE_expressionStatementExpression = 57; -rulePadGrammarParser.RULE_value = 58; -rulePadGrammarParser.RULE_valueCondition = 59; -rulePadGrammarParser.RULE_initialValues = 60; -rulePadGrammarParser.RULE_initialValueOf = 61; -rulePadGrammarParser.RULE_initialValueCondition = 62; -rulePadGrammarParser.RULE_classes = 63; -rulePadGrammarParser.RULE_classCondition = 64; -rulePadGrammarParser.RULE_classExpression = 65; -rulePadGrammarParser.RULE_subclasses = 66; -rulePadGrammarParser.RULE_subclassOf = 67; -rulePadGrammarParser.RULE_subclassCondition = 68; -rulePadGrammarParser.RULE_subclassExpression = 69; +rulePadGrammarParser.RULE_classNames = 21; +rulePadGrammarParser.RULE_classNameCondition = 22; +rulePadGrammarParser.RULE_annotations = 23; +rulePadGrammarParser.RULE_annotationCondition = 24; +rulePadGrammarParser.RULE_extensions = 25; +rulePadGrammarParser.RULE_extensionCondition = 26; +rulePadGrammarParser.RULE_implementations = 27; +rulePadGrammarParser.RULE_implementationCondition = 28; +rulePadGrammarParser.RULE_functions = 29; +rulePadGrammarParser.RULE_functionOf = 30; +rulePadGrammarParser.RULE_functionCondition = 31; +rulePadGrammarParser.RULE_functionExpression = 32; +rulePadGrammarParser.RULE_abstractFunctions = 33; +rulePadGrammarParser.RULE_abstractFunctionOf = 34; +rulePadGrammarParser.RULE_abstractFunctionCondition = 35; +rulePadGrammarParser.RULE_abstractFunctionExpression = 36; +rulePadGrammarParser.RULE_constructors = 37; +rulePadGrammarParser.RULE_constructorOf = 38; +rulePadGrammarParser.RULE_constructorCondition = 39; +rulePadGrammarParser.RULE_constructorExpression = 40; +rulePadGrammarParser.RULE_parameters = 41; +rulePadGrammarParser.RULE_parameterCondition = 42; +rulePadGrammarParser.RULE_parameterExpression = 43; +rulePadGrammarParser.RULE_types = 44; +rulePadGrammarParser.RULE_typeCondition = 45; +rulePadGrammarParser.RULE_specifiers = 46; +rulePadGrammarParser.RULE_specifierCondition = 47; +rulePadGrammarParser.RULE_visibilities = 48; +rulePadGrammarParser.RULE_visibilityCondition = 49; +rulePadGrammarParser.RULE_returnValues = 50; +rulePadGrammarParser.RULE_returnValueCondition = 51; +rulePadGrammarParser.RULE_declarationStatements = 52; +rulePadGrammarParser.RULE_declarationStatementOf = 53; +rulePadGrammarParser.RULE_declarationStatementCondition = 54; +rulePadGrammarParser.RULE_declarationStatementExpression = 55; +rulePadGrammarParser.RULE_expressionStatements = 56; +rulePadGrammarParser.RULE_expressionStatementOf = 57; +rulePadGrammarParser.RULE_expressionStatementCondition = 58; +rulePadGrammarParser.RULE_expressionStatementExpression = 59; +rulePadGrammarParser.RULE_value = 60; +rulePadGrammarParser.RULE_valueCondition = 61; +rulePadGrammarParser.RULE_initialValues = 62; +rulePadGrammarParser.RULE_initialValueOf = 63; +rulePadGrammarParser.RULE_initialValueCondition = 64; +rulePadGrammarParser.RULE_classes = 65; +rulePadGrammarParser.RULE_classCondition = 66; +rulePadGrammarParser.RULE_classExpression = 67; +rulePadGrammarParser.RULE_subclasses = 68; +rulePadGrammarParser.RULE_subclassOf = 69; +rulePadGrammarParser.RULE_subclassCondition = 70; +rulePadGrammarParser.RULE_subclassExpression = 71; function InputSentenceContext(parser, parent, invokingState) { if(parent===undefined) { @@ -778,21 +792,21 @@ rulePadGrammarParser.prototype.inputSentence = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 147; + this.state = 151; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.EOF: case rulePadGrammarParser.T__6: case rulePadGrammarParser.NL: - this.state = 143; + this.state = 147; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,0,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 140; + this.state = 144; this.emptyLine(); } - this.state = 145; + this.state = 149; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,0,this._ctx); } @@ -805,31 +819,31 @@ rulePadGrammarParser.prototype.inputSentence = function() { case rulePadGrammarParser.DeclarationStatement: case rulePadGrammarParser.CLASSES: case rulePadGrammarParser.SUBCLASSES: - this.state = 146; + this.state = 150; this.mustClause(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 150; + this.state = 154; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===rulePadGrammarParser.T__6) { - this.state = 149; + this.state = 153; this.end(); } - this.state = 155; + this.state = 159; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===rulePadGrammarParser.NL) { - this.state = 152; + this.state = 156; this.match(rulePadGrammarParser.NL); - this.state = 157; + this.state = 161; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 158; + this.state = 162; this.match(rulePadGrammarParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -947,84 +961,84 @@ rulePadGrammarParser.prototype.mustClause = function() { var localctx = new MustClauseContext(this, this._ctx, this.state); this.enterRule(localctx, 2, rulePadGrammarParser.RULE_mustClause); try { - this.state = 195; + this.state = 199; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.FUNCTION: this.enterOuterAlt(localctx, 1); - this.state = 160; + this.state = 164; this.functions(); - this.state = 161; + this.state = 165; this.must(); - this.state = 162; + this.state = 166; this.have(); - this.state = 163; + this.state = 167; this.functionExpression(0); break; case rulePadGrammarParser.AbstractFunctions: this.enterOuterAlt(localctx, 2); - this.state = 165; + this.state = 169; this.abstractFunctions(); - this.state = 166; + this.state = 170; this.must(); - this.state = 167; + this.state = 171; this.have(); - this.state = 168; + this.state = 172; this.abstractFunctionExpression(0); break; case rulePadGrammarParser.CONSTRUCTOR: this.enterOuterAlt(localctx, 3); - this.state = 170; + this.state = 174; this.constructors(); - this.state = 171; + this.state = 175; this.must(); - this.state = 172; + this.state = 176; this.have(); - this.state = 173; + this.state = 177; this.constructorExpression(0); break; case rulePadGrammarParser.CLASSES: this.enterOuterAlt(localctx, 4); - this.state = 175; + this.state = 179; this.classes(); - this.state = 176; + this.state = 180; this.must(); - this.state = 177; + this.state = 181; this.have(); - this.state = 178; + this.state = 182; this.classExpression(0); break; case rulePadGrammarParser.PARAMETER: this.enterOuterAlt(localctx, 5); - this.state = 180; + this.state = 184; this.parameters(); - this.state = 181; + this.state = 185; this.must(); - this.state = 182; + this.state = 186; this.have(); - this.state = 183; + this.state = 187; this.parameterExpression(0); break; case rulePadGrammarParser.DeclarationStatement: this.enterOuterAlt(localctx, 6); - this.state = 185; + this.state = 189; this.declarationStatements(); - this.state = 186; + this.state = 190; this.must(); - this.state = 187; + this.state = 191; this.have(); - this.state = 188; + this.state = 192; this.declarationStatementExpression(0); break; case rulePadGrammarParser.SUBCLASSES: this.enterOuterAlt(localctx, 7); - this.state = 190; + this.state = 194; this.subclasses(); - this.state = 191; + this.state = 195; this.must(); - this.state = 192; + this.state = 196; this.have(); - this.state = 193; + this.state = 197; this.subclassExpression(0); break; default: @@ -1094,41 +1108,41 @@ rulePadGrammarParser.prototype.words = function() { this.enterRule(localctx, 4, rulePadGrammarParser.RULE_words); try { this.enterOuterAlt(localctx, 1); - this.state = 197; + this.state = 201; this.match(rulePadGrammarParser.T__0); - this.state = 206; + this.state = 210; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,6,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 204; + this.state = 208; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,5,this._ctx); switch(la_) { case 1: - this.state = 198; + this.state = 202; this.word(); - this.state = 199; + this.state = 203; this.match(rulePadGrammarParser.T__1); break; case 2: - this.state = 201; + this.state = 205; this.word(); - this.state = 202; + this.state = 206; this.match(rulePadGrammarParser.T__2); break; } } - this.state = 208; + this.state = 212; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,6,this._ctx); } - this.state = 209; + this.state = 213; this.word(); - this.state = 210; + this.state = 214; this.match(rulePadGrammarParser.T__0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1195,19 +1209,19 @@ rulePadGrammarParser.prototype.word = function() { this.enterRule(localctx, 6, rulePadGrammarParser.RULE_word); var _la = 0; // Token type try { - this.state = 262; + this.state = 266; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,15,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 213; + this.state = 217; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 212; + this.state = 216; this.match(rulePadGrammarParser.Alphabet); - this.state = 215; + this.state = 219; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); @@ -1215,15 +1229,15 @@ rulePadGrammarParser.prototype.word = function() { case 2: this.enterOuterAlt(localctx, 2); - this.state = 217; + this.state = 221; this.match(rulePadGrammarParser.T__3); - this.state = 219; + this.state = 223; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 218; + this.state = 222; this.match(rulePadGrammarParser.Alphabet); - this.state = 221; + this.state = 225; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); @@ -1231,15 +1245,15 @@ rulePadGrammarParser.prototype.word = function() { case 3: this.enterOuterAlt(localctx, 3); - this.state = 223; + this.state = 227; this.match(rulePadGrammarParser.T__4); - this.state = 225; + this.state = 229; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 224; + this.state = 228; this.match(rulePadGrammarParser.Alphabet); - this.state = 227; + this.state = 231; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); @@ -1247,15 +1261,15 @@ rulePadGrammarParser.prototype.word = function() { case 4: this.enterOuterAlt(localctx, 4); - this.state = 229; + this.state = 233; this.match(rulePadGrammarParser.T__5); - this.state = 231; + this.state = 235; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 230; + this.state = 234; this.match(rulePadGrammarParser.Alphabet); - this.state = 233; + this.state = 237; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); @@ -1263,71 +1277,71 @@ rulePadGrammarParser.prototype.word = function() { case 5: this.enterOuterAlt(localctx, 5); - this.state = 236; + this.state = 240; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 235; + this.state = 239; this.match(rulePadGrammarParser.Alphabet); - this.state = 238; + this.state = 242; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); - this.state = 240; + this.state = 244; this.match(rulePadGrammarParser.T__4); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 241; + this.state = 245; this.match(rulePadGrammarParser.T__3); - this.state = 243; + this.state = 247; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 242; + this.state = 246; this.match(rulePadGrammarParser.Alphabet); - this.state = 245; + this.state = 249; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); - this.state = 247; + this.state = 251; this.match(rulePadGrammarParser.T__4); break; case 7: this.enterOuterAlt(localctx, 7); - this.state = 248; + this.state = 252; this.match(rulePadGrammarParser.T__4); - this.state = 250; + this.state = 254; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 249; + this.state = 253; this.match(rulePadGrammarParser.Alphabet); - this.state = 252; + this.state = 256; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); - this.state = 254; + this.state = 258; this.match(rulePadGrammarParser.T__4); break; case 8: this.enterOuterAlt(localctx, 8); - this.state = 255; + this.state = 259; this.match(rulePadGrammarParser.T__5); - this.state = 257; + this.state = 261; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 256; + this.state = 260; this.match(rulePadGrammarParser.Alphabet); - this.state = 259; + this.state = 263; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===rulePadGrammarParser.Alphabet); - this.state = 261; + this.state = 265; this.match(rulePadGrammarParser.T__4); break; @@ -1421,17 +1435,17 @@ rulePadGrammarParser.prototype.combinatorialWords = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 264; + this.state = 268; this.match(rulePadGrammarParser.T__0); - this.state = 268; + this.state = 272; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 268; + this.state = 272; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.Alphabet: - this.state = 265; + this.state = 269; this.match(rulePadGrammarParser.Alphabet); break; case rulePadGrammarParser.T__6: @@ -1443,21 +1457,21 @@ rulePadGrammarParser.prototype.combinatorialWords = function() { case rulePadGrammarParser.T__12: case rulePadGrammarParser.LPAREN: case rulePadGrammarParser.RPAREN: - this.state = 266; + this.state = 270; this.symbols(); break; case rulePadGrammarParser.SPACE: - this.state = 267; + this.state = 271; this.match(rulePadGrammarParser.SPACE); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 270; + this.state = 274; this._errHandler.sync(this); _la = this._input.LA(1); } while(((((_la - 7)) & ~0x1f) == 0 && ((1 << (_la - 7)) & ((1 << (rulePadGrammarParser.T__6 - 7)) | (1 << (rulePadGrammarParser.T__7 - 7)) | (1 << (rulePadGrammarParser.T__8 - 7)) | (1 << (rulePadGrammarParser.T__9 - 7)) | (1 << (rulePadGrammarParser.T__10 - 7)) | (1 << (rulePadGrammarParser.T__11 - 7)) | (1 << (rulePadGrammarParser.T__12 - 7)) | (1 << (rulePadGrammarParser.SPACE - 7)) | (1 << (rulePadGrammarParser.Alphabet - 7)) | (1 << (rulePadGrammarParser.LPAREN - 7)) | (1 << (rulePadGrammarParser.RPAREN - 7)))) !== 0)); - this.state = 272; + this.state = 276; this.match(rulePadGrammarParser.T__0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1514,7 +1528,7 @@ rulePadGrammarParser.prototype.symbols = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 274; + this.state = 278; _la = this._input.LA(1); if(!(((((_la - 7)) & ~0x1f) == 0 && ((1 << (_la - 7)) & ((1 << (rulePadGrammarParser.T__6 - 7)) | (1 << (rulePadGrammarParser.T__7 - 7)) | (1 << (rulePadGrammarParser.T__8 - 7)) | (1 << (rulePadGrammarParser.T__9 - 7)) | (1 << (rulePadGrammarParser.T__10 - 7)) | (1 << (rulePadGrammarParser.T__11 - 7)) | (1 << (rulePadGrammarParser.T__12 - 7)) | (1 << (rulePadGrammarParser.LPAREN - 7)) | (1 << (rulePadGrammarParser.RPAREN - 7)))) !== 0))) { this._errHandler.recoverInline(this); @@ -1577,7 +1591,7 @@ rulePadGrammarParser.prototype.end = function() { this.enterRule(localctx, 12, rulePadGrammarParser.RULE_end); try { this.enterOuterAlt(localctx, 1); - this.state = 276; + this.state = 280; this.match(rulePadGrammarParser.T__6); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1636,7 +1650,7 @@ rulePadGrammarParser.prototype.emptyLine = function() { this.enterRule(localctx, 14, rulePadGrammarParser.RULE_emptyLine); try { this.enterOuterAlt(localctx, 1); - this.state = 278; + this.state = 282; this.match(rulePadGrammarParser.NL); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1727,15 +1741,15 @@ rulePadGrammarParser.prototype.identifier = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 283; + this.state = 287; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 283; + this.state = 287; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.Alphabet: - this.state = 280; + this.state = 284; this.match(rulePadGrammarParser.Alphabet); break; case rulePadGrammarParser.T__6: @@ -1747,17 +1761,17 @@ rulePadGrammarParser.prototype.identifier = function() { case rulePadGrammarParser.T__12: case rulePadGrammarParser.LPAREN: case rulePadGrammarParser.RPAREN: - this.state = 281; + this.state = 285; this.symbols(); break; case rulePadGrammarParser.SPACE: - this.state = 282; + this.state = 286; this.match(rulePadGrammarParser.SPACE); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 285; + this.state = 289; this._errHandler.sync(this); _la = this._input.LA(1); } while(((((_la - 7)) & ~0x1f) == 0 && ((1 << (_la - 7)) & ((1 << (rulePadGrammarParser.T__6 - 7)) | (1 << (rulePadGrammarParser.T__7 - 7)) | (1 << (rulePadGrammarParser.T__8 - 7)) | (1 << (rulePadGrammarParser.T__9 - 7)) | (1 << (rulePadGrammarParser.T__10 - 7)) | (1 << (rulePadGrammarParser.T__11 - 7)) | (1 << (rulePadGrammarParser.T__12 - 7)) | (1 << (rulePadGrammarParser.SPACE - 7)) | (1 << (rulePadGrammarParser.Alphabet - 7)) | (1 << (rulePadGrammarParser.LPAREN - 7)) | (1 << (rulePadGrammarParser.RPAREN - 7)))) !== 0)); @@ -1825,37 +1839,37 @@ rulePadGrammarParser.prototype.identifiers = function() { this.enterRule(localctx, 18, rulePadGrammarParser.RULE_identifiers); try { this.enterOuterAlt(localctx, 1); - this.state = 295; + this.state = 299; this._errHandler.sync(this); var _alt = this._interp.adaptivePredict(this._input,21,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 293; + this.state = 297; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,20,this._ctx); switch(la_) { case 1: - this.state = 287; + this.state = 291; this.identifier(); - this.state = 288; + this.state = 292; this.match(rulePadGrammarParser.T__1); break; case 2: - this.state = 290; + this.state = 294; this.identifier(); - this.state = 291; + this.state = 295; this.match(rulePadGrammarParser.T__2); break; } } - this.state = 297; + this.state = 301; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input,21,this._ctx); } - this.state = 298; + this.state = 302; this.identifier(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1912,7 +1926,7 @@ rulePadGrammarParser.prototype.commentPrefix = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 300; + this.state = 304; _la = this._input.LA(1); if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << rulePadGrammarParser.T__13) | (1 << rulePadGrammarParser.T__14) | (1 << rulePadGrammarParser.T__15) | (1 << rulePadGrammarParser.T__16) | (1 << rulePadGrammarParser.T__17) | (1 << rulePadGrammarParser.T__18) | (1 << rulePadGrammarParser.T__19) | (1 << rulePadGrammarParser.T__20) | (1 << rulePadGrammarParser.T__21) | (1 << rulePadGrammarParser.T__22) | (1 << rulePadGrammarParser.T__23) | (1 << rulePadGrammarParser.T__24) | (1 << rulePadGrammarParser.T__25) | (1 << rulePadGrammarParser.T__26))) !== 0))) { this._errHandler.recoverInline(this); @@ -1983,19 +1997,19 @@ rulePadGrammarParser.prototype.comments = function() { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 302; + this.state = 306; this.match(rulePadGrammarParser.T__0); - this.state = 303; + this.state = 307; this.commentPrefix(); - this.state = 305; + this.state = 309; this._errHandler.sync(this); _la = this._input.LA(1); if(((((_la - 7)) & ~0x1f) == 0 && ((1 << (_la - 7)) & ((1 << (rulePadGrammarParser.T__6 - 7)) | (1 << (rulePadGrammarParser.T__7 - 7)) | (1 << (rulePadGrammarParser.T__8 - 7)) | (1 << (rulePadGrammarParser.T__9 - 7)) | (1 << (rulePadGrammarParser.T__10 - 7)) | (1 << (rulePadGrammarParser.T__11 - 7)) | (1 << (rulePadGrammarParser.T__12 - 7)) | (1 << (rulePadGrammarParser.SPACE - 7)) | (1 << (rulePadGrammarParser.Alphabet - 7)) | (1 << (rulePadGrammarParser.LPAREN - 7)) | (1 << (rulePadGrammarParser.RPAREN - 7)))) !== 0)) { - this.state = 304; + this.state = 308; this.identifiers(); } - this.state = 307; + this.state = 311; this.match(rulePadGrammarParser.T__0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2051,7 +2065,7 @@ rulePadGrammarParser.prototype.must = function() { this.enterRule(localctx, 24, rulePadGrammarParser.RULE_must); try { this.enterOuterAlt(localctx, 1); - this.state = 309; + this.state = 313; this.match(rulePadGrammarParser.T__27); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2107,7 +2121,7 @@ rulePadGrammarParser.prototype.of = function() { this.enterRule(localctx, 26, rulePadGrammarParser.RULE_of); try { this.enterOuterAlt(localctx, 1); - this.state = 311; + this.state = 315; this.match(rulePadGrammarParser.T__28); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2163,7 +2177,7 @@ rulePadGrammarParser.prototype.and = function() { this.enterRule(localctx, 28, rulePadGrammarParser.RULE_and); try { this.enterOuterAlt(localctx, 1); - this.state = 313; + this.state = 317; this.match(rulePadGrammarParser.T__29); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2219,7 +2233,7 @@ rulePadGrammarParser.prototype.or = function() { this.enterRule(localctx, 30, rulePadGrammarParser.RULE_or); try { this.enterOuterAlt(localctx, 1); - this.state = 315; + this.state = 319; this.match(rulePadGrammarParser.T__30); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2275,7 +2289,7 @@ rulePadGrammarParser.prototype.have = function() { this.enterRule(localctx, 32, rulePadGrammarParser.RULE_have); try { this.enterOuterAlt(localctx, 1); - this.state = 317; + this.state = 321; this.match(rulePadGrammarParser.T__31); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2331,7 +2345,7 @@ rulePadGrammarParser.prototype.withWord = function() { this.enterRule(localctx, 34, rulePadGrammarParser.RULE_withWord); try { this.enterOuterAlt(localctx, 1); - this.state = 319; + this.state = 323; this.match(rulePadGrammarParser.T__32); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2393,17 +2407,17 @@ rulePadGrammarParser.prototype.binary = function() { var localctx = new BinaryContext(this, this._ctx, this.state); this.enterRule(localctx, 36, rulePadGrammarParser.RULE_binary); try { - this.state = 323; + this.state = 327; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.T__29: this.enterOuterAlt(localctx, 1); - this.state = 321; + this.state = 325; this.and(); break; case rulePadGrammarParser.T__30: this.enterOuterAlt(localctx, 2); - this.state = 322; + this.state = 326; this.or(); break; default: @@ -2470,13 +2484,13 @@ rulePadGrammarParser.prototype.names = function() { this.enterRule(localctx, 38, rulePadGrammarParser.RULE_names); try { this.enterOuterAlt(localctx, 1); - this.state = 325; + this.state = 329; this.match(rulePadGrammarParser.NAME); - this.state = 327; + this.state = 331; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,24,this._ctx); if(la_===1) { - this.state = 326; + this.state = 330; this.nameCondition(); } @@ -2541,9 +2555,145 @@ rulePadGrammarParser.prototype.nameCondition = function() { this.enterRule(localctx, 40, rulePadGrammarParser.RULE_nameCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 329; + this.state = 333; this.words(); - this.state = 330; + this.state = 334; + this.match(rulePadGrammarParser.SPACE); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; +}; + +function ClassNamesContext(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.parser = parser; + this.ruleIndex = rulePadGrammarParser.RULE_classNames; + return this; +} + +ClassNamesContext.prototype = Object.create(antlr4.ParserRuleContext.prototype); +ClassNamesContext.prototype.constructor = ClassNamesContext; + +ClassNamesContext.prototype.NAME = function() { + return this.getToken(rulePadGrammarParser.NAME, 0); +}; + +ClassNamesContext.prototype.classNameCondition = function() { + return this.getTypedRuleContext(ClassNameConditionContext,0); +}; + +ClassNamesContext.prototype.enterRule = function(listener) { + if(listener instanceof rulePadGrammarListener ) { + listener.enterClassNames(this); + } +}; + +ClassNamesContext.prototype.exitRule = function(listener) { + if(listener instanceof rulePadGrammarListener ) { + listener.exitClassNames(this); + } +}; + + + + +rulePadGrammarParser.ClassNamesContext = ClassNamesContext; + +rulePadGrammarParser.prototype.classNames = function() { + + var localctx = new ClassNamesContext(this, this._ctx, this.state); + this.enterRule(localctx, 42, rulePadGrammarParser.RULE_classNames); + try { + this.enterOuterAlt(localctx, 1); + this.state = 336; + this.match(rulePadGrammarParser.NAME); + this.state = 338; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,25,this._ctx); + if(la_===1) { + this.state = 337; + this.classNameCondition(); + + } + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; +}; + +function ClassNameConditionContext(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + antlr4.ParserRuleContext.call(this, parent, invokingState); + this.parser = parser; + this.ruleIndex = rulePadGrammarParser.RULE_classNameCondition; + return this; +} + +ClassNameConditionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype); +ClassNameConditionContext.prototype.constructor = ClassNameConditionContext; + +ClassNameConditionContext.prototype.combinatorialWords = function() { + return this.getTypedRuleContext(CombinatorialWordsContext,0); +}; + +ClassNameConditionContext.prototype.SPACE = function() { + return this.getToken(rulePadGrammarParser.SPACE, 0); +}; + +ClassNameConditionContext.prototype.enterRule = function(listener) { + if(listener instanceof rulePadGrammarListener ) { + listener.enterClassNameCondition(this); + } +}; + +ClassNameConditionContext.prototype.exitRule = function(listener) { + if(listener instanceof rulePadGrammarListener ) { + listener.exitClassNameCondition(this); + } +}; + + + + +rulePadGrammarParser.ClassNameConditionContext = ClassNameConditionContext; + +rulePadGrammarParser.prototype.classNameCondition = function() { + + var localctx = new ClassNameConditionContext(this, this._ctx, this.state); + this.enterRule(localctx, 44, rulePadGrammarParser.RULE_classNameCondition); + try { + this.enterOuterAlt(localctx, 1); + this.state = 340; + this.combinatorialWords(); + this.state = 341; this.match(rulePadGrammarParser.SPACE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2603,16 +2753,16 @@ rulePadGrammarParser.AnnotationsContext = AnnotationsContext; rulePadGrammarParser.prototype.annotations = function() { var localctx = new AnnotationsContext(this, this._ctx, this.state); - this.enterRule(localctx, 42, rulePadGrammarParser.RULE_annotations); + this.enterRule(localctx, 46, rulePadGrammarParser.RULE_annotations); try { this.enterOuterAlt(localctx, 1); - this.state = 332; + this.state = 343; this.match(rulePadGrammarParser.ANNOTATION); - this.state = 334; + this.state = 345; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,25,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,26,this._ctx); if(la_===1) { - this.state = 333; + this.state = 344; this.annotationCondition(); } @@ -2678,25 +2828,25 @@ rulePadGrammarParser.AnnotationConditionContext = AnnotationConditionContext; rulePadGrammarParser.prototype.annotationCondition = function() { var localctx = new AnnotationConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 44, rulePadGrammarParser.RULE_annotationCondition); + this.enterRule(localctx, 48, rulePadGrammarParser.RULE_annotationCondition); try { - this.state = 342; + this.state = 353; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,26,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,27,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 336; + this.state = 347; this.combinatorialWords(); - this.state = 337; + this.state = 348; this.match(rulePadGrammarParser.SPACE); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 339; + this.state = 350; this.words(); - this.state = 340; + this.state = 351; this.match(rulePadGrammarParser.SPACE); break; @@ -2759,12 +2909,12 @@ rulePadGrammarParser.ExtensionsContext = ExtensionsContext; rulePadGrammarParser.prototype.extensions = function() { var localctx = new ExtensionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 46, rulePadGrammarParser.RULE_extensions); + this.enterRule(localctx, 50, rulePadGrammarParser.RULE_extensions); try { this.enterOuterAlt(localctx, 1); - this.state = 344; + this.state = 355; this.match(rulePadGrammarParser.EXTENSION); - this.state = 345; + this.state = 356; this.extensionCondition(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2800,14 +2950,18 @@ ExtensionConditionContext.prototype.of = function() { return this.getTypedRuleContext(OfContext,0); }; -ExtensionConditionContext.prototype.words = function() { - return this.getTypedRuleContext(WordsContext,0); +ExtensionConditionContext.prototype.combinatorialWords = function() { + return this.getTypedRuleContext(CombinatorialWordsContext,0); }; ExtensionConditionContext.prototype.SPACE = function() { return this.getToken(rulePadGrammarParser.SPACE, 0); }; +ExtensionConditionContext.prototype.words = function() { + return this.getTypedRuleContext(WordsContext,0); +}; + ExtensionConditionContext.prototype.SUPERCLASS = function() { return this.getToken(rulePadGrammarParser.SUPERCLASS, 0); }; @@ -2832,26 +2986,34 @@ rulePadGrammarParser.ExtensionConditionContext = ExtensionConditionContext; rulePadGrammarParser.prototype.extensionCondition = function() { var localctx = new ExtensionConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 48, rulePadGrammarParser.RULE_extensionCondition); + this.enterRule(localctx, 52, rulePadGrammarParser.RULE_extensionCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 347; + this.state = 358; this.of(); - this.state = 352; + this.state = 366; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case rulePadGrammarParser.T__0: - this.state = 348; + var la_ = this._interp.adaptivePredict(this._input,28,this._ctx); + switch(la_) { + case 1: + this.state = 359; + this.combinatorialWords(); + this.state = 360; + this.match(rulePadGrammarParser.SPACE); + break; + + case 2: + this.state = 362; this.words(); - this.state = 349; + this.state = 363; this.match(rulePadGrammarParser.SPACE); break; - case rulePadGrammarParser.SUPERCLASS: - this.state = 351; + + case 3: + this.state = 365; this.match(rulePadGrammarParser.SUPERCLASS); break; - default: - throw new antlr4.error.NoViableAltException(this); + } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2911,12 +3073,12 @@ rulePadGrammarParser.ImplementationsContext = ImplementationsContext; rulePadGrammarParser.prototype.implementations = function() { var localctx = new ImplementationsContext(this, this._ctx, this.state); - this.enterRule(localctx, 50, rulePadGrammarParser.RULE_implementations); + this.enterRule(localctx, 54, rulePadGrammarParser.RULE_implementations); try { this.enterOuterAlt(localctx, 1); - this.state = 354; + this.state = 368; this.match(rulePadGrammarParser.IMPLEMENTATION); - this.state = 355; + this.state = 369; this.implementationCondition(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2952,14 +3114,18 @@ ImplementationConditionContext.prototype.of = function() { return this.getTypedRuleContext(OfContext,0); }; -ImplementationConditionContext.prototype.words = function() { - return this.getTypedRuleContext(WordsContext,0); +ImplementationConditionContext.prototype.combinatorialWords = function() { + return this.getTypedRuleContext(CombinatorialWordsContext,0); }; ImplementationConditionContext.prototype.SPACE = function() { return this.getToken(rulePadGrammarParser.SPACE, 0); }; +ImplementationConditionContext.prototype.words = function() { + return this.getTypedRuleContext(WordsContext,0); +}; + ImplementationConditionContext.prototype.INTERFACE = function() { return this.getToken(rulePadGrammarParser.INTERFACE, 0); }; @@ -2984,26 +3150,34 @@ rulePadGrammarParser.ImplementationConditionContext = ImplementationConditionCon rulePadGrammarParser.prototype.implementationCondition = function() { var localctx = new ImplementationConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 52, rulePadGrammarParser.RULE_implementationCondition); + this.enterRule(localctx, 56, rulePadGrammarParser.RULE_implementationCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 357; + this.state = 371; this.of(); - this.state = 362; + this.state = 379; this._errHandler.sync(this); - switch(this._input.LA(1)) { - case rulePadGrammarParser.T__0: - this.state = 358; + var la_ = this._interp.adaptivePredict(this._input,29,this._ctx); + switch(la_) { + case 1: + this.state = 372; + this.combinatorialWords(); + this.state = 373; + this.match(rulePadGrammarParser.SPACE); + break; + + case 2: + this.state = 375; this.words(); - this.state = 359; + this.state = 376; this.match(rulePadGrammarParser.SPACE); break; - case rulePadGrammarParser.INTERFACE: - this.state = 361; + + case 3: + this.state = 378; this.match(rulePadGrammarParser.INTERFACE); break; - default: - throw new antlr4.error.NoViableAltException(this); + } } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3067,24 +3241,24 @@ rulePadGrammarParser.FunctionsContext = FunctionsContext; rulePadGrammarParser.prototype.functions = function() { var localctx = new FunctionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 54, rulePadGrammarParser.RULE_functions); + this.enterRule(localctx, 58, rulePadGrammarParser.RULE_functions); try { this.enterOuterAlt(localctx, 1); - this.state = 364; + this.state = 381; this.match(rulePadGrammarParser.FUNCTION); - this.state = 366; + this.state = 383; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,29,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,30,this._ctx); if(la_===1) { - this.state = 365; + this.state = 382; this.functionCondition(); } - this.state = 369; + this.state = 386; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,30,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,31,this._ctx); if(la_===1) { - this.state = 368; + this.state = 385; this.functionOf(); } @@ -3146,12 +3320,12 @@ rulePadGrammarParser.FunctionOfContext = FunctionOfContext; rulePadGrammarParser.prototype.functionOf = function() { var localctx = new FunctionOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 56, rulePadGrammarParser.RULE_functionOf); + this.enterRule(localctx, 60, rulePadGrammarParser.RULE_functionOf); try { this.enterOuterAlt(localctx, 1); - this.state = 371; + this.state = 388; this.of(); - this.state = 372; + this.state = 389; this.classes(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3211,12 +3385,12 @@ rulePadGrammarParser.FunctionConditionContext = FunctionConditionContext; rulePadGrammarParser.prototype.functionCondition = function() { var localctx = new FunctionConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 58, rulePadGrammarParser.RULE_functionCondition); + this.enterRule(localctx, 62, rulePadGrammarParser.RULE_functionCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 374; + this.state = 391; this.withWord(); - this.state = 375; + this.state = 392; this.functionExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3340,19 +3514,19 @@ rulePadGrammarParser.prototype.functionExpression = function(_p) { var _parentState = this.state; var localctx = new FunctionExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 60; - this.enterRecursionRule(localctx, 60, rulePadGrammarParser.RULE_functionExpression, _p); + var _startState = 64; + this.enterRecursionRule(localctx, 64, rulePadGrammarParser.RULE_functionExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 394; + this.state = 411; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 378; + this.state = 395; this.match(rulePadGrammarParser.LPAREN); - this.state = 379; + this.state = 396; this.functionExpression(0); - this.state = 380; + this.state = 397; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.T__0: @@ -3365,47 +3539,47 @@ rulePadGrammarParser.prototype.functionExpression = function(_p) { case rulePadGrammarParser.ReturnValue: case rulePadGrammarParser.DeclarationStatement: case rulePadGrammarParser.ExpressionStatement: - this.state = 392; + this.state = 409; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.ANNOTATION: - this.state = 382; + this.state = 399; this.annotations(); break; case rulePadGrammarParser.SPECIFIER: - this.state = 383; + this.state = 400; this.specifiers(); break; case rulePadGrammarParser.VISIBILITY: - this.state = 384; + this.state = 401; this.visibilities(); break; case rulePadGrammarParser.TYPES: - this.state = 385; + this.state = 402; this.types(); break; case rulePadGrammarParser.NAME: - this.state = 386; + this.state = 403; this.names(); break; case rulePadGrammarParser.PARAMETER: - this.state = 387; + this.state = 404; this.parameters(); break; case rulePadGrammarParser.ReturnValue: - this.state = 388; + this.state = 405; this.returnValues(); break; case rulePadGrammarParser.DeclarationStatement: - this.state = 389; + this.state = 406; this.declarationStatements(); break; case rulePadGrammarParser.ExpressionStatement: - this.state = 390; + this.state = 407; this.expressionStatements(); break; case rulePadGrammarParser.T__0: - this.state = 391; + this.state = 408; this.comments(); break; default: @@ -3416,49 +3590,49 @@ rulePadGrammarParser.prototype.functionExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 404; + this.state = 421; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,34,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,35,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 402; + this.state = 419; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,33,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,34,this._ctx); switch(la_) { case 1: localctx = new FunctionExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_functionExpression); - this.state = 396; + this.state = 413; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 397; + this.state = 414; localctx.op = this.binary(); - this.state = 398; + this.state = 415; localctx.right = this.functionExpression(4); break; case 2: localctx = new FunctionExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_functionExpression); - this.state = 400; + this.state = 417; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 401; + this.state = 418; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 406; + this.state = 423; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,34,this._ctx); + _alt = this._interp.adaptivePredict(this._input,35,this._ctx); } } catch( error) { @@ -3523,24 +3697,24 @@ rulePadGrammarParser.AbstractFunctionsContext = AbstractFunctionsContext; rulePadGrammarParser.prototype.abstractFunctions = function() { var localctx = new AbstractFunctionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 62, rulePadGrammarParser.RULE_abstractFunctions); + this.enterRule(localctx, 66, rulePadGrammarParser.RULE_abstractFunctions); try { this.enterOuterAlt(localctx, 1); - this.state = 407; + this.state = 424; this.match(rulePadGrammarParser.AbstractFunctions); - this.state = 409; + this.state = 426; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,35,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,36,this._ctx); if(la_===1) { - this.state = 408; + this.state = 425; this.abstractFunctionCondition(); } - this.state = 412; + this.state = 429; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,36,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,37,this._ctx); if(la_===1) { - this.state = 411; + this.state = 428; this.abstractFunctionOf(); } @@ -3602,12 +3776,12 @@ rulePadGrammarParser.AbstractFunctionOfContext = AbstractFunctionOfContext; rulePadGrammarParser.prototype.abstractFunctionOf = function() { var localctx = new AbstractFunctionOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 64, rulePadGrammarParser.RULE_abstractFunctionOf); + this.enterRule(localctx, 68, rulePadGrammarParser.RULE_abstractFunctionOf); try { this.enterOuterAlt(localctx, 1); - this.state = 414; + this.state = 431; this.of(); - this.state = 415; + this.state = 432; this.classes(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3667,12 +3841,12 @@ rulePadGrammarParser.AbstractFunctionConditionContext = AbstractFunctionConditio rulePadGrammarParser.prototype.abstractFunctionCondition = function() { var localctx = new AbstractFunctionConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 66, rulePadGrammarParser.RULE_abstractFunctionCondition); + this.enterRule(localctx, 70, rulePadGrammarParser.RULE_abstractFunctionCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 417; + this.state = 434; this.withWord(); - this.state = 418; + this.state = 435; this.abstractFunctionExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3780,19 +3954,19 @@ rulePadGrammarParser.prototype.abstractFunctionExpression = function(_p) { var _parentState = this.state; var localctx = new AbstractFunctionExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 68; - this.enterRecursionRule(localctx, 68, rulePadGrammarParser.RULE_abstractFunctionExpression, _p); + var _startState = 72; + this.enterRecursionRule(localctx, 72, rulePadGrammarParser.RULE_abstractFunctionExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 433; + this.state = 450; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 421; + this.state = 438; this.match(rulePadGrammarParser.LPAREN); - this.state = 422; + this.state = 439; this.abstractFunctionExpression(0); - this.state = 423; + this.state = 440; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.NAME: @@ -3801,31 +3975,31 @@ rulePadGrammarParser.prototype.abstractFunctionExpression = function(_p) { case rulePadGrammarParser.TYPES: case rulePadGrammarParser.SPECIFIER: case rulePadGrammarParser.VISIBILITY: - this.state = 431; + this.state = 448; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.ANNOTATION: - this.state = 425; + this.state = 442; this.annotations(); break; case rulePadGrammarParser.SPECIFIER: - this.state = 426; + this.state = 443; this.specifiers(); break; case rulePadGrammarParser.VISIBILITY: - this.state = 427; + this.state = 444; this.visibilities(); break; case rulePadGrammarParser.TYPES: - this.state = 428; + this.state = 445; this.types(); break; case rulePadGrammarParser.NAME: - this.state = 429; + this.state = 446; this.names(); break; case rulePadGrammarParser.PARAMETER: - this.state = 430; + this.state = 447; this.parameters(); break; default: @@ -3836,49 +4010,49 @@ rulePadGrammarParser.prototype.abstractFunctionExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 443; + this.state = 460; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,40,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,41,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 441; + this.state = 458; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,39,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,40,this._ctx); switch(la_) { case 1: localctx = new AbstractFunctionExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_abstractFunctionExpression); - this.state = 435; + this.state = 452; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 436; + this.state = 453; localctx.op = this.binary(); - this.state = 437; + this.state = 454; localctx.right = this.abstractFunctionExpression(4); break; case 2: localctx = new AbstractFunctionExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_abstractFunctionExpression); - this.state = 439; + this.state = 456; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 440; + this.state = 457; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 445; + this.state = 462; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,40,this._ctx); + _alt = this._interp.adaptivePredict(this._input,41,this._ctx); } } catch( error) { @@ -3943,24 +4117,24 @@ rulePadGrammarParser.ConstructorsContext = ConstructorsContext; rulePadGrammarParser.prototype.constructors = function() { var localctx = new ConstructorsContext(this, this._ctx, this.state); - this.enterRule(localctx, 70, rulePadGrammarParser.RULE_constructors); + this.enterRule(localctx, 74, rulePadGrammarParser.RULE_constructors); try { this.enterOuterAlt(localctx, 1); - this.state = 446; + this.state = 463; this.match(rulePadGrammarParser.CONSTRUCTOR); - this.state = 448; + this.state = 465; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,41,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,42,this._ctx); if(la_===1) { - this.state = 447; + this.state = 464; this.constructorCondition(); } - this.state = 451; + this.state = 468; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,42,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,43,this._ctx); if(la_===1) { - this.state = 450; + this.state = 467; this.constructorOf(); } @@ -4022,12 +4196,12 @@ rulePadGrammarParser.ConstructorOfContext = ConstructorOfContext; rulePadGrammarParser.prototype.constructorOf = function() { var localctx = new ConstructorOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 72, rulePadGrammarParser.RULE_constructorOf); + this.enterRule(localctx, 76, rulePadGrammarParser.RULE_constructorOf); try { this.enterOuterAlt(localctx, 1); - this.state = 453; + this.state = 470; this.of(); - this.state = 454; + this.state = 471; this.classes(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4087,12 +4261,12 @@ rulePadGrammarParser.ConstructorConditionContext = ConstructorConditionContext; rulePadGrammarParser.prototype.constructorCondition = function() { var localctx = new ConstructorConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 74, rulePadGrammarParser.RULE_constructorCondition); + this.enterRule(localctx, 78, rulePadGrammarParser.RULE_constructorCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 456; + this.state = 473; this.withWord(); - this.state = 457; + this.state = 474; this.constructorExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4212,19 +4386,19 @@ rulePadGrammarParser.prototype.constructorExpression = function(_p) { var _parentState = this.state; var localctx = new ConstructorExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 76; - this.enterRecursionRule(localctx, 76, rulePadGrammarParser.RULE_constructorExpression, _p); + var _startState = 80; + this.enterRecursionRule(localctx, 80, rulePadGrammarParser.RULE_constructorExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 475; + this.state = 492; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 460; + this.state = 477; this.match(rulePadGrammarParser.LPAREN); - this.state = 461; + this.state = 478; this.constructorExpression(0); - this.state = 462; + this.state = 479; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.T__0: @@ -4236,43 +4410,43 @@ rulePadGrammarParser.prototype.constructorExpression = function(_p) { case rulePadGrammarParser.ReturnValue: case rulePadGrammarParser.DeclarationStatement: case rulePadGrammarParser.ExpressionStatement: - this.state = 473; + this.state = 490; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.ANNOTATION: - this.state = 464; + this.state = 481; this.annotations(); break; case rulePadGrammarParser.SPECIFIER: - this.state = 465; + this.state = 482; this.specifiers(); break; case rulePadGrammarParser.VISIBILITY: - this.state = 466; + this.state = 483; this.visibilities(); break; case rulePadGrammarParser.NAME: - this.state = 467; + this.state = 484; this.names(); break; case rulePadGrammarParser.PARAMETER: - this.state = 468; + this.state = 485; this.parameters(); break; case rulePadGrammarParser.ReturnValue: - this.state = 469; + this.state = 486; this.returnValues(); break; case rulePadGrammarParser.DeclarationStatement: - this.state = 470; + this.state = 487; this.declarationStatements(); break; case rulePadGrammarParser.ExpressionStatement: - this.state = 471; + this.state = 488; this.expressionStatements(); break; case rulePadGrammarParser.T__0: - this.state = 472; + this.state = 489; this.comments(); break; default: @@ -4283,49 +4457,49 @@ rulePadGrammarParser.prototype.constructorExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 485; + this.state = 502; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,46,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,47,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 483; + this.state = 500; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,45,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,46,this._ctx); switch(la_) { case 1: localctx = new ConstructorExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_constructorExpression); - this.state = 477; + this.state = 494; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 478; + this.state = 495; localctx.op = this.binary(); - this.state = 479; + this.state = 496; localctx.right = this.constructorExpression(4); break; case 2: localctx = new ConstructorExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_constructorExpression); - this.state = 481; + this.state = 498; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 482; + this.state = 499; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 487; + this.state = 504; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,46,this._ctx); + _alt = this._interp.adaptivePredict(this._input,47,this._ctx); } } catch( error) { @@ -4386,16 +4560,16 @@ rulePadGrammarParser.ParametersContext = ParametersContext; rulePadGrammarParser.prototype.parameters = function() { var localctx = new ParametersContext(this, this._ctx, this.state); - this.enterRule(localctx, 78, rulePadGrammarParser.RULE_parameters); + this.enterRule(localctx, 82, rulePadGrammarParser.RULE_parameters); try { this.enterOuterAlt(localctx, 1); - this.state = 488; + this.state = 505; this.match(rulePadGrammarParser.PARAMETER); - this.state = 490; + this.state = 507; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,47,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,48,this._ctx); if(la_===1) { - this.state = 489; + this.state = 506; this.parameterCondition(); } @@ -4457,12 +4631,12 @@ rulePadGrammarParser.ParameterConditionContext = ParameterConditionContext; rulePadGrammarParser.prototype.parameterCondition = function() { var localctx = new ParameterConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 80, rulePadGrammarParser.RULE_parameterCondition); + this.enterRule(localctx, 84, rulePadGrammarParser.RULE_parameterCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 492; + this.state = 509; this.withWord(); - this.state = 493; + this.state = 510; this.parameterExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4554,32 +4728,32 @@ rulePadGrammarParser.prototype.parameterExpression = function(_p) { var _parentState = this.state; var localctx = new ParameterExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 82; - this.enterRecursionRule(localctx, 82, rulePadGrammarParser.RULE_parameterExpression, _p); + var _startState = 86; + this.enterRecursionRule(localctx, 86, rulePadGrammarParser.RULE_parameterExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 504; + this.state = 521; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 496; + this.state = 513; this.match(rulePadGrammarParser.LPAREN); - this.state = 497; + this.state = 514; this.parameterExpression(0); - this.state = 498; + this.state = 515; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.NAME: case rulePadGrammarParser.TYPES: - this.state = 502; + this.state = 519; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.TYPES: - this.state = 500; + this.state = 517; this.types(); break; case rulePadGrammarParser.NAME: - this.state = 501; + this.state = 518; this.names(); break; default: @@ -4590,49 +4764,49 @@ rulePadGrammarParser.prototype.parameterExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 514; + this.state = 531; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,51,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,52,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 512; + this.state = 529; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,50,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,51,this._ctx); switch(la_) { case 1: localctx = new ParameterExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_parameterExpression); - this.state = 506; + this.state = 523; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 507; + this.state = 524; localctx.op = this.binary(); - this.state = 508; + this.state = 525; localctx.right = this.parameterExpression(4); break; case 2: localctx = new ParameterExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_parameterExpression); - this.state = 510; + this.state = 527; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 511; + this.state = 528; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 516; + this.state = 533; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,51,this._ctx); + _alt = this._interp.adaptivePredict(this._input,52,this._ctx); } } catch( error) { @@ -4693,16 +4867,16 @@ rulePadGrammarParser.TypesContext = TypesContext; rulePadGrammarParser.prototype.types = function() { var localctx = new TypesContext(this, this._ctx, this.state); - this.enterRule(localctx, 84, rulePadGrammarParser.RULE_types); + this.enterRule(localctx, 88, rulePadGrammarParser.RULE_types); try { this.enterOuterAlt(localctx, 1); - this.state = 517; + this.state = 534; this.match(rulePadGrammarParser.TYPES); - this.state = 519; + this.state = 536; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,52,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,53,this._ctx); if(la_===1) { - this.state = 518; + this.state = 535; this.typeCondition(); } @@ -4768,25 +4942,25 @@ rulePadGrammarParser.TypeConditionContext = TypeConditionContext; rulePadGrammarParser.prototype.typeCondition = function() { var localctx = new TypeConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 86, rulePadGrammarParser.RULE_typeCondition); + this.enterRule(localctx, 90, rulePadGrammarParser.RULE_typeCondition); try { - this.state = 527; + this.state = 544; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,53,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,54,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 521; + this.state = 538; this.combinatorialWords(); - this.state = 522; + this.state = 539; this.match(rulePadGrammarParser.SPACE); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 524; + this.state = 541; this.words(); - this.state = 525; + this.state = 542; this.match(rulePadGrammarParser.SPACE); break; @@ -4849,16 +5023,16 @@ rulePadGrammarParser.SpecifiersContext = SpecifiersContext; rulePadGrammarParser.prototype.specifiers = function() { var localctx = new SpecifiersContext(this, this._ctx, this.state); - this.enterRule(localctx, 88, rulePadGrammarParser.RULE_specifiers); + this.enterRule(localctx, 92, rulePadGrammarParser.RULE_specifiers); try { this.enterOuterAlt(localctx, 1); - this.state = 529; + this.state = 546; this.match(rulePadGrammarParser.SPECIFIER); - this.state = 531; + this.state = 548; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,54,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,55,this._ctx); if(la_===1) { - this.state = 530; + this.state = 547; this.specifierCondition(); } @@ -4920,12 +5094,12 @@ rulePadGrammarParser.SpecifierConditionContext = SpecifierConditionContext; rulePadGrammarParser.prototype.specifierCondition = function() { var localctx = new SpecifierConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 90, rulePadGrammarParser.RULE_specifierCondition); + this.enterRule(localctx, 94, rulePadGrammarParser.RULE_specifierCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 533; + this.state = 550; this.words(); - this.state = 534; + this.state = 551; this.match(rulePadGrammarParser.SPACE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4985,16 +5159,16 @@ rulePadGrammarParser.VisibilitiesContext = VisibilitiesContext; rulePadGrammarParser.prototype.visibilities = function() { var localctx = new VisibilitiesContext(this, this._ctx, this.state); - this.enterRule(localctx, 92, rulePadGrammarParser.RULE_visibilities); + this.enterRule(localctx, 96, rulePadGrammarParser.RULE_visibilities); try { this.enterOuterAlt(localctx, 1); - this.state = 536; + this.state = 553; this.match(rulePadGrammarParser.VISIBILITY); - this.state = 538; + this.state = 555; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,55,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,56,this._ctx); if(la_===1) { - this.state = 537; + this.state = 554; this.visibilityCondition(); } @@ -5056,12 +5230,12 @@ rulePadGrammarParser.VisibilityConditionContext = VisibilityConditionContext; rulePadGrammarParser.prototype.visibilityCondition = function() { var localctx = new VisibilityConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 94, rulePadGrammarParser.RULE_visibilityCondition); + this.enterRule(localctx, 98, rulePadGrammarParser.RULE_visibilityCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 540; + this.state = 557; this.words(); - this.state = 541; + this.state = 558; this.match(rulePadGrammarParser.SPACE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5121,16 +5295,16 @@ rulePadGrammarParser.ReturnValuesContext = ReturnValuesContext; rulePadGrammarParser.prototype.returnValues = function() { var localctx = new ReturnValuesContext(this, this._ctx, this.state); - this.enterRule(localctx, 96, rulePadGrammarParser.RULE_returnValues); + this.enterRule(localctx, 100, rulePadGrammarParser.RULE_returnValues); try { this.enterOuterAlt(localctx, 1); - this.state = 543; + this.state = 560; this.match(rulePadGrammarParser.ReturnValue); - this.state = 545; + this.state = 562; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,56,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,57,this._ctx); if(la_===1) { - this.state = 544; + this.state = 561; this.returnValueCondition(); } @@ -5192,12 +5366,12 @@ rulePadGrammarParser.ReturnValueConditionContext = ReturnValueConditionContext; rulePadGrammarParser.prototype.returnValueCondition = function() { var localctx = new ReturnValueConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 98, rulePadGrammarParser.RULE_returnValueCondition); + this.enterRule(localctx, 102, rulePadGrammarParser.RULE_returnValueCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 547; + this.state = 564; this.combinatorialWords(); - this.state = 548; + this.state = 565; this.match(rulePadGrammarParser.SPACE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5261,24 +5435,24 @@ rulePadGrammarParser.DeclarationStatementsContext = DeclarationStatementsContext rulePadGrammarParser.prototype.declarationStatements = function() { var localctx = new DeclarationStatementsContext(this, this._ctx, this.state); - this.enterRule(localctx, 100, rulePadGrammarParser.RULE_declarationStatements); + this.enterRule(localctx, 104, rulePadGrammarParser.RULE_declarationStatements); try { this.enterOuterAlt(localctx, 1); - this.state = 550; + this.state = 567; this.match(rulePadGrammarParser.DeclarationStatement); - this.state = 552; + this.state = 569; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,57,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,58,this._ctx); if(la_===1) { - this.state = 551; + this.state = 568; this.declarationStatementCondition(); } - this.state = 555; + this.state = 572; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,58,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,59,this._ctx); if(la_===1) { - this.state = 554; + this.state = 571; this.declarationStatementOf(); } @@ -5348,24 +5522,24 @@ rulePadGrammarParser.DeclarationStatementOfContext = DeclarationStatementOfConte rulePadGrammarParser.prototype.declarationStatementOf = function() { var localctx = new DeclarationStatementOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 102, rulePadGrammarParser.RULE_declarationStatementOf); + this.enterRule(localctx, 106, rulePadGrammarParser.RULE_declarationStatementOf); try { this.enterOuterAlt(localctx, 1); - this.state = 557; + this.state = 574; this.of(); - this.state = 561; + this.state = 578; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.CLASSES: - this.state = 558; + this.state = 575; this.classes(); break; case rulePadGrammarParser.FUNCTION: - this.state = 559; + this.state = 576; this.functions(); break; case rulePadGrammarParser.CONSTRUCTOR: - this.state = 560; + this.state = 577; this.constructors(); break; default: @@ -5429,12 +5603,12 @@ rulePadGrammarParser.DeclarationStatementConditionContext = DeclarationStatement rulePadGrammarParser.prototype.declarationStatementCondition = function() { var localctx = new DeclarationStatementConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 104, rulePadGrammarParser.RULE_declarationStatementCondition); + this.enterRule(localctx, 108, rulePadGrammarParser.RULE_declarationStatementCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 563; + this.state = 580; this.withWord(); - this.state = 564; + this.state = 581; this.declarationStatementExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5546,19 +5720,19 @@ rulePadGrammarParser.prototype.declarationStatementExpression = function(_p) { var _parentState = this.state; var localctx = new DeclarationStatementExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 106; - this.enterRecursionRule(localctx, 106, rulePadGrammarParser.RULE_declarationStatementExpression, _p); + var _startState = 110; + this.enterRecursionRule(localctx, 110, rulePadGrammarParser.RULE_declarationStatementExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 580; + this.state = 597; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 567; + this.state = 584; this.match(rulePadGrammarParser.LPAREN); - this.state = 568; + this.state = 585; this.declarationStatementExpression(0); - this.state = 569; + this.state = 586; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.T__0: @@ -5568,35 +5742,35 @@ rulePadGrammarParser.prototype.declarationStatementExpression = function(_p) { case rulePadGrammarParser.SPECIFIER: case rulePadGrammarParser.VISIBILITY: case rulePadGrammarParser.InitialValue: - this.state = 578; + this.state = 595; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.ANNOTATION: - this.state = 571; + this.state = 588; this.annotations(); break; case rulePadGrammarParser.SPECIFIER: - this.state = 572; + this.state = 589; this.specifiers(); break; case rulePadGrammarParser.VISIBILITY: - this.state = 573; + this.state = 590; this.visibilities(); break; case rulePadGrammarParser.TYPES: - this.state = 574; + this.state = 591; this.types(); break; case rulePadGrammarParser.NAME: - this.state = 575; + this.state = 592; this.names(); break; case rulePadGrammarParser.InitialValue: - this.state = 576; + this.state = 593; this.initialValues(); break; case rulePadGrammarParser.T__0: - this.state = 577; + this.state = 594; this.comments(); break; default: @@ -5607,49 +5781,49 @@ rulePadGrammarParser.prototype.declarationStatementExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 590; + this.state = 607; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,63,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,64,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 588; + this.state = 605; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,62,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,63,this._ctx); switch(la_) { case 1: localctx = new DeclarationStatementExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_declarationStatementExpression); - this.state = 582; + this.state = 599; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 583; + this.state = 600; localctx.op = this.binary(); - this.state = 584; + this.state = 601; localctx.right = this.declarationStatementExpression(4); break; case 2: localctx = new DeclarationStatementExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_declarationStatementExpression); - this.state = 586; + this.state = 603; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 587; + this.state = 604; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 592; + this.state = 609; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,63,this._ctx); + _alt = this._interp.adaptivePredict(this._input,64,this._ctx); } } catch( error) { @@ -5714,24 +5888,24 @@ rulePadGrammarParser.ExpressionStatementsContext = ExpressionStatementsContext; rulePadGrammarParser.prototype.expressionStatements = function() { var localctx = new ExpressionStatementsContext(this, this._ctx, this.state); - this.enterRule(localctx, 108, rulePadGrammarParser.RULE_expressionStatements); + this.enterRule(localctx, 112, rulePadGrammarParser.RULE_expressionStatements); try { this.enterOuterAlt(localctx, 1); - this.state = 593; + this.state = 610; this.match(rulePadGrammarParser.ExpressionStatement); - this.state = 595; + this.state = 612; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,64,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,65,this._ctx); if(la_===1) { - this.state = 594; + this.state = 611; this.expressionStatementCondition(); } - this.state = 598; + this.state = 615; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,65,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,66,this._ctx); if(la_===1) { - this.state = 597; + this.state = 614; this.expressionStatementOf(); } @@ -5797,27 +5971,27 @@ rulePadGrammarParser.ExpressionStatementOfContext = ExpressionStatementOfContext rulePadGrammarParser.prototype.expressionStatementOf = function() { var localctx = new ExpressionStatementOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 110, rulePadGrammarParser.RULE_expressionStatementOf); + this.enterRule(localctx, 114, rulePadGrammarParser.RULE_expressionStatementOf); try { this.enterOuterAlt(localctx, 1); - this.state = 600; + this.state = 617; this.of(); - this.state = 604; + this.state = 621; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,66,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,67,this._ctx); switch(la_) { case 1: - this.state = 601; + this.state = 618; this.functions(); break; case 2: - this.state = 602; + this.state = 619; this.constructors(); break; case 3: - this.state = 603; + this.state = 620; this.constructors(); break; @@ -5880,12 +6054,12 @@ rulePadGrammarParser.ExpressionStatementConditionContext = ExpressionStatementCo rulePadGrammarParser.prototype.expressionStatementCondition = function() { var localctx = new ExpressionStatementConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 112, rulePadGrammarParser.RULE_expressionStatementCondition); + this.enterRule(localctx, 116, rulePadGrammarParser.RULE_expressionStatementCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 606; + this.state = 623; this.withWord(); - this.state = 607; + this.state = 624; this.expressionStatementExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5977,32 +6151,32 @@ rulePadGrammarParser.prototype.expressionStatementExpression = function(_p) { var _parentState = this.state; var localctx = new ExpressionStatementExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 114; - this.enterRecursionRule(localctx, 114, rulePadGrammarParser.RULE_expressionStatementExpression, _p); + var _startState = 118; + this.enterRecursionRule(localctx, 118, rulePadGrammarParser.RULE_expressionStatementExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 618; + this.state = 635; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 610; + this.state = 627; this.match(rulePadGrammarParser.LPAREN); - this.state = 611; + this.state = 628; this.expressionStatementExpression(0); - this.state = 612; + this.state = 629; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.T__0: case rulePadGrammarParser.VALUE: - this.state = 616; + this.state = 633; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.T__0: - this.state = 614; + this.state = 631; this.comments(); break; case rulePadGrammarParser.VALUE: - this.state = 615; + this.state = 632; this.value(); break; default: @@ -6013,49 +6187,49 @@ rulePadGrammarParser.prototype.expressionStatementExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 628; + this.state = 645; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,70,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,71,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 626; + this.state = 643; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,69,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,70,this._ctx); switch(la_) { case 1: localctx = new ExpressionStatementExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_expressionStatementExpression); - this.state = 620; + this.state = 637; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 621; + this.state = 638; localctx.op = this.binary(); - this.state = 622; + this.state = 639; localctx.right = this.expressionStatementExpression(4); break; case 2: localctx = new ExpressionStatementExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_expressionStatementExpression); - this.state = 624; + this.state = 641; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 625; + this.state = 642; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 630; + this.state = 647; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,70,this._ctx); + _alt = this._interp.adaptivePredict(this._input,71,this._ctx); } } catch( error) { @@ -6116,16 +6290,16 @@ rulePadGrammarParser.ValueContext = ValueContext; rulePadGrammarParser.prototype.value = function() { var localctx = new ValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 116, rulePadGrammarParser.RULE_value); + this.enterRule(localctx, 120, rulePadGrammarParser.RULE_value); try { this.enterOuterAlt(localctx, 1); - this.state = 631; + this.state = 648; this.match(rulePadGrammarParser.VALUE); - this.state = 633; + this.state = 650; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,71,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,72,this._ctx); if(la_===1) { - this.state = 632; + this.state = 649; this.valueCondition(); } @@ -6187,12 +6361,12 @@ rulePadGrammarParser.ValueConditionContext = ValueConditionContext; rulePadGrammarParser.prototype.valueCondition = function() { var localctx = new ValueConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, rulePadGrammarParser.RULE_valueCondition); + this.enterRule(localctx, 122, rulePadGrammarParser.RULE_valueCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 635; + this.state = 652; this.combinatorialWords(); - this.state = 636; + this.state = 653; this.match(rulePadGrammarParser.SPACE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6256,24 +6430,24 @@ rulePadGrammarParser.InitialValuesContext = InitialValuesContext; rulePadGrammarParser.prototype.initialValues = function() { var localctx = new InitialValuesContext(this, this._ctx, this.state); - this.enterRule(localctx, 120, rulePadGrammarParser.RULE_initialValues); + this.enterRule(localctx, 124, rulePadGrammarParser.RULE_initialValues); try { this.enterOuterAlt(localctx, 1); - this.state = 638; + this.state = 655; this.match(rulePadGrammarParser.InitialValue); - this.state = 640; + this.state = 657; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,72,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,73,this._ctx); if(la_===1) { - this.state = 639; + this.state = 656; this.initialValueCondition(); } - this.state = 643; + this.state = 660; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,73,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,74,this._ctx); if(la_===1) { - this.state = 642; + this.state = 659; this.initialValueOf(); } @@ -6335,12 +6509,12 @@ rulePadGrammarParser.InitialValueOfContext = InitialValueOfContext; rulePadGrammarParser.prototype.initialValueOf = function() { var localctx = new InitialValueOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 122, rulePadGrammarParser.RULE_initialValueOf); + this.enterRule(localctx, 126, rulePadGrammarParser.RULE_initialValueOf); try { this.enterOuterAlt(localctx, 1); - this.state = 645; + this.state = 662; this.of(); - this.state = 646; + this.state = 663; this.declarationStatements(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6400,12 +6574,12 @@ rulePadGrammarParser.InitialValueConditionContext = InitialValueConditionContext rulePadGrammarParser.prototype.initialValueCondition = function() { var localctx = new InitialValueConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 124, rulePadGrammarParser.RULE_initialValueCondition); + this.enterRule(localctx, 128, rulePadGrammarParser.RULE_initialValueCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 648; + this.state = 665; this.combinatorialWords(); - this.state = 649; + this.state = 666; this.match(rulePadGrammarParser.SPACE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6465,16 +6639,16 @@ rulePadGrammarParser.ClassesContext = ClassesContext; rulePadGrammarParser.prototype.classes = function() { var localctx = new ClassesContext(this, this._ctx, this.state); - this.enterRule(localctx, 126, rulePadGrammarParser.RULE_classes); + this.enterRule(localctx, 130, rulePadGrammarParser.RULE_classes); try { this.enterOuterAlt(localctx, 1); - this.state = 651; + this.state = 668; this.match(rulePadGrammarParser.CLASSES); - this.state = 653; + this.state = 670; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,74,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,75,this._ctx); if(la_===1) { - this.state = 652; + this.state = 669; this.classCondition(); } @@ -6536,12 +6710,12 @@ rulePadGrammarParser.ClassConditionContext = ClassConditionContext; rulePadGrammarParser.prototype.classCondition = function() { var localctx = new ClassConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 128, rulePadGrammarParser.RULE_classCondition); + this.enterRule(localctx, 132, rulePadGrammarParser.RULE_classCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 655; + this.state = 672; this.withWord(); - this.state = 656; + this.state = 673; this.classExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -6607,8 +6781,8 @@ ClassExpressionContext.prototype.visibilities = function() { return this.getTypedRuleContext(VisibilitiesContext,0); }; -ClassExpressionContext.prototype.names = function() { - return this.getTypedRuleContext(NamesContext,0); +ClassExpressionContext.prototype.classNames = function() { + return this.getTypedRuleContext(ClassNamesContext,0); }; ClassExpressionContext.prototype.extensions = function() { @@ -6677,19 +6851,19 @@ rulePadGrammarParser.prototype.classExpression = function(_p) { var _parentState = this.state; var localctx = new ClassExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 130; - this.enterRecursionRule(localctx, 130, rulePadGrammarParser.RULE_classExpression, _p); + var _startState = 134; + this.enterRecursionRule(localctx, 134, rulePadGrammarParser.RULE_classExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 678; + this.state = 695; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.LPAREN: - this.state = 659; + this.state = 676; this.match(rulePadGrammarParser.LPAREN); - this.state = 660; + this.state = 677; this.classExpression(0); - this.state = 661; + this.state = 678; this.match(rulePadGrammarParser.RPAREN); break; case rulePadGrammarParser.T__0: @@ -6705,59 +6879,59 @@ rulePadGrammarParser.prototype.classExpression = function(_p) { case rulePadGrammarParser.ReturnValue: case rulePadGrammarParser.DeclarationStatement: case rulePadGrammarParser.SUBCLASSES: - this.state = 676; + this.state = 693; this._errHandler.sync(this); switch(this._input.LA(1)) { case rulePadGrammarParser.ANNOTATION: - this.state = 663; + this.state = 680; this.annotations(); break; case rulePadGrammarParser.SPECIFIER: - this.state = 664; + this.state = 681; this.specifiers(); break; case rulePadGrammarParser.VISIBILITY: - this.state = 665; + this.state = 682; this.visibilities(); break; case rulePadGrammarParser.NAME: - this.state = 666; - this.names(); + this.state = 683; + this.classNames(); break; case rulePadGrammarParser.EXTENSION: - this.state = 667; + this.state = 684; this.extensions(); break; case rulePadGrammarParser.IMPLEMENTATION: - this.state = 668; + this.state = 685; this.implementations(); break; case rulePadGrammarParser.FUNCTION: - this.state = 669; + this.state = 686; this.functions(); break; case rulePadGrammarParser.AbstractFunctions: - this.state = 670; + this.state = 687; this.abstractFunctions(); break; case rulePadGrammarParser.CONSTRUCTOR: - this.state = 671; + this.state = 688; this.constructors(); break; case rulePadGrammarParser.DeclarationStatement: - this.state = 672; + this.state = 689; this.declarationStatements(); break; case rulePadGrammarParser.ReturnValue: - this.state = 673; + this.state = 690; this.returnValues(); break; case rulePadGrammarParser.T__0: - this.state = 674; + this.state = 691; this.comments(); break; case rulePadGrammarParser.SUBCLASSES: - this.state = 675; + this.state = 692; this.subclasses(); break; default: @@ -6768,49 +6942,49 @@ rulePadGrammarParser.prototype.classExpression = function(_p) { throw new antlr4.error.NoViableAltException(this); } this._ctx.stop = this._input.LT(-1); - this.state = 688; + this.state = 705; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,78,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,79,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 686; + this.state = 703; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,77,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,78,this._ctx); switch(la_) { case 1: localctx = new ClassExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_classExpression); - this.state = 680; + this.state = 697; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 681; + this.state = 698; localctx.op = this.binary(); - this.state = 682; + this.state = 699; localctx.right = this.classExpression(4); break; case 2: localctx = new ClassExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_classExpression); - this.state = 684; + this.state = 701; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 685; + this.state = 702; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 690; + this.state = 707; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,78,this._ctx); + _alt = this._interp.adaptivePredict(this._input,79,this._ctx); } } catch( error) { @@ -6875,24 +7049,24 @@ rulePadGrammarParser.SubclassesContext = SubclassesContext; rulePadGrammarParser.prototype.subclasses = function() { var localctx = new SubclassesContext(this, this._ctx, this.state); - this.enterRule(localctx, 132, rulePadGrammarParser.RULE_subclasses); + this.enterRule(localctx, 136, rulePadGrammarParser.RULE_subclasses); try { this.enterOuterAlt(localctx, 1); - this.state = 691; + this.state = 708; this.match(rulePadGrammarParser.SUBCLASSES); - this.state = 693; + this.state = 710; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,79,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,80,this._ctx); if(la_===1) { - this.state = 692; + this.state = 709; this.subclassCondition(); } - this.state = 696; + this.state = 713; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,80,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,81,this._ctx); if(la_===1) { - this.state = 695; + this.state = 712; this.subclassOf(); } @@ -6954,12 +7128,12 @@ rulePadGrammarParser.SubclassOfContext = SubclassOfContext; rulePadGrammarParser.prototype.subclassOf = function() { var localctx = new SubclassOfContext(this, this._ctx, this.state); - this.enterRule(localctx, 134, rulePadGrammarParser.RULE_subclassOf); + this.enterRule(localctx, 138, rulePadGrammarParser.RULE_subclassOf); try { this.enterOuterAlt(localctx, 1); - this.state = 698; + this.state = 715; this.of(); - this.state = 699; + this.state = 716; this.classes(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7019,12 +7193,12 @@ rulePadGrammarParser.SubclassConditionContext = SubclassConditionContext; rulePadGrammarParser.prototype.subclassCondition = function() { var localctx = new SubclassConditionContext(this, this._ctx, this.state); - this.enterRule(localctx, 136, rulePadGrammarParser.RULE_subclassCondition); + this.enterRule(localctx, 140, rulePadGrammarParser.RULE_subclassCondition); try { this.enterOuterAlt(localctx, 1); - this.state = 701; + this.state = 718; this.withWord(); - this.state = 702; + this.state = 719; this.subclassExpression(0); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -7090,8 +7264,8 @@ SubclassExpressionContext.prototype.visibilities = function() { return this.getTypedRuleContext(VisibilitiesContext,0); }; -SubclassExpressionContext.prototype.names = function() { - return this.getTypedRuleContext(NamesContext,0); +SubclassExpressionContext.prototype.classNames = function() { + return this.getTypedRuleContext(ClassNamesContext,0); }; SubclassExpressionContext.prototype.extensions = function() { @@ -7160,65 +7334,65 @@ rulePadGrammarParser.prototype.subclassExpression = function(_p) { var _parentState = this.state; var localctx = new SubclassExpressionContext(this, this._ctx, _parentState); var _prevctx = localctx; - var _startState = 138; - this.enterRecursionRule(localctx, 138, rulePadGrammarParser.RULE_subclassExpression, _p); + var _startState = 142; + this.enterRecursionRule(localctx, 142, rulePadGrammarParser.RULE_subclassExpression, _p); try { this.enterOuterAlt(localctx, 1); - this.state = 725; + this.state = 742; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,82,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,83,this._ctx); switch(la_) { case 1: - this.state = 705; + this.state = 722; this.match(rulePadGrammarParser.LPAREN); - this.state = 706; + this.state = 723; this.subclassExpression(0); - this.state = 707; + this.state = 724; this.match(rulePadGrammarParser.RPAREN); break; case 2: - this.state = 723; + this.state = 740; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,81,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,82,this._ctx); switch(la_) { case 1: - this.state = 709; + this.state = 726; this.annotations(); break; case 2: - this.state = 710; + this.state = 727; this.specifiers(); break; case 3: - this.state = 711; + this.state = 728; this.visibilities(); break; case 4: - this.state = 712; - this.names(); + this.state = 729; + this.classNames(); break; case 5: - this.state = 713; + this.state = 730; this.extensions(); break; case 6: - this.state = 714; + this.state = 731; this.implementations(); break; case 7: - this.state = 715; + this.state = 732; this.functions(); break; case 8: - this.state = 716; + this.state = 733; this.subclasses(); break; @@ -7226,27 +7400,27 @@ rulePadGrammarParser.prototype.subclassExpression = function(_p) { break; case 10: - this.state = 718; + this.state = 735; this.abstractFunctions(); break; case 11: - this.state = 719; + this.state = 736; this.constructors(); break; case 12: - this.state = 720; + this.state = 737; this.declarationStatements(); break; case 13: - this.state = 721; + this.state = 738; this.returnValues(); break; case 14: - this.state = 722; + this.state = 739; this.comments(); break; @@ -7255,49 +7429,49 @@ rulePadGrammarParser.prototype.subclassExpression = function(_p) { } this._ctx.stop = this._input.LT(-1); - this.state = 735; + this.state = 752; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,84,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,85,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { if(this._parseListeners!==null) { this.triggerExitRuleEvent(); } _prevctx = localctx; - this.state = 733; + this.state = 750; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,83,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,84,this._ctx); switch(la_) { case 1: localctx = new SubclassExpressionContext(this, _parentctx, _parentState); localctx.left = _prevctx; this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_subclassExpression); - this.state = 727; + this.state = 744; if (!( this.precpred(this._ctx, 3))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); } - this.state = 728; + this.state = 745; localctx.op = this.binary(); - this.state = 729; + this.state = 746; localctx.right = this.subclassExpression(4); break; case 2: localctx = new SubclassExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, rulePadGrammarParser.RULE_subclassExpression); - this.state = 731; + this.state = 748; if (!( this.precpred(this._ctx, 1))) { throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); } - this.state = 732; + this.state = 749; this.match(rulePadGrammarParser.SPACE); break; } } - this.state = 737; + this.state = 754; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,84,this._ctx); + _alt = this._interp.adaptivePredict(this._input,85,this._ctx); } } catch( error) { @@ -7317,21 +7491,21 @@ rulePadGrammarParser.prototype.subclassExpression = function(_p) { rulePadGrammarParser.prototype.sempred = function(localctx, ruleIndex, predIndex) { switch(ruleIndex) { - case 30: + case 32: return this.functionExpression_sempred(localctx, predIndex); - case 34: + case 36: return this.abstractFunctionExpression_sempred(localctx, predIndex); - case 38: + case 40: return this.constructorExpression_sempred(localctx, predIndex); - case 41: + case 43: return this.parameterExpression_sempred(localctx, predIndex); - case 53: + case 55: return this.declarationStatementExpression_sempred(localctx, predIndex); - case 57: + case 59: return this.expressionStatementExpression_sempred(localctx, predIndex); - case 65: + case 67: return this.classExpression_sempred(localctx, predIndex); - case 69: + case 71: return this.subclassExpression_sempred(localctx, predIndex); default: throw "No predicate with index:" + ruleIndex; diff --git a/src/ui/RulePad/rulePad.js b/src/ui/RulePad/rulePad.js index e7f4a84..c163c46 100644 --- a/src/ui/RulePad/rulePad.js +++ b/src/ui/RulePad/rulePad.js @@ -659,7 +659,7 @@ class RulePad extends Component { }} onUpdate={(newAutoCompleteText) => { if (this.state.autoCompleteArray.map(d => d.text).join(" ") !== newAutoCompleteText - || this.state.constraintXPath === "" || this.state.quantifierXPath === "" || this.state.shouldUpdateSnippets) + || this.state.constraintXPath === "" || this.state.quantifierXPath === "") { verifyTextBasedOnGrammar(newAutoCompleteText) .then((data) => { if (this.state.quantifierXPath !== data.quantifierXPath || this.state.constraintXPath !== data.constraintXPath) { @@ -684,6 +684,12 @@ class RulePad extends Component { shouldUpdateSnippets: false }) }); + } else if (this.state.shouldUpdateSnippets) { + this.setState({ + shouldUpdateSnippets: false, + editorError: "" + }); + } }} onError={(errorIndex) => this.processLanguageProcessingError("ERROR_INDEX", errorIndex)} /> diff --git a/src/ui/RulePad/rulePadGraphicalEditor/graphicalEditorConstants.js b/src/ui/RulePad/rulePadGraphicalEditor/graphicalEditorConstants.js index 27eafdc..b46bffd 100644 --- a/src/ui/RulePad/rulePadGraphicalEditor/graphicalEditorConstants.js +++ b/src/ui/RulePad/rulePadGraphicalEditor/graphicalEditorConstants.js @@ -107,7 +107,7 @@ const element_conditions = { placeholder: "className", unique: true, grammar: "name", - wordValidation: "word" + wordValidation: "both" }, class_implements: { type: "text", @@ -118,7 +118,7 @@ const element_conditions = { unique: true, grammar: "implementation", required: "of ", - wordValidation: "word" + wordValidation: "both" }, class_extends: { type: "text", @@ -129,7 +129,7 @@ const element_conditions = { unique: true, grammar: "extension", required: "of ", - wordValidation: "word" + wordValidation: "both" }, function_el: { type: "element", diff --git a/src/ui/RulePad/rulePadTextualEditor/generateGuiTree.js b/src/ui/RulePad/rulePadTextualEditor/generateGuiTree.js index 6f7f055..f64c235 100644 --- a/src/ui/RulePad/rulePadTextualEditor/generateGuiTree.js +++ b/src/ui/RulePad/rulePadTextualEditor/generateGuiTree.js @@ -173,8 +173,12 @@ const traverseNormalNode = (treeNode, isConstraint = false) => { // context nodes let keywords = grammar_keywords.slice().map(w => pluralize(w).split(" ").map(a => a.charAt(0).toUpperCase() + a.slice(1)).join("")); + // ClassNames is not included Grammar keywords + keywords.push("ClassNames"); if (keywords.indexOf(treeNode.nodeType.replace("Context", "")) !== -1) { - guiNode.key = grammar_keywords[keywords.indexOf(treeNode.nodeType.replace("Context", ""))]; + let nodeKey = treeNode.nodeType.replace("Context", "") + .replace("ClassNames", "Names"); + guiNode.key = grammar_keywords[keywords.indexOf(nodeKey)]; if (treeNode.children) { treeNode.children.forEach(child => { if (child.nodeType.endsWith("OfContext")) {